{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "uf-ZAG8ddOxf"
},
"source": [
"# Forex Arbitrage\n",
"\n",
"This notebook presents an example of linear optimization on a network model for financial transactions. The goal is to identify whether or not an arbitrage opportunity exists given a matrix of cross-currency exchange rates. Other treatments of this problem and application are available, including the following links.\n",
"\n",
"* [Crypto Arbitrage Framework](https://github.com/hzjken/crypto-arbitrage-framework)\n",
"* [Crypto Trading and Arbitrage Identification Strategies](https://nbviewer.org/github/rcroessmann/sharing_public/blob/master/arbitrage_identification.ipynb)\n"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"executionInfo": {
"elapsed": 9828,
"status": "ok",
"timestamp": 1647615556911,
"user": {
"displayName": "Jeffrey Kantor",
"photoUrl": "https://lh3.googleusercontent.com/a-/AOh14Gg_n8V7bVINy02QRuRgOoMo11Ri7NKU3OUKdC1bkQ=s64",
"userId": "09038942003589296665"
},
"user_tz": 240
},
"id": "RkfYiXhygbos",
"outputId": "e418700e-0848-495b-ed17-38e23604ce1e"
},
"outputs": [],
"source": [
"# install dependencies and select solver\n",
"%pip install -q amplpy networkx matplotlib numpy pandas\n",
"\n",
"SOLVER = \"cbc\"\n",
"\n",
"from amplpy import AMPL, ampl_notebook\n",
"\n",
"ampl = ampl_notebook(\n",
" modules=[\"cbc\"], # modules to install\n",
" license_uuid=\"default\", # license to use\n",
") # instantiate AMPL object and register magics"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"import io\n",
"import networkx as nx\n",
"import numpy as np\n",
"import pandas as pd"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "uf-ZAG8ddOxf"
},
"source": [
"## Problem\n",
"\n",
"Exchanging one currency for another is among the most common of all banking transactions. Currencies are normally priced relative to each other. \n",
"\n",
"At this moment of this writing, for example, the Japanese yen (symbol JPY) is priced at 0.00761 relative to the euro (symbol EUR). At this price 100 euros would purchase 100/0.00761 = 13,140.6 yen. Conversely, EUR is priced at 131.585 yen. The 'round-trip' of 100 euros from EUR to JPY and back to EUR results in\n",
"\n",
"$$100 \\text{ EUR} \\times \\frac{1\\text{ JPY}}{0.00761\\text{ EUR}} {\\quad\\longrightarrow\\quad} 12,140.6 \\text{ JPY} \\times\\frac{1\\text{ EUR}}{131.585\\text{ JPY}} {\\quad\\longrightarrow\\quad} 99.9954\\text{ EUR}$$\n",
"\n",
"The small loss in this round-trip transaction is the fee collected by the brokers and banking system to provide these services. \n",
"\n",
"Needless to say, if a simple round-trip transaction like this reliably produced a net gain then there would many eager traders ready to take advantage of the situation. Trading situations offering a net gain with no risk are called arbitrage, and are the subject of intense interest by traders in the foreign exchange (forex) and crypto-currency markets around the globe.\n",
"\n",
"As one might expect, arbitrage opportunities involving a simple round-trip between a pair of currencies are almost non-existent in real-world markets. When the do appear, they are easily detected and rapid and automated trading quickly exploit the situation. More complex arbitrage opportunities, however, can arise when working with three more currencies and a table of cross-currency exchange rates.\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "J-ADrgCoQP3L"
},
"source": [
"## Demonstration of Triangular Arbitrage\n",
"\n",
"Consider the following cross-currency matrix. \n",
"\n",
"| i <- J | USD | EUR | JPY |\n",
"| :--- | :---: | :---: | :---: |\n",
"| USD | 1.0 | 2.0 | 0.01 |\n",
"| EUR | 0.5 | 1.0 | 0.0075 |\n",
"| JPY | 100.0 | 133 1/3 | 1.0 |\n",
"\n",
"\n",
"Entry $a_{m, n}$ is the number units of currency $m$ received in exchange for one unit of currency $n$. We use the notation \n",
"\n",
"$$a_{m, n} = a_{m \\leftarrow n}$$\n",
"\n",
"as reminder of what the entries denote. For this data there are no two way arbitrage opportunities. We can check this by explicitly computing all two-way currency exchanges\n",
"\n",
"$$I \\rightarrow J \\rightarrow I$$\n",
"\n",
"by computing\n",
"\n",
"$$ a_{i \\leftarrow j} \\times a_{j \\leftarrow i}$$\n",
"\n",
"This data set shows no net cost and no arbitrage for conversion from one currency to another and back again."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 196
},
"executionInfo": {
"elapsed": 208,
"status": "ok",
"timestamp": 1647604331600,
"user": {
"displayName": "Jeffrey Kantor",
"photoUrl": "https://lh3.googleusercontent.com/a-/AOh14Gg_n8V7bVINy02QRuRgOoMo11Ri7NKU3OUKdC1bkQ=s64",
"userId": "09038942003589296665"
},
"user_tz": 240
},
"id": "TsL1c79nx3aN",
"outputId": "59b9aec9-bae7-426a-9556-27fc0787ebdd"
},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
USD
\n",
"
EUR
\n",
"
JPY
\n",
"
\n",
" \n",
" \n",
"
\n",
"
USD
\n",
"
1.0
\n",
"
2.000000
\n",
"
0.0100
\n",
"
\n",
"
\n",
"
EUR
\n",
"
0.5
\n",
"
1.000000
\n",
"
0.0075
\n",
"
\n",
"
\n",
"
JPY
\n",
"
100.0
\n",
"
133.333333
\n",
"
1.0000
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" USD EUR JPY\n",
"USD 1.0 2.000000 0.0100\n",
"EUR 0.5 1.000000 0.0075\n",
"JPY 100.0 133.333333 1.0000"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"1.0\n",
"1.0\n",
"1.0\n"
]
}
],
"source": [
"df = pd.DataFrame(\n",
" [[1.0, 0.5, 100], [2.0, 1.0, 1 / 0.0075], [0.01, 0.0075, 1.0]],\n",
" columns=[\"USD\", \"EUR\", \"JPY\"],\n",
" index=[\"USD\", \"EUR\", \"JPY\"],\n",
").T\n",
"\n",
"display(df)\n",
"\n",
"# USD -> EUR -> USD\n",
"print(df.loc[\"USD\", \"EUR\"] * df.loc[\"EUR\", \"USD\"])\n",
"\n",
"# USD -> JPY -> USD\n",
"print(df.loc[\"USD\", \"JPY\"] * df.loc[\"JPY\", \"USD\"])\n",
"\n",
"# EUR -> JPY -> EUR\n",
"print(df.loc[\"EUR\", \"JPY\"] * df.loc[\"JPY\", \"EUR\"])"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "wmcvV5oiQ27w"
},
"source": [
"Now consider a currency exchange comprised of three trades that returns back to the same currency.\n",
"\n",
"$$ I \\rightarrow J \\rightarrow K \\rightarrow I $$\n",
"\n",
"The net exchange rate can be computed as\n",
"\n",
"$$ a_{i \\leftarrow k} \\times a_{k \\leftarrow j} \\times a_{j \\leftarrow i} $$\n",
"\n",
"By direct calculation we see there is a three-way **triangular** arbitrage opportunity for this data set that returns a 50% increase in wealth."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"executionInfo": {
"elapsed": 2,
"status": "ok",
"timestamp": 1647604332177,
"user": {
"displayName": "Jeffrey Kantor",
"photoUrl": "https://lh3.googleusercontent.com/a-/AOh14Gg_n8V7bVINy02QRuRgOoMo11Ri7NKU3OUKdC1bkQ=s64",
"userId": "09038942003589296665"
},
"user_tz": 240
},
"id": "MvHEDf2zUJqS",
"outputId": "d8570d6e-d2b8-41af-dc6e-47c3afce010d"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1.5\n"
]
}
],
"source": [
"I = \"USD\"\n",
"J = \"JPY\"\n",
"K = \"EUR\"\n",
"\n",
"print(df.loc[I, K] * df.loc[K, J] * df.loc[J, I])"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "SGv4WjmTx3aO"
},
"source": [
"Our challenge is create a model that can identify complex arbitrage opportunities that may exist in cross-currency forex markets."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Y_tuUX8XqnwA"
},
"source": [
"## Modeling\n",
"\n",
"The cross-currency table $A$ provides exchange rates among currencies. Entry $a_{i,j}$ in row $i$, column $j$ tells us how many units of currency $i$ are received in exchange for one unit of currency $j$. We'll use the notation $a_{i, j} = a_{i\\leftarrow j}$ to remind ourselves of this relationship.\n",
"\n",
"We start with $w_j(0)$ units of currency $j \\in N$, where $N$ is the set of all currencies in the data set. We consider a sequence of trades $t = 1, 2, \\ldots, T$ where $w_j(t)$ is the amount of currency $j$ on hand after completing trade $t$.\n",
"\n",
"Each trade is executed in two phases. In the first phase an amount $x_{i\\leftarrow j}(t)$ of currency $j$ is committed for exchange to currency $i$. This allows a trade to include multiple currency transactions. After the commitment the unencumbered balance for currency $j$ must satisfy trading constraints. Each trade consists of simultaneous transactions in one or more currencies.\n",
"\n",
"$$w_j(t-1) - \\sum_{i\\ne j} x_{i\\leftarrow j}(t) \\geq 0$$\n",
"\n",
"Here a lower bound has been placed to prohibit short-selling of currency $j$. This constraint could be modified if leveraging is allowed on the exchange.\n",
"\n",
"The second phase of the trade is complete when the exchange credits all of the currency accounts according to\n",
"\n",
"$$ w_j(t) = w_j(t-1) - \\underbrace{\\sum_{i\\ne j} x_{i\\leftarrow j}(t)}_{\\text{outgoing}} + \\underbrace{\\sum_{i\\ne j} a_{j\\leftarrow i}x_{j\\leftarrow i}(t)}_{\\text{incoming}} $$\n",
"\n",
"We assume all trading fees and costs are represented in the bid/ask spreads represented by $a_{j\\leftarrow i}$\n",
"\n",
"The goal of this calculation is to find a set of transactions $x_{i\\leftarrow j}(t) \\geq 0$ to maximize the value of portfolio after a specified number of trades $T$.\n"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Overwriting arbitrage.mod\n"
]
}
],
"source": [
"%%writefile arbitrage.mod\n",
"\n",
"set T0;\n",
"set T1;\n",
" \n",
"# currency *nodes*\n",
"set NODES;\n",
"\n",
"# paths between currency nodes i -> j\n",
"set ARCS within {NODES,NODES};\n",
"\n",
"param T;\n",
"param R symbolic;\n",
"param a{NODES, NODES};\n",
"\n",
"# w[i, t] amount of currency i on hand after transaction t\n",
"var w{NODES, T0} >= 0;\n",
"\n",
"# x[m, n, t] amount of currency m converted to currency n in transaction t t\n",
"var x{ARCS, T1} >= 0;\n",
"\n",
"# start with assignment of 100 units of a selected reserve currency\n",
"s.t. initial_condition{i in NODES}:\n",
" w[i, 0] == (if i == R then 100 else 0);\n",
"\n",
"# no shorting constraint\n",
"s.t. max_trade {j in NODES, t in T1}:\n",
" w[j, t-1] >= sum{i in NODES: i != j} x[i, j, t];\n",
"\n",
"# one round of transactions\n",
"s.t. balances {j in NODES, t in T1}:\n",
" w[j, t] ==\n",
" w[j, t-1] - \n",
" sum{i in NODES: i != j} x[i, j, t] + \n",
" sum{i in NODES: i != j} a[j, i] * x[j, i, t];\n",
"\n",
"maximize wealth: w[R, T];"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"executionInfo": {
"elapsed": 133,
"status": "ok",
"timestamp": 1647604334065,
"user": {
"displayName": "Jeffrey Kantor",
"photoUrl": "https://lh3.googleusercontent.com/a-/AOh14Gg_n8V7bVINy02QRuRgOoMo11Ri7NKU3OUKdC1bkQ=s64",
"userId": "09038942003589296665"
},
"user_tz": 240
},
"id": "NzTVF6JOW8-S",
"outputId": "cec33270-6287-4fc9-82a3-6b71471c1ab6"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"cbc 2.10.7: \b\b\b\b\b\b\b\b\b\b\b\bcbc 2.10.7: optimal solution; objective 150\n",
"0 simplex iterations\n",
"\n",
"t = 0\n",
"\n",
"w[USD,0] = 0.00 \n",
"w[EUR,0] = 100.00 \n",
"w[JPY,0] = 0.00 \n",
"\n",
"t = 1\n",
"\n",
"EUR -> USD Convert 100 EUR to 200.0 USD\n",
"\n",
"w[USD,1] = 200.00 \n",
"w[EUR,1] = -0.00 \n",
"w[JPY,1] = 0.00 \n",
"\n",
"t = 2\n",
"\n",
"USD -> JPY Convert 200 USD to 20000.0 JPY\n",
"\n",
"w[USD,2] = 0.00 \n",
"w[EUR,2] = 0.00 \n",
"w[JPY,2] = 20000.00 \n",
"\n",
"t = 3\n",
"\n",
"JPY -> EUR Convert 20000.00000000001 JPY to 150.00000000000009 EUR\n",
"\n",
"w[USD,3] = 0.00 \n",
"w[EUR,3] = 150.00 \n",
"w[JPY,3] = 0.00 \n",
"100\n",
"150.0000000000001\n"
]
}
],
"source": [
"def arbitrage(T, df, R=\"EUR\"):\n",
" m = AMPL()\n",
" m.read(\"arbitrage.mod\")\n",
"\n",
" T0 = list(range(0, T + 1))\n",
" T1 = list(range(1, T + 1))\n",
" NODES = df.index\n",
" ARCS = [(i, j) for i in NODES for j in NODES if i != j]\n",
"\n",
" m.set[\"T0\"] = T0\n",
" m.set[\"T1\"] = T1\n",
" m.set[\"NODES\"] = NODES\n",
" m.set[\"ARCS\"] = ARCS\n",
" m.param[\"T\"] = T\n",
" m.param[\"R\"] = R\n",
" m.param[\"a\"] = df\n",
"\n",
" m.solve(solver=SOLVER)\n",
" assert m.solve_result == \"solved\", m.solve_result\n",
"\n",
" x = m.var[\"x\"].to_dict()\n",
" w = m.var[\"w\"].to_dict()\n",
"\n",
" for t in T0:\n",
" print(f\"\\nt = {t}\\n\")\n",
" if t >= 1:\n",
" for i, j in ARCS:\n",
" if x[i, j, t] > 0:\n",
" print(\n",
" f\"{j} -> {i} Convert {x[i, j, t]} {j} to {df.loc[i,j]*x[i,j,t]} {i}\"\n",
" )\n",
" print()\n",
"\n",
" for i in NODES:\n",
" print(f\"w[{i},{t}] = {w[i, t]:9.2f} \")\n",
"\n",
" return m\n",
"\n",
"\n",
"m = arbitrage(3, df, \"EUR\")\n",
"w = m.var[\"w\"].to_dict()\n",
"print(w[\"EUR\", 0])\n",
"print(w[\"EUR\", 3])"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "vArKbEvA1E6u"
},
"source": [
"## Display graph"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
" 100 EUR -> 200 USD -> 20000 JPY -> 150.0000000000001 EUR\n"
]
},
{
"data": {
"image/png": "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hfTSSy+pXbt2KlmypMHEwK0olMB9sNls6tGjh7Zt26Yff/zxtlMEALhfXbp0UWRkpL777ju5u7vr9OnT+vTTT7VgwQI99thjeuutt3Tq1CkdPXpUsbGx2rlzp+nIwE24KQe4RzabTZ9++qnGjRunyZMnUyYBpJnRo0dr7dq1cnd315o1a9S6dWsVKFBAixYtuukO70uXLql06dLatGmTqlWrZjAxcDOu7gXuUXBwsD777DONHj1aHTt2NB0HgBPx8vJSgwYNdO3aNX322Wdq0qSJduzYoQYNGshms6UsS3b9+nX5+/vr77//NpwYuBmFErgHX375pQYMGKDg4GD16NHDdBwATio0NFRHjhxRmzZtlDt3biUlJclisaRcrz1nzhwdPXpUFSpUMBsU+A9OeQN3MXHiRH344Yfq16+fPv30U9NxADixmJgY5cmTRy+99JIkpRTJvXv3avr06Vq5cqWGDx+uMmXKmIwJ3IKbcoBUfPPNN2rbtq169uypL7/88palggAgreXLl0/t2rVT27Zt9ffff2vRokXat2+fkpOT9frrr+vdd99lwwQ4HAolcAcLFixQy5Yt1aFDB02cOJEyCSBDLF68WFOmTFFoaKg8PT1VsWJFlStXTm+//baeffZZWa1WXblyRWFhYXriiSdMxwUkUSiB21q2bJmaNm2qli1baubMmexOASBDJSYm6pdfflGePHnk5uam0qVLKyIiQsuWLdOqVau0ZcsW5cyZUy+88II6dOig1157zXRkuDgKJfAfa9euVcOGDdWwYUPNnz//lsXLASCjrVmzRmPHjtWRI0f0xBNPqGvXrrp+/bp++OEHLVy4UJGRkaYjwsVRKIF/2bJli+rUqaMaNWpo0aJFrDUJwJgbW7zOnTtXHTt21IsvvqjAwMCUG3ZuePzxx9WnTx+1adPGUFKAZYOAFLt27VK9evVUuXJlLVy4kDIJwCiLxaLz588rMDBQvXv31oYNG1LK5LVr1yRJBw8eVHx8vLJmzWoyKkChBCRp3759ql27tp555hktW7ZMPj4+piMBgH7++We5u7urWbNmkv6/SPr6+kr6ZyUKSXruueeM5ANu4OIwuLw//vhDNWvW1GOPPaZVq1alfKMGANOyZcumv//+WyVKlJD0/0Vy48aN6tevn/744w/NmDFDxYsXN5gS4BpKuLi//vpLVapUUeHC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+fLltX///lse//ff3AICAtS6dWs1atRI2bNnz8h4AACkGZvNphdffFFJSUnavXs3U0onQaE07NSpUypRosRNj92YRj711FNq06aNmjVrpkKFCpkJCABAGtu8ebOqVaumpUuXqlGjRqbjIA1QKA3r27evRowYkfL7EiVKqE2bNmrZsqUeeughg8kAAEg/1atX17lz5/Tbb7/d9bIvOL7br1ODDLNnzx55eHjo3XffVbt27fTcc88x/gcAOL3g4GC98MILWrBggVq2bGk6DuzkUBPK2MQkXbc6TJyMYbPJw82i7N6eppMAAJChGjZsqAMHDujgwYPy9OTnYGbmMIUyNjFJ609EmY5hTM2S+ZXNi4ExAMB1/P7776pQoYImT56sDh06mI4DOzjMskEuN5n8D1f//AAA11O+fHk1a9ZMQUFBio+PNx0HdnCYQgkAAFzP4MGDdfbsWU2ePNl0FNiBQgkAAIx5+OGH9c4772jYsGGKjY01HQcPiEIJAACMGjhwoGJiYjR27FjTUfCAKJQAAMCoYsWK6f3339fnn3+u6Oho03HwACiUAADAuE8//VTXr1/X559/bjoKHgCFEgAAGFewYEF1795dY8eOVWRkpOk4uE8USgAA4BA++ugjeXp6atiwYaaj4D5RKAEAgEPInTu3PvzwQ02ePFlhYWGm4+A+UCgBAIDD6N69u3LmzKmgoCDTUXAfKJQAAMBhZM+eXZ988olmzpypI0eOmI6De0ShBAAADqVTp04qXLiwBg0aZDoK7hGFEgAAOBQfHx8NGDBACxYs0O+//246Du4BhRIAADictm3bqlSpUhowYIDpKLgHFEoAAOBwPD09NXjwYK1YsUI//fST6Ti4C4vNZrOZDiFJ0fHXtfnUBdMxjHm1eD7l9vE0HQMAAIeRnJysJ598UoUKFdLGjRtNx0EqmFACAACH5O7urqCgIIWEhGjz5s2m4yAVTCgdBBNKAABuZbPZ9Pzzz8vT01M7duyQxWIxHQm3wYQSAAA4LIvFouDgYO3atUurV682HQd3wITSQTChBADg9mw2m1555RXFxMRo3759cnNjHuZo+C8CAAAc2o0p5W+//aZFixaZjoPbYELpIJhQAgCQutdee03Hjh3TgQMH5OHhYToO/oUJJQAAyBSGDh2qv/76S3PmzDEdBf/hNBPKTUu+04RPe97x+eELVipX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",
"text/plain": [
"