├── .gitignore ├── README.md ├── TP 1 - Courbes Intraday_final.ipynb ├── TP 2 - Volatility and Correlation_final.ipynb ├── TP 3 - Stochastic Approximation Algorithms Applied to Optimal Execution.ipynb ├── TP 4 - Market Making.ipynb └── imgs ├── DynamicalMarketMaking.png ├── EppsEffect.png ├── MarketMaking.png ├── MarketMaking2.png ├── MultipleDFillrate.png ├── MultipleDFillrate2.png ├── MultipleDtFillrate.png ├── SignaturePlot.png └── SingleFillrate.png /.gitignore: -------------------------------------------------------------------------------- 1 | Data/ 2 | .DS_Store 3 | *.pdf 4 | .ipynb_checkpoints/ 5 | .vscode/ -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ML_Optimal_Trading 2 | 3 | This is a repository for TPs at SU for the module https://finance.math.upmc.fr/enseignements/2_stat_2_trading_quantitatif/ 4 | -------------------------------------------------------------------------------- /TP 3 - Stochastic Approximation Algorithms Applied to Optimal Execution.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "id": "hN3rRJOm9oTv" 7 | }, 8 | "source": [ 9 | "# TP3: Stochastic Approximation Algorithms Applied to Optimal Execution" 10 | ] 11 | }, 12 | { 13 | "cell_type": "markdown", 14 | "metadata": { 15 | "id": "SJLIcC4y9oT2" 16 | }, 17 | "source": [ 18 | "### By Zhiyuan XU and Wenjun LIU" 19 | ] 20 | }, 21 | { 22 | "cell_type": "code", 23 | "execution_count": 3, 24 | "metadata": { 25 | "id": "7AjbwzNa9oT3" 26 | }, 27 | "outputs": [], 28 | "source": [ 29 | "import numpy as np\n", 30 | "import pandas as pd \n", 31 | "import matplotlib.pylab as plt\n", 32 | "from matplotlib.dates import DateFormatter\n", 33 | "from matplotlib.ticker import Formatter\n", 34 | "from matplotlib import cbook, dates\n", 35 | "\n", 36 | "from datetime import datetime\n", 37 | "import statsmodels.api as sm\n", 38 | "from tqdm import tqdm\n", 39 | "import os" 40 | ] 41 | }, 42 | { 43 | "cell_type": "code", 44 | "execution_count": 5, 45 | "metadata": { 46 | "id": "E3UZx6o69oT3" 47 | }, 48 | "outputs": [], 49 | "source": [ 50 | "%matplotlib inline" 51 | ] 52 | }, 53 | { 54 | "cell_type": "markdown", 55 | "metadata": { 56 | "id": "5MGb822M9oT4" 57 | }, 58 | "source": [ 59 | "## 1. Optimal split of orders across liquidity pools" 60 | ] 61 | }, 62 | { 63 | "cell_type": "markdown", 64 | "metadata": { 65 | "id": "svVBL83X9oT4" 66 | }, 67 | "source": [ 68 | "Given the objective function $\n", 69 | "\\Phi(r) = \\Phi\\left(r_{1}, \\ldots, r_{N}\\right):=\\sum_{i=1}^{N} \\varphi_{i}\\left(r_{i}\\right) := \\sum_{i=1}^{N} \\rho_{i} \\mathbb{E}\\left[ \\min \\left(r_{i} V, D_{i}\\right)\\right]\n", 70 | "$, we aim at solving \n", 71 | "$\n", 72 | "\\max _{r \\in \\mathcal{P}_{N}} \\Phi(r)\n", 73 | "$ \n", 74 | "\n", 75 | "where\n", 76 | "$$\n", 77 | "\\mathcal{P}_{N}:=\\left\\{r=\\left(r_{i}\\right)_{1 \\leq i \\leq N} \\in \\mathbb{R}_{+}^{N} \\mid \\sum_{i=1}^{N} r_{i}=1\\right\\}\n", 78 | "$$\n", 79 | "\n", 80 | "The Lagrangian approach gives \n", 81 | "\n", 82 | "$$\n", 83 | "\\begin{aligned}\n", 84 | "r^{*} \\in \\arg \\max _{\\mathcal{P}_{N}} \\Phi &\\iff \\forall i \\in I_{N}, \\quad \\varphi_{i}^{\\prime}\\left(r_{i}^{*}\\right)=\\frac{1}{N} \\sum_{j=1}^{N} \\varphi_{j}^{\\prime}\\left(r_{j}^{*}\\right) \\\\\n", 85 | "&\\iff \\forall i \\in I_{N}, \\quad \\mathbb{E}\\left[V\\left(\\rho_{i} \\mathbb{1}_{\\left\\{r_{i}^{*} V= 0 and tot > 0:\n", 162 | " cr_oracle += rho_rebate[j] * (min(tot, dark_pools_arg[j][i]))\n", 163 | " tot -= min(tot, dark_pools[j][i])\n", 164 | " j -= 1\n", 165 | " return cr_oracle" 166 | ] 167 | }, 168 | { 169 | "cell_type": "code", 170 | "execution_count": 5, 171 | "metadata": { 172 | "id": "qR8GtiCg9oT5" 173 | }, 174 | "outputs": [], 175 | "source": [ 176 | "# choose a horizon T (seconds)\n", 177 | "T = \"5S\"\n", 178 | "eps = 1e-8\n", 179 | "\n", 180 | "# read all data\n", 181 | "df_trades_V = get_asset_V(stock_data[0])\n", 182 | "trades = get_pools(stock_data[1:])" 183 | ] 184 | }, 185 | { 186 | "cell_type": "code", 187 | "execution_count": 6, 188 | "metadata": { 189 | "id": "eezyJtvY9oT6", 190 | "scrolled": true 191 | }, 192 | "outputs": [], 193 | "source": [ 194 | "window = 50\n", 195 | "log_cr = pd.DataFrame(columns=[\"Oracle\", \"Optimization\"])\n", 196 | "x_vlines = [0]\n", 197 | " \n", 198 | "for date, trades_date in df_trades_V.groupby(level=0):\n", 199 | " V = trades_date.droplevel(0).resample(T).sum().Volume\n", 200 | " t_index = V.index\n", 201 | " t_index_real = []\n", 202 | " V = V.to_numpy(copy=True)\n", 203 | " dark_pools = []\n", 204 | " \n", 205 | " # reset r for each day\n", 206 | " r = np.array([1/N]*N)\n", 207 | " \n", 208 | " # compute Di of each dark pool (pseudo-data generation)\n", 209 | " for i in range(N):\n", 210 | " Si = trades[i].loc[date].resample(T).sum().Volume.to_numpy(copy=True)\n", 211 | " Si.resize(V.shape)\n", 212 | " dark_pools.append(Si)\n", 213 | " dark_pools = np.array(dark_pools)\n", 214 | " \n", 215 | " ESi = np.mean(dark_pools, axis=0, keepdims=True) + eps\n", 216 | " dark_pools = beta_scale.reshape(-1, 1)*((1-alpha_comb.reshape(-1, 1))*V + alpha_comb.reshape(-1, 1)*dark_pools*V.mean()/ESi)\n", 217 | "\n", 218 | " cr_opti_day = []\n", 219 | " cr_oracle_day = []\n", 220 | " \n", 221 | " for i in range(V.shape[0]): \n", 222 | " if V[i] == 0:\n", 223 | " continue\n", 224 | " cr_opti, mean_rho = 0, 0\n", 225 | "\n", 226 | " for j in range(N):\n", 227 | " cr_opti += rho_rebate[j]*min(r[j]*V[i], dark_pools[j, i])\n", 228 | " if r[j]*V[i] < dark_pools[j][i]:\n", 229 | " mean_rho += rho_rebate[j] / N\n", 230 | " \n", 231 | " dark_pool = dark_pools[:, i]\n", 232 | " r += ((r*V[i] < dark_pool)*rho_rebate - mean_rho)*0.5\n", 233 | " r[r > 1] = 1\n", 234 | " r[r < 0] = 0\n", 235 | " r /= r.sum()\n", 236 | " \n", 237 | " cr_opti_day.append(cr_opti)\n", 238 | " cr_oracle_day.append(compute_oracle_cost(V[i], dark_pools, rho_rebate, N))\n", 239 | " t_index_real.append(t_index[i])\n", 240 | "\n", 241 | " x_vlines.append(x_vlines[-1] + len(cr_opti_day))\n", 242 | " log_cr_day = pd.DataFrame(\n", 243 | " list(zip(cr_oracle_day, cr_opti_day)), columns=[\"Oracle\", \"Optimization\"], index=t_index_real)\n", 244 | " log_cr_day.loc[:, \"CR_ratio\"] = log_cr_day.loc[:, \"Optimization\"] / (log_cr_day.loc[:, \"Oracle\"] + eps)\n", 245 | " log_cr = log_cr.append(log_cr_day.rolling(window).mean())" 246 | ] 247 | }, 248 | { 249 | "cell_type": "code", 250 | "execution_count": 15, 251 | "metadata": { 252 | "id": "lgNVVumT9oT6", 253 | "outputId": "9b5a7967-515d-44f6-8cae-76cb2965ad18" 254 | }, 255 | "outputs": [ 256 | { 257 | "data": { 258 | "image/png": "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\n", 259 | "text/plain": [ 260 | "
" 261 | ] 262 | }, 263 | "metadata": { 264 | "needs_background": "light" 265 | }, 266 | "output_type": "display_data" 267 | } 268 | ], 269 | "source": [ 270 | "log_cr_roll = log_cr\n", 271 | "\n", 272 | "class MyFormatter(Formatter):\n", 273 | " def __init__(self, dates, fmt='%m-%d'):\n", 274 | " self.dates = dates\n", 275 | " self.fmt = fmt\n", 276 | "\n", 277 | " def __call__(self, x, pos=0):\n", 278 | " \"\"\"Return the label for time x at position pos.\"\"\"\n", 279 | " ind = int(round(x))\n", 280 | " if ind >= len(self.dates) or ind < 0:\n", 281 | " return ''\n", 282 | " return self.dates[ind].strftime(self.fmt)\n", 283 | " \n", 284 | "fig, ax = plt.subplots(1, 1, figsize=(9, 5))\n", 285 | "ax.xaxis.set_major_formatter(MyFormatter(log_cr_roll.index))\n", 286 | "ax.plot(range(log_cr_roll.shape[0]), log_cr_roll.loc[:, \"CR_ratio\"], '--', color='r')\n", 287 | "ax.axhline(1, 0, log_cr_roll.shape[0], color='k')\n", 288 | "for x in x_vlines:\n", 289 | " ax.axvline(x, color='b', linestyle='--')\n", 290 | "ax.set_ylim(0, 1.2)\n", 291 | "fig.autofmt_xdate()\n", 292 | "plt.show()" 293 | ] 294 | }, 295 | { 296 | "cell_type": "markdown", 297 | "metadata": { 298 | "id": "g6cgmlnX9oT7" 299 | }, 300 | "source": [ 301 | "The performance is shown in the figure above with the red curve. The shape is different from that of the reference, after a careful examination, we state that it's due to the fact that an uniforme initialization could eventually consumes all liquidity at market openning in the case $\\sum \\beta < 1$, the traded volume are similar in all the three assets, thus no update of weight is done at the begining.\n", 302 | "\n", 303 | "Then, no trades happen at some time slots during the day (cf tp1 intraday volume curve), all cost reductions are 0 if there is no trades happenned, thus lowers the performance. In this way, we have a daily \"V\" shape. Thus, we avoided recording such results and obtained a daily increasing performance. \n", 304 | "\n", 305 | "Overall, the weight update scheme helps to improve the performance (performance curve moves upward) but the shape of the curve remains the same for different settings of $\\gamma_n$" 306 | ] 307 | }, 308 | { 309 | "cell_type": "markdown", 310 | "metadata": { 311 | "id": "y1cljsqJ9oT8" 312 | }, 313 | "source": [ 314 | "## 2. Optimal posting price of limit orders: learning by trading" 315 | ] 316 | }, 317 | { 318 | "cell_type": "code", 319 | "execution_count": 8, 320 | "metadata": { 321 | "id": "06WWf9FD9oT8" 322 | }, 323 | "outputs": [], 324 | "source": [ 325 | "import statsmodels.api as sm\n", 326 | "\n", 327 | "\n", 328 | "def Find_tau_bid(BestBid,Traded,tick,delta):\n", 329 | " tau = []\n", 330 | " p = 0\n", 331 | " while p+1 < len(Traded):\n", 332 | " tra = Traded[p+1:]\n", 333 | " condi = (tra <= BestBid[p] - tick*delta)\n", 334 | " if condi.any():\n", 335 | " new_tau = condi.argmax()\n", 336 | " tau.append(new_tau+1)\n", 337 | " p += new_tau+1\n", 338 | " else:\n", 339 | " return tau\n", 340 | " return tau\n", 341 | "\n", 342 | "\n", 343 | "def Find_tau_ask(BestAsk,Traded,tick,delta):\n", 344 | " tau = []\n", 345 | " p = 0\n", 346 | " while p+1 < len(Traded):\n", 347 | " tra = Traded[p+1:]\n", 348 | " condi = (tra >= BestAsk[p] + tick*delta)\n", 349 | " if condi.any():\n", 350 | " new_tau = condi.argmax()\n", 351 | " tau.append(new_tau+1)\n", 352 | " p += new_tau+1\n", 353 | " else:\n", 354 | " return tau\n", 355 | " return tau" 356 | ] 357 | }, 358 | { 359 | "cell_type": "code", 360 | "execution_count": 9, 361 | "metadata": { 362 | "id": "JWeedcXi9oT9" 363 | }, 364 | "outputs": [], 365 | "source": [ 366 | "def estimate_lambda(tau,T):\n", 367 | " new_tau = ((pd.Series(tau)).apply(lambda x:x if x < T else T))\n", 368 | " return (new_tau < T).sum()/new_tau.sum()" 369 | ] 370 | }, 371 | { 372 | "cell_type": "code", 373 | "execution_count": 10, 374 | "metadata": { 375 | "id": "AAT9m1PQ9oT9" 376 | }, 377 | "outputs": [], 378 | "source": [ 379 | "def find_list(Best,Traded,tick,T,mode = 'bid'):\n", 380 | " lamb_list = []\n", 381 | " for delta in range(5):\n", 382 | " if mode == 'bid':\n", 383 | " tau = Find_tau_bid(Best,Traded,tick,delta)\n", 384 | " if mode == 'ask':\n", 385 | " tau = Find_tau_ask(Best,Traded,tick,delta)\n", 386 | " lamb = estimate_lambda(tau,T)\n", 387 | " lamb_list.append(lamb)\n", 388 | " return lamb_list\n", 389 | "\n", 390 | "def reg(lamb_list):\n", 391 | " y = np.log(lamb_list)\n", 392 | " x = list(range(5))\n", 393 | " x = sm.add_constant(x)\n", 394 | " rlm_model = sm.RLM(y, x, M=sm.robust.norms.HuberT())\n", 395 | " model = rlm_model.fit()\n", 396 | " A = np.exp(model.params[0])\n", 397 | " a = -model.params[1]\n", 398 | " return A,a" 399 | ] 400 | }, 401 | { 402 | "cell_type": "code", 403 | "execution_count": 11, 404 | "metadata": { 405 | "id": "CZzpcAvJ9oT9" 406 | }, 407 | "outputs": [], 408 | "source": [ 409 | "# \"LVMH\" \"SANOFI\" \"TOTAL\" \"BOUYGUES\"\n", 410 | "Chemin = \"Data\"\n", 411 | "StockName = \"LVMH\"\n", 412 | "stock = pd.read_hdf(Chemin+'/'+StockName+'.h5')\n", 413 | "stock = stock[stock.index.month == 2]\n", 414 | "delta_max = 4\n", 415 | "T = 15\n", 416 | "tick = 0.05\n", 417 | "BestBid = stock['BidPrice'].to_numpy()\n", 418 | "BestAsk = stock['AskPrice'].to_numpy()\n", 419 | "Traded = stock['TradedPrice'].to_numpy()" 420 | ] 421 | }, 422 | { 423 | "cell_type": "code", 424 | "execution_count": 12, 425 | "metadata": { 426 | "id": "45Q5wPyR9oT-", 427 | "outputId": "f8a51699-d448-4ffa-d48b-20fcef2f879a" 428 | }, 429 | "outputs": [ 430 | { 431 | "data": { 432 | "text/plain": [ 433 | "" 434 | ] 435 | }, 436 | "execution_count": 12, 437 | "metadata": {}, 438 | "output_type": "execute_result" 439 | }, 440 | { 441 | "data": { 442 | "image/png": "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dep0aPtJkyZx2mmn0bBhQyZOnMjChQuD8l5EVIOJiEiwqAYLvXw/8mjjroQTelxERPK3Y52lKl8slg0Z/P2oUCwWgBIFo07oLNeRPvnkE7Zt28asWbOIjIykatWqJCZ6xVJ0dPSh7cLCwg7dDwsLO2wiRDM7bJ8H7x/5OEBiYiI33HADM2fOpFKlSjzyyCOHjidyslSDiYjIiVAN5m8Nlu9HHpUP/DBl9nEREZGjuat7HWIjww97LDYynLu61wnK/uPj4yldujSRkZFMmjQp00urpjd69GgSExPZsWMHv/zyCy1atKBdu3Z8/vnnpKamsmnTJiZNmgRwqEgpWbIke/fuzdbVPyTvUw0mIiLBohos9PL9yKO7utc57Hp7gIgwC9oPmYiI5B8H52kJ1UofF198MX369CEuLo4mTZpQt27dE95Hy5Yt6dWrF3///TcPPvgg5cuX5+yzz2bixIk0bNiQ2rVr0759ewCKFSvGtddeS8OGDalatSotWrQIyvsQgYxrsJjIMNVgIiJywlSDhZ75PWP3iYqLi3MzZ84M6j7TL+kXHRlGckoa425rT83ShYJ6HBERyX1mzZpF8+bN/Y6RZ82aNYvFixezc+dObr75ZgDMbJZzLs7naHKEUNZgBy81uKBFRZ4+t3FQjyEiIrmTarDQmjVrFjNmzKBixYr07t0bOHYNlu9HHoHXpezXtAL88w9bI2Lp+sIUnvlxCW9eprpVREREJFQO1mDOOfq9No2py3dwICWV6Ijw479YREREso2aRwc98QS8+iqlly7lrcviqF1Go45EREREsoOZcV/PuizfsgfjvxOHioiIiL/y/YTZh3TrBps3w5NP0rJaCYoViCIlNY1d+5P8TiYiIiKS551e/RQubVWVqAiVpyIiIjmN/jof1KIFXHYZvPgirFyJc46L3/6DWz6fQ26bF0pEREQkN3LO8fH0tXwxY53fUURERCQdNY/Se+opiIyEu+7CzOjZoCyTl23j6782+J1MREREJM8zM35csJkhPy5h34EUv+OIiIhIgJpH6ZUvD/fdB19/DZMmcWmrqjSvUpxHv1vEtj0H/E4nIiIikufd3q02O/cl8f60NX5HERERkQA1j450++1QpQrceivhLo2nz23I/gOpPDJmod/JREREcoSNGzfSv39/v2NIHtWscnE61y3N8MkriU9I9juOiIhI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otfoinEaY+YaY0zo+Sbcn4eWsJ/pzIqFsbysWBnHUAw/AI5Za/95im5RPZ7TiTEWxtMYk2eMCYSepwBvB45P6BbVYwnTizPax9Na+6i1tshauwD378jL1toPTegW9WMpYRMPOZjyLyfax3FaYmEs4yH/AuVgE7pF9XjGQ/4FkZmD+WbqiyOVtXbQGPMpYBtuR4ynrbWVxphPhI4/CTyPW7m8CugBHpqt832rphnn/cDfGGMGgV7gAWttVE1ZNMb8FLeafq4xphb4Mm7RtJgZy2nEGPXjGLIV+DBw2Lh7mAH+M1ACMTOe04kxFsZzHvAjY4wX94/1L6y1z8Xa37NML85YGM9LxOBYShjEQw6m/Cs2xnFYnORg8ZB/gXKwmPl7ljjOv2B2czATI79DERERERERERGZAfF425qIiIiIiIiIiEyTikciIiIiIiIiIjIlFY9ERERERERERGRKKh6JiIiIiIiIiMiUVDwSEREREREREZEpqXgkImFhjNlvjEmY4tgCY8yRK3x+pI8xpswYc+9MnKeIiIhILFEOJiLXg4pHIhIurwFbr9N3lQFKXERERESuTDmYiFwzFY9EJFxeAO4efmGM2WCMOWiM+RPwyTHve40x3zDG7DHGHDLG/MexX2KMSQQeB95vjDlgjHm/MWaTMeY1Y0xF6HFZuIISERERiXDKwUTkmql4JCLhsh24fczrHwJ/a63dMqHfx4AOa+1GYCPwH4wxC4cPWmv7gS8BP7fWlllrfw4cB2611paHjv3jDMYhIiIiEk2Ug4nINfPN9gmISHyw1vYYY9qNMQVANxCw1r4SOvxj4J7Q83cCa40x94de+4FS4M3LfL0f+JExphSwwKT39YuIiIjEG+VgInI9aOaRiITTNty0aYNLMCZjgP8UuqJVZq1daK397RW+9x+A7dba1cC7gOTrdsYiIiIi0U85mIhcExWPRCScXgDutta2Ax3GmJtD7//VmD7bgL8Z3hXEGLPUGJM24XsuABljXvuButDzj17vkxYRERGJcsrBROSaqHgkImFjrT0GLDXGeIGHgCdCizX2jun2FHAU2B/aFvZ7XHqL7XZg5fBijcB/A75mjNkJeGc6DhEREZFoohxMRK6VsXaqWYsiItefMeZJ4MfW2p2zfS4iIiIi8UI5mIhcCxWPRERERERERERkSrptTUREREREREREpqTikYiIiIiIiIiITEnFIxERERERERERmZKKRyIiIiIiIiIiMiUVj0REREREREREZEoqHomIiIiIiIiIyJRUPBIRERERERERkSn9f/BFXmPj4AihAAAAAElFTkSuQmCC\n", 443 | "text/plain": [ 444 | "
" 445 | ] 446 | }, 447 | "metadata": { 448 | "needs_background": "light" 449 | }, 450 | "output_type": "display_data" 451 | } 452 | ], 453 | "source": [ 454 | "lamb_bid = find_list(stock['BidPrice'].to_numpy(),Traded,tick,T,mode = 'bid') \n", 455 | "lamb_ask = find_list(stock['AskPrice'].to_numpy(),Traded,tick,T,mode = 'ask')\n", 456 | "A_bid,a_bid = reg(lamb_bid)\n", 457 | "A_ask,a_ask = reg(lamb_ask)\n", 458 | "\n", 459 | "xx = np.linspace(0,4,100)\n", 460 | "\n", 461 | "f, axs = plt.subplots(1, 2, figsize=(20,6))\n", 462 | "axs[0].plot(lamb_bid,'--o',label = 'lambda')\n", 463 | "axs[0].plot(xx,A_bid * np.exp(-a_bid*xx),'r',label = 'regression')\n", 464 | "axs[0].set_title(\"Estimateur de lambda et sa parametrisation a l'achat\")\n", 465 | "axs[0].set_xlabel('\\delta')\n", 466 | "axs[0].set_ylabel('Estimated lambda')\n", 467 | "axs[0].legend(shadow=True, fancybox=True)\n", 468 | "\n", 469 | "axs[1].plot(lamb_ask,'--o',label = 'lambda')\n", 470 | "axs[1].plot(xx,A_ask * np.exp(-a_ask*xx),'r',label = 'regression')\n", 471 | "axs[1].set_title('Estimateur de lambda et sa parametrisation a la vente')\n", 472 | "axs[1].set_xlabel('\\delta')\n", 473 | "axs[1].set_ylabel('Estimated lambda')\n", 474 | "axs[1].legend(shadow=True, fancybox=True)" 475 | ] 476 | }, 477 | { 478 | "cell_type": "code", 479 | "execution_count": null, 480 | "metadata": { 481 | "id": "kmXZaeTI9oT-" 482 | }, 483 | "outputs": [], 484 | "source": [] 485 | }, 486 | { 487 | "cell_type": "markdown", 488 | "metadata": { 489 | "id": "QvqWwJw_9xAZ" 490 | }, 491 | "source": [ 492 | "Nous voyons ici que $\\lambda$ décroit bien avec $\\delta$ et suit bien une forme exponentielle\r\n", 493 | "$$\\lambda (x) = Ae^{(-ax)}$$\r\n", 494 | "les côtés vente et achat ont tous les deux cette propriétés. Ceci confirme l'hypothèse du modèle." 495 | ] 496 | }, 497 | { 498 | "cell_type": "code", 499 | "execution_count": null, 500 | "metadata": { 501 | "id": "0xWBiKx0_Cx8" 502 | }, 503 | "outputs": [], 504 | "source": [] 505 | } 506 | ], 507 | "metadata": { 508 | "colab": { 509 | "collapsed_sections": [], 510 | "name": "TP 3 - Stochastic Approximation Algorithms Applied to Optimal Execution_Wenjun LIU&&Zhiyuan XU.ipynb", 511 | "provenance": [] 512 | }, 513 | "kernelspec": { 514 | "display_name": "Python 3", 515 | "language": "python", 516 | "name": "python3" 517 | }, 518 | "language_info": { 519 | "codemirror_mode": { 520 | "name": "ipython", 521 | "version": 3 522 | }, 523 | "file_extension": ".py", 524 | "mimetype": "text/x-python", 525 | "name": "python", 526 | "nbconvert_exporter": "python", 527 | "pygments_lexer": "ipython3", 528 | "version": "3.8.5-final" 529 | } 530 | }, 531 | "nbformat": 4, 532 | "nbformat_minor": 4 533 | } -------------------------------------------------------------------------------- /imgs/DynamicalMarketMaking.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gaelwjl/ML_Optimal_Trading/d834f97a60eb6e15eed86696c32709f37d43c64b/imgs/DynamicalMarketMaking.png -------------------------------------------------------------------------------- /imgs/EppsEffect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gaelwjl/ML_Optimal_Trading/d834f97a60eb6e15eed86696c32709f37d43c64b/imgs/EppsEffect.png -------------------------------------------------------------------------------- /imgs/MarketMaking.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gaelwjl/ML_Optimal_Trading/d834f97a60eb6e15eed86696c32709f37d43c64b/imgs/MarketMaking.png -------------------------------------------------------------------------------- /imgs/MarketMaking2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gaelwjl/ML_Optimal_Trading/d834f97a60eb6e15eed86696c32709f37d43c64b/imgs/MarketMaking2.png -------------------------------------------------------------------------------- /imgs/MultipleDFillrate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gaelwjl/ML_Optimal_Trading/d834f97a60eb6e15eed86696c32709f37d43c64b/imgs/MultipleDFillrate.png -------------------------------------------------------------------------------- /imgs/MultipleDFillrate2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gaelwjl/ML_Optimal_Trading/d834f97a60eb6e15eed86696c32709f37d43c64b/imgs/MultipleDFillrate2.png -------------------------------------------------------------------------------- /imgs/MultipleDtFillrate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gaelwjl/ML_Optimal_Trading/d834f97a60eb6e15eed86696c32709f37d43c64b/imgs/MultipleDtFillrate.png -------------------------------------------------------------------------------- /imgs/SignaturePlot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gaelwjl/ML_Optimal_Trading/d834f97a60eb6e15eed86696c32709f37d43c64b/imgs/SignaturePlot.png -------------------------------------------------------------------------------- /imgs/SingleFillrate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gaelwjl/ML_Optimal_Trading/d834f97a60eb6e15eed86696c32709f37d43c64b/imgs/SingleFillrate.png --------------------------------------------------------------------------------