From 90ae58f96d1dfb9f5f6db462a71280b23aecd8e6 Mon Sep 17 00:00:00 2001 From: Wenhang Bao Date: Tue, 28 May 2019 21:33:47 -0500 Subject: [PATCH] Add files via upload --- Model_training.ipynb | 440 +++++++++++++++++++++++++++++++++++ Visualization.ipynb | 445 +++++++++++++++++++++++++++++++++++ ddpg_agent.py | 191 +++++++++++++++ model.py | 75 ++++++ syntheticChrissAlmgren.py | 362 +++++++++++++++++++++++++++++ utils.py | 475 ++++++++++++++++++++++++++++++++++++++ 6 files changed, 1988 insertions(+) create mode 100644 Model_training.ipynb create mode 100644 Visualization.ipynb create mode 100644 ddpg_agent.py create mode 100644 model.py create mode 100644 syntheticChrissAlmgren.py create mode 100644 utils.py diff --git a/Model_training.ipynb b/Model_training.ipynb new file mode 100644 index 0000000..dfdff28 --- /dev/null +++ b/Model_training.ipynb @@ -0,0 +1,440 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Deep Reinforcement Learning for Optimal Execution of Portfolio Transactions " + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import utils\n", + "\n", + "# Get the default financial and AC Model parameters\n", + "financial_params, ac_params = utils.get_env_param()" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + " \n", + "\n", + "\n", + " \n", + "\n", + "
Financial Parameters
Annual Volatility: 12% Bid-Ask Spread: 0.125
Daily Volatility: 0.8% Daily Trading Volume: 5,000,000
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "financial_params" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + " \n", + "\n", + "\n", + " \n", + "\n", + "\n", + " \n", + "\n", + "\n", + " \n", + "\n", + "\n", + " \n", + "\n", + "\n", + " \n", + "\n", + "
Almgren and Chriss Model Parameters
Total Number of Shares for Agent1 to Sell: 500,000 Fixed Cost of Selling per Share: $0.062
Total Number of Shares for Agent2 to Sell: 500,000 Trader's Risk Aversion for Agent 1: 1e-06
Starting Price per Share: $50.00 Trader's Risk Aversion for Agent 2: 0.0001
Price Impact for Each 1% of Daily Volume Traded: $2.5e-06 Permanent Impact Constant: 2.5e-07
Number of Days to Sell All the Shares: 60 Single Step Variance: 0.144
Number of Trades: 60 Time Interval between trades: 1.0
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ac_params" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Episode [100/1300]\tAverage Shortfall for Agent1: $1,172,575.47\n", + "Episode [100/1300]\tAverage Shortfall for Agent2: $1,183,832.73\n", + "Episode [200/1300]\tAverage Shortfall for Agent1: $1,281,148.59\n", + "Episode [200/1300]\tAverage Shortfall for Agent2: $1,281,025.43\n", + "Episode [300/1300]\tAverage Shortfall for Agent1: $1,281,250.00\n", + "Episode [300/1300]\tAverage Shortfall for Agent2: $1,281,250.00\n", + "Episode [400/1300]\tAverage Shortfall for Agent1: $1,281,250.00\n", + "Episode [400/1300]\tAverage Shortfall for Agent2: $1,281,250.00\n", + "Episode [500/1300]\tAverage Shortfall for Agent1: $1,281,250.00\n", + "Episode [500/1300]\tAverage Shortfall for Agent2: $1,281,250.00\n", + "Episode [600/1300]\tAverage Shortfall for Agent1: $1,281,250.00\n", + "Episode [600/1300]\tAverage Shortfall for Agent2: $1,281,250.00\n", + "Episode [700/1300]\tAverage Shortfall for Agent1: $1,227,339.91\n", + "Episode [700/1300]\tAverage Shortfall for Agent2: $1,253,734.24\n", + "Episode [800/1300]\tAverage Shortfall for Agent1: $415,623.02\n", + "Episode [800/1300]\tAverage Shortfall for Agent2: $433,944.85\n", + "Episode [900/1300]\tAverage Shortfall for Agent1: $314,968.49\n", + "Episode [900/1300]\tAverage Shortfall for Agent2: $317,854.76\n", + "Episode [1000/1300]\tAverage Shortfall for Agent1: $318,731.56\n", + "Episode [1000/1300]\tAverage Shortfall for Agent2: $317,495.71\n", + "Episode [1100/1300]\tAverage Shortfall for Agent1: $329,135.85\n", + "Episode [1100/1300]\tAverage Shortfall for Agent2: $333,255.71\n", + "Episode [1200/1300]\tAverage Shortfall for Agent1: $300,993.44\n", + "Episode [1200/1300]\tAverage Shortfall for Agent2: $301,320.57\n", + "Episode [1300/1300]\tAverage Shortfall for Agent1: $294,413.69\n", + "Episode [1300/1300]\tAverage Shortfall for Agent2: $292,937.04\n", + "\n", + "Average Implementation Shortfall for Agent1: $829,225.39 \n", + "\n", + "\n", + "Average Implementation Shortfall for Agent2: $833,877.00 \n", + "\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "\n", + "import syntheticChrissAlmgren as sca\n", + "from ddpg_agent import Agent\n", + "\n", + "from collections import deque\n", + "\n", + "# Create simulation environment\n", + "env = sca.MarketEnvironment()\n", + "\n", + "# Initialize Feed-forward DNNs for Actor and Critic models. \n", + "agent1 = Agent(state_size=env.observation_space_dimension(), action_size=env.action_space_dimension(),random_seed = 1225)\n", + "agent2 = Agent(state_size=env.observation_space_dimension(), action_size=env.action_space_dimension(),random_seed = 108)\n", + "# Set the liquidation time\n", + "lqt = 60\n", + "\n", + "# Set the number of trades\n", + "n_trades = 60\n", + "\n", + "# Set trader's risk aversion\n", + "tr1 = 1e-6\n", + "tr2 = 1e-6\n", + "\n", + "# Set the number of episodes to run the simulation\n", + "episodes = 1300\n", + "shortfall_list = []\n", + "shortfall_hist1 = np.array([])\n", + "shortfall_hist2 = np.array([])\n", + "shortfall_deque1 = deque(maxlen=100)\n", + "shortfall_deque2 = deque(maxlen=100)\n", + "for episode in range(episodes): \n", + " # Reset the enviroment\n", + " cur_state = env.reset(seed = episode, liquid_time = lqt, num_trades = n_trades, lamb1 = tr1,lamb2 = tr2)\n", + "\n", + " # set the environment to make transactions\n", + " env.start_transactions()\n", + "\n", + " for i in range(n_trades + 1):\n", + " \n", + " # Predict the best action for the current state. \n", + " cur_state1 = np.delete(cur_state,8)\n", + " cur_state2 = np.delete(cur_state,7)\n", + " #print(cur_state[5:])\n", + " action1 = agent1.act(cur_state1, add_noise = True)\n", + " action2 = agent2.act(cur_state2, add_noise = True)\n", + " #print(action1,action2)\n", + " # Action is performed and new state, reward, info are received. \n", + " new_state, reward1, reward2, done1, done2, info = env.step(action1,action2)\n", + " \n", + " # current state, action, reward, new state are stored in the experience replay\n", + " new_state1 = np.delete(new_state,8)\n", + " new_state2 = np.delete(new_state,7)\n", + " agent1.step(cur_state1, action1, reward1, new_state1, done1)\n", + " agent2.step(cur_state2, action2, reward2, new_state2, done2)\n", + " # roll over new state\n", + " cur_state = new_state\n", + "\n", + " if info.done1 and info.done2:\n", + " shortfall_hist1 = np.append(shortfall_hist1, info.implementation_shortfall1)\n", + " shortfall_deque1.append(info.implementation_shortfall1)\n", + " \n", + " shortfall_hist2 = np.append(shortfall_hist2, info.implementation_shortfall2)\n", + " shortfall_deque2.append(info.implementation_shortfall2)\n", + " break\n", + " \n", + " if (episode + 1) % 100 == 0: # print average shortfall over last 100 episodes\n", + " print('\\rEpisode [{}/{}]\\tAverage Shortfall for Agent1: ${:,.2f}'.format(episode + 1, episodes, np.mean(shortfall_deque1))) \n", + " print('\\rEpisode [{}/{}]\\tAverage Shortfall for Agent2: ${:,.2f}'.format(episode + 1, episodes, np.mean(shortfall_deque2)))\n", + " shortfall_list.append([np.mean(shortfall_deque1),np.mean(shortfall_deque2)])\n", + "print('\\nAverage Implementation Shortfall for Agent1: ${:,.2f} \\n'.format(np.mean(shortfall_hist1)))\n", + "print('\\nAverage Implementation Shortfall for Agent2: ${:,.2f} \\n'.format(np.mean(shortfall_hist2)))" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "shortfall = np.array(shortfall_list)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "np.save('1e-6_1e-6_cooporation_shorfall_list.npy',shortfall)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1e-06 1e-06\n", + "[1. 1.]\n", + "[0.761694 0.656324]\n", + "[0.603648 0.454928]\n", + "[0.44365 0.334226]\n", + "[0.305346 0.25539 ]\n", + "[0.20247 0.202642]\n", + "[0.13316 0.148788]\n", + "[0.09197 0.10399]\n", + "[0.064072 0.074902]\n", + "[0.044238 0.052522]\n", + "[0.03257 0.036602]\n", + "[0.02397 0.024466]\n", + "[0.018556 0.01732 ]\n", + "[0.013314 0.011942]\n", + "[0.009696 0.008204]\n", + "[0.006774 0.005622]\n", + "[0.004728 0.003898]\n", + "[0.003236 0.002704]\n", + "[0.00228 0.001762]\n", + "[0.00165 0.00114]\n", + "[0.001234 0.000778]\n", + "[0.000932 0.000566]\n", + "[0.000674 0.000392]\n", + "[0.000506 0.00029 ]\n", + "[0.000376 0.000212]\n", + "[0.000294 0.00015 ]\n", + "[0.000224 0.000108]\n", + "[1.66e-04 7.40e-05]\n", + "[1.14e-04 5.40e-05]\n", + "[8.2e-05 4.2e-05]\n", + "[5.8e-05 3.4e-05]\n", + "[4.0e-05 2.8e-05]\n", + "[2.6e-05 2.2e-05]\n", + "[1.8e-05 1.8e-05]\n", + "[1.2e-05 1.4e-05]\n", + "[8.e-06 1.e-05]\n", + "[6.e-06 8.e-06]\n", + "[4.e-06 6.e-06]\n", + "[2.e-06 4.e-06]\n", + "[2.e-06 2.e-06]\n", + "[2.e-06 2.e-06]\n", + "[2.e-06 2.e-06]\n", + "[2.e-06 2.e-06]\n", + "[2.e-06 2.e-06]\n", + "[2.e-06 2.e-06]\n", + "[2.e-06 2.e-06]\n", + "[2.e-06 2.e-06]\n", + "[2.e-06 2.e-06]\n", + "[2.e-06 2.e-06]\n", + "[2.e-06 2.e-06]\n", + "[2.e-06 2.e-06]\n", + "[2.e-06 2.e-06]\n", + "[2.e-06 2.e-06]\n", + "[2.e-06 2.e-06]\n", + "[2.e-06 2.e-06]\n", + "[2.e-06 2.e-06]\n", + "[2.e-06 2.e-06]\n", + "[2.e-06 2.e-06]\n", + "[2.e-06 2.e-06]\n", + "[2.e-06 2.e-06]\n", + "Episode [1300/1300]\tAverage Shortfall for Agent1: $298,868.72\n", + "Episode [1300/1300]\tAverage Shortfall for Agent2: $296,739.36\n" + ] + } + ], + "source": [ + "print(tr1,tr2)\n", + "cur_state = env.reset(seed = episode, liquid_time = lqt, num_trades = n_trades, lamb1 = tr1,lamb2 = tr2)\n", + "\n", + " # set the environment to make transactions\n", + "env.start_transactions()\n", + "\n", + "trajectory = np.zeros([n_trades+1,2])\n", + "for i in range(n_trades + 1):\n", + " trajectory[i] = cur_state[7:]\n", + " \n", + " print(cur_state[7:])\n", + " # Predict the best action for the current state. \n", + " cur_state1 = np.delete(cur_state,8)\n", + " cur_state2 = np.delete(cur_state,7)\n", + " #print(cur_state[5:])\n", + " action1 = agent1.act(cur_state1, add_noise = True)\n", + " action2 = agent2.act(cur_state2, add_noise = True)\n", + " #print(action1,action2)\n", + " # Action is performed and new state, reward, info are received. \n", + " new_state, reward1, reward2, done1, done2, info = env.step(action1,action2)\n", + " \n", + " # current state, action, reward, new state are stored in the experience replay\n", + " new_state1 = np.delete(new_state,8)\n", + " new_state2 = np.delete(new_state,7)\n", + " agent1.step(cur_state1, action1, reward1, new_state1, done1)\n", + " agent2.step(cur_state2, action2, reward2, new_state2, done2)\n", + " # roll over new state\n", + " cur_state = new_state\n", + "\n", + " if info.done1 and info.done2:\n", + " shortfall_hist1 = np.append(shortfall_hist1, info.implementation_shortfall1)\n", + " shortfall_deque1.append(info.implementation_shortfall1)\n", + " \n", + " shortfall_hist2 = np.append(shortfall_hist2, info.implementation_shortfall2)\n", + " shortfall_deque2.append(info.implementation_shortfall2)\n", + " break\n", + " \n", + "if (episode + 1) % 100 == 0: # print average shortfall over last 100 episodes\n", + " print('\\rEpisode [{}/{}]\\tAverage Shortfall for Agent1: ${:,.2f}'.format(episode + 1, episodes, np.mean(shortfall_deque1))) \n", + " print('\\rEpisode [{}/{}]\\tAverage Shortfall for Agent2: ${:,.2f}'.format(episode + 1, episodes, np.mean(shortfall_deque2)))\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "np.save('1e-6_1e-6_competition_trajectory_1500.npy',trajectory)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "ename": "TypeError", + "evalue": "reset() got an unexpected keyword argument 'lamb'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 20\u001b[0m \u001b[0;31m# Plot the trading list and trading trajectory. If show_trl = True, the data frame containing the values of the\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 21\u001b[0m \u001b[0;31m# trading list and trading trajectory is printed\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 22\u001b[0;31m \u001b[0mutils\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mplot_trade_list\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlq_time\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0ml_time\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnm_trades\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mn_trades\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtr_risk\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mt_risk\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mshow_trl\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m~/Kaggle/finance/utils.py\u001b[0m in \u001b[0;36mplot_trade_list\u001b[0;34m(lq_time, nm_trades, tr_risk, show_trl)\u001b[0m\n\u001b[1;32m 313\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 314\u001b[0m \u001b[0;31m# Reset the environment with the given parameters\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 315\u001b[0;31m \u001b[0menv\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreset\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mliquid_time\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mlq_time\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnum_trades\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnm_trades\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlamb\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtr_risk\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 316\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 317\u001b[0m \u001b[0;31m# Get the trading list from the environment\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mTypeError\u001b[0m: reset() got an unexpected keyword argument 'lamb'" + ] + } + ], + "source": [ + "%matplotlib inline\n", + "\n", + "import matplotlib.pyplot as plt\n", + "\n", + "import utils\n", + "\n", + "# We set the default figure size\n", + "plt.rcParams['figure.figsize'] = [17.0, 7.0]\n", + "\n", + "\n", + "# Set the number of days to sell all shares (i.e. the liquidation time)\n", + "l_time = 60\n", + "\n", + "# Set the number of trades\n", + "n_trades = 60\n", + "\n", + "# Set the trader's risk aversion\n", + "t_risk = 1e-6\n", + "\n", + "# Plot the trading list and trading trajectory. If show_trl = True, the data frame containing the values of the\n", + "# trading list and trading trajectory is printed\n", + "utils.plot_trade_list(lq_time = l_time, nm_trades = n_trades, tr_risk = t_risk, show_trl = True)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.8" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Visualization.ipynb b/Visualization.ipynb new file mode 100644 index 0000000..e144030 --- /dev/null +++ b/Visualization.ipynb @@ -0,0 +1,445 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "import seaborn as sns\n", + "%matplotlib inline\n", + "plt.rc('xtick',labelsize=14)\n", + "plt.rc('ytick',labelsize=14)\n", + "plt.rc('legend',fontsize = 14)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## graph" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "price_list = np.load('price_list.npy')" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "ax = sns.lineplot(data = price_list)\n", + "ax.set_xticklabels(labels = [])\n", + "ax.set_yticklabels(labels = [])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Theorem 1" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "m1_shortfall_list = np.load('1e-6_shortfall_list.npy')\n", + "m03_shortfall_list = np.load('1e-6_shortfall_list_0.3M.npy')\n", + "m07_shortfall_list = np.load('1e-6_shortfall_list_0.7M.npy')" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "E1_list = []\n", + "E2_list = []\n", + "B1_list = []\n", + "B2_list = []\n", + "for i in range(len(m1_shortfall_list)):\n", + " E1_list.append(m1_shortfall_list[i])\n", + " E2_list.append(m03_shortfall_list[i]+m07_shortfall_list[i])\n", + " B1_list.append(m03_shortfall_list[i])\n", + " B2_list.append(m07_shortfall_list[i])" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [], + "source": [ + "T = np.arange(1,101).tolist()" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "df1 = pd.DataFrame()\n", + "#df1['Time'] = T\n", + "df1['Agent A'] = E1_list\n", + "df1['B1+B2'] = E2_list\n", + "df1['Agent B1'] = B1_list\n", + "df1['Agent B2'] = B2_list" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [], + "source": [ + "sns.set()" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "ax = sns.lineplot(data = df1)\n", + "ax.set_ylabel('Expected Shortfall',fontsize = 20)\n", + "ax.set_xlabel('Episodes ',fontsize = 20)\n", + "ax.set_xticklabels([0,0,2000,4000,6000,8000,10000],fontsize = 14)\n", + "ax.grid(b=True, which='major', color='black', linewidth=0.5,linestyle = '--')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "wide_df = pd.DataFrame(data, index, [\"a\", \"b\", \"c\", \"d\"])\n", + "ax = sns.lineplot(data=wide_df)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Theorem 2" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [], + "source": [ + "A1 = np.load('1e-4_optimal.npy')\n", + "A2 = np.load('1e-9_optimal.npy')\n", + "B = np.load('1e-4_1e-9_trajectory.npy')" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [], + "source": [ + "A1_list = []\n", + "A2_list = []\n", + "B1_list = []\n", + "B2_list = []\n", + "for i in range(len(A1)):\n", + " A1_list.append(A1[i])\n", + " A2_list.append(A2[i])\n", + " B1_list.append(B[i][0])\n", + " B2_list.append(B[i][1])" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [], + "source": [ + "df2 = pd.DataFrame()\n", + "#df1['Time'] = T\n", + "df2['Agent A1'] = A1_list\n", + "df2['Agent A2'] = A2_list\n", + "df2['Agent B1'] = B1_list\n", + "df2['Agent B2'] = B2_list" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "ax = sns.lineplot(data = df2)\n", + "ax.set_ylabel('Percentage',fontsize = 20)\n", + "ax.set_xlabel('Time (Day)',fontsize = 20)\n", + "ax.set_xticklabels([0,0,10,20,30,40,50,60], fontsize = 14)\n", + "ax.grid(b=True, which='major', color='black', linewidth=0.5,linestyle = '--')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Cooperation and Competition" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "A = np.load('1e-6_shortfall_list.npy')\n", + "B = np.load('1e-6_1e-6_competition_shortfall_list.npy')\n", + "C = np.load('1e-6_1e-6_cooporation_shortfall_list.npy')" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "A_list = []\n", + "B_list = []\n", + "C_list = []\n", + "for i in range(len(A)):\n", + " A_list.append(A[i])\n", + " B_list.append(B[i].sum())\n", + " C_list.append(C[i].sum())" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "df3 = pd.DataFrame()\n", + "df3['Independent'] = A_list\n", + "df3['Competitive'] = B_list\n", + "df3['Cooporative'] = C_list" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "ax = sns.lineplot(data = df3)\n", + "ax.set_ylabel('Expected Shortfall',fontsize = 20)\n", + "ax.set_xlabel('Episodes',fontsize = 20)\n", + "ax.set_xticklabels([0,0,2000,4000,6000,8000,10000],fontsize = 14)\n", + "ax.grid(b=True, which='major', color='black', linewidth=0.5,linestyle = '--')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Competitor Selling Fixed Amount" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [], + "source": [ + "A = np.load('1e-6_optimal.npy')\n", + "B = np.load('1e-6_trajectory_fixed_competitor.npy')" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [], + "source": [ + "B = np.zeros(61)" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [], + "source": [ + "B[0:2] = np.load('1e-6_trajectory_fixed_competitor.npy')" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [], + "source": [ + "A_list = []\n", + "B_list = []\n", + "for i in range(len(A)):\n", + " A_list.append(A[i])\n", + " B_list.append(B[i])" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [], + "source": [ + "df4 = pd.DataFrame()\n", + "df4['Independent'] = A_list\n", + "df4['With Competitor'] = B_list" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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56yzzuLdd9/lzDPPZODAgWRnZ/PAAw/w2muvecouXryYk08+mZiYGFJTU/nTn/7kdbeVk5PDVVddxQ033ECvXr3o3bs3Tz75JHv27OGaa66hR48e9O/fn1deecVzjvuuYfbs2YwePZqYmBiOPvpoCgsLveLcuHEjEyZMIDExkZSUFKZOncqOHTsAmDlzJi+99BLvvvuu59/D/W/Z9JHXwIHGbiInnngiSilycnIAY++Ze++9lyOOOILo6GhGjBjBf/7znxYxzpkzh3PPPZfY2NiAl/NvD2YalFV4NyDvAycppe5USg1TSl0DTAZWBDNAKzFq7DkADIyvp8zG63lNnTq1q0MIGk5y6aqtYQNl7NixLRqUnJwccnJyvNJXrFjhd7Ost956i379+nHXXXdRUVFBRUWFJ6+2tpYHHniAF154geXLl1NVVcWVV17pN56FCxeye/duv3ci7nkXZWVlnHPOOZxwwgl8/vnnPP/888yZM4fbbrvNq/xrr71GYmIiK1eu5NZbb+WPf/wjV155JZmZmaxevZrLLruMK664wmvDLYCbb76Z66+/nrVr13LmmWcyefJkysqMPz4rKioYM2YMw4cPZ9WqVXz44YdUV1dz3nnn0djYyI033shFF13E+PHjPf8evjaMc98ZLliwgIqKCt566y0AnnzySR555BEeeugh1q1bxwUXXMAvf/lL1q5d63X+bbfdxjXXXMPGjRs5//zz/f6bdphAliR2raNzPrAJGOh63wvjLqURaHC97gaODrTOzj46tHy9iLz80A0iM7rJg48/Iv/zzPIO1dWVPProo10dQtCwo4u/ZcJrnx4v8sK5LQ83793iO7/8CyN/zau+89e8auSXf+G73gB57rnnJCYmRg4dOiQHDx6UmJgY2bJliyxcuFCOPvpoERHZtGmTALJkyRLPeaeffrpcc801nvcDBgyQRx55xKvuF198UQD56quvPGmvvvqqREZGSkNDg894HnroIQFkz549rcZ9++23y+DBg73qefHFFyUqKkoOHDjgifGUU07x5Dc2NkpycrLk5uZ60urq6iQyMlL+/e9/i4jItm3bBJD77rvPU6ahoUGOOuoo+ctf/iIiInfeeaeMGzfOK549e/YIICtXrhQRkcsuu0wmTJjQIm6gxbU+++wzrzLp6ely9913e6Wdfvrpcskll3id9+ijj0pF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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "ax = sns.lineplot(data = df4)\n", + "ax.set_ylabel('Expected Shortfall',fontsize = 20)\n", + "ax.set_xlabel('Time (Day)',fontsize = 20)\n", + "ax.grid(b=True, which='major', color='black', linewidth=0.5,linestyle = '--')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.8" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/ddpg_agent.py b/ddpg_agent.py new file mode 100644 index 0000000..d58cfca --- /dev/null +++ b/ddpg_agent.py @@ -0,0 +1,191 @@ +import numpy as np +import random +import copy +from collections import namedtuple, deque + +from model import Actor, Critic + +import torch +import torch.nn.functional as F +import torch.optim as optim + +BUFFER_SIZE = int(1e4) # replay buffer size +BATCH_SIZE = 128 # minibatch size +GAMMA = 0.99 # discount factor +TAU = 1e-3 # for soft update of target parameters +LR_ACTOR = 1e-4 # learning rate of the actor +LR_CRITIC = 1e-3 # learning rate of the critic +WEIGHT_DECAY = 0 # L2 weight decay + +device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") + +class Agent(): + """Interacts with and learns from the environment.""" + + def __init__(self, state_size, action_size, random_seed): + """Initialize an Agent object. + + Params + ====== + state_size (int): dimension of each state + action_size (int): dimension of each action + random_seed (int): random seed + """ + self.state_size = state_size + self.action_size = action_size + self.seed = random.seed(random_seed) + + # Actor Network (w/ Target Network) + self.actor_local = Actor(state_size, action_size, random_seed).to(device) + self.actor_target = Actor(state_size, action_size, random_seed).to(device) + self.actor_optimizer = optim.Adam(self.actor_local.parameters(), lr=LR_ACTOR) + + # Critic Network (w/ Target Network) + self.critic_local = Critic(state_size, action_size, random_seed).to(device) + self.critic_target = Critic(state_size, action_size, random_seed).to(device) + self.critic_optimizer = optim.Adam(self.critic_local.parameters(), lr=LR_CRITIC, weight_decay=WEIGHT_DECAY) + + # Noise process + self.noise = OUNoise(action_size, random_seed) + + # Replay memory + self.memory = ReplayBuffer(action_size, BUFFER_SIZE, BATCH_SIZE, random_seed) + + def step(self, state, action, reward, next_state, done): + """Save experience in replay memory, and use random sample from buffer to learn.""" + # Save experience / reward + self.memory.add(state, action, reward, next_state, done) + + # Learn, if enough samples are available in memory + if len(self.memory) > BATCH_SIZE: + experiences = self.memory.sample() + self.learn(experiences, GAMMA) + + def act(self, state, add_noise=True): + """Returns actions for given state as per current policy.""" + state = torch.from_numpy(state).float().to(device) + self.actor_local.eval() + with torch.no_grad(): + action = self.actor_local(state).cpu().data.numpy() + self.actor_local.train() + if add_noise: + action += self.noise.sample() + action = (action + 1.0) / 2.0 + return np.clip(action, 0, 1) + + + def reset(self): + self.noise.reset() + + def learn(self, experiences, gamma): + """Update policy and value parameters using given batch of experience tuples. + Q_targets = r + γ * critic_target(next_state, actor_target(next_state)) + where: + actor_target(state) -> action + critic_target(state, action) -> Q-value + + Params + ====== + experiences (Tuple[torch.Tensor]): tuple of (s, a, r, s', done) tuples + gamma (float): discount factor + """ + states, actions, rewards, next_states, dones = experiences + + # ---------------------------- update critic ---------------------------- # + # Get predicted next-state actions and Q values from target models + actions_next = self.actor_target(next_states) + Q_targets_next = self.critic_target(next_states, actions_next) + # Compute Q targets for current states (y_i) + Q_targets = rewards + (gamma * Q_targets_next * (1 - dones)) + # Compute critic loss + Q_expected = self.critic_local(states, actions) + critic_loss = F.mse_loss(Q_expected, Q_targets) + # Minimize the loss + self.critic_optimizer.zero_grad() + critic_loss.backward() + self.critic_optimizer.step() + + # ---------------------------- update actor ---------------------------- # + # Compute actor loss + actions_pred = self.actor_local(states) + actor_loss = -self.critic_local(states, actions_pred).mean() + # Minimize the loss + self.actor_optimizer.zero_grad() + actor_loss.backward() + self.actor_optimizer.step() + + # ----------------------- update target networks ----------------------- # + self.soft_update(self.critic_local, self.critic_target, TAU) + self.soft_update(self.actor_local, self.actor_target, TAU) + + def soft_update(self, local_model, target_model, tau): + """Soft update model parameters. + θ_target = τ*θ_local + (1 - τ)*θ_target + + Params + ====== + local_model: PyTorch model (weights will be copied from) + target_model: PyTorch model (weights will be copied to) + tau (float): interpolation parameter + """ + for target_param, local_param in zip(target_model.parameters(), local_model.parameters()): + target_param.data.copy_(tau*local_param.data + (1.0-tau)*target_param.data) + +class OUNoise: + """Ornstein-Uhlenbeck process.""" + + def __init__(self, size, seed, mu=0., theta=0.15, sigma=0.2): + """Initialize parameters and noise process.""" + self.mu = mu * np.ones(size) + self.theta = theta + self.sigma = sigma + self.seed = random.seed(seed) + self.reset() + + def reset(self): + """Reset the internal state (= noise) to mean (mu).""" + self.state = copy.copy(self.mu) + + def sample(self): + """Update internal state and return it as a noise sample.""" + x = self.state + dx = self.theta * (self.mu - x) + self.sigma * np.array([random.random() for i in range(len(x))]) + self.state = x + dx + return self.state + +class ReplayBuffer: + """Fixed-size buffer to store experience tuples.""" + + def __init__(self, action_size, buffer_size, batch_size, seed): + """Initialize a ReplayBuffer object. + Params + ====== + buffer_size (int): maximum size of buffer + batch_size (int): size of each training batch + """ + self.action_size = action_size + self.memory = deque(maxlen=buffer_size) # internal memory (deque) + self.batch_size = batch_size + self.experience = namedtuple("Experience", field_names=["state", "action", "reward", "next_state", "done"]) + self.seed = random.seed(seed) + + def add(self, state, action, reward, next_state, done): + """Add a new experience to memory.""" + e = self.experience(state, action, reward, next_state, done) + self.memory.append(e) + + def sample(self): + """Randomly sample a batch of experiences from memory.""" + experiences = random.sample(self.memory, k=self.batch_size) + + states = torch.from_numpy(np.vstack([e.state for e in experiences if e is not None])).float().to(device) + actions = torch.from_numpy(np.vstack([e.action for e in experiences if e is not None])).float().to(device) + rewards = torch.from_numpy(np.vstack([e.reward for e in experiences if e is not None])).float().to(device) + next_states = torch.from_numpy(np.vstack([e.next_state for e in experiences if e is not None])).float().to(device) + dones = torch.from_numpy(np.vstack([e.done for e in experiences if e is not None]).astype(np.uint8)).float().to(device) + + return (states, actions, rewards, next_states, dones) + + def __len__(self): + """Return the current size of internal memory.""" + return len(self.memory) \ No newline at end of file diff --git a/model.py b/model.py new file mode 100644 index 0000000..f367181 --- /dev/null +++ b/model.py @@ -0,0 +1,75 @@ + +import numpy as np + +import torch +import torch.nn as nn +import torch.nn.functional as F + +def hidden_init(layer): + fan_in = layer.weight.data.size()[0] + lim = 1. / np.sqrt(fan_in) + return (-lim, lim) + +class Actor(nn.Module): + """Actor (Policy) Model.""" + + def __init__(self, state_size, action_size, seed, fc1_units=24, fc2_units=48): + """Initialize parameters and build model. + Params + ====== + state_size (int): Dimension of each state + action_size (int): Dimension of each action + seed (int): Random seed + fc1_units (int): Number of nodes in first hidden layer + fc2_units (int): Number of nodes in second hidden layer + """ + super(Actor, self).__init__() + self.seed = torch.manual_seed(seed) + self.fc1 = nn.Linear(state_size, fc1_units) + self.fc2 = nn.Linear(fc1_units, fc2_units) + self.fc3 = nn.Linear(fc2_units, action_size) + self.reset_parameters() + + def reset_parameters(self): + self.fc1.weight.data.uniform_(*hidden_init(self.fc1)) + self.fc2.weight.data.uniform_(*hidden_init(self.fc2)) + self.fc3.weight.data.uniform_(-3e-3, 3e-3) + + def forward(self, state): + """Build an actor (policy) network that maps states -> actions.""" + x = F.relu(self.fc1(state)) + x = F.relu(self.fc2(x)) + return torch.tanh(self.fc3(x)) + + +class Critic(nn.Module): + """Critic (Value) Model.""" + + def __init__(self, state_size, action_size, seed, fcs1_units=24, fc2_units=48): + """Initialize parameters and build model. + Params + ====== + state_size (int): Dimension of each state + action_size (int): Dimension of each action + seed (int): Random seed + fcs1_units (int): Number of nodes in the first hidden layer + fc2_units (int): Number of nodes in the second hidden layer + """ + super(Critic, self).__init__() + self.seed = torch.manual_seed(seed) + self.fcs1 = nn.Linear(state_size, fcs1_units) + self.fc2 = nn.Linear(fcs1_units+action_size, fc2_units) + self.fc3 = nn.Linear(fc2_units, 1) + self.reset_parameters() + + def reset_parameters(self): + self.fcs1.weight.data.uniform_(*hidden_init(self.fcs1)) + self.fc2.weight.data.uniform_(*hidden_init(self.fc2)) + self.fc3.weight.data.uniform_(-3e-3, 3e-3) + + def forward(self, state, action): + """Build a critic (value) network that maps (state, action) pairs -> Q-values.""" + xs = F.relu(self.fcs1(state)) + x = torch.cat((xs, action), dim=1) + x = F.relu(self.fc2(x)) + return self.fc3(x) diff --git a/syntheticChrissAlmgren.py b/syntheticChrissAlmgren.py new file mode 100644 index 0000000..5159eb5 --- /dev/null +++ b/syntheticChrissAlmgren.py @@ -0,0 +1,362 @@ +import random +import numpy as np +import collections + + +# ------------------------------------------------ Financial Parameters --------------------------------------------------- # + +ANNUAL_VOLAT = 0.12 # Annual volatility in stock price +BID_ASK_SP = 1 / 8 # Bid-ask spread +DAILY_TRADE_VOL = 5e6 # Average Daily trading volume +TRAD_DAYS = 250 # Number of trading days in a year +DAILY_VOLAT = ANNUAL_VOLAT / np.sqrt(TRAD_DAYS) # Daily volatility in stock price + + +# ----------------------------- Parameters for the Almgren and Chriss Optimal Execution Model ----------------------------- # + +TOTAL_SHARES1 = 500000 # Total number of shares to sell +TOTAL_SHARES2 = 500000 # Total number of shares to sell +STARTING_PRICE = 50 # Starting price per share +LLAMBDA1 = 1e-6 # Trader's risk aversion +LLAMBDA2 = 1e-4 +LIQUIDATION_TIME = 60 # How many days to sell all the shares. +NUM_N = 60 # Number of trades +EPSILON = BID_ASK_SP / 2 # Fixed Cost of Selling. +SINGLE_STEP_VARIANCE = (DAILY_VOLAT * STARTING_PRICE) ** 2 # Calculate single step variance +ETA = BID_ASK_SP / (0.01 * DAILY_TRADE_VOL) # Price Impact for Each 1% of Daily Volume Traded +GAMMA = BID_ASK_SP / (0.1 * DAILY_TRADE_VOL) # Permanent Impact Constant + +# ----------------------------------------------------------------------------------------------------------------------- # + + +# Simulation Environment + +class MarketEnvironment(): + + def __init__(self, randomSeed = 0, + lqd_time = LIQUIDATION_TIME, + num_tr = NUM_N, + lambd1 = LLAMBDA1, + lambd2 = LLAMBDA2): + + # Set the random seed + random.seed(randomSeed) + + # Initialize the financial parameters so we can access them later + self.anv = ANNUAL_VOLAT + self.basp = BID_ASK_SP + self.dtv = DAILY_TRADE_VOL + self.dpv = DAILY_VOLAT + + # Initialize the Almgren-Chriss parameters so we can access them later + self.total_shares1 = TOTAL_SHARES1 + self.total_shares2 = TOTAL_SHARES2 + self.startingPrice = STARTING_PRICE + self.llambda1 = lambd1 + self.llambda2 = lambd2 + self.liquidation_time = lqd_time + self.num_n = num_tr + self.epsilon = EPSILON + self.singleStepVariance = SINGLE_STEP_VARIANCE + self.eta = ETA + self.gamma = GAMMA + + # Calculate some Almgren-Chriss parameters + self.tau = self.liquidation_time / self.num_n + self.eta_hat = self.eta - (0.5 * self.gamma * self.tau) + self.kappa_hat1 = np.sqrt((self.llambda1 * self.singleStepVariance) / self.eta_hat) + self.kappa_hat2 = np.sqrt((self.llambda2 * self.singleStepVariance) / self.eta_hat) + self.kappa1 = np.arccosh((((self.kappa_hat1 ** 2) * (self.tau ** 2)) / 2) + 1) / self.tau + self.kappa2 = np.arccosh((((self.kappa_hat2 ** 2) * (self.tau ** 2)) / 2) + 1) / self.tau + + # Set the variables for the initial state + self.shares_remaining1 = self.total_shares1 + self.shares_remaining2 = self.total_shares2 + self.timeHorizon = self.num_n + self.logReturns = collections.deque(np.zeros(6)) + + # Set the initial impacted price to the starting price + self.prevImpactedPrice = self.startingPrice + + # Set the initial transaction state to False + self.transacting1 = False + self.transacting2 = False + + # Set a variable to keep trak of the trade number + self.k = 0 + + + def reset(self, seed = 0, liquid_time = LIQUIDATION_TIME, num_trades = NUM_N, lamb1 = LLAMBDA1,lamb2 = LLAMBDA2): + + # Initialize the environment with the given parameters + self.__init__(randomSeed = seed, lqd_time = liquid_time, num_tr = num_trades, lambd1 = lamb1,lambd2 = lamb2) + + # Set the initial state to [0,0,0,0,0,0,1,1] + self.initial_state = np.array(list(self.logReturns) + [self.timeHorizon / self.num_n, \ + self.shares_remaining1 / self.total_shares1, \ + self.shares_remaining2 / self.total_shares2]) + return self.initial_state + + + def start_transactions(self): + + # Set transactions on + self.transacting1 = True + self.transacting2 = True + + # Set the minimum number of stocks one can sell + self.tolerance = 1 + + # Set the initial capture to zero + self.totalCapture1 = 0 + self.totalCapture2 = 0 + + # Set the initial previous price to the starting price + self.prevPrice = self.startingPrice + + # Set the initial square of the shares to sell to zero + self.totalSSSQ1 = 0 + self.totalSSSQ2 = 0 + # Set the initial square of the remaing shares to sell to zero + self.totalSRSQ1 = 0 + self.totalSRSQ2 = 0 + # Set the initial AC utility + self.prevUtility1 = self.compute_AC_utility(self.total_shares1,self.kappa1,self.llambda1) + self.prevUtility2 = self.compute_AC_utility(self.total_shares2,self.kappa2,self.llambda2) + + def step(self, action1,action2): + + # Create a class that will be used to keep track of information about the transaction + class Info(object): + pass + info = Info() + + # Set the done flag to False. This indicates that we haven't sold all the shares yet. + info.done1 = False + info.done2 = False + + # During training, if the DDPG fails to sell all the stocks before the given + # number of trades or if the total number shares remaining is less than 1, then stop transacting, + # set the done Flag to True, return the current implementation shortfall, and give a negative reward. + # The negative reward is given in the else statement below. + if self.transacting1 and (self.timeHorizon == 0 or (abs(self.shares_remaining1) < self.tolerance)): + self.transacting1 = False + info.done1 = True + info.implementation_shortfall1 = self.total_shares1 * self.startingPrice - self.totalCapture1 + info.expected_shortfall1 = self.get_expected_shortfall(self.total_shares1,self.totalSSSQ1) + info.expected_variance1 = self.singleStepVariance * self.tau * self.totalSRSQ1 + info.utility1 = info.expected_shortfall1 + self.llambda1 * info.expected_variance1 + + if self.transacting2 and (self.timeHorizon == 0 or (abs(self.shares_remaining2) < self.tolerance)): + self.transacting2 = False + info.done2 = True + info.implementation_shortfall2 = self.total_shares2 * self.startingPrice - self.totalCapture2 + info.expected_shortfall2 = self.get_expected_shortfall(self.total_shares2,self.totalSSSQ2) + info.expected_variance2 = self.singleStepVariance * self.tau * self.totalSRSQ2 + info.utility2 = info.expected_shortfall2 + self.llambda2 * info.expected_variance2 + + # We don't add noise before the first trade + if self.k == 0: + info.price = self.prevImpactedPrice + else: + # Calculate the current stock price using arithmetic brownian motion + info.price = self.prevImpactedPrice + np.sqrt(self.singleStepVariance * self.tau) * random.normalvariate(0, 1) + + # If we are transacting, the stock price is affected by the number of shares we sell. The price evolves + # according to the Almgren and Chriss price dynamics model. + if self.transacting1: + + # If action is an ndarray then extract the number from the array + if isinstance(action1, np.ndarray): + action1 = action1.item() + + # Convert the action to the number of shares to sell in the current step + sharesToSellNow1 = self.shares_remaining1 * action1 + + if self.timeHorizon < 2: + sharesToSellNow1 = self.shares_remaining1 + else: + sharesToSellNow1 = 0 +# sharesToSellNow = min(self.shares_remaining * action, self.shares_remaining) + if self.transacting2: + + # If action is an ndarray then extract the number from the array + if isinstance(action2, np.ndarray): + action2 = action2.item() + + # Convert the action to the number of shares to sell in the current step + sharesToSellNow2 = self.shares_remaining2 * action2 + + if self.timeHorizon < 2: + sharesToSellNow2 = self.shares_remaining2 + else: + sharesToSellNow2 = 0 + + if self.transacting1 or self.transacting2: + + # Since we are not selling fractions of shares, round up the total number of shares to sell to the nearest integer. + info.share_to_sell_now1 = np.around(sharesToSellNow1) + info.share_to_sell_now2 = np.around(sharesToSellNow2) + # Calculate the permanent and temporary impact on the stock price according the AC price dynamics model + info.currentPermanentImpact = self.permanentImpact(info.share_to_sell_now1+info.share_to_sell_now2) + info.currentTemporaryImpact = self.temporaryImpact(info.share_to_sell_now1+info.share_to_sell_now2) + + # Apply the temporary impact on the current stock price + info.exec_price = info.price - info.currentTemporaryImpact + + # Calculate the current total capture + self.totalCapture1 += info.share_to_sell_now1 * info.exec_price + self.totalCapture2 += info.share_to_sell_now2 * info.exec_price + + # Calculate the log return for the current step and save it in the logReturn deque + self.logReturns.append(np.log(info.price/self.prevPrice)) + self.logReturns.popleft() + + # Update the number of shares remaining + self.shares_remaining1 -= info.share_to_sell_now1 + self.shares_remaining2 -= info.share_to_sell_now2 + + # Calculate the runnig total of the squares of shares sold and shares remaining + self.totalSSSQ1 += info.share_to_sell_now1 ** 2 + self.totalSRSQ1 += self.shares_remaining1 ** 2 + + self.totalSSSQ2 += info.share_to_sell_now2 ** 2 + self.totalSRSQ2 += self.shares_remaining2 ** 2 + + # Update the variables required for the next step + self.timeHorizon -= 1 + self.prevPrice = info.price + self.prevImpactedPrice = info.price - info.currentPermanentImpact + + # Calculate the reward + currentUtility1 = self.compute_AC_utility(self.shares_remaining1,self.kappa1,self.llambda1) + currentUtility2 = self.compute_AC_utility(self.shares_remaining2,self.kappa2,self.llambda2) + if self.prevUtility1 == 0: + reward1 = 0 + else: + reward1 = (abs(self.prevUtility1) - abs(currentUtility1)) / abs(self.prevUtility1) + if self.prevUtility2 == 0: + reward2 =0 + else: + reward2 = (abs(self.prevUtility2) - abs(currentUtility2)) / abs(self.prevUtility2) + + if reward1 > reward2: + reward2 -= reward1 + #reward2 += reward1 + #reward2 *= 0.5 + reward2 *= 0.5 + else: + #reward1 += reward2 + #reward1 *= 0.5 + reward1 -= reward2 + reward1 *= 0.5 + #reward1 = max(reward1 - reward2, 0) + #reward2 = max(reward2 - reward1, 0) + + self.prevUtility1 = currentUtility1 + self.prevUtility2 = currentUtility2 + + # If all the shares have been sold calculate E, V, and U, and give a positive reward. + if self.shares_remaining1 <= 0: + + # Calculate the implementation shortfall + info.implementation_shortfall1 = self.total_shares1 * self.startingPrice - self.totalCapture1 + info.done1 = True + + if self.shares_remaining2 <= 0: + + # Calculate the implementation shortfall + info.implementation_shortfall2 = self.total_shares2 * self.startingPrice - self.totalCapture2 + info.done2 = True + + # Set the done flag to True. This indicates that we have sold all the shares + else: + reward1 = 0.0 + reward2 = 0.0 + + self.k += 1 + + # Set the new state + state = np.array(list(self.logReturns) + [self.timeHorizon / self.num_n, self.shares_remaining1 / self.total_shares1, self.shares_remaining2 / self.total_shares2]) + + return (state, np.array([reward1]),np.array([reward2]), info.done1,info.done2, info) + + + def permanentImpact(self, sharesToSell): + # Calculate the permanent impact according to equations (6) and (1) of the AC paper + pi = self.gamma * sharesToSell + return pi + + + def temporaryImpact(self, sharesToSell): + # Calculate the temporary impact according to equation (7) of the AC paper + ti = (self.epsilon * np.sign(sharesToSell)) + ((self.eta / self.tau) * sharesToSell) + return ti + + def get_expected_shortfall(self, sharesToSell,totalSSSQ): + # Calculate the expected shortfall according to equation (8) of the AC paper + ft = 0.5 * self.gamma * (sharesToSell ** 2) + st = self.epsilon * sharesToSell + tt = (self.eta_hat / self.tau) * totalSSSQ + return ft + st + tt + + + def get_AC_expected_shortfall(self, sharesToSell,kappa): + # Calculate the expected shortfall for the optimal strategy according to equation (20) of the AC paper + ft = 0.5 * self.gamma * (sharesToSell ** 2) + st = self.epsilon * sharesToSell + tt = self.eta_hat * (sharesToSell ** 2) + nft = np.tanh(0.5 * kappa * self.tau) * (self.tau * np.sinh(2 * kappa * self.liquidation_time) \ + + 2 * self.liquidation_time * np.sinh(kappa * self.tau)) + dft = 2 * (self.tau ** 2) * (np.sinh(kappa * self.liquidation_time) ** 2) + fot = nft / dft + return ft + st + (tt * fot) + + + def get_AC_variance(self, sharesToSell,kappa): + # Calculate the variance for the optimal strategy according to equation (20) of the AC paper + ft = 0.5 * (self.singleStepVariance) * (sharesToSell ** 2) + nst = self.tau * np.sinh(kappa * self.liquidation_time) * np.cosh(kappa * (self.liquidation_time - self.tau)) \ + - self.liquidation_time * np.sinh(kappa * self.tau) + dst = (np.sinh(kappa * self.liquidation_time) ** 2) * np.sinh(kappa * self.tau) + st = nst / dst + return ft * st + + + def compute_AC_utility(self, sharesToSell,kappa,llambda): + # Calculate the AC Utility according to pg. 13 of the AC paper + if self.liquidation_time == 0: + return 0 + E = self.get_AC_expected_shortfall(sharesToSell,kappa) + V = self.get_AC_variance(sharesToSell,kappa) + return E + llambda * V + + + def get_trade_list(self,kappa): + # Calculate the trade list for the optimal strategy according to equation (18) of the AC paper + trade_list = np.zeros(self.num_n) + ftn = 2 * np.sinh(0.5 * kappa * self.tau) + ftd = np.sinh(kappa * self.liquidation_time) + ft = (ftn / ftd) * self.total_shares1 + for i in range(1, self.num_n + 1): + st = np.cosh(kappa * (self.liquidation_time - (i - 0.5) * self.tau)) + trade_list[i - 1] = st + trade_list *= ft + return trade_list + + + def observation_space_dimension(self): + # Return the dimension of the state + return 8 + + + def action_space_dimension(self): + # Return the dimension of the action + return 1 + + + def stop_transactions(self): + # Stop transacting + self.transacting = False + + \ No newline at end of file diff --git a/utils.py b/utils.py new file mode 100644 index 0000000..30755cb --- /dev/null +++ b/utils.py @@ -0,0 +1,475 @@ +import numpy as np +import pandas as pd +import matplotlib.pyplot as plt +import matplotlib.ticker as mticker + +import syntheticChrissAlmgren as sca + +from statsmodels.iolib.table import SimpleTable +from statsmodels.compat.python import zip_longest +from statsmodels.iolib.tableformatting import fmt_2cols + + +def generate_table(left_col, right_col, table_title): + + # Do not use column headers + col_headers = None + + # Generate the right table + if right_col: + # Add padding + if len(right_col) < len(left_col): + right_col += [(' ', ' ')] * (len(left_col) - len(right_col)) + elif len(right_col) > len(left_col): + left_col += [(' ', ' ')] * (len(right_col) - len(left_col)) + right_col = [('%-21s' % (' '+k), v) for k,v in right_col] + + # Generate the right table + gen_stubs_right, gen_data_right = zip_longest(*right_col) + gen_table_right = SimpleTable(gen_data_right, + col_headers, + gen_stubs_right, + title = table_title, + txt_fmt = fmt_2cols) + else: + # If there is no right table set the right table to empty + gen_table_right = [] + + # Generate the left table + gen_stubs_left, gen_data_left = zip_longest(*left_col) + gen_table_left = SimpleTable(gen_data_left, + col_headers, + gen_stubs_left, + title = table_title, + txt_fmt = fmt_2cols) + + + # Merge the left and right tables to make a single table + gen_table_left.extend_right(gen_table_right) + general_table = gen_table_left + + return general_table + + +def get_env_param(): + + # Create a simulation environment + env = sca.MarketEnvironment() + + # Set the title for the financial parameters table + fp_title = 'Financial Parameters' + + # Get the default financial parameters from the simulation environment + fp_left_col = [('Annual Volatility:', ['{:.0f}%'.format(env.anv * 100)]), + ('Daily Volatility:', ['{:.1f}%'.format(env.dpv * 100)])] + + fp_right_col = [('Bid-Ask Spread:', ['{:.3f}'.format(env.basp)]), + ('Daily Trading Volume:', ['{:,.0f}'.format(env.dtv)])] + + # Set the title for the Almgren and Chriss Model parameters table + acp_title = 'Almgren and Chriss Model Parameters' + + # Get the default Almgren and Chriss Model Parameters from the simulation environment + acp_left_col = [('Total Number of Shares for Agent1 to Sell:', ['{:,}'.format(env.total_shares1)]), + ('Total Number of Shares for Agent2 to Sell:', ['{:,}'.format(env.total_shares2)]), + ('Starting Price per Share:', ['${:.2f}'.format(env.startingPrice)]), + ('Price Impact for Each 1% of Daily Volume Traded:', ['${}'.format(env.eta)]), + ('Number of Days to Sell All the Shares:', ['{}'.format(env.liquidation_time)]), + ('Number of Trades:', ['{}'.format(env.num_n)])] + + acp_right_col = [('Fixed Cost of Selling per Share:', ['${:.3f}'.format(env.epsilon)]), + ('Trader\'s Risk Aversion for Agent 1:', ['{}'.format(env.llambda1)]), + ('Trader\'s Risk Aversion for Agent 2:', ['{}'.format(env.llambda2)]), + ('Permanent Impact Constant:', ['{}'.format(env.gamma)]), + ('Single Step Variance:', ['{:.3f}'.format(env.singleStepVariance)]), + ('Time Interval between trades:', ['{}'.format(env.tau)])] + + # Generate tables with the default financial and AC Model parameters + fp_table = generate_table(fp_left_col, fp_right_col, fp_title) + acp_table = generate_table(acp_left_col, acp_right_col, acp_title) + + return fp_table, acp_table + + +def plot_price_model(seed = 0, num_days = 1000): + + # Create a simulation environment + env = sca.MarketEnvironment() + + # Reset the enviroment with the given seed + env.reset(seed) + + # Create an array to hold the daily stock price for the given number of days + price_hist = np.zeros(num_days) + + # Get the simulated stock price movement from the environment + for i in range(num_days): + _, _, _, info = env.step(i) + price_hist[i] = info.price + + # Print Average and Standard Deviation in Stock Price + print('Average Stock Price: ${:,.2f}'.format(price_hist.mean())) + print('Standard Deviation in Stock Price: ${:,.2f}'.format(price_hist.std())) +# print('Standard Deviation of Random Noise: {:,.5f}'.format(np.sqrt(env.singleStepVariance * env.tau))) + + # Plot the price history for the given number of days + price_df = pd.DataFrame(data = price_hist, columns = ['Stock'], dtype = 'float64') + ax = price_df.plot(colormap = 'cool', grid = False) + ax.set_facecolor(color = 'k') + ax = plt.gca() + yNumFmt = mticker.StrMethodFormatter('${x:,.2f}') + ax.yaxis.set_major_formatter(yNumFmt) + plt.ylabel('Stock Price') + plt.xlabel('days') + plt.show() + + + +def get_optimal_vals(lq_time = 60, nm_trades = 60, tr_risk = 1e-6, title = ''): + + # Create a simulation environment + env = sca.MarketEnvironment() + + # Reset the enviroment with the given parameters + env.reset(liquid_time = lq_time, num_trades = nm_trades, lamb = tr_risk) + + # Set the title for the AC Optimal Strategy table + if title == '': + title = 'AC Optimal Strategy' + else: + title = 'AC Optimal Strategy for ' + title + + # Get the AC optimal values from the environment + E = env.get_AC_expected_shortfall(env.total_shares) + V = env.get_AC_variance(env.total_shares) + U = env.compute_AC_utility(env.total_shares) + + left_col = [('Number of Days to Sell All the Shares:', ['{}'.format(env.liquidation_time)]), + ('Half-Life of The Trade:', ['{:,.1f}'.format(1 / env.kappa)]), + ('Utility:', ['${:,.2f}'.format(U)])] + + right_col = [('Initial Portfolio Value:', ['${:,.2f}'.format(env.total_shares * env.startingPrice)]), + ('Expected Shortfall:', ['${:,.2f}'.format(E)]), + ('Standard Deviation of Shortfall:', ['${:,.2f}'.format(np.sqrt(V))])] + + # Generate the table with the AC optimal values + val_table = generate_table(left_col, right_col, title) + + return val_table + + +def get_min_param(): + + # Get the minimum impact AC parameters + min_impact = get_optimal_vals(lq_time = 250, nm_trades = 250, tr_risk = 1e-17, title = 'Minimum Impact') + + # Get the minimum variance AC parameters + min_var = get_optimal_vals(lq_time = 1, nm_trades = 1, tr_risk = 0.0058, title = 'Minimum Variance') + + return min_impact, min_var + + +def get_crfs(trisk): + + # Create the annotation label + tr_st = '{:.0e}'.format(trisk) + lnum = tr_st.split('e')[0] + lexp = tr_st.split('e')[1] + if np.abs(np.int(lexp)) < 10: + lexp = lexp.replace('0', '', 1) + an_st = '$\lambda = ' + lnum + ' \\times 10^{' + lexp + '}$' + + # Set the correction factors for the annotation label + if trisk >= 1e-7 and trisk <= 4e-7: + xcrf = 0.94 + ycrf = 2.5 + scrf = 0.1 + elif trisk > 4e-7 and trisk <= 9e-7: + xcrf = 0.9 + ycrf = 2.5 + scrf = 0.06 + elif trisk > 9e-7 and trisk <= 1e-6: + xcrf = 0.85 + ycrf = 2.5 + scrf = 0.06 + elif trisk > 1e-6 and trisk < 2e-6: + xcrf = 1.2 + ycrf = 2.5 + scrf = 0.06 + elif trisk >= 2e-6 and trisk < 3e-6: + xcrf = 0.8 + ycrf = 2.5 + scrf = 0.06 + elif trisk >= 3e-6 and trisk < 4e-6: + xcrf = 0.7 + ycrf = 2.5 + scrf = 0.08 + elif trisk >= 4e-6 and trisk < 7e-6: + xcrf = 1.4 + ycrf = 2.0 + scrf = 0.08 + elif trisk >= 7e-6 and trisk <= 1e-5: + xcrf = 4.5 + ycrf = 1.5 + scrf = 0.08 + elif trisk > 1e-5 and trisk <= 2e-5: + xcrf = 7.0 + ycrf = 1.1 + scrf = 0.08 + elif trisk > 2e-5 and trisk <= 5e-5: + xcrf = 12. + ycrf = 1.1 + scrf = 0.08 + elif trisk > 5e-5 and trisk <= 1e-4: + xcrf = 30 + ycrf = 0.99 + scrf = 0.08 + else: + xcrf = 1 + ycrf = 1 + scrf = 0.08 + + return an_st, xcrf, ycrf, scrf + + +def plot_efficient_frontier(tr_risk = 1e-6): + + # Create a simulation environment + env = sca.MarketEnvironment() + + # Reset the enviroment with the given trader's risk aversion + env.reset(lamb = tr_risk) + + # Get the expected shortfall and corresponding variance for the given trader's risk aversion + tr_E = env.get_AC_expected_shortfall(env.total_shares) + tr_V = env.get_AC_variance(env.total_shares) + + # Create empty arrays to hold our values of E, V, and U + E = np.array([]) + V = np.array([]) + U = np.array([]) + + # Set the number of plot points for our frontier + num_points = 7000 + + # Set the values of the trader's risk aversion to plot + lambdas = np.linspace(1e-7, 1e-4, num_points) + + # Calclate E, V, U for each value of llambda + for llambda in lambdas: + env.reset(lamb = llambda) + E = np.append(E, env.get_AC_expected_shortfall(env.total_shares)) + V = np.append(V, env.get_AC_variance(env.total_shares)) + U = np.append(U, env.compute_AC_utility(env.total_shares)) + + # Plot E vs V and use U for the colorbar + cm = plt.cm.get_cmap('gist_rainbow') + sc = plt.scatter(V, E, s = 20, c = U, cmap = cm) + plt.colorbar(sc, label = 'AC Utility', format = mticker.StrMethodFormatter('${x:,.0f}')) + ax = plt.gca() + ax.set_facecolor('k') + ymin = E.min() * 0.7 + ymax = E.max() * 1.1 + plt.ylim(ymin, ymax) + yNumFmt = mticker.StrMethodFormatter('${x:,.0f}') + xNumFmt = mticker.StrMethodFormatter('{x:,.0f}') + ax.yaxis.set_major_formatter(yNumFmt) + ax.xaxis.set_major_formatter(xNumFmt) + plt.xlabel('Variance of Shortfall') + plt.ylabel('Expected Shortfall') + + # Get the annotation label and the correction factors + an_st, xcrf, ycrf, scrf = get_crfs(tr_risk) + + # Plot the annotation in the above plot + plt.annotate(an_st, xy = (tr_V, tr_E), xytext = (tr_V * xcrf, tr_E * ycrf), color = 'w', size = 'large', + arrowprops = dict(facecolor = 'cyan', shrink = scrf, width = 3, headwidth = 10)) + plt.show() + + +def round_trade_list(trl): + + # Round the shares in the trading list + trl_rd = np.around(trl) + + # Rounding the number of shares in the trading list sometimes results in selling more or less + # shares than we have available. We calculate the difference between to total number of shares + # sold in the original trading list and the number of shares sold in the rounded list. + # This difference will be used to correct for rounding errors. + res = np.around(trl.sum() - trl_rd.sum()) + + # Correct the number of shares sold due to rounding errors if necessary + if res != 0: + idx = trl_rd.nonzero()[0][-1] + trl_rd[idx] += res + + return trl_rd + + +def plot_trade_list(lq_time = 60, nm_trades = 60, tr_risk = 1e-6, show_trl = False): + + # Create simulation environment + env = sca.MarketEnvironment() + + # Reset the environment with the given parameters + env.reset(liquid_time = lq_time, num_trades = nm_trades, lamb = tr_risk) + + # Get the trading list from the environment + trade_list = env.get_trade_list() + + # Add a zero at the beginning of the trade list to indicate that at time 0 we don't sell any stocks + new_trl = np.insert(trade_list, 0, 0) + + # We create a dataframe with the trading list and trading trajectory + df = pd.DataFrame(data = list(range(nm_trades + 1)), columns = ['Trade Number'], dtype = 'float64') + df['Stocks Sold'] = new_trl + df['Stocks Remaining'] = (np.ones(nm_trades + 1) * env.total_shares) - np.cumsum(new_trl) + + # Create a figure with 2 plots in 1 row + fig, axes = plt.subplots(nrows = 1, ncols = 2) + + # Make a scatter plot of the trade list + df.iloc[1:].plot.scatter(x = 'Trade Number', y = 'Stocks Sold', c = 'Stocks Sold', colormap = 'gist_rainbow', + alpha = 1, sharex = False, s = 50, colorbar = False, ax = axes[0]) + + # Plot a line through the points of the scatter plot of the trade list + axes[0].plot(df['Trade Number'].iloc[1:], df['Stocks Sold'].iloc[1:], linewidth = 2.0, alpha = 0.5) + axes[0].set_facecolor(color = 'k') + yNumFmt = mticker.StrMethodFormatter('{x:,.0f}') + axes[0].yaxis.set_major_formatter(yNumFmt) + axes[0].set_title('Trading List') + + # Make a scatter plot of the number of stocks remaining after each trade + df.plot.scatter(x = 'Trade Number', y = 'Stocks Remaining', c = 'Stocks Remaining', colormap = 'gist_rainbow', + alpha = 1, sharex = False, s = 50, colorbar = False, ax = axes[1]) + + # Plot a line through the points of the scatter plot of the number of stocks remaining after each trade + axes[1].plot(df['Trade Number'], df['Stocks Remaining'], linewidth = 2.0, alpha = 0.5) + axes[1].set_facecolor(color = 'k') + yNumFmt = mticker.StrMethodFormatter('{x:,.0f}') + axes[1].yaxis.set_major_formatter(yNumFmt) + axes[1].set_title('Trading Trajectory') + + # Set the spacing between plots + plt.subplots_adjust(wspace = 0.4) + plt.show() + + print('\nNumber of Shares Sold: {:,.0f}\n'.format(new_trl.sum())) + + if show_trl: + + # Since we are not selling fractional shares we round up the shares in the trading list + rd_trl = round_trade_list(new_trl) +# rd_trl = new_trl + + # We create a dataframe with the modified trading list and trading trajectory + df2 = pd.DataFrame(data = list(range(nm_trades + 1)), columns = ['Trade Number'], dtype = 'float64') + df2['Stocks Sold'] = rd_trl + df2['Stocks Remaining'] = (np.ones(nm_trades + 1) * env.total_shares) - np.cumsum(rd_trl) + + return df2.style.hide_index().format({'Trade Number': '{:.0f}', 'Stocks Sold': '{:,.0f}', 'Stocks Remaining': '{:,.0f}'}) +# return df2.style.hide_index().format({'Trade Number': '{:.0f}', 'Stocks Sold': '{:e}', 'Stocks Remaining': '{:e}'}) + + +def implement_trade_list(seed = 0, lq_time = 60, nm_trades = 60, tr_risk = 1e-6): + + # Create simulation environment + env = sca.MarketEnvironment() + + # Reset the environment with the given parameters + env.reset(seed = seed, liquid_time = lq_time, num_trades = nm_trades, lamb = tr_risk) + + # Get the trading list from the environment + trl = env.get_trade_list() + + # Since we are not selling fractional shares we round up the shares in the trading list + trade_list = round_trade_list(trl) + + # set the environment to make transactions + env.start_transactions() + + # Create an array to hold the impacted stock price + price_hist = np.array([]) + + # Implement the trading list in our similation environment + for trade in trade_list: + + # Convert the number of shares to sell in each trade into an action + action = trade / env.shares_remaining + + # Take a step in the environment my selling the number of shares in the current trade + _, _, _, info = env.step(action) + + # Get the impacted price from the environment + price_hist = np.append(price_hist, info.exec_price) + + # If all shares have been sold, stop making transactions and get the implementation sortfall + if info.done: + print('Implementation Shortfall: ${:,.2f} \n'.format(info.implementation_shortfall)) + break + + # Plot the impacted price + price_df = pd.DataFrame(data = price_hist, columns = ['Stock'], dtype = 'float64') + ax = price_df.plot(colormap = 'cool', grid = False) + ax.set_facecolor(color = 'k') + ax.set_title('Impacted Stock Price') + ax = plt.gca() + yNumFmt = mticker.StrMethodFormatter('${x:,.2f}') + ax.yaxis.set_major_formatter(yNumFmt) + plt.plot(price_hist, 'o') + plt.ylabel('Stock Price') + plt.xlabel('Trade Number') + plt.show() + + +def get_av_std(lq_time = 60, nm_trades = 60, tr_risk = 1e-6, trs = 100): + + # Create simulation environment + env = sca.MarketEnvironment() + + # Reset the enviroment + env.reset(liquid_time = lq_time, num_trades = nm_trades, lamb = tr_risk) + + # Get the trading list + trl = env.get_trade_list() + + # Since we are not selling fractional shares we round up the shares in the trading list + trade_list = round_trade_list(trl) + + # Set the initial shortfall to zero + shortfall_hist = np.array([]) + + for episode in range(trs): + + # Print current episode every 100 episodes + if (episode + 1) % 100 == 0: + print('Episode [{}/{}]'.format(episode + 1, trs), end = '\r', flush = True) + + # Reset the enviroment + env.reset(seed = episode, liquid_time = lq_time, num_trades = nm_trades, lamb = tr_risk) + + # set the environment to make transactions + env.start_transactions() + + for trade in trade_list: + action = trade / env.shares_remaining + _, _, _, info = env.step(action) + + if info.done: + shortfall_hist = np.append(shortfall_hist, info.implementation_shortfall) + break + + print('Average Implementation Shortfall: ${:,.2f}'.format(shortfall_hist.mean())) + print('Standard Deviation of the Implementation Shortfall: ${:,.2f}'.format(shortfall_hist.std())) + + plt.plot(shortfall_hist, 'cyan', label='') + plt.xlim(0, trs) + ax = plt.gca() + ax.set_facecolor('k') + ax.set_xlabel('Episode', fontsize = 15) + ax.set_ylabel('Implementation Shortfall (US $)', fontsize = 15) + ax.axhline(shortfall_hist.mean(),0, 1, color = 'm', label='Average') + yNumFmt = mticker.StrMethodFormatter('${x:,.0f}') + ax.yaxis.set_major_formatter(yNumFmt) + plt.legend() + plt.show \ No newline at end of file