{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"name":"2022-01-04-trading.ipynb","provenance":[{"file_id":"https://github.com/recohut/nbs/blob/main/raw/6ce10d62-1d81-45ae-b2b8-03aeafb6d70c.ipynb","timestamp":1644432224510}],"toc_visible":true,"collapsed_sections":["vMMX2vebhlV-","3Ta3rnUuhxR1","-SBhFpqZiEfx","mu7wAQEIikv3","viN03Xp5i7DD","8Pfd6VDvjQL8","CSVcFMujj0jV","OqEiMmYxkAEs","YCBzml2rkNDK","PtTAdFevkqP8","MuwQb3OOkzzT","zAzCQAS3lLVz","gU8qKzfPlU_t","6TvlxiuKleUB","JZ1MRol_lwFJ","7bEvRLGpl-gr","oHhTVooXmJNz","WDTXyW8cmS9M","BBq6lbZLmlxa","Ra90QUK5mupJ","FW6xxeNRm9QZ","MUZcLPJAnEAT"],"authorship_tag":"ABX9TyOQCVN+TKbG46nfDbhaRpNt"},"kernelspec":{"name":"python3","display_name":"Python 3"}},"cells":[{"cell_type":"markdown","metadata":{"id":"9d-d2slt0njw"},"source":["## Trading Strategies"]},{"cell_type":"code","metadata":{"id":"t-MZZdvAY5-h"},"source":["## Further recommendation, test multiple frameworks, see what works better on average. \n","## Open source RL: https://docs.google.com/spreadsheets/d/1EeFPd-XIQ3mq_9snTlAZSsFY7Hbnmd7P5bbT8LPuMn0/edit#gid=0\n","\n","import numpy as np\n","import pandas as pd\n","import matplotlib.pyplot as plt\n","import seaborn as sns\n","sns.set()"],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"jc8KBpFO0uxz"},"source":["This notebook is part of a series on machine learning asset managment. https://ssrn.com/abstract=3420952\n","\n","I have had some enquiries about future releases, I will post future content on the [FirmAI](https://www.linkedin.com/company/18004273/admin/) Linkedin page."]},{"cell_type":"code","metadata":{"id":"DbWK98EqZ4HS"},"source":["!pip install yfinance --upgrade --no-cache-dir"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"nT72lycyY5-u","outputId":"446bd285-3dfa-47f1-859b-4c83d4ff8774","executionInfo":{"status":"ok","timestamp":1562360033967,"user_tz":-60,"elapsed":45220,"user":{"displayName":"Cloud Machine","photoUrl":"","userId":"03543453517966682716"}},"colab":{"base_uri":"https://localhost:8080/","height":141}},"source":["## Save future files to your drive\n","## In this notebook control for multiple testing\n","import numpy as np\n","from google.colab import drive\n","drive.mount('/content/drive',force_remount=True)\n","%cd \"/content/drive/My Drive/FirmAI/FinML/Data/Agent Trading\"\n"],"execution_count":null,"outputs":[{"output_type":"stream","text":["Go to this URL in a browser: https://accounts.google.com/o/oauth2/auth?client_id=947318989803-6bn6qk8qdgf4n4g3pfee6491hc0brc4i.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&scope=email%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdocs.test%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive.photos.readonly%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fpeopleapi.readonly&response_type=code\n","\n","Enter your authorization code:\n","··········\n","Mounted at /content/drive\n","/content/drive/My Drive/FirmAI/FinML/Data/Agent Trading\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"547ijRuxZ60f","outputId":"31bc8c29-cbab-458d-ba70-fcb3afed7fb5","executionInfo":{"status":"ok","timestamp":1562360129781,"user_tz":-60,"elapsed":562,"user":{"displayName":"Cloud Machine","photoUrl":"","userId":"03543453517966682716"}},"colab":{"base_uri":"https://localhost:8080/","height":220}},"source":["\n","from pandas_datareader import data as pdr\n","import fix_yahoo_finance as yf\n","yf.pdr_override()\n","df_full = pdr.get_data_yahoo(\"JPM\", start=\"2018-01-01\").reset_index()\n","df_full.to_csv('output/JPM.csv',index=False)\n","df_full.head()\n"],"execution_count":null,"outputs":[{"output_type":"stream","text":["[*********************100%***********************] 1 of 1 downloaded\n"],"name":"stdout"},{"output_type":"execute_result","data":{"text/html":["
"],"text/plain":[" signal short_ma long_ma positions\n","0 0.0 107.949997 107.949997 NaN\n","1 0.0 108.004998 108.004998 0.0\n","2 0.0 108.349999 108.349999 0.0\n","3 0.0 108.347498 108.347498 0.0\n","4 0.0 108.377998 108.377998 0.0\n","5 0.0 108.489999 108.489999 0.0\n","6 0.0 108.741428 108.741428 0.0\n","7 0.0 109.003749 109.003749 0.0\n","8 0.0 109.411110 109.411110 0.0\n","9 1.0 109.891110 109.696999 1.0\n","10 1.0 110.438888 109.996362 0.0\n","11 1.0 110.907777 110.268332 0.0\n","12 1.0 111.426666 110.479230 0.0\n","13 1.0 112.074444 110.754285 0.0\n","14 1.0 112.647777 110.984666 0.0\n","15 1.0 113.249999 111.277499 0.0\n","16 1.0 113.789999 111.537646 0.0\n","17 1.0 114.195555 111.803332 0.0\n","18 1.0 114.632222 112.261666 0.0\n","19 1.0 114.867778 112.653333 0.0\n","20 1.0 115.135555 113.021666 0.0\n","21 1.0 115.564444 113.495555 0.0\n","22 1.0 115.558888 113.816666 0.0\n","23 1.0 114.957777 113.802777 0.0\n","24 1.0 114.562222 113.906111 0.0\n","25 1.0 114.247778 114.018889 0.0\n","26 0.0 113.310000 113.752778 -1.0\n","27 0.0 112.625556 113.628889 0.0\n","28 0.0 112.251111 113.559444 0.0\n","29 0.0 111.891112 113.513333 0.0\n",".. ... ... ... ...\n","349 0.0 110.476666 112.387222 0.0\n","350 0.0 110.505555 112.035000 0.0\n","351 0.0 110.305555 111.666111 0.0\n","352 0.0 110.118888 111.266666 0.0\n","353 0.0 109.646666 110.763332 0.0\n","354 0.0 109.112222 110.256110 0.0\n","355 0.0 108.568888 109.881110 0.0\n","356 0.0 108.347777 109.721666 0.0\n","357 0.0 108.271110 109.588888 0.0\n","358 0.0 108.463332 109.469999 0.0\n","359 0.0 108.402222 109.453888 0.0\n","360 0.0 108.604444 109.454999 0.0\n","361 0.0 108.877777 109.498333 0.0\n","362 0.0 109.123333 109.384999 0.0\n","363 1.0 109.521111 109.316666 1.0\n","364 1.0 109.894444 109.231666 0.0\n","365 1.0 109.836667 109.092222 0.0\n","366 1.0 109.901111 109.086110 0.0\n","367 1.0 109.850000 109.156666 0.0\n","368 1.0 109.964444 109.183333 0.0\n","369 1.0 109.864445 109.234444 0.0\n","370 1.0 109.640001 109.258889 0.0\n","371 1.0 109.472224 109.297778 0.0\n","372 0.0 109.354446 109.437778 -1.0\n","373 0.0 109.245557 109.570000 0.0\n","374 0.0 109.532224 109.684445 0.0\n","375 0.0 109.862224 109.881668 0.0\n","376 1.0 110.294446 110.072223 1.0\n","377 1.0 110.586668 110.275556 0.0\n","378 1.0 111.036668 110.450556 0.0\n","\n","[379 rows x 4 columns]"]},"metadata":{"tags":[]},"execution_count":21}]},{"cell_type":"code","metadata":{"id":"8x79XSrLY5_1"},"source":["def buy_stock(\n"," real_movement,\n"," signal,\n"," initial_money = 10000,\n"," max_buy = 1,\n"," max_sell = 1,\n","):\n"," \"\"\"\n"," real_movement = actual movement in the real world\n"," delay = how much interval you want to delay to change our decision from buy to sell, vice versa\n"," initial_state = 1 is buy, 0 is sell\n"," initial_money = 1000, ignore what kind of currency\n"," max_buy = max quantity for share to buy\n"," max_sell = max quantity for share to sell\n"," \"\"\"\n"," starting_money = initial_money\n"," states_sell = []\n"," states_buy = []\n"," current_inventory = 0\n","\n"," def buy(i, initial_money, current_inventory):\n"," shares = initial_money // real_movement[i]\n"," if shares < 1:\n"," print(\n"," 'day %d: total balances %f, not enough money to buy a unit price %f'\n"," % (i, initial_money, real_movement[i])\n"," )\n"," else:\n"," if shares > max_buy:\n"," buy_units = max_buy\n"," else:\n"," buy_units = shares\n"," initial_money -= buy_units * real_movement[i]\n"," current_inventory += buy_units\n"," print(\n"," 'day %d: buy %d units at price %f, total balance %f'\n"," % (i, buy_units, buy_units * real_movement[i], initial_money)\n"," )\n"," states_buy.append(0)\n"," return initial_money, current_inventory\n","\n"," for i in range(real_movement.shape[0] - int(0.025 * len(df))):\n"," state = signal[i]\n"," if state == 1:\n"," initial_money, current_inventory = buy(\n"," i, initial_money, current_inventory\n"," )\n"," states_buy.append(i)\n"," elif state == -1:\n"," if current_inventory == 0:\n"," print('day %d: cannot sell anything, inventory 0' % (i))\n"," else:\n"," if current_inventory > max_sell:\n"," sell_units = max_sell\n"," else:\n"," sell_units = current_inventory\n"," current_inventory -= sell_units\n"," total_sell = sell_units * real_movement[i]\n"," initial_money += total_sell\n"," try:\n"," invest = (\n"," (real_movement[i] - real_movement[states_buy[-1]])\n"," / real_movement[states_buy[-1]]\n"," ) * 100\n"," except:\n"," invest = 0\n"," print(\n"," 'day %d, sell %d units at price %f, investment %f %%, total balance %f,'\n"," % (i, sell_units, total_sell, invest, initial_money)\n"," )\n"," states_sell.append(i)\n"," invest = ((initial_money - starting_money) / starting_money) * 100\n"," total_gains = initial_money - starting_money\n"," return states_buy, states_sell, total_gains, invest"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"n8qJ0LgfY5_6","outputId":"18ef1b81-4c6b-4cf4-c696-30d8fe0a7643","executionInfo":{"status":"ok","timestamp":1562360172326,"user_tz":-60,"elapsed":344,"user":{"displayName":"Cloud Machine","photoUrl":"","userId":"03543453517966682716"}},"colab":{"base_uri":"https://localhost:8080/","height":520}},"source":["states_buy, states_sell, total_gains, invest = buy_stock(df.Close, signals['positions'])"],"execution_count":null,"outputs":[{"output_type":"stream","text":["day 9: buy 1 units at price 112.269997, total balance 9887.730003\n","day 26, sell 1 units at price 107.879997, investment -3.910217 %, total balance 9995.610000,\n","day 35: buy 1 units at price 114.980003, total balance 9880.629997\n","day 46, sell 1 units at price 118.040001, investment 2.661331 %, total balance 9998.669998,\n","day 50: buy 1 units at price 115.239998, total balance 9883.430000\n","day 55, sell 1 units at price 109.949997, investment -4.590421 %, total balance 9993.379997,\n","day 70: buy 1 units at price 110.300003, total balance 9883.079994\n","day 78, sell 1 units at price 109.989998, investment -0.281056 %, total balance 9993.069992,\n","day 90: buy 1 units at price 113.860001, total balance 9879.209991\n","day 101, sell 1 units at price 105.930000, investment -6.964694 %, total balance 9985.139991,\n","day 114: buy 1 units at price 107.900002, total balance 9877.239989\n","day 118, sell 1 units at price 107.510002, investment -0.361446 %, total balance 9984.749991,\n","day 134: buy 1 units at price 110.580002, total balance 9874.169989\n","day 158, sell 1 units at price 114.769997, investment 3.789107 %, total balance 9988.939986,\n","day 168: buy 1 units at price 114.580002, total balance 9874.359984\n","day 173, sell 1 units at price 113.709999, investment -0.759297 %, total balance 9988.069983,\n","day 182: buy 1 units at price 117.849998, total balance 9870.219985\n","day 191, sell 1 units at price 115.269997, investment -2.189224 %, total balance 9985.489982,\n","day 214: buy 1 units at price 109.599998, total balance 9875.889984\n","day 226, sell 1 units at price 106.650002, investment -2.691602 %, total balance 9982.539986,\n","day 255: buy 1 units at price 100.570000, total balance 9881.969986\n","day 278, sell 1 units at price 100.879997, investment 0.308240 %, total balance 9982.849983,\n","day 286: buy 1 units at price 105.000000, total balance 9877.849983\n","day 296, sell 1 units at price 103.010002, investment -1.895236 %, total balance 9980.859985,\n","day 303: buy 1 units at price 106.800003, total balance 9874.059982\n","day 308, sell 1 units at price 99.919998, investment -6.441952 %, total balance 9973.979980,\n","day 317: buy 1 units at price 105.650002, total balance 9868.329978\n","day 341, sell 1 units at price 109.449997, investment 3.596777 %, total balance 9977.779975,\n","day 363: buy 1 units at price 109.540001, total balance 9868.239974\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"v45Kgse1Y6AC","outputId":"a7f98ec7-ba4a-4268-bda4-3776dee107f6","executionInfo":{"status":"ok","timestamp":1562366817822,"user_tz":-60,"elapsed":1060,"user":{"displayName":"Cloud Machine","photoUrl":"","userId":"03543453517966682716"}},"colab":{"base_uri":"https://localhost:8080/","height":338}},"source":["close = df['Close']\n","fig = plt.figure(figsize = (15,5))\n","plt.plot(close, color='r', lw=2.)\n","plt.plot(close, '^', markersize=10, color='m', label = 'buying signal', markevery = states_buy)\n","plt.plot(close, 'v', markersize=10, color='k', label = 'selling signal', markevery = states_sell)\n","plt.title('total gains %f, total investment %f%%'%(total_gains, invest))\n","plt.legend()\n","plt.savefig('output/'+name+'.png')\n","plt.show()"],"execution_count":null,"outputs":[{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["
"]},"metadata":{"tags":[]}}]},{"cell_type":"markdown","metadata":{"id":"vMMX2vebhlV-"},"source":["## Signal Rolling agent"]},{"cell_type":"code","metadata":{"id":"OJIKMWCaUlET"},"source":["df= df_full.copy()\n","name = 'Signal Rolling agent'"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"wjPay_IIY6Al"},"source":["def buy_stock(\n"," real_movement,\n"," delay = 5,\n"," initial_state = 1,\n"," initial_money = 10000,\n"," max_buy = 1,\n"," max_sell = 1,\n","):\n"," \"\"\"\n"," real_movement = actual movement in the real world\n"," delay = how much interval you want to delay to change our decision from buy to sell, vice versa\n"," initial_state = 1 is buy, 0 is sell\n"," initial_money = 1000, ignore what kind of currency\n"," max_buy = max quantity for share to buy\n"," max_sell = max quantity for share to sell\n"," \"\"\"\n"," starting_money = initial_money\n"," delay_change_decision = delay\n"," current_decision = 0\n"," state = initial_state\n"," current_val = real_movement[0]\n"," states_sell = []\n"," states_buy = []\n"," current_inventory = 0\n","\n"," def buy(i, initial_money, current_inventory):\n"," shares = initial_money // real_movement[i]\n"," if shares < 1:\n"," print(\n"," 'day %d: total balances %f, not enough money to buy a unit price %f'\n"," % (i, initial_money, real_movement[i])\n"," )\n"," else:\n"," if shares > max_buy:\n"," buy_units = max_buy\n"," else:\n"," buy_units = shares\n"," initial_money -= buy_units * real_movement[i]\n"," current_inventory += buy_units\n"," print(\n"," 'day %d: buy %d units at price %f, total balance %f'\n"," % (i, buy_units, buy_units * real_movement[i], initial_money)\n"," )\n"," states_buy.append(0)\n"," return initial_money, current_inventory\n","\n"," if state == 1:\n"," initial_money, current_inventory = buy(\n"," 0, initial_money, current_inventory\n"," )\n","\n"," for i in range(1, real_movement.shape[0], 1):\n"," if real_movement[i] < current_val and state == 0:\n"," if current_decision < delay_change_decision:\n"," current_decision += 1\n"," else:\n"," state = 1\n"," initial_money, current_inventory = buy(\n"," i, initial_money, current_inventory\n"," )\n"," current_decision = 0\n"," states_buy.append(i)\n"," if real_movement[i] > current_val and state == 1:\n"," if current_decision < delay_change_decision:\n"," current_decision += 1\n"," else:\n"," state = 0\n","\n"," if current_inventory == 0:\n"," print('day %d: cannot sell anything, inventory 0' % (i))\n"," else:\n"," if current_inventory > max_sell:\n"," sell_units = max_sell\n"," else:\n"," sell_units = current_inventory\n"," current_inventory -= sell_units\n"," total_sell = sell_units * real_movement[i]\n"," initial_money += total_sell\n"," try:\n"," invest = (\n"," (real_movement[i] - real_movement[states_buy[-1]])\n"," / real_movement[states_buy[-1]]\n"," ) * 100\n"," except:\n"," invest = 0\n"," print(\n"," 'day %d, sell %d units at price %f, investment %f %%, total balance %f,'\n"," % (i, sell_units, total_sell, invest, initial_money)\n"," )\n","\n"," current_decision = 0\n"," states_sell.append(i)\n"," current_val = real_movement[i]\n"," invest = ((initial_money - starting_money) / starting_money) * 100\n"," total_gains = initial_money - starting_money\n"," return states_buy, states_sell, total_gains, invest"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"2o01YIflY6Ar","outputId":"e575a90f-6452-4656-f2c4-fbad14c2a509","executionInfo":{"status":"ok","timestamp":1562366973352,"user_tz":-60,"elapsed":332,"user":{"displayName":"Cloud Machine","photoUrl":"","userId":"03543453517966682716"}},"colab":{"base_uri":"https://localhost:8080/","height":728}},"source":["states_buy, states_sell, total_gains, invest = buy_stock(df.Close, initial_state = 1, \n"," delay = 4, initial_money = 10000)"],"execution_count":null,"outputs":[{"output_type":"stream","text":["day 0: buy 1 units at price 107.949997, total balance 9892.050003\n","day 6, sell 1 units at price 110.250000, investment 2.130619 %, total balance 10002.300003,\n","day 19: buy 1 units at price 115.110001, total balance 9887.190002\n","day 27, sell 1 units at price 110.040001, investment -4.404483 %, total balance 9997.230003,\n","day 40: buy 1 units at price 113.430000, total balance 9883.800003\n","day 50, sell 1 units at price 115.239998, investment 1.595696 %, total balance 9999.040001,\n","day 59: buy 1 units at price 108.000000, total balance 9891.040001\n","day 66, sell 1 units at price 110.400002, investment 2.222224 %, total balance 10001.440003,\n","day 75: buy 1 units at price 111.470001, total balance 9889.970002\n","day 88, sell 1 units at price 113.410004, investment 1.740381 %, total balance 10003.380006,\n","day 98: buy 1 units at price 112.489998, total balance 9890.890008\n","day 108, sell 1 units at price 110.800003, investment -1.502351 %, total balance 10001.690011,\n","day 114: buy 1 units at price 107.900002, total balance 9893.790009\n","day 127, sell 1 units at price 103.720001, investment -3.873958 %, total balance 9997.510010,\n","day 137: buy 1 units at price 109.889999, total balance 9887.620011\n","day 143, sell 1 units at price 116.029999, investment 5.587406 %, total balance 10003.650010,\n","day 156: buy 1 units at price 113.699997, total balance 9889.950013\n","day 172, sell 1 units at price 114.320000, investment 0.545297 %, total balance 10004.270013,\n","day 183: buy 1 units at price 116.720001, total balance 9887.550012\n","day 193, sell 1 units at price 115.320000, investment -1.199453 %, total balance 10002.870012,\n","day 198: buy 1 units at price 106.339996, total balance 9896.530016\n","day 209, sell 1 units at price 106.699997, investment 0.338538 %, total balance 10003.230013,\n","day 220: buy 1 units at price 107.330002, total balance 9895.900011\n","day 229, sell 1 units at price 110.940002, investment 3.363458 %, total balance 10006.840013,\n","day 236: buy 1 units at price 101.360001, total balance 9905.480012\n","day 250, sell 1 units at price 97.620003, investment -3.689816 %, total balance 10003.100015,\n","day 258: buy 1 units at price 99.910004, total balance 9903.190011\n","day 263, sell 1 units at price 104.589996, investment 4.684208 %, total balance 10007.780007,\n","day 275: buy 1 units at price 103.739998, total balance 9904.040009\n","day 287, sell 1 units at price 106.099998, investment 2.274918 %, total balance 10010.140007,\n","day 293: buy 1 units at price 104.110001, total balance 9906.030006\n","day 301, sell 1 units at price 106.550003, investment 2.343677 %, total balance 10012.580009,\n","day 307: buy 1 units at price 98.930000, total balance 9913.650009\n","day 313, sell 1 units at price 105.139999, investment 6.277165 %, total balance 10018.790008,\n","day 328: buy 1 units at price 113.550003, total balance 9905.240005\n","day 335, sell 1 units at price 116.120003, investment 2.263320 %, total balance 10021.360008,\n","day 340: buy 1 units at price 112.510002, total balance 9908.850006\n","day 350, sell 1 units at price 109.709999, investment -2.488670 %, total balance 10018.560005,\n","day 359: buy 1 units at price 109.160004, total balance 9909.400001\n","day 366, sell 1 units at price 110.709999, investment 1.419929 %, total balance 10020.110000,\n","day 377: buy 1 units at price 112.820000, total balance 9907.290000\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"dAUEZBEiY6A7","outputId":"a68f0eb5-2d1b-4fc6-b91a-f431760de085","executionInfo":{"status":"ok","timestamp":1562366977846,"user_tz":-60,"elapsed":910,"user":{"displayName":"Cloud Machine","photoUrl":"","userId":"03543453517966682716"}},"colab":{"base_uri":"https://localhost:8080/","height":338}},"source":["close = df['Close']\n","fig = plt.figure(figsize = (15,5))\n","plt.plot(close, color='r', lw=2.)\n","plt.plot(close, '^', markersize=10, color='m', label = 'buying signal', markevery = states_buy)\n","plt.plot(close, 'v', markersize=10, color='k', label = 'selling signal', markevery = states_sell)\n","plt.title('total gains %f, total investment %f%%'%(total_gains, invest))\n","plt.legend()\n","plt.savefig('output/'+name+'.png')\n","plt.show()"],"execution_count":null,"outputs":[{"output_type":"display_data","data":{"image/png":"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\nFy7Qrl07Lly4UOr7Kf55GDRoEPHx8WzYsAGr1cqmTZs4deoUgwcPLnX5vLw81Go1oaGhWK1W3nnn\nnRJZG08ZOXIksbGxfPnll4wePVp5fuzYsezYsYPdu3djs9kwmUzs27eP5ORk0tPT+fnnnzEYDOh0\nOnx9fZXjHBYWRkpKilLF0V1du3bFz8+PDz74AKPRiM1m48SJE/z999+VWr/477IiFR3r4jzx2V+3\nbh3jxo0r8X1z/Z6tVit2ux2TyYTFYgGgd+/eqNVqPv30U8xmM6tXrwagb9++gKMb70cffURKSgop\nKSl89NFHJb5PJpOJV199lWeeeQaAxo0bs3//fsxmMwcPHhTj7wRBqDIR3AmCUKfNmDGD9957j+jo\naFauXEnLli15+eWXeeGFF+jbty87duxg+fLl6HS6UpcfP348DRs2ZMCAAYwaNYru3btXet+33XYb\n/fv3Z+zYsYwfP55Bgwah0WhQq9X4+/szf/58HnnkEXr16sWPP/5ITExMld7juXPnmDZtGlFRUUya\nNInbb79duVCsyD///MOYMWPo0aMHr732Gq+88oqSJTh06BA7duwgNjaWXr16KXN6ucYFxsXFKUGx\ny88//0xgYGCp+3/uuefo2rUrP/74I8uXL6dr165KJcM2bdqwePFinnjiCa677jry8vJYuHChsu7C\nhQsxGo1cd911PP744yxatEhpZ3XWTU5OplGjRmVmbqdOncqWLVvo1asXS5YsISQkhOXLl/PRRx/R\np08fVqxYwfLly5US+MWXv/766xkwYADDhw8nJiYGLy+vIl11PSkiIkIpgDJy5Ejl+cjISN59913e\nf/99+vXrx6BBg1i5ciV2ux273c7HH3/MgAED6N27N3/88QeLFi0CHMFG69atuf76693KTLmo1WqW\nL1/OsWPHGDp0KH379mX+/PmVDm6Lfxcro7xjXfzzWp3PPjgqge7du7dIRViX9evX07VrVxYtWkRc\nXBxdu3blueeeA0Cn07Fs2TLWr19PdHQ0a9asYdmyZco5aPLkyQwZMoQxY8YwZswYBg0axOTJk4ts\nf/ny5YwZM0bp6j158mSysrLo168fDRo0YNiwYZX6fQmCIBQnyTXRt0QQBOEqtHPnThYtWlRu8Q2h\ndr377ruEhoaWuHgWBEEQhGuRCO4EQRDKYDQa2bdvH/379ycjI4OHH36Ybt268eyzz17upgmCIAiC\n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\ntHnzZknS5s2bdeDAAXV0dKR5Zdi/f798Pp/Wr18vSbr55pv1s5/9LM2rcq7169erurp63HUzHR8c\nO8k11X7MhOMl+YqLi3XxxRcnLp9//vlqbm6e8b1nX5Jnuv2YyYsvvqhzzjknkRW6+eab9e///u/J\nXGbOKSgoSPzc19cnwzD4LEmzqfZkJvzeylyUZc5CS0uLqqqq5HK5JEkul0uVlZVqaWlRaWlpmleX\nW7Zt2ybbtrVu3Tp99atfVUtLi2pqahK3l5aWyrKsRNkGkm+m48O2bY6dNJl4rBQWFnK8pJhlWfrh\nD3+oTZs2zfjesy+pMXY/4m699VZFo1Ft3LhRW7duldfrnbQfNTU1amlpSceSHe0b3/iGXn75Zdm2\nrX/4h3/gsyQDTNyTOD5PsguZO2SNXbt26Sc/+YmefPJJ2bate++9N91LAjISx0pm+Pa3v61gMKhb\nbrkl3UuBJu/HCy+8oB//+MfatWuX3n//fe3cuTPNK8wt999/v1544QV95Stf0UMPPZTu5UBT7wmf\nJ9mH4G4WqqurdfLkSUWjUUlSNBrVqVOn5lQOhYWLv99er1dbtmzR3r17VV1dPa7EpqOjQ6Zp8lej\nFJrp+ODYSY+pjpX49RwvqbFjxw41Njbq0UcflWmaM7737EvyTdwPafQ4yc/P16c+9alpj5Pm5mZ+\nZyXRjTfeqP/8z//UGWecwWdJhojvSWdnJ58nWYjgbhbKysrU0NCg3bt3S5J2796thoYGSgFSaGBg\nQL29vZIk27b1zDPPqKGhQeecc46Ghob02muvSZKeeOIJXXvttelcas6Z6fjg2Em96Y4VSRwvKfLI\nI49o//792rlzp7xer6SZ33v2Jbmm2o/u7m4NDQ1JkiKRiPbs2ZM4TjZs2KB9+/bpyJEjkmL7cd11\n16Vl7U7U398/rsz1ueeeU1FREZ8laTTdnvh8Pj5PspBh27ad7kVkg0OHDmn79u3q6elRYWGhduzY\noZUrV6Z7WTnj2LFj2rp1q6LRqCzL0qpVq3TnnXeqsrJSe/fu1d133z2uFW95eXm6l+xI9913n/7j\nP/5DbW1tKikpUXFxsX7605/OeHxw7CTPVPvx/e9/f9pjRRLHS5K999572rx5s+rq6uT3+yVJS5Ys\n0c6dO2d879mX5JhuP774xS/qrrvukmEYikQiuuCCC3THHXcoLy9PkvTzn/9cDz/8sCzLUkNDgx58\n8EEFg8F0/lMco62tTbfddpsGBwdlmqaKiop0++23a+3atXyWpMl0e1JYWMjnSRYiuAMAAAAAB6As\nEwAAAAAcgOAOAAAAAByA4A4AAAAAHIDgDgAAAAAcgOAOAAAAAByA4A4AAAAAHIDgDgAAAAAcgOAO\nAAAAABzg/wMpJxDqYQ20kwAAAABJRU5ErkJggg==\n","text/plain":["
"]},"metadata":{"tags":[]}}]},{"cell_type":"markdown","metadata":{"id":"3Ta3rnUuhxR1"},"source":["## Policy Gradient agent"]},{"cell_type":"code","metadata":{"id":"917fxMmyY6Bh"},"source":["df = df_full.copy()\n","name = 'Policy Gradient agent'\n","class Agent:\n","\n"," LEARNING_RATE = 1e-4\n"," LAYER_SIZE = 256\n"," GAMMA = 0.9\n"," OUTPUT_SIZE = 3\n","\n"," def __init__(self, state_size, window_size, trend, skip):\n"," self.state_size = state_size\n"," self.window_size = window_size\n"," self.half_window = window_size // 2\n"," self.trend = trend\n"," self.skip = skip\n"," self.X = tf.placeholder(tf.float32, (None, self.state_size))\n"," self.REWARDS = tf.placeholder(tf.float32, (None))\n"," self.ACTIONS = tf.placeholder(tf.int32, (None))\n"," feed_forward = tf.layers.dense(self.X, self.LAYER_SIZE, activation = tf.nn.relu)\n"," self.logits = tf.layers.dense(feed_forward, self.OUTPUT_SIZE, activation = tf.nn.softmax)\n"," input_y = tf.one_hot(self.ACTIONS, self.OUTPUT_SIZE)\n"," loglike = tf.log((input_y * (input_y - self.logits) + (1 - input_y) * (input_y + self.logits)) + 1)\n"," rewards = tf.tile(tf.reshape(self.REWARDS, (-1,1)), [1, self.OUTPUT_SIZE])\n"," self.cost = -tf.reduce_mean(loglike * (rewards + 1)) \n"," self.optimizer = tf.train.AdamOptimizer(learning_rate = self.LEARNING_RATE).minimize(self.cost)\n"," self.sess = tf.InteractiveSession()\n"," self.sess.run(tf.global_variables_initializer())\n"," \n"," def predict(self, inputs):\n"," return self.sess.run(self.logits, feed_dict={self.X:inputs})\n"," \n"," def get_state(self, t):\n"," window_size = self.window_size + 1\n"," d = t - window_size + 1\n"," block = self.trend[d : t + 1] if d >= 0 else -d * [self.trend[0]] + self.trend[0 : t + 1]\n"," res = []\n"," for i in range(window_size - 1):\n"," res.append(block[i + 1] - block[i])\n"," return np.array([res])\n"," \n"," def discount_rewards(self, r):\n"," discounted_r = np.zeros_like(r)\n"," running_add = 0\n"," for t in reversed(range(0, r.size)):\n"," running_add = running_add * self.GAMMA + r[t]\n"," discounted_r[t] = running_add\n"," return discounted_r\n"," \n"," def get_predicted_action(self, sequence):\n"," prediction = self.predict(np.array(sequence))[0]\n"," return np.argmax(prediction)\n"," \n"," def buy(self, initial_money):\n"," starting_money = initial_money\n"," states_sell = []\n"," states_buy = []\n"," inventory = []\n"," state = self.get_state(0)\n"," for t in range(0, len(self.trend) - 1, self.skip):\n"," action = self.get_predicted_action(state)\n"," next_state = self.get_state(t + 1)\n"," \n"," if action == 1 and initial_money >= self.trend[t] and t < (len(self.trend) - self.half_window):\n"," inventory.append(self.trend[t])\n"," initial_money -= self.trend[t]\n"," states_buy.append(t)\n"," print('day %d: buy 1 unit at price %f, total balance %f'% (t, self.trend[t], initial_money))\n"," \n"," \n"," elif action == 2 and len(inventory):\n"," bought_price = inventory.pop(0)\n"," initial_money += self.trend[t]\n"," states_sell.append(t)\n"," try:\n"," invest = ((close[t] - bought_price) / bought_price) * 100\n"," except:\n"," invest = 0\n"," print(\n"," 'day %d, sell 1 unit at price %f, investment %f %%, total balance %f,'\n"," % (t, close[t], invest, initial_money)\n"," )\n"," \n"," state = next_state\n"," invest = ((initial_money - starting_money) / starting_money) * 100\n"," total_gains = initial_money - starting_money\n"," return states_buy, states_sell, total_gains, invest\n"," \n"," \n"," def train(self, iterations, checkpoint, initial_money):\n"," for i in range(iterations):\n"," ep_history = []\n"," total_profit = 0\n"," inventory = []\n"," state = self.get_state(0)\n"," starting_money = initial_money\n"," for t in range(0, len(self.trend) - 1, self.skip):\n"," action = self.get_predicted_action(state)\n"," next_state = self.get_state(t + 1)\n"," if action == 1 and starting_money >= self.trend[t] and t < (len(self.trend) - self.half_window):\n"," inventory.append(self.trend[t])\n"," starting_money -= close[t]\n"," \n"," elif action == 2 and len(inventory):\n"," bought_price = inventory.pop(0)\n"," total_profit += self.trend[t] - bought_price\n"," starting_money += self.trend[t]\n"," ep_history.append([state,action,starting_money,next_state])\n"," state = next_state\n"," ep_history = np.array(ep_history)\n"," ep_history[:,2] = self.discount_rewards(ep_history[:,2])\n"," cost, _ = self.sess.run([self.cost, self.optimizer], feed_dict={self.X:np.vstack(ep_history[:,0]),\n"," self.REWARDS:ep_history[:,2],\n"," self.ACTIONS:ep_history[:,1]})\n"," if (i+1) % checkpoint == 0:\n"," print('epoch: %d, total rewards: %f.3, cost: %f, total money: %f'%(i + 1, total_profit, cost,\n"," starting_money))"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"i7nORY6xY6Br","outputId":"614851a0-ec44-4c1d-ab20-bf3d9aca338f"},"source":["close = df.Close.values.tolist()\n","initial_money = 10000\n","window_size = 30\n","skip = 1\n","agent = Agent(state_size = window_size,\n"," window_size = window_size,\n"," trend = close,\n"," skip = skip)\n","agent.train(iterations = 200, checkpoint = 10, initial_money = initial_money)"],"execution_count":null,"outputs":[{"output_type":"stream","text":["epoch: 10, total rewards: 1781.590144.3, cost: -3782.833740, total money: 7062.900203\n","epoch: 20, total rewards: 1808.720396.3, cost: -6238.727539, total money: 10819.470396\n","epoch: 30, total rewards: 644.675288.3, cost: -10399.220703, total money: 10644.675288\n","epoch: 40, total rewards: 1696.944943.3, cost: -9798.079102, total money: 11696.944943\n","epoch: 50, total rewards: 593.719845.3, cost: -13938.982422, total money: 10593.719845\n","epoch: 60, total rewards: 634.539913.3, cost: -14890.398438, total money: 9645.289913\n","epoch: 70, total rewards: 1586.160156.3, cost: -10411.115234, total money: 11586.160156\n","epoch: 80, total rewards: 368.749937.3, cost: -15986.910156, total money: 10368.749937\n","epoch: 90, total rewards: 733.844603.3, cost: -15352.789062, total money: 8857.304625\n","epoch: 100, total rewards: 645.715148.3, cost: -15976.339844, total money: 10645.715148\n","epoch: 110, total rewards: 994.814937.3, cost: -11198.958984, total money: 4471.054988\n","epoch: 120, total rewards: 1771.289852.3, cost: -6539.313477, total money: 5164.829891\n","epoch: 130, total rewards: 1643.744995.3, cost: -11630.438477, total money: 11643.744995\n","epoch: 140, total rewards: 1877.095029.3, cost: -7103.230957, total money: 9104.255063\n","epoch: 150, total rewards: 481.749932.3, cost: -18531.593750, total money: 10481.749932\n","epoch: 160, total rewards: 638.035152.3, cost: -16995.314453, total money: 10638.035152\n","epoch: 170, total rewards: 1188.049925.3, cost: -13348.065430, total money: 10263.189940\n","epoch: 180, total rewards: 633.885008.3, cost: -14666.952148, total money: 10633.885008\n","epoch: 190, total rewards: 1675.079952.3, cost: -9106.298828, total money: 5977.189998\n","epoch: 200, total rewards: 567.955136.3, cost: -17828.587891, total money: 10567.955136\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"7Udxa6ptY6By","outputId":"76a00589-049d-403a-bf20-b909174829cb"},"source":["states_buy, states_sell, total_gains, invest = agent.buy(initial_money = initial_money)"],"execution_count":null,"outputs":[{"output_type":"stream","text":["day 12: buy 1 unit at price 760.539978, total balance 9239.460022\n","day 19, sell 1 unit at price 758.039978, investment -0.328714 %, total balance 9997.500000,\n","day 23: buy 1 unit at price 759.109985, total balance 9238.390015\n","day 26, sell 1 unit at price 789.289978, investment 3.975708 %, total balance 10027.679993,\n","day 27: buy 1 unit at price 789.270020, total balance 9238.409973\n","day 28, sell 1 unit at price 796.099976, investment 0.865351 %, total balance 10034.509949,\n","day 31: buy 1 unit at price 790.799988, total balance 9243.709961\n","day 33, sell 1 unit at price 796.419983, investment 0.710672 %, total balance 10040.129944,\n","day 35: buy 1 unit at price 791.260010, total balance 9248.869934\n","day 36: buy 1 unit at price 789.909973, total balance 8458.959961\n","day 37, sell 1 unit at price 791.549988, investment 0.036648 %, total balance 9250.509949,\n","day 38: buy 1 unit at price 785.049988, total balance 8465.459961\n","day 39: buy 1 unit at price 782.789978, total balance 7682.669983\n","day 40: buy 1 unit at price 771.820007, total balance 6910.849976\n","day 41, sell 1 unit at price 786.140015, investment -0.477264 %, total balance 7696.989991,\n","day 42, sell 1 unit at price 786.900024, investment 0.235658 %, total balance 8483.890015,\n","day 44: buy 1 unit at price 806.150024, total balance 7677.739991\n","day 46: buy 1 unit at price 804.789978, total balance 6872.950013\n","day 50: buy 1 unit at price 804.609985, total balance 6068.340028\n","day 51: buy 1 unit at price 806.070007, total balance 5262.270021\n","day 52, sell 1 unit at price 802.174988, investment 2.476400 %, total balance 6064.445009,\n","day 53, sell 1 unit at price 805.020020, investment 4.301523 %, total balance 6869.465029,\n","day 54, sell 1 unit at price 819.309998, investment 1.632447 %, total balance 7688.775027,\n","day 56: buy 1 unit at price 835.669983, total balance 6853.105044\n","day 57: buy 1 unit at price 832.150024, total balance 6020.955020\n","day 59, sell 1 unit at price 802.320007, investment -0.306909 %, total balance 6823.275027,\n","day 61: buy 1 unit at price 795.695007, total balance 6027.580020\n","day 63: buy 1 unit at price 801.489990, total balance 5226.090030\n","day 64, sell 1 unit at price 801.340027, investment -0.406403 %, total balance 6027.430057,\n","day 65: buy 1 unit at price 806.969971, total balance 5220.460086\n","day 71: buy 1 unit at price 818.979980, total balance 4401.480106\n","day 72: buy 1 unit at price 824.159973, total balance 3577.320133\n","day 73, sell 1 unit at price 828.070007, investment 2.729291 %, total balance 4405.390140,\n","day 74, sell 1 unit at price 831.659973, investment -0.479856 %, total balance 5237.050113,\n","day 78, sell 1 unit at price 829.280029, investment -0.344889 %, total balance 6066.330142,\n","day 79: buy 1 unit at price 823.210022, total balance 5243.120120\n","day 80: buy 1 unit at price 835.239990, total balance 4407.880130\n","day 81, sell 1 unit at price 830.630005, investment 4.390501 %, total balance 5238.510135,\n","day 83: buy 1 unit at price 827.780029, total balance 4410.730106\n","day 86, sell 1 unit at price 838.679993, investment 4.640108 %, total balance 5249.410099,\n","day 88, sell 1 unit at price 845.539978, investment 4.779609 %, total balance 6094.950077,\n","day 89, sell 1 unit at price 845.619995, investment 3.252829 %, total balance 6940.570072,\n","day 90: buy 1 unit at price 847.200012, total balance 6093.370060\n","day 92, sell 1 unit at price 852.119995, investment 3.392548 %, total balance 6945.490055,\n","day 93, sell 1 unit at price 848.400024, investment 3.059973 %, total balance 7793.890079,\n","day 94: buy 1 unit at price 830.460022, total balance 6963.430057\n","day 95, sell 1 unit at price 829.590027, investment -0.676448 %, total balance 7793.020084,\n","day 98: buy 1 unit at price 819.510010, total balance 6973.510074\n","day 101: buy 1 unit at price 831.500000, total balance 6142.010074\n","day 102: buy 1 unit at price 829.559998, total balance 5312.450076\n","day 103, sell 1 unit at price 838.549988, investment 1.301065 %, total balance 6151.000064,\n","day 105, sell 1 unit at price 831.409973, investment -1.863791 %, total balance 6982.410037,\n","day 106: buy 1 unit at price 827.880005, total balance 6154.530032\n","day 108, sell 1 unit at price 824.729980, investment -0.689984 %, total balance 6979.260012,\n","day 109: buy 1 unit at price 823.349976, total balance 6155.910036\n","day 110, sell 1 unit at price 824.320007, investment 0.586936 %, total balance 6980.230043,\n","day 111, sell 1 unit at price 823.559998, investment -0.954901 %, total balance 7803.790041,\n","day 113, sell 1 unit at price 836.820007, investment 0.875164 %, total balance 8640.610048,\n","day 114: buy 1 unit at price 838.210022, total balance 7802.400026\n","day 115: buy 1 unit at price 841.650024, total balance 6960.750002\n","day 116, sell 1 unit at price 843.190002, investment 1.849301 %, total balance 7803.940004,\n","day 117, sell 1 unit at price 862.760010, investment 4.786547 %, total balance 8666.700014,\n","day 118, sell 1 unit at price 872.299988, investment 4.066996 %, total balance 9539.000002,\n","day 119: buy 1 unit at price 871.729980, total balance 8667.270022\n","day 120, sell 1 unit at price 874.250000, investment 3.873341 %, total balance 9541.520022,\n","day 121: buy 1 unit at price 905.960022, total balance 8635.560000\n","day 123, sell 1 unit at price 916.440002, investment 5.128884 %, total balance 9552.000002,\n","day 124: buy 1 unit at price 927.039978, total balance 8624.960024\n","day 127: buy 1 unit at price 934.299988, total balance 7690.660036\n","day 128: buy 1 unit at price 932.169983, total balance 6758.490053\n","day 129, sell 1 unit at price 928.780029, investment 2.518876 %, total balance 7687.270082,\n","day 130: buy 1 unit at price 930.599976, total balance 6756.670106\n","day 131: buy 1 unit at price 932.219971, total balance 5824.450135\n","day 132: buy 1 unit at price 937.080017, total balance 4887.370118\n","day 133: buy 1 unit at price 943.000000, total balance 3944.370118\n","day 134, sell 1 unit at price 919.619995, investment -0.800395 %, total balance 4863.990113,\n","day 135: buy 1 unit at price 930.239990, total balance 3933.750123\n","day 136: buy 1 unit at price 934.010010, total balance 2999.740113\n","day 137, sell 1 unit at price 941.859985, investment 0.809162 %, total balance 3941.600098,\n","day 138, sell 1 unit at price 948.820007, investment 1.786157 %, total balance 4890.420105,\n","day 139: buy 1 unit at price 954.960022, total balance 3935.460083\n","day 140, sell 1 unit at price 969.539978, investment 4.184397 %, total balance 4905.000061,\n","day 141: buy 1 unit at price 971.469971, total balance 3933.530090\n","day 142: buy 1 unit at price 975.880005, total balance 2957.650085\n","day 143, sell 1 unit at price 964.859985, investment 3.501321 %, total balance 3922.510070,\n","day 145: buy 1 unit at price 975.599976, total balance 2946.910094\n","day 146, sell 1 unit at price 983.679993, investment 4.972892 %, total balance 3930.590087,\n","day 147: buy 1 unit at price 976.570007, total balance 2954.020080\n","day 148, sell 1 unit at price 980.940002, investment 4.023330 %, total balance 3934.960082,\n","day 149, sell 1 unit at price 983.409973, investment 5.715728 %, total balance 4918.370055,\n","day 150: buy 1 unit at price 949.830017, total balance 3968.540038\n","day 151: buy 1 unit at price 942.900024, total balance 3025.640014\n","day 153, sell 1 unit at price 950.760010, investment 1.793343 %, total balance 3976.400024,\n","day 154: buy 1 unit at price 942.309998, total balance 3034.090026\n","day 155: buy 1 unit at price 939.780029, total balance 2094.309997\n","day 156: buy 1 unit at price 957.369995, total balance 1136.940002\n","day 157, sell 1 unit at price 950.630005, investment -0.453424 %, total balance 2087.570007,\n","day 158: buy 1 unit at price 959.450012, total balance 1128.119995\n","day 159: buy 1 unit at price 957.090027, total balance 171.029968\n","day 161, sell 1 unit at price 952.270020, investment -1.976381 %, total balance 1123.299988,\n","day 164, sell 1 unit at price 917.789978, investment -5.952579 %, total balance 2041.089966,\n","day 165, sell 1 unit at price 908.729980, investment -6.854243 %, total balance 2949.819946,\n","day 166: buy 1 unit at price 898.700012, total balance 2051.119934\n","day 168, sell 1 unit at price 906.690002, investment -7.155658 %, total balance 2957.809936,\n","day 170: buy 1 unit at price 928.799988, total balance 2029.009948\n","day 172, sell 1 unit at price 943.830017, investment -0.631692 %, total balance 2972.839965,\n","day 173, sell 1 unit at price 947.159973, investment 0.451792 %, total balance 3919.999938,\n","day 175: buy 1 unit at price 953.419983, total balance 2966.579955\n","day 176, sell 1 unit at price 965.400024, investment 2.450364 %, total balance 3931.979979,\n","day 177, sell 1 unit at price 970.890015, investment 3.310348 %, total balance 4902.869994,\n","day 179, sell 1 unit at price 972.919983, investment 1.624240 %, total balance 5875.789977,\n","day 182, sell 1 unit at price 947.799988, investment -1.214240 %, total balance 6823.589965,\n","day 184: buy 1 unit at price 941.530029, total balance 5882.059936\n","day 185: buy 1 unit at price 930.500000, total balance 4951.559936\n","day 186, sell 1 unit at price 930.830017, investment -2.743735 %, total balance 5882.389953,\n","day 187: buy 1 unit at price 930.390015, total balance 4951.999938\n","day 188, sell 1 unit at price 923.650024, investment 2.776234 %, total balance 5875.649962,\n","day 189: buy 1 unit at price 927.960022, total balance 4947.689940\n","day 191, sell 1 unit at price 926.789978, investment -0.216409 %, total balance 5874.479918,\n","day 192, sell 1 unit at price 922.900024, investment -3.201103 %, total balance 6797.379942,\n","day 194, sell 1 unit at price 914.390015, investment -2.882544 %, total balance 7711.769957,\n","day 195, sell 1 unit at price 922.669983, investment -0.841485 %, total balance 8634.439940,\n","day 196: buy 1 unit at price 922.219971, total balance 7712.219969\n","day 198: buy 1 unit at price 910.979980, total balance 6801.239989\n","day 199, sell 1 unit at price 910.669983, investment -2.119545 %, total balance 7711.909972,\n","day 201: buy 1 unit at price 924.690002, total balance 6787.219970\n","day 202, sell 1 unit at price 927.000000, investment -0.103455 %, total balance 7714.219970,\n","day 203, sell 1 unit at price 921.280029, investment -0.101922 %, total balance 8635.499999,\n","day 204: buy 1 unit at price 915.890015, total balance 7719.609984\n","day 206: buy 1 unit at price 921.289978, total balance 6798.320006\n","day 207, sell 1 unit at price 929.570007, investment 2.040663 %, total balance 7727.890013,\n","day 208, sell 1 unit at price 939.330017, investment 1.583235 %, total balance 8667.220030,\n","day 210, sell 1 unit at price 928.450012, investment 1.371343 %, total balance 9595.670042,\n","day 213: buy 1 unit at price 926.500000, total balance 8669.170042\n","day 215: buy 1 unit at price 932.070007, total balance 7737.100035\n","day 217, sell 1 unit at price 925.109985, investment 0.414637 %, total balance 8662.210020,\n","day 218: buy 1 unit at price 920.289978, total balance 7741.920042\n","day 219: buy 1 unit at price 915.000000, total balance 6826.920042\n","day 221: buy 1 unit at price 931.580017, total balance 5895.340025\n","day 222, sell 1 unit at price 932.450012, investment 0.642203 %, total balance 6827.790037,\n","day 223, sell 1 unit at price 928.530029, investment -0.379797 %, total balance 7756.320066,\n","day 224: buy 1 unit at price 920.969971, total balance 6835.350095\n","day 225: buy 1 unit at price 924.859985, total balance 5910.490110\n","day 227, sell 1 unit at price 949.500000, investment 3.174002 %, total balance 6859.990110,\n","day 228, sell 1 unit at price 959.109985, investment 4.820763 %, total balance 7819.100095,\n","day 230: buy 1 unit at price 957.789978, total balance 6861.310117\n","day 233, sell 1 unit at price 978.890015, investment 5.078469 %, total balance 7840.200132,\n","day 234, sell 1 unit at price 977.000000, investment 6.083806 %, total balance 8817.200132,\n","day 235: buy 1 unit at price 972.599976, total balance 7844.600156\n","day 236: buy 1 unit at price 989.250000, total balance 6855.350156\n","day 237, sell 1 unit at price 987.830017, investment 6.808602 %, total balance 7843.180173,\n","day 240, sell 1 unit at price 992.179993, investment 3.590559 %, total balance 8835.360166,\n","day 243, sell 1 unit at price 988.200012, investment 1.603952 %, total balance 9823.560178,\n","day 245, sell 1 unit at price 970.539978, investment -1.891334 %, total balance 10794.100156,\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"guJCSIkIY6B4","outputId":"f13c82ae-f8cb-43fb-d290-cb19c05ffe30"},"source":["fig = plt.figure(figsize = (15,5))\n","plt.plot(close, color='r', lw=2.)\n","plt.plot(close, '^', markersize=10, color='m', label = 'buying signal', markevery = states_buy)\n","plt.plot(close, 'v', markersize=10, color='k', label = 'selling signal', markevery = states_sell)\n","plt.title('total gains %f, total investment %f%%'%(total_gains, invest))\n","plt.legend()\n","plt.savefig('output/'+name+'.png')\n","plt.show()"],"execution_count":null,"outputs":[{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["
"]},"metadata":{"tags":[],"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"-SBhFpqZiEfx"},"source":["## Q-learning agent"]},{"cell_type":"code","metadata":{"id":"S8Q9zy5hY6CR"},"source":["from collections import deque\n","import random\n","\n","df= df_full.copy()\n","name = 'Q-learning agent'\n","\n","class Agent:\n"," def __init__(self, state_size, window_size, trend, skip, batch_size):\n"," self.state_size = state_size\n"," self.window_size = window_size\n"," self.half_window = window_size // 2\n"," self.trend = trend\n"," self.skip = skip\n"," self.action_size = 3\n"," self.batch_size = batch_size\n"," self.memory = deque(maxlen = 1000)\n"," self.inventory = []\n","\n"," self.gamma = 0.95\n"," self.epsilon = 0.5\n"," self.epsilon_min = 0.01\n"," self.epsilon_decay = 0.999\n","\n"," tf.reset_default_graph()\n"," self.sess = tf.InteractiveSession()\n"," self.X = tf.placeholder(tf.float32, [None, self.state_size])\n"," self.Y = tf.placeholder(tf.float32, [None, self.action_size])\n"," feed = tf.layers.dense(self.X, 256, activation = tf.nn.relu)\n"," self.logits = tf.layers.dense(feed, self.action_size)\n"," self.cost = tf.reduce_mean(tf.square(self.Y - self.logits))\n"," self.optimizer = tf.train.GradientDescentOptimizer(1e-5).minimize(\n"," self.cost\n"," )\n"," self.sess.run(tf.global_variables_initializer())\n","\n"," def act(self, state):\n"," if random.random() <= self.epsilon:\n"," return random.randrange(self.action_size)\n"," return np.argmax(\n"," self.sess.run(self.logits, feed_dict = {self.X: state})[0]\n"," )\n"," \n"," def get_state(self, t):\n"," window_size = self.window_size + 1\n"," d = t - window_size + 1\n"," block = self.trend[d : t + 1] if d >= 0 else -d * [self.trend[0]] + self.trend[0 : t + 1]\n"," res = []\n"," for i in range(window_size - 1):\n"," res.append(block[i + 1] - block[i])\n"," return np.array([res])\n","\n"," def replay(self, batch_size):\n"," mini_batch = []\n"," l = len(self.memory)\n"," for i in range(l - batch_size, l):\n"," mini_batch.append(self.memory[i])\n"," replay_size = len(mini_batch)\n"," X = np.empty((replay_size, self.state_size))\n"," Y = np.empty((replay_size, self.action_size))\n"," states = np.array([a[0][0] for a in mini_batch])\n"," new_states = np.array([a[3][0] for a in mini_batch])\n"," Q = self.sess.run(self.logits, feed_dict = {self.X: states})\n"," Q_new = self.sess.run(self.logits, feed_dict = {self.X: new_states})\n"," for i in range(len(mini_batch)):\n"," state, action, reward, next_state, done = mini_batch[i]\n"," target = Q[i]\n"," target[action] = reward\n"," if not done:\n"," target[action] += self.gamma * np.amax(Q_new[i])\n"," X[i] = state\n"," Y[i] = target\n"," cost, _ = self.sess.run(\n"," [self.cost, self.optimizer], feed_dict = {self.X: X, self.Y: Y}\n"," )\n"," if self.epsilon > self.epsilon_min:\n"," self.epsilon *= self.epsilon_decay\n"," return cost\n"," \n"," def buy(self, initial_money):\n"," starting_money = initial_money\n"," states_sell = []\n"," states_buy = []\n"," inventory = []\n"," state = self.get_state(0)\n"," for t in range(0, len(self.trend) - 1, self.skip):\n"," action = self.act(state)\n"," next_state = self.get_state(t + 1)\n"," \n"," if action == 1 and initial_money >= self.trend[t] and t < (len(self.trend) - self.half_window):\n"," inventory.append(self.trend[t])\n"," initial_money -= self.trend[t]\n"," states_buy.append(t)\n"," print('day %d: buy 1 unit at price %f, total balance %f'% (t, self.trend[t], initial_money))\n"," \n"," \n"," elif action == 2 and len(inventory):\n"," bought_price = inventory.pop(0)\n"," initial_money += self.trend[t]\n"," states_sell.append(t)\n"," try:\n"," invest = ((close[t] - bought_price) / bought_price) * 100\n"," except:\n"," invest = 0\n"," print(\n"," 'day %d, sell 1 unit at price %f, investment %f %%, total balance %f,'\n"," % (t, close[t], invest, initial_money)\n"," )\n"," \n"," state = next_state\n"," invest = ((initial_money - starting_money) / starting_money) * 100\n"," total_gains = initial_money - starting_money\n"," return states_buy, states_sell, total_gains, invest\n"," \n"," def train(self, iterations, checkpoint, initial_money):\n"," for i in range(iterations):\n"," total_profit = 0\n"," inventory = []\n"," state = self.get_state(0)\n"," starting_money = initial_money\n"," for t in range(0, len(self.trend) - 1, self.skip):\n"," action = self.act(state)\n"," next_state = self.get_state(t + 1)\n"," \n"," if action == 1 and starting_money >= self.trend[t] and t < (len(self.trend) - self.half_window):\n"," inventory.append(self.trend[t])\n"," starting_money -= self.trend[t]\n"," \n"," elif action == 2 and len(inventory) > 0:\n"," bought_price = inventory.pop(0)\n"," total_profit += self.trend[t] - bought_price\n"," starting_money += self.trend[t]\n"," \n"," invest = ((starting_money - initial_money) / initial_money)\n"," self.memory.append((state, action, invest, \n"," next_state, starting_money < initial_money))\n"," state = next_state\n"," batch_size = min(self.batch_size, len(self.memory))\n"," cost = self.replay(batch_size)\n"," if (i+1) % checkpoint == 0:\n"," print('epoch: %d, total rewards: %f.3, cost: %f, total money: %f'%(i + 1, total_profit, cost,\n"," starting_money))"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"2Oq5Qn2GY6CY","outputId":"1e5fc5ef-02ed-41f1-d0e7-71cc35a86436"},"source":["close = df.Close.values.tolist()\n","initial_money = 10000\n","window_size = 30\n","skip = 1\n","batch_size = 32\n","agent = Agent(state_size = window_size, \n"," window_size = window_size, \n"," trend = close, \n"," skip = skip, \n"," batch_size = batch_size)\n","agent.train(iterations = 200, checkpoint = 10, initial_money = initial_money)"],"execution_count":null,"outputs":[{"output_type":"stream","text":["epoch: 10, total rewards: 274.710201.3, cost: 0.810730, total money: 10274.710201\n","epoch: 20, total rewards: 161.429929.3, cost: 0.406487, total money: 10161.429929\n","epoch: 30, total rewards: 89.659849.3, cost: 0.225568, total money: 10089.659849\n","epoch: 40, total rewards: 121.209836.3, cost: 0.152499, total money: 10121.209836\n","epoch: 50, total rewards: 94.869810.3, cost: 0.120762, total money: 10094.869810\n","epoch: 60, total rewards: 123.609922.3, cost: 0.097353, total money: 10123.609922\n","epoch: 70, total rewards: 130.149901.3, cost: 0.131718, total money: 10130.149901\n","epoch: 80, total rewards: 55.369871.3, cost: 0.072531, total money: 10055.369871\n","epoch: 90, total rewards: 177.780026.3, cost: 0.062346, total money: 10177.780026\n","epoch: 100, total rewards: 151.249997.3, cost: 0.056566, total money: 10151.249997\n","epoch: 110, total rewards: 101.629942.3, cost: 0.050717, total money: 10101.629942\n","epoch: 120, total rewards: 138.329892.3, cost: 0.075178, total money: 10138.329892\n","epoch: 130, total rewards: 187.559812.3, cost: 0.039170, total money: 10187.559812\n","epoch: 140, total rewards: 125.699889.3, cost: 0.035156, total money: 10125.699889\n","epoch: 150, total rewards: 138.249876.3, cost: 0.403965, total money: 10138.249876\n","epoch: 160, total rewards: 141.329832.3, cost: 0.029966, total money: 10141.329832\n","epoch: 170, total rewards: 179.989928.3, cost: 0.027219, total money: 10179.989928\n","epoch: 180, total rewards: 191.619871.3, cost: 0.025002, total money: 10191.619871\n","epoch: 190, total rewards: 191.929868.3, cost: 0.149151, total money: 10191.929868\n","epoch: 200, total rewards: 113.759886.3, cost: 0.021398, total money: 10113.759886\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"zH3RzMl8Y6Ce","outputId":"fe856e84-28b9-425d-a5be-8789bfa422dd"},"source":["states_buy, states_sell, total_gains, invest = agent.buy(initial_money = initial_money)"],"execution_count":null,"outputs":[{"output_type":"stream","text":["day 4: buy 1 unit at price 790.510010, total balance 9209.489990\n","day 5, sell 1 unit at price 785.309998, investment -0.657805 %, total balance 9994.799988,\n","day 14: buy 1 unit at price 768.270020, total balance 9226.529968\n","day 16, sell 1 unit at price 761.679993, investment -0.857775 %, total balance 9988.209961,\n","day 22: buy 1 unit at price 762.520020, total balance 9225.689941\n","day 23, sell 1 unit at price 759.109985, investment -0.447206 %, total balance 9984.799926,\n","day 28: buy 1 unit at price 796.099976, total balance 9188.699950\n","day 29, sell 1 unit at price 797.070007, investment 0.121848 %, total balance 9985.769957,\n","day 32: buy 1 unit at price 794.200012, total balance 9191.569945\n","day 35: buy 1 unit at price 791.260010, total balance 8400.309935\n","day 36: buy 1 unit at price 789.909973, total balance 7610.399962\n","day 37, sell 1 unit at price 791.549988, investment -0.333672 %, total balance 8401.949950,\n","day 38, sell 1 unit at price 785.049988, investment -0.784827 %, total balance 9186.999938,\n","day 39, sell 1 unit at price 782.789978, investment -0.901368 %, total balance 9969.789916,\n","day 42: buy 1 unit at price 786.900024, total balance 9182.889892\n","day 43: buy 1 unit at price 794.020020, total balance 8388.869872\n","day 44: buy 1 unit at price 806.150024, total balance 7582.719848\n","day 45: buy 1 unit at price 806.650024, total balance 6776.069824\n","day 46: buy 1 unit at price 804.789978, total balance 5971.279846\n","day 48, sell 1 unit at price 806.359985, investment 2.472990 %, total balance 6777.639831,\n","day 49, sell 1 unit at price 807.880005, investment 1.745546 %, total balance 7585.519836,\n","day 50, sell 1 unit at price 804.609985, investment -0.191036 %, total balance 8390.129821,\n","day 51, sell 1 unit at price 806.070007, investment -0.071904 %, total balance 9196.199828,\n","day 53: buy 1 unit at price 805.020020, total balance 8391.179808\n","day 56, sell 1 unit at price 835.669983, investment 3.837027 %, total balance 9226.849791,\n","day 57, sell 1 unit at price 832.150024, investment 3.370103 %, total balance 10058.999815,\n","day 63: buy 1 unit at price 801.489990, total balance 9257.509825\n","day 66: buy 1 unit at price 808.380005, total balance 8449.129820\n","day 67, sell 1 unit at price 809.559998, investment 1.006876 %, total balance 9258.689818,\n","day 68, sell 1 unit at price 813.669983, investment 0.654392 %, total balance 10072.359801,\n","day 71: buy 1 unit at price 818.979980, total balance 9253.379821\n","day 72: buy 1 unit at price 824.159973, total balance 8429.219848\n","day 73: buy 1 unit at price 828.070007, total balance 7601.149841\n","day 74: buy 1 unit at price 831.659973, total balance 6769.489868\n","day 75: buy 1 unit at price 830.760010, total balance 5938.729858\n","day 81, sell 1 unit at price 830.630005, investment 1.422504 %, total balance 6769.359863,\n","day 82, sell 1 unit at price 829.080017, investment 0.596977 %, total balance 7598.439880,\n","day 85, sell 1 unit at price 835.369995, investment 0.881567 %, total balance 8433.809875,\n","day 87, sell 1 unit at price 843.250000, investment 1.393602 %, total balance 9277.059875,\n","day 88, sell 1 unit at price 845.539978, investment 1.779090 %, total balance 10122.599853,\n","day 92: buy 1 unit at price 852.119995, total balance 9270.479858\n","day 93, sell 1 unit at price 848.400024, investment -0.436555 %, total balance 10118.879882,\n","day 99: buy 1 unit at price 820.919983, total balance 9297.959899\n","day 101: buy 1 unit at price 831.500000, total balance 8466.459899\n","day 104, sell 1 unit at price 834.570007, investment 1.662772 %, total balance 9301.029906,\n","day 105, sell 1 unit at price 831.409973, investment -0.010827 %, total balance 10132.439879,\n","day 111: buy 1 unit at price 823.559998, total balance 9308.879881\n","day 113, sell 1 unit at price 836.820007, investment 1.610084 %, total balance 10145.699888,\n","day 116: buy 1 unit at price 843.190002, total balance 9302.509886\n","day 117: buy 1 unit at price 862.760010, total balance 8439.749876\n","day 118: buy 1 unit at price 872.299988, total balance 7567.449888\n","day 119, sell 1 unit at price 871.729980, investment 3.384762 %, total balance 8439.179868,\n","day 120: buy 1 unit at price 874.250000, total balance 7564.929868\n","day 121: buy 1 unit at price 905.960022, total balance 6658.969846\n","day 122, sell 1 unit at price 912.570007, investment 5.773332 %, total balance 7571.539853,\n","day 123, sell 1 unit at price 916.440002, investment 5.060187 %, total balance 8487.979855,\n","day 124, sell 1 unit at price 927.039978, investment 6.038316 %, total balance 9415.019833,\n","day 125: buy 1 unit at price 931.659973, total balance 8483.359860\n","day 126: buy 1 unit at price 927.130005, total balance 7556.229855\n","day 127: buy 1 unit at price 934.299988, total balance 6621.929867\n","day 128: buy 1 unit at price 932.169983, total balance 5689.759884\n","day 129, sell 1 unit at price 928.780029, investment 2.518876 %, total balance 6618.539913,\n","day 130, sell 1 unit at price 930.599976, investment -0.113775 %, total balance 7549.139889,\n","day 131: buy 1 unit at price 932.219971, total balance 6616.919918\n","day 133, sell 1 unit at price 943.000000, investment 1.711734 %, total balance 7559.919918,\n","day 134, sell 1 unit at price 919.619995, investment -1.571229 %, total balance 8479.539913,\n","day 136, sell 1 unit at price 934.010010, investment 0.197392 %, total balance 9413.549923,\n","day 137, sell 1 unit at price 941.859985, investment 1.034092 %, total balance 10355.409908,\n","day 139: buy 1 unit at price 954.960022, total balance 9400.449886\n","day 141, sell 1 unit at price 971.469971, investment 1.728863 %, total balance 10371.919857,\n","day 144: buy 1 unit at price 966.950012, total balance 9404.969845\n","day 145, sell 1 unit at price 975.599976, investment 0.894562 %, total balance 10380.569821,\n","day 149: buy 1 unit at price 983.409973, total balance 9397.159848\n","day 151: buy 1 unit at price 942.900024, total balance 8454.259824\n","day 154, sell 1 unit at price 942.309998, investment -4.179333 %, total balance 9396.569822,\n","day 157: buy 1 unit at price 950.630005, total balance 8445.939817\n","day 159, sell 1 unit at price 957.090027, investment 1.504932 %, total balance 9403.029844,\n","day 160: buy 1 unit at price 965.590027, total balance 8437.439817\n","day 161, sell 1 unit at price 952.270020, investment 0.172519 %, total balance 9389.709837,\n","day 162, sell 1 unit at price 927.330017, investment -3.962345 %, total balance 10317.039854,\n","day 173: buy 1 unit at price 947.159973, total balance 9369.879881\n","day 176, sell 1 unit at price 965.400024, investment 1.925762 %, total balance 10335.279905,\n","day 180: buy 1 unit at price 980.340027, total balance 9354.939878\n","day 184, sell 1 unit at price 941.530029, investment -3.958830 %, total balance 10296.469907,\n","day 185: buy 1 unit at price 930.500000, total balance 9365.969907\n","day 186: buy 1 unit at price 930.830017, total balance 8435.139890\n","day 187, sell 1 unit at price 930.390015, investment -0.011820 %, total balance 9365.529905,\n","day 189, sell 1 unit at price 927.960022, investment -0.308326 %, total balance 10293.489927,\n","day 197: buy 1 unit at price 926.960022, total balance 9366.529905\n","day 200, sell 1 unit at price 906.659973, investment -2.189959 %, total balance 10273.189878,\n","day 203: buy 1 unit at price 921.280029, total balance 9351.909849\n","day 205: buy 1 unit at price 913.809998, total balance 8438.099851\n","day 210, sell 1 unit at price 928.450012, investment 0.778263 %, total balance 9366.549863,\n","day 213, sell 1 unit at price 926.500000, investment 1.388692 %, total balance 10293.049863,\n","day 229: buy 1 unit at price 953.270020, total balance 9339.779843\n","day 232, sell 1 unit at price 969.960022, investment 1.750816 %, total balance 10309.739865,\n","day 234: buy 1 unit at price 977.000000, total balance 9332.739865\n","day 239, sell 1 unit at price 992.000000, investment 1.535312 %, total balance 10324.739865,\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"oo3iCOu2Y6Ck","outputId":"7e0e93de-c530-4052-c08c-a2f89dcec299"},"source":["fig = plt.figure(figsize = (15,5))\n","plt.plot(close, color='r', lw=2.)\n","plt.plot(close, '^', markersize=10, color='m', label = 'buying signal', markevery = states_buy)\n","plt.plot(close, 'v', markersize=10, color='k', label = 'selling signal', markevery = states_sell)\n","plt.title('total gains %f, total investment %f%%'%(total_gains, invest))\n","plt.legend()\n","plt.savefig('output/'+name+'.png')\n","plt.show()"],"execution_count":null,"outputs":[{"output_type":"display_data","data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAA34AAAFBCAYAAAAomn1FAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzs3Xd4VFX6wPHvnZJGCiGF3hQ4NCkCC4gidl0VVFiwi66ioqKuZW1rxbo/XdeK3VUsYAN2UewFUVCaIMKhB0ghIYT0TDLl98e9EyZlkkkjIXk/z8MDmXvvuWdmbnjue99z3mP4fD6EEEIIIYQQQrRetubugBBCCCGEEEKIpiWBnxBCCCGEEEK0chL4CSGEEEIIIUQrJ4GfEEIIIYQQQrRyEvgJIYQQQgghRCsngZ8QQgghhBBCtHIS+AkhRBBKqTeVUrOboN3jlFK6sdsVLZtSaqdS6uQg2+Yopf5xqPskhBCi7XA0dweEEKK+lFI7gSu11l81xf5NRWu9FFCN3a5S6ltgMBAO7ADu1VovtLadCdxpbS8B/gfcrLXOr9RGB0Cb3dTHBjnPHODigJecQKnWOsbaPhc4CWgHZABPaK1fDTj+SuAOoBPwI3CF1jrN2hYO/Bs412p3GXCN1jo14PjzgfuAHlb707XWS5VSvaz3XRjQt8e11g+F8Nn5j3Vqrd2NvX9ttNbXNLSNhlBKfQfMDfyeDuG5J1jn7lbDPjcDNwCJQAEwD7itus9eKTUGeAgYAXiA74BZWuv0SvuFAb8BMf5zK6WOAz6r1GQ7YIrW+iPr2nsA89p1WfveoLXOs44fADxvnTvL6uMnAees6dq/EHjSavdyrfW31utHAm8Dx2mtPcE+IyGEqI1k/IQQovW4EeistY4FZgBzlVKdrW1xwGygCzAA6Ar8s5o2Hgc21nQSrfU1Wuto/x/gPeCDgF0eBXpZ/ZgIzFZKjYDym/xHgElAB8zg6b1K72EsMMTqaw7wrH+jUuoUq4+XAzHAeGB7pS62D+hfrUGfOCwsAo62rqnBwFBgVpB944GXgV5ATyAfeKOa/W7DDM7Kaa2XVrq2z8IMNJdYuywDxmmt44AjMB+gzwZQSjmAhZgPVTpw8Hewn7V9AkGufevYx4CjgesJuOaBZzAf0kjQJ4RoEMn4CSEOS0qptzEzPv9VSnmAB7XWTyilJmIGHl2BtcC1WuuNNez/AXAcEIn59P9arfWGEM5vB54ALsO8sXwS82bNqbV2K6UuB24HumHeXD6utX7JOnYCARkOKxP5HHAp5o3qEuAyrXWJUioReBM4FvACG4Djtdbeyn3SWq8L+NGHmTHrDqRrrd8N2FaklHoFM3MR+J6Owbypfhn4a22fgXVMO2Ay5g2yvx+Bn5/P+nMksMra7wP/Pkqph4BUpdSRWuttQG/gc631Xmv7POCpgPYewPzulls/p9I4frD+PqCUAjgFWAHcBVyFeX0swczu5AbZPxN4BTMo8QGfA9dprQ/UdnKl1JvAHq31Pf7rA/gX8HfMrNVdWus3lFKjMYOLrv5AQCl1LvCA1nqIUsqGed1dBbQHvsbMmO5XSkUArwJnAHZgC+b3MQvzd2CMUupp4E2t9fVKKR9wHXAzZobqacxr8W3M62QJcLHWutTqx1mYQVAv4A/rvOusbTup5hq3+vEZEK6UKrA+jn7+LJifdW34GZi/C32q+yy11hUydkqp54DvK73WGzNr/TfM7yyYy4APtdaFVtu7K233BPSjP+bDin9prX3AN0qpZcAlwD+o4drHDC5TtdbpSqmvMINKlFJTrNdX1NBHIYQIiWT8hBCHJa31JcAu4Gzr6fwT1pP194CbgCTgU8xAL6y6/a2mPgP6AsnAauCdELtwFeYN9DDMp/TnVNqeiXmjF4uZnfqXUuroGtqbCpyOGfgMAaZbr98C7LHeT0fMQMQXrBGl1P+UUiWYQct3wMogu47HDCL9x9kxb8yvr6n9akzGDGx/CHxRKfWCUqoI2ASkY34XfkY1/x5s/f0aME4p1UUpFQVchDX0zurjSCBJKbVVKbVHKfWcUiqyUp9SrG1vWIFzKMZbf/uzhT9jfgfTgRMwb8SjMT+jYPsbmA8d/FnV7sD9IZ6/sk6YWdqumEH480qpeCsAKARODNj3QsAf2N+AeS0ez8GM6fPWtsusNrsDCcA1QLHW+m5gKXC99V6uD2j7NMxhi2MwA8qXMQOm7pjf2QUASqnhwOvA1VbbLwGLrKG7flWucSugOgNIC8i0VQj6/JRSFyql8oB9mMH1S7V9iJYK17rlWczfpeJgB1kPNaYA/6n0+rFKqVzMBz6TMQPiYAwOXtv+nyv/ezDm71CCUqob5kOEDUqpGOAezCHaQgjRYBL4CSFak2nAYq31l1rrMuD/MDM1xwQ7QGv9utY6X2vtwrxJH6qUigvhXFOBf2ut92itczCHaQW2u1hrvU1r7dNafw98gZlVCeYZrXWa1no/8F/MgBKgDOgM9NRal1lD0YIGZlrrszCHQP4Z+KK6zKA1XPIy4N6Al2cBK7TWq2p535VdBrxVuU9a65lWP44DPsactwRmpmeqUmqIFbDdixloRlnbtwC7MTN5eZgB1IPWto6YWcwpVrvDgOGYN8dgBgSjMDNKI6zzhxrIV+ci4Cmt9XatdQHmDfj51rC8KrTWW61rz6W1zsLMVB5fz3OXYWY2y7TWn2JmhPzzQt/jYMDl/679w2WvAe62rkv/NT3F6nMZZlDWR2vt0Vqv8s9Nq8ETWus8K0v1O+Y1td3Ken6G+fmDOazxJa31Cqvt/2B+52MC2gp2jYdEa/2uNdSzHzAH2FvbMUqpIZjX2G0Br50L2APn3gVxHuY1VSFbqLX+0Rrq2Q1zuPRO/ybMBz63KaWcSqlTMb9//7Ud9Nq3fk+vBT4EbsV8sPQAZoA6RCn1rVLqc6VUYBAphBB1IkM9hRCtSRcgxf+D1tqrlNqNmTWpwsogPQz8BTOj5g+SEoHcEM4VOOyrwhAwpdQZmAVI+mE+ZIsC1tfQXkbAv4us9sG8sbwf+MIaUviy1voxamAFvZ8ppW5USm3VWi8K6NcYzOzQFK31Zuu1LpiB34ia2q1MKdUDmIB5k1pdPzzAj0qpizFvap/RWn+llLoP+AgzG/o0ZuZkj3XY85jFaRIwM1u3YwYYozmYnXlWW4U6lFJPYQZ+d1vBmT/DuVcpdT2QrpSK0ZWK2ISowvVk/duBGYBWoZTqiFmY5jjMoNOGmXGrj2xdsXBJEWbGEczv7yel1LWYwclqrbW/nz2BT5RSgQG/x+rz25iZuveVUu0xh5PebV0vwQQGV8XV/Nwp4LyXKaVuCNgexsHrGIJf43Witd6ilNoAvID5/qullOqDee3cqM2CSv4s3hOYwXJtqn2oEdCPVKXUEuB9zPmHZUqpczCDtb9jXovzsR561Hbta62/xhyai1JqKGZ2+zbMwPJYzO/uVSoG00IIETIJ/IQQh7PKN2RpwFH+H5RSBubNUmqQ/S/ELLRwMubNVRzmjbpB7dIxn/j7dQ84bzjmzd2lwELrhnBBiO1WYAUstwC3WE/7v1FK/WrdJNbGgTm3zt+v4ZhFMq6odPyfMLOKf1jBZSQQqZTKIGAuWTUuAZZprSsXV6mxH1rr57GGH1rDc+/BzCaBmQW628oKoZR6FnhQKZWotd6nlNpDxe+xpmGp/m2hjG6prp00zIDGrwfgxgx+qnuY8IjVzlHWnLpzODg0tNForf9QSqVgDpEMHOYJ5gOIK7TWy4Ic/gDwgDKrkn6KmaV6jboN763ObuBhrfXD9Ti2PueucE1VppTqCXwFPKS1fjtgU1/MOYhLrWs9DIizrvUxWuud1vHdMR9qXF2XflhzGsuzvEqpnwgYKlrLte8/xsC8bvxVTO1a6xSrj0Nq6Y8QQgQlgZ8Q4nC2F6sIgmU+cIdS6iTMOWc3Yj5t/ynI/jHW9mzMjNwjdTj3fOBGpdRizMzU3wO2hWFmrbIAt5X9O5VKN3ihsApmbAK2YWYhPRzMTAbu1x9z7tR3mMHJNMy5Tbdb2/3FOG7QWv+30uGfYd4M+03DCoprCPrADGwfr9SPZMz5Z//DzAidjDks0T80MQKzGMYGzGD5Zcwhs/7M2K/ApcpcXqAImIk5/2uftf0N4AYr01KGWXjkf1bbo4EDmMNF4zGrIX5nDUtEKXU/MEFrPaGa95KF+bkeAWy2XnsP+LtS6jNr+yPAPG0W76lu/xjM7yhXKdWVgOGFTeBdzOt7DOaQVL85wMNKqcusYCEJOEZrvVApdQLm0MU/MIfRlnHwWqr8u1FXr2BmGr8CfsH8fZoA/BBCtnUv5vy2OP93VZkyl0FYpLXOVEoNxBx2+3mQfbsC3wDPaa3nVNr8OwEPaTCHgT+HOU83sMLnJcBPlYrKoJS6CFiqtd5lBZcPY2XprO1DMK8HG+a12xmzIE4o177flZhZ3LXWEN1I6z33oGoFWyGECJnM8RNCHM4eBe5RSh1QSt2qtdaYhSeexbzBPRuzmEtpdfsDb2EO30vFvBleXuUMwb2COW9vHbAGM3viBjzWje4szOAwBzOIWhSkndr0xcxcFAA/Ay9oa32vSgzMIaGZmDewNwLTtNarre23YA5nfU0pVWD92QBgzUnL8P/BDF7KrH+jlOph7d/DfzKl1FjMjGfgMg5gZm+uxRy+loM5z/KmgOGmEZhBSwFmgPAzZsVDv1sx1xncYr2PP2Ou6ef3EGZwuBlz2Yk1mDffYAYuSzCHz/2OGdRfEHBsd8xy/FVorYusdpZZ18cYzGIlb2M+RNhh9euGGvZ/ADOAyAUWY85tbCrvYWaWvgkIisEcaroIc2hwPuY1Pdra1glzDlke5mf3vfX+/MdNUUrlKKWeqWtntNYrMYf8Pof5vW/lYIGi2o7dZL2f7dZnWd0Q0HHAeqVUIebv2qeYxVkAUEptsIIyMAOnI4D7A671Autc7krX+n7Aa/0c+JDjUioVdbEMxBxmW4h5LWkqDnW+BHM0QCbmWpanWHMtofZrH2UWI7rR/7o13Pd6zEB2Dtb1J4QQ9WH4fA0d3SGEEMLK6s3RWvesdWfRLJRSa4GTtNbZzd0XIYQQ4lCTwE8IIerBqsp3AmbWryPmnL7lWuubmrVjQgghhBDVkKGeQghRPwbm0L4czOGGG6m4PIIQQgghRIshGT8hhBBCCCGEaOUk4yeEEEIIIYQQrdzhuJxDODAKs2pWTWXGhRBCCCGEEKI1smMuGfMrZhXrWh2Ogd8oYGlzd0IIIYQQQgghmtlxwI+h7Hg4Bn7pADk5hXi9LWt+YkJCNNnZBc3dDdEKybUlmpJcX6KpyLUlmpJcX6IptfTry2YziI9vB1ZsFIrDMfDzAHi9vhYX+AEtsk+idZBrSzQlub5EU5FrSzQlub5EUzpMrq+Qp75JcRchhBBCCCGEaOUk8BNCCCGEEEKIVu5wHOpZLY/HTU5OFm53abP1ITPThtfrbbbzH85sNjuRkdFER8dhGEZzd0cIIYQQQohWpdUEfjk5WURERNGuXadmCxwcDhtutwR+deXz+fB43OTnHyAnJ4sOHZKbu0tCCCGEEEK0Kq1mqKfbXUq7drGSLToMGYaBw+GkffsESktLmrs7QgghhBBCtDqtJvADJOg7zBmGDTgsqicJIYQQQghxWGlVgV99FRa4WPDOWooKmm9+oBBCCCGEEEI0FQn8gFXLUkjfncvKZSmN1uaxx46kqKio0dp79dU5fP31F43WXjCbNv3BAw/c02Ttf/rpf7nnntubrH0hhBBCCCEai6e4GF8rKd7Y5gO/wgIXm9bvBWDT+owWm/W78sprOOmkU5v8PP37D+S++2Y3+XmEEEIIIYRoyYq3bGbbjdeRs+TT5u5Ko2g1VT3ra9WyFHw+c16Zz+dj5bIUxp/Wt1Hafu+9t1m69HtcrhKuvvo6Jkw4ifT0NK688hIWL/4aoMLPTz75OJ07d+bCCy8FYPPmTdx33128++5HPPLIA/TvP4DJk6fx2msvsWtXCoWFBaSlpdK1azceeuhxIiIiKCgo4NFHH2DHju0kJSWTmJhEfHwHrr/+pgp9KykpYfbs+9i5czt2u4MePXry0EOPsXr1Sp5//t+89trbAHz00Tw++OB9oqNjGDt2HB9/PJ/Fi78u7/fEieexfPkySkpKuOOOexk6dBhut5vbb7+J3NxcXC4XAwcO4rbb7sLpdDbK5yqEEEIIIURT2//FEvB6wWgdubLW8S7qyZ/t83rMwM/r8TVq1s9ms/Hmm+/y+ONP8cQTj5CTs7/G/SdPnsrChR+XB6IffTSfc8/9S7VFa7TeyH33Pcw773yI2+3miy8+A+CNN14hJiaWd9/9iIceeox169ZWe64VK36mqKiQuXM/4D//eY/bbruryj5bt27h7bff5MUXX+fVV98iPz+/wvbc3FwGDx7CG2+8y+WXX8WcOc8AYLfbue++2bz22tu8/fY8PB4PixcvrP0DE0IIIYQQogVwZe+n8Le1YLcTe8wxzd2dRtGmA7/AbJ+fP+vXGM46axIAPXr0ol8/xYYN62vcv1ev3nTp0pXly38iLy+PZct+4M9/Prvaff/0pzHExMRgGAYDBw4mNXUPAGvWrCw/JjY2juOOO77a4/v06cvOnTt48snH+eabrwgLC6uyz5o1qxg7dhzx8fEAnHnmxArbIyOjGDfuOAAGDTqK1NRUALxeL++9N5fp0y/kssvOZ/XqlWzZsrnG9y6EEEIIIURLkfn1N+D1Ej1sOI649s3dnUbRZgO/ytk+v8bO+lVmt9vxeg+es7S04nmmTDmfTz75kMWLFzF+/AlER0dX205YWHj5v202Gx6Pp0796Nq1G3PnzmfUqNGsXLmC6dMvwOVy1amNsLCDQzfNPrgB+PLLJaxbt5YXXniFt96ax7nnTqnyPoUQQgghhGiJfF4ve7/4EoC48ROatzONqM0GftVl+/waK+u3ePEiAHbv3sWWLZpBg46iQ4cE3G43e/bsBswgKdDYsePYtSuFefPe4bzzptb5nMOHj2DJksUA5Ofns3TpD9Xul5m5F5vNzvjxE5g16xYOHMghPz+vwj7Dhh3N8uU/ceDAAQCWLPlfSH0oKMgnLq49UVHtKCgoqPIehRBCCCGEaE6lGens/r/Hyfn6S3yVEiiFv6/HlbUPZ1ISUQMGNlMPG1+bLO4SLNvn58/6jRzXk6joqkMgQ+XxeLj88gspKSnhttvuIj6+AwA33ngLN998He3bt2fs2GMrHGOz2TjjjDNZvvwn+vSpe5GZ6dOv4pFHHuDCCyeTkJBI//4Dqs0abtu2lTlzngPA6/Vw8cXTSUxMYteugwFv3779uPDCS7nmmsuJimrHyJGjaNeu+gxkoNNPP4ulS3/gwgsnEx/fgaFDh9c5myiEEEIIIURTKVi9iuJNGynetJG8ZT+SfPGlRB5xJAC5P3wHQNxxx2PYWk+ezAiW9WrBegE7srMLKgyZzMhIoVOnniE18MPnm9m4LiNo4AdgsxsMGNK5ThU+HQ4bbnfD1/m46aaZTJx4HieeeHKdj3W73Xg8HsLDwyksLGDmzCu5/vqbGTVqdL36UlRUSFRUOwBee+0lUlP3cO+9D9WrrVDU5XtsS5KSYsjKyq99RyHqQa4v0VTk2hJNSa4v0RBZ898n54slYBhgxUOOhAScSckUb9YYhkHvJ57CERfXzD2tns1mkJAQDdAb2BnKMW0y45eRmldj0Adm1i8jNfcQ9ci0adMf3HvvnfTrp5gw4cR6tZGfn8ctt8zC6/VSWurilFNOr3fQB/Dii8+xfv1vuN1ldOnSldtvv7vebQkhhBBCCNESeArMhwZJ51+IJzeXnC+W4M7Oxp2dDUDCseNabNBXX20y8Jt6xcjm7kK1+vcfyPz5DVv2ID6+A6+/PreRegS33PL3RmtLCCGEEEKIlsBTUACAs0MC8SedQsLEcyjL3kdZVhaevDx6nDCOA61splKbDPyEEEIIIYQQbZensBAAu1ULw3A4COvYibCOnQBwxsZAKxtK3HpmKwohhBBCCCFECPxDPe1Blk5rjSTwE0IIIYQQQrQp/qGetjYU+LXJoZ7Tpp2D1ptq3U+p/sybt+AQ9EgIIYQQQghxKPi8XrxFRWAY2K3q9W1Bm8z4DRkyDKfTWeM+TqeToUOHH6IeCSGEEEIIIQ4Fb2Eh+HzYIqMw7Pbm7s4h0yYDvxkzZmKrZTFGm83GjBkzD1GP4NNP/8s999wOwOrVK/nrXy8BYN++LG644epD0ofHHnuI335b02TtT5lyNtu3b22y9oUQQgghhKhN+fy+mLYzzBPaaOCXlJTMxInnBs36OZ1OJk06j8TEpEPcs6oSE5N49tmXDsm57rjjH5LlFEIIIYQQrZqnwKro2a5tBX5tco4fmFm/RYs+qXZbQ7N9JSUlzJ59Hzt3bsdud9CjR08eeugxAD777H98/PEHeDweoqOjufXWO+jRo1fQttLT07jyyktYvPhrAI49diQzZszkhx++Izc3l+uum8WECScB8N13X/Pyyy8QHh7OCSeczMsvv8AXX/xAVFRUhTaXLv2OV155EZvNjsfj5uabb+foo0dy/fUzuOCCSxg37jiysjKZPfs+srOz6dq1Kz4fjB49hsmTp/Hww/cTFhbG7t27yMzcy6BBR3HPPQ9gGAZffLGEDz54D7e7DIDrrruJkSP/VO/PUgghhBBCiMbUFit6QhsO/PxZvwULPqKsrKz89cbI9q1Y8TNFRYXMnfsBAHl5eQD89tsavvnmS55//hXCwsL4+edlPProg7z44ut1ar9du3a8+upbrFu3lnvvvZMJE05i//5snnjiEV566Q26d+/BvHnvBD3+1Vdf4vbb72bw4CF4PB5KSoqr7PP00/9k+PARTJ9+JRkZ6Vx66fmMHj2mfPv27dt4+ukXsNlsXH75RaxcuYJRo8YwevQYTjnlNAzDYNeundx440w++eTTOr0/IYQQQgghmoqn0KzoKYFfJUqp/wMmA72Ao7TWv1uv9wP+AyQA2cClWustDdl2qFWX9WuMuX19+vRl584dPPnk4wwfPoJjjjkWgGXLfmDr1i3MmDEdAJ/PR35+Xp3bP+mk0wAYNOgo9u3LwuVy8ccfv9Ovn6J79x4AnHnmJJ599l/VHj9ixEieeeYpJkw4kTFjjuGII/pU2Wf16lXcdNNtAHTq1JkRI0ZV2H7ccRMIDw8HQClFauoeRo2C1NQ93H//3WRlZeFwONi/P5vs7H0kJCTW+X0KIYQQQgjR2Dz5VuDXxoZ6hjLHbwEwHkip9Poc4HmtdT/geeClRth2SFWe69dYc/u6du3G3LnzGTVqNCtXrmD69AtwuVz4fHDmmRN58813efPNd/nPf97j448X17n9sLAwAOxWFSKPx1On42fNuoW///0eHA4n//jHHUGHvNYkPDys/N/mkFGzD/fffzfnnvsX5s6dz+uvz8Vut1NaWlrn9oUQQgghhGgK5Rm/mJhm7smhVWvgp7X+UWu9O/A1pVQycDTwnvXSe8DRSqmk+m5r+Fupn8AKn41VyTMzcy82m53x4ycwa9YtHDiQQ35+HuPGHceSJYvJzNwLmAHbpk0bG3w+gIEDB7N5syY1dQ9gziUMZteunRx5ZB+mTr2AU089g40b/6iyz/DhI8rb2Ls3g9Wrfw2pHwUFBXTu3AWAxYsXSdAnhBBCCCFaFP8cP1sby/jVd45fdyBVa+0B0Fp7lFJp1utGPbdlNeyt1I8/6/fhh/MarZLntm1bmTPnOQC8Xg8XXzydxMQkEhOTmDFjJnfc8Tc8Hi9udxknnHAy/fsPaPA5O3RI4NZb7+TWW2cRERHBMccch8PhICIiosq+L774HHv27MJudxAdHc2dd95bZZ8bb7yF2bPv44svltClSxcGDBhEuxB+OWbN+ht33XUrMTExjB59DHFxcQ1+b0IIIYQQQjQWT0HbnONn+Hy+kHZUSu0EztJa/66UGgG8pbUeFLD9D+BizOCuztu01qtD7HMvYEflFzds+IMuXXqG2ERFWVmZ3HrrzTz55NMtYgmH+iosLKRdu3YA/O9/C1m0aCEvv1y3wjF+JSUlOBwOHA4H+/Zlcfnll/Dcc3Po2bNXI/a4qrS0FAYNGtik5xBCCCGEEG3XujvuJn/jJgY//CBxgwfVfkDL1hvYGcqO9c347Qa6KqXsVtbODnSxXjfqua1OsrML8HoPBq1erxe321uvNxMfn8hrr70NUO82ABwOW4OOb6j333+Xb7/9Go/HTWxsHLfffne9+7NzZwqzZ9+Hz+fD43Fz+eVX0bVrjyZ/f16vl6ys/CY9x+EoKSlGPhfRZOT6Ek1Fri3RlOT6OvxNm3YOWm+qdT+l+jNv3oJGO68rJxeAfLed0iDXUEu/vmw2g4SEumUs6xX4aa0zlVJrgQuAudbfa7TWWQD13SYa5rLL/spll/21Udrq06cvb775bqO0JYQQQgghRGVDhgxj+/ZtFZZWq8zpdDJ06PBGPe/B5RzaNWq7LV2txV2UUs8opfYA3YCvlFIbrE3XADcopTYDN1g/08BtDRLqsFXRMvl8XsyksBBCCCGEaO0CiywG01jFF/18Xu/BOX5S3KUirfUsYFY1r28CRgc5pl7bGsLhCKOwMI927WIxDAkeDif+4aT5+TmEhVUtRiOEEEIIIVoff5HFBQs+qjbr519qLc5mpzQjnbBOnRt8Tm9xMfh82CIjMRz1nfV2eGo17zY+PomcnCwKCg40Wx9sNhteb/PN8Tuc2Wx2IiOjiY6WKqBCCCGEEG3FjBkzg64pbXi9nLJrNztu/xsAXWbdTPSQoQ06n38ph7aW7YNWFPjZ7Q4SExv+FKAhWvokUCGEEEIIIVqSpKRkJp45kU8Wfozb4yl/3WEYTOiQSJzbjeF04isrI+eLJY0Q+JnDPG1tbCkHCGGOnxBCCCGEEEI0hLesFHd+XoXXfD4fBWtWcVr2foxKo+bsDgfX3z+b3v/8F0c8+TRGeDjFmzbiSk1tUD/a6hp+0IoyfkIIIYQQQoiWKf3lORSuWU1kP0Xc8Sdgj44me8HHlOzYTixwUq8j+Xr3TsrcbnNu37lT6DHuuPLjY8d1TTNDAAAgAElEQVQcQ+7333Lgm6/oeMllAPjcbly7dxHesxdGLUVi/Npy4CcZPyGEEEI0isICFwveWUtRQWlzd0UI0YL43G6K1q8DoHizJuOVOaT+6/8o2bEde0wsSedfxN9efBWb3Q5UX8mz/YknA5D38zI8RYV4XS72PPVPdj38IAVrVoXcl/I5fhL4CSGEEELUz6plKaTvzmXlspTm7ooQogVx7d6Fz+3GmZRM8sWXEt6jJ474DiSeN4Xej/2T+JNPIblTJyZOPBfDMJg06TwSE5MqtBHetSuR/QfgKy0l9/vvSXvxOYo3awCKt2wJuS/ewkIA7NExjfcGDxMy1FMIIYQQDVZY4GLT+r0AbFqfwchxPSGploNEoygscPHlwo2cOmkgUdFhzd0dIaoo2bEdgMg+fWk/4UTaTzix2v1mzJjJtm1bg67b1/7EkynetJF9H803X7DZwOvFtWd3yH1py1U9JeMnhBBCiFq58/LI//UXfEGWLVq1LAWfzweYBRsk63foSKZVtHTFVuAX0bt3jfslJSXz+utzq2T7/KKHDsPRIQEAW2QkXWbeAIBrz+7y/39qUz7HL0YCPyGEEEKIKjJef4X0l17gwDdfVdlWWOBi07oMvB7zxsvr8bFpfQYFeSWHupttTuVMq8yvFC1RyXYr8DviyAa1Y9jtJE75C+Hde9D1xr/RbugwbFHt8BYU4MkNbS3v8sBPMn5CCCGEEBW5UlMp+n09APs/W4y39GBw4fP5+OnD5Xjd7grH+Hw+fvgy9Hk3on4k0ypamspFnjyFhZTtzcBwOAjv1r3B7cf+aQw973uQyD59MQyD8G7dAEIe7tmWq3rKHD8hhBBCADBt2jlovanW/fqc8zsffvo1ALvf+4DtaQn4bBVvKbweH2t/3c2go7vIvLMm4s/2Vc60jhzXUz5z0WwChx6PP60vJTt3ABDeoyeGo/FDj/Bu3SnerHHt3kO7wUNq3d8/x8/WBou7SMZPCCGEEAAMGTIMp9NZ4z4Ow+BIw4a3tJTcZUtZu34/Poxq9/V5JQPVlAKzfX6S9RPNoSx7HyUpO6sdeuwv7BJxxBFNcm5/FjGUjJ/P58NTXtWzXZP0pyWTwE8IIYQQgFlRz1bLIsg2w8bkxCQy33mb3e/OJz2mLz6bvdp9PVYGSuadNb7K2T4/r3zm4hDzud3sfuxhdj10P98/v7C8AJT/IUTJ9m0ARPRumsAvrA6Bn7ekBDwejPBwbM62lxWXwE8IIYQQgFlRb+LEc4Nm/ZxOJ2dOOJH2zjDyli1le+wgCBL0+UkGqmlUl+3zk89cHEoFa1fjzsnBZY9ktycBf+Ff/0OI3JRUACJ6N6ywSzDhXbuCYVCakY6v0lzjytryUg4gc/yEEEKIVivUOXtK9WfevAWAmfVbtOiTavez2WzMvPMfFL34PK5dKeTHdccbZJinn9fjIyM1t+6dF0EFy/b5yVw/cSjlfv89AOlHnws5FR8E+bxetjr7MDC6BGdS0yzsaQsPx5mcTNnevZSmpxPePXgBGW8bLuwCEvgJIYQQrdaQIcPYvn0bZWVlQfdx2u0MHTq8/Gd/1m/Bgo8qHOd0Opk06TySkpJx/fUq8n7+ifNPP77KDdSOO2+nLCuTXrMfpetR/cjKym/8N9bG1ZTt8/Nn/caf1vcQ9Uq0drU+SFq5HICE9t2Ycvo/APB6IT22LwM7lmIYNT8kaojwbt0p27sX157dNQZ+bbmiJ8hQTyGEEKLVCmXOnmHtV/m4yjdpNputfL/wrt1ImjK12psnR3w8AO6cnAb0XNQkIzUvaLbPTzKtorGFUvzJZrPTMbHikE4fsD1KNWHPai7wUpqRwb6PP+TAt19TbM03tLfBip4gGT8hhBCi1QqWvfNzGAYnJCbTISa2ynGnqIF8/vtvuH2+8mxfYmLtQ7Uc7SXwa2p/uXwEaS88S+Ga1cQeO55O069gx523UZaVRa/ZjxLWqXNzd1G0QjUNA/czDBsjBp1Z4TWfzcHOXAdFBaVNNvQ42Fp++atXsff1V8yiLgHaYkVPkIyfEEII0arVlPWz2WxM7tSZwvXryl8rLHDxyVurOD0yrnz2XmC2rzaO+PYAuA9I4NcYyvZlceDbbyrcuB745isK16zGFhlJwtkTAXB0SDD3z85uln6K1q+24k82mx3V+xiiIuOqbPNhNGnBoYOVPfeY5/N62ffxh6S/8CzekhLaDR1GzJixODt2xHA6iRowqMn60pJJxk8IIYRoxeKAk3ofyRd6I+6AeWFOp5MzRvyJ9m4PBatXETNyFGDOH8tIy8feYTgn993Lki065GwfHMz4lTVjxq+wwMWXCzdy6qSBh0Vxk1CL8PQ74kjeeup59n0wD4CO06/AmZAIgDMhgWLM9dSEaCo1Zf2qy/b5eb1NO/TYmZCIER6BJ/cABWtWkb1oIa7du8BmI3HyX4g/9fTy4es+n69J5xu2ZBL4CSGEEK1Y+ovPMyksgi8NAwICP5vNxtU330rBPx+ncN1avGVlFLu81uLLBumxfbn08iPY+8FbIWf7ABzxHYDmzfitWpZC+u7cw6a4SShFeByGQe+iYtKefwaf203cCScRM2LUwe1WAOjeLxk/0XRqKv507rlTuOWuic3SL8NmI7xbN0q2bSXt+WcBMwve6Yorieo/oOK+bTToAxnqKYQQQrRa7twDuHal0CE6mklnn1M+RMs/Z6+LGkB49x54S0oo2rjBrBbpsRZfNgyy6Mnrr88NOdsHzV/cxb/UAXDYLGQeShEem83O5I6dcOfsJ7x7D5KmTquw3dnBDLhlqKdoarUVf2ou4T16AGA4HHQ4exK9HnqkStDX1kngJ4QQQrRSxVs2AxB5ZF+uvv6m8uAi8CYt+ugRAOz7ZS2bfkvHayUFfYadTRsy6xw4lRd3aaaMX+BSB4fLQua1zZ1yOp2cM/kv9Lv8StoNGUrna6/H5qw4hLU84yeBn2hiSUnJnD5qDA4r+KtL8aem1OGMM0k45zx6PfQoiZPOxRYe3qz9aYkk8BNCCCFaqeLNGoBIpcqDC8MwKtykRY8YCcC6bS68bneF4+sTODni4sAw8OTm4vN4GuFdhK6wwMWmdRnlSx34FzI/3LN+/kC9/YQT6TrrZsKSk6vs40ywirvIUE9xCJw/eEi9ij81JWeHBBLOmthkC8W3BhL4CSGEEK1U0WYr49fPXENrxoyZDB8+osJNWljnLng79yI9pg8+W8Wp//UJnAyHA3tMDPh8lB440AjvInSBQ1X9DvesX6jZFIc11NOdk4PP661xXyEaKnr/fk5ITKryIEm0bBL4CSGEEK2Qp6CA0tQ9GA4HEb17A2ZwUXnOnmEYpA05C2z2atupV9bPGu5Zmr2/nr2vOzPbtxcvFeceHXZZv3rOnbI5w7DHxoLHI0tpiCblc7tx7d7F5M7dGD50eIvI9onQSFVPIYQQohUq3roFfD4ijjiyynywQIUFLramFFcJmPz8gdPIcT1DXhrBER+Pa1eKGfjFd6pX/2sT6hIICe27MfXMew+LCp9JScmcdvQoPl3xE26fr85zp5wJiXjy8nBn78dpresnRGMrzUjH53aT3LUrrz/6z+bujqgDyfgJIYQQrVD5/L5+/WrcL7AYSjB1zfqVZ/yacL7ZkCHDghZD8bPZ7HRMPPKwyvpN7tKt3nOnHOXz/GQtP9F0XLt2ARDeo2cz90TUlQR+QgghRCtTWODi662RuOyRRPZVNe6bkZpXXgwlGK+nbosv+5d0cDXhUM8rL7sCw1tzvwMXlD4c5vp5igqJTN3DCUnJ9Zo75c/ySWVPUR9FG/+gZMf2Wvcr2bUTkMDvcCRDPYUQQohWZuX328kx4tiRMIxBfWoe3jj1ipGNfv7AOX7tGr11k3P970zo0IFv9mXhriZjabPZUb2PISoyDqh78NocijZsAI+Hi8aNZ1/KjjrPnSrP+EngJ+qoLCuLPU/9E8PppNeDD+MMeOBQmpEOhkFYR3PYtivFfIAS0VMCv8ONBH5CCCFEK1JY4EJvyATDID2mLyVlBlGHeDkrf8avdH/DM36lmZnseeoJOpx6Ou1PPBkAn9dL7g/fMblzN77N3gfVBH5er4c/tn7PH1u/r/D6I8+YfyvVn3nzFjS4f42pYN1aALqPHsvr9z1U5+Od1lp+EviJusr7eRn4fPhKS8l8/13aT7+GLxduZPzIGLKffgxsdnrNfhRHXBwl/qGe3SXwO9zIUE8hhBCiFVm1LAWffwikYWuW4Y3+jJ9rX8MDkIJVK3Hv20fWh/Nx55oZu6JNGynLyiSpUycmTTwXR5CKpME4nU6GDh3e4L41VN6Kn0mb8wKutDR8Xi9F69cD0G7IsHq1V76kg8zxE3Xg8/nMwA/AMChcu4blC1eTvjuXn95fiq+sDJ+rhH0fzacsKxOfqwR7+/bmmp3isCKBnxBCCNFKFBa42LT+4JIGXoxmKWriiG8PmBm/2grH1KYkZScAvtJS9i/+L4UFLhYv3onLHkncccdz9XU3YnfWbQBTS1hw2utykTn3LQpW/sKu2feTNe89PAX5OJOSCOvcuV5tHsz4NfxzF21HydYtlGVl4YiPJ3HKVFz2SLbuKgYg1dkdX7cjMRwO8pf/zIFvvwYgQub3HZYk8BNCCCFaiZaygLktMgojLAxvSQne4uIK2zzFxez/9H+40tJCasuVsqP83we+/5YVn60n292OHR2GEXvs+CoLnzudTo48sk/Qip91XSKhqeSv/AVvcTFGeAS+0lIOfP0lYGb7DKP6pTVqY4uKwhYRgc9VgrewsDG7K1oxf7YvZvRY4k8+lZTu48ofHPgMg/SjzyH+1NMBOPCVeZ2G9+zVLH0VDdPgwE8pdaZSarVSar1S6nulVG/r9Z1KqU1KqbXWn9MCjhmjlPpNKbVZKfWFUiq5of0QQggh2rLyBcwrJXqaYykDwzDK5/lVXkx8/6IF7Pv4Q3bNvp/cH5fWmJnyFBRQlpWF4XQSM+pPuAhjy9Zcc/5iXD/KnGbpmBkzZmKzmbc0NpuNRx75Z/nPlbWEbB9A7vffAZB8wYV0unIGtogIAKKHH13vNg3DwOHP+jXhUhqi9fCWlpL/6y8AxB4zjqJiN2lh3fHZzCy6z7CzefMBIo4/FXv79uXHRfTo0Sz9FQ3ToMBPKRUP/Ac4X2t9FPAK8GLALlO01sOsP59bx9iAucB1Wut+wA/AYw3phxBCCNHWmXP7PNVua46sn3+enzvnYODn83rJX2neZPpKS9n75mtkvPYyXper2jZKdpl9Du/eg4Rzp7AjYdjBOi4B8xf9WT//EghKDTCzgI6KQ0BbQravsMDFx6+vIDclDVtkJDGjRhM75hh6PvgwXW/6G1H9BzSofad/nl+2zPMTtStcuwZvcTHhvXoT3qWr+f9IpYyzz+dj9cq9JE2ZWv5aeI9eh7inojE0NOPXB9irtd5s/fwpcJpSKrGGY0YAJVrrH62f5wBTa9hfCCGEEDUws30ZeH3VDxFsjqxfeeAXkPEr2bYNd04Ojg4d6Dj9rxhhYeQv/5l9H31QbRuuneYwz4hevSiLiiM9tl95JsLro8J7mjFjJsOHjyjP5s2YMRObvWLRl5aQ7Vu1LIW9mcXsiB9KzJhjsIWbJVedHRJoN3hIg9t3WEHtgW++wVNU1OD2ROuW+5M5zDP2mHEH5whXWtfT//+HfdAI4sYfT+yx48sLCYnDS0OXc9gMdFJKjdJa/wpcZL3uz/++o5QygB+Bu7TWB6xt5Y8dtdb7lFI2pVQHrXXIdZ8TEqIb2PWmkZQU09xdEK2UXFuiKcn1dXj75Yed1ty+GuaG+XxsWJ3GnycfdUj6VNSzK/krwJeynaRz/gzA9k/WAJA8/lh6n/tnOg7sw7rb7yTvpx9RV12GIyqqQhvZ6XsASDpqAL+uTsew2yHwpjTgPSUlxfDf/y4s35SUFMO0adN49+23cft8OJ1Ozj//fAYMOKKJ33lw+Xkl6PV7AYP02L4knzK40X/3os49i99X/kLRxg2kPT6bAXffSWTXLo16jpZE/u+qv4LtOyj643cMh4PeZ5zEF1+mVLs0CgA+H3+sSefPt8w6tJ1sZq3t+mpQ4Ke1zlVKTQP+pZSKAD4DDgBu4Dit9W6lVDjwNPAccHFDO+yXnV2At/JEhmaWlBRDVlZ+c3dDtEJybYmmJNdX85k27Ry03lTrfrWtObdjU0Z5Jc9gPB4fO7buO2TftWPoKPjwYzK/+56ok06jNLI9i9fbGGSPxDFomNmPDp2J7Kco3qzZ/t/PibfW6fPL3bIVgAMRiaz9ZTeeSpkIj8fHml92M+joLkRFh1XpwyWXXMn777wDHg82w+CSS65s1mv9h88347WK7/gMG0vX5DE+uZH7ExVP97vuJfW5f1Ocuoe1t9xO99vvIrx798Y9Twsg/3fVn9flYtcTT4HXS+zxJ5CaXVrt75hfbb9rrVFLv75sNqPOibAGL+Cutf4K+ApAKdURuA3YprUutLa7lFIvAIusQ3YB5TVgrWGh3rpk+4QQQojWYMiQYWzfvo2ysrKg+wSuOddYgeKhENaxI8knnkDmV1+TvWghG2OHk+NMJKXLGAb36g1Uej8rlwdtq+usa5l44p3VbvPPXxx/Wt8q25KSkjll4FF8un4tp48a3exz+8zhuObPPsPGpvUZjBzXs9FvpJ1JSfS48x7SX3qBwvXrOPDd13S8ZHqjnkMc3rI+nE9pehphnTqTNGUqP36XUusSIDX9ronDQ2NU9exk/W0DHsGcs4dSKs762wDOB9Zah6wCIpVSx1o/XwNUP7hfCCGEaMUCq1EGEzgvbciQYUGXKfBrKYuTA3SfNgXsdvat+o0tOwrBMEiL6ElxoRnohvJ+HDYb7WN6Vpl35Ffb/MXpZ02if3QMFwwf1bA300C/fL4Br9td4bWmLLpji4igw9mTAHPB+2nTzmHYsP61/pk27Zwm6Y9oOQrW/Ubut1+D3U6nGddgCw8nIzUv6O+Yn9fjIyM19xD1UjSFBmf8gNlKqXFAGPAFcAfQBfhIKWUH7MAfwEwArbVXKXUJ8JI1PHQnjTgEVAghhDhc+KtRLljwUbVZv8pVKGfMmMmiRZ/U2GZLKGDiF5GcTNz441nxexE+rxdsNnyGUZ41COX9YNgZOfjMGnepKRPRqU8fHug/iHZFzbeuXfaGLWzenIPPqHjb5Q9amyLrBxDRsxe2iAjK9u5lsBpQp+yyaJ28Lhd733gNgMRzJpcvxD71ipHN2S1xiDTGUM8rq3l5OxD0fw6t9U/AoZldLoQQQrRgNQU/lYO4ugaKLUHE8aeTnrL+YDVOL+XBTm3vx2EYHNX3GCLCYms8R02ZiLDkTgCUZWY28J3U388fL8dn71Jt7Z2mHD5n2O1E9lMUrvuNi8aM43+ff1rj/i3poYFoGiUpO/Hk5xHWuQvxp53e3N0Rh1hjZPyEEEIIUU/lwc/HH1DmObgOX7Agri6BYkvw24YDYKu4rEJgsFPj+wEevucGugweXO/zO5OTASjbl4XP68WoZWhtY8vdk0GqvUt54FtZU2f9ovoPpHDdb0Slpx92Dw1E43Pt2Q1AxJFHHvLfBdH85BsXQgghmtlfL7kco1JhhWBBnD9QbImLk1eWn1dirgtWKdUVOC8v2PtxGAYndOxM54EDG9QHW3g49vbt8bnduPdnl7+et2I5RZt1g9oOxa9fb6a2GuRNOdcvaoD5+RVt2shVV10bdE5pS3xoIBpfqRX4hXdrfVVeRe0k8BNCCCGame2nZUxISMRhmAGS0+GoMYibMWMmRqVooiXeuP/w5ZaglQIDg51qF1sHLhozrlGyEmHJHQEo3bsXAFdqKhmvzCHjlZca3HZtMjOLg2b7/JqyaEZY167Yo2Nw5+ynvdfH2WecXX6d+bXEhwbNzZWWxv7PFuM+kNPcXWlULgn82jQZ6imEEEI0UGGBiy8XbuTUSQPrPFzPtWc3B775islduvPd/uzyNef8QVyoSzhERES2qBv3wgIXv/2yu9ZqnNXN9XPY7ZyQ1JEe449vlL44kztSvFmb8/wGQdGG9QC4c/bjKSrEHtWuUc5Tmc/nY0zW57j376fnfQ8S3r1Hk5ynJobNRmT//hSs/JWiTX/wlz59WVhpn5b40KC5Zbz+Cq6dO8j+70I6nHEm8aeeji08vLm71SA+rxfXnj2ABH5tlWT8hBBCiAZatSyF9N25IQ/XKyxwseCdtRTmlZD5ztvg9dL7tNM5fdQYDOCUgUeVB3GhLHkAMH78hAa8g8a3alno64JBxaUt7A4Ht779Pu0rLeheX2HWPL/STDPjV/jHhvJtpRkZjXKO6pRl7sW9fz+26GjCunZrsvPUxj/cs2DtGuy//MIJiUk4rM/aYbdLtq8SV1oarp07zCq0paVkL/yEnf+4k7Ls7NoPbsHKsjLxlZbiiI/HHl23hb9F6yCBnxBCCBEif8AWuGZcYYGLTevNgGLT+gz27S2osk9l/kBx2bwfKd6yGXtMDAnnnMcVF15C/+gYpvY5WOEx1LX+brzxlga+u8aVkZqHpw7rgvmzfoZhMGnSeSQlJTdaX5zWUM+yzL14y8ooDpjbV5qe3mjnqaxo00YAolT/Zi2kEdV/gNmf39fjLSrkonHjsdnNQV82n4+rrrq22frWEuUv/wmA2HHH0u22Owjr2g33/v3kfPl50GNcaansfesN3Lktd507/zDPsK6S7WurZKinEEIIEaLAzJ6//P6qZSnmGnWYGayvFm0kJ7uIv/xlEqnpO2pts0dUNO++8Ar2qHZ06T+QB/oPwpGXV769tiUPDMPgzDMntriMzdQrRpKUFENWVn7Ix8yYMZNt27Y2+rDDsI7+wC+Tkm1b8ZUeDMpLM5ow8NtoBX79G1agpqGcyR1xxHfAnbMfgD6TpzLJ6eDDD95nQkIS9v35LPgijXcW3MeWLbUXvFGqP/PmLWjqbjcLn9dL3vKfAYgdO46ofopOV1zJrofuJ++nZSROnoLNWXU4d+bctyjerDGcYSRfcFGt58n9cSnZixaQfMGFRA8f0ejvozrlwzy7S+DXVknGTwghhAhB5cxeUUGp+dpv6VhxH/MXP8hjz1/CS+9fHVLQZ7PZ6dJzCNHDzKVvnYmJGA4H7pwcvCUl5fvVlPULCwtrcdm++kpKSub11+c2ehDrtLKHZVmZFP5uzu9zdEgAmi7w83m9FGsr8BvQvIGfYRhEDTCzfuE9ehI1+ChmzJjJ4G7dmdKlK79+u4X03bkkJxyB3V5zTqC1L/JevFnj3p+NIyGBSCvzHtGzF+E9e+EtKqRg5coqx5TsSinPIuet+Bmf2x20fZ/XS9aH89n75mu492ezf8lnTfNGquHavQuQ+X1tmWT8hBBCiBAEzlnzz03z+Xx4vV78z1E7Jh5BTl46Xq+nhpYOMgwb/QeeR1FBKVHRYRg2G87kZErT0ijdm0FEz16AGRCd/eeJLFj4EW5/lIlUYwyVLSICe1x7PLkHyPvZHMbX/oQT2ffRB5Q10VDP0rRUPPn5OOLjcVoZx+bU/sSTce3ZQ/IFF2EYBklJycx5/F9sf+Z51uSEgQFHdjmB5XxVYztlZWXMn/8e8+e/V2Vba8gE5vmHeY45BsNmq1pcaeXyao/rFRnFE4OG4C0ooGDdb8QcXTWL53W5SH/1JQrXrAa7HcMwKNm2ldKsTMLqOLTZLNSym+LNmpId24k+eiQxI0bWeEypFHZp8yTwE0IIIQKEWkUz4dNuTDntHwQOnjl60FnoHT8DtQd+Npsd1fsYIiNiKwwdDevY2Qz8Mg4Gfl6Xi7N9PhaGuNafMNX4XQbcwKvNG5k3v3EDFv/8vsj+AzAqLZ/QHCJ69abnvQ9UeC1K9Wdn0gjzgYYBkWFxqN5j2bR9WcgPL/waMxPYkCq5DeEtLaVglZnRix17DGAWV9q+fVu1w6wD7SwuYqr/mrqi+uCwd1x7Hu/bH1tUFF2uvZ7cH5eSv+Jn8pf/TMLZk0LuZ1lWFrsem40nYD5h/q+/YFw/i+ghw6o9xlNcTNm+LAyHo3zos2h7ZKinEEIIESCUKpo2m52OCUdCpaW520WaN842m736AwMYho0Rg86ssJg5gLNTJ6DiEMT0V+YQuWcPJ3bthtNh9k2yfbUL5bt0GAaD+6pGPa8rLZX8FebNv7+wSktUVOIhLfrICusMHj3oLAyj7reHjfkQoq5VchtL4do1eIuLCe/Vm7BOnYEQiytBeZXUYByGQd+wcJxJyfS48x6iBgwkdsxYwBoeWksF3EAHfvgOT24u9rg4YseOI3bsOPB6SZ/zAsXbtlZ7jD/bF9alK4ZD8j5tlQR+QgghRIBQbvT8QRtUzeSEcuPsz/ZFRcYBFZc1CLMCv7K95jIDrtRUCteuwRYRwY2PP4XNbrPakGxfbUK9ab/0lFMb5XyFv68n5cH7SLn3bkp2bAebjagBgxql7aawalkKVPp8gj28MAwj6GfpsNk4+/QzG+UhRHVzaQ+V3GVLgYPZPjhYXCnYAwSHYXBch8TyKqnB2ICLx42nx13/IKxzFwCiBg7CHhNDWUYGrpTQglyf10v+CrP4TOerZ9Lpr1fR8YoriT32OHylpaQ+8y9caWlVjju4cHvzLSsimp8EfkIIIUSA2m70KgdtlYWS9TsYOJoCs37+TIN/fbn8lb8AED1yFF0GHVVhyQPJ9tWs1pt2u50JicnEFBU3+Fxel4u0F5/HtSsFW2QkceOPp8ed9+Ds0KHBbTcFf4AVMGW0XHUPL5xOJ44gmSKbz8dpmVkUrF3T4H5VN5e2ruqSPfMrzcigaMPvGE4nsaPHVthW0wMEGzD9T2OZdM55NQaHpw4ewuC778UeE1P+umG3EzNqNGBm/UJhFp/ZX6H4jGEYdLxkOu2GDMVbWEjGqy9V+QwOBn4yv68tk8BPCCGEqKSmG73KQVt1asr6BQsc/Te5YX7qu3MAACAASURBVB2toZ57M/D5fBSs+hWAmJF/Ku/b8OEjJNsXopq+S7vNxpQuXRulsmfhb2vxuUoI79WbI576Nx0vvZyI3kc0uN2mEhhgVVb54YXdsDPxjLOZeOZEHJXmKzodDk7u15+4sjLSnvs3+z75qN59KixwsWldBl5r/cfKw6BrU7x9OykP3sfOu+/AnZ9X+wEBDnxjFrWJGTO2yuLmwR4gOAyDCYnJHHnueTVfZw4HNz71LLZqAsMYa7hn/i8rypeFqYm/OJG/+IyfYbfT+eqZ2GNjce1KoWjD7xWOKw/8uveo9Ryi9ZLATwghhKjEf6Nnr5S1qy3b51f5xtkwbOWBYLDA0b+YuT06Glt0ND6Xi6I/NlCaloatXbvyuWJNteRBaxXspt3pdHLmCSfR3hnWKIFf3i/mnL7YMWOrXeetJSnP9nmCZ8YqPLyw2TgruRsTHWFVBjfb7HZufnYOiX+ZBnY7+xf/l/1LPq1Xv1b+mILXU7GoTChZP6/LRda899j96EO4dqVQlrmXffPnUVjgYsE7a2sNHD3FxeQu+xGA+BNPqXaf6gI7uzOMm578N7Gjxwa/zhwOJp07haQgVTsjeh+BMykZT+6B8oJANb1P/4OgwOGofrbwcOJPOQ2A/Z8tLn/drABqzfGToZ5tmgR+QgghRDWu+uvVVJ7DF0q2zy/wxtlmszNYHYNhGEyePIVbHpjItXccX+HPd2v+xSPPXMywYf2Z8t1XTF25nHEXTWHqyuVM+f5rho8czLBh/Zk27ZzGfqutXnU37TabjRnXzgKgND29XsMD/TxFhRT9vh4Mozwz25LVlO3z8z+8AIP+vcaya7dBxI7tnNipa5UCQ0nJHelw2hl0uuIqAPZ9OJ/cH5fWqU+FBS70b2n4Kt2ahpL1S3vuGXK+/ByAuAknYjgc5P28jBX/WxtSkZi8ZT/ic5UQ2U8FXdy8cmDndDqZdM55dAmoolntdWa315idNwyjPOuXvfATfJ7g1VQLfluDt6SkQvGZyuImnIgtMpJivam80Is/G22Pi8MRExu0fdH6SeAnhBBCVKNddjYnJXTAYQVvTqeTsaNOJjq6fbX72+wGg4Z3KQ/kbn1gIuedN7k82Hvq2UdqHKIZSgXK1r54dlOp9qZ90nl07NUbW1Q7vMXFePJya2kluILVq/C53USq/jjaV399tCQZqXk1Zvv8jh50Fp2T+nD04LPIjUgGu53r7n8oaIGh2NFjSDr/IgD2vvUG/9/encfHWZf7/3/d98wkmextku57S+8udC+UHWQVWltalsIRqnI0YlXwHD0HPZ6f+1GPHpdz3FB/p+oBVJBCAVERwYKUtcXuzd0tTdss3Zs9k8zM/f1jliZpZjJZJ5m8n49HHzRzL/OZyYdprlyfz3XVbd8a9/5NZYeo274NX0UFbz2/jWCg46WO8bJ+gYZ6GvbswnC7mfD5LzDynjUMX7Ycn8vLvtJ6IH6RGCcYjC7zzL+u42xfROvArqPiSrHmWWfZ+WHXXo8rP5+mA/s59WzstiK1kWWeHWT7IlxeL/nvuQ4IZf0a9++j8ucPh17fNdfGHYekPtVzFRER6UDt5re5bfQ4Np45Df4gpmkybex1MX9gjmQmFl8+Mdp7rLh4LQcO7Ke4eC2FhUWsW/dozOcrLl7Ls88+HXdMquTZfa3f38j7aBgGaaNHh5poV1bizute0Fb71lsA5F58Sa+Nty/deV/8Rt+tfYbl+M+eoeqX68i7pZici5ewfPlKnnzy8Q6DmmHX30CgtobTzz/HyfVPxuwr13ysisNf/yoEAqEgbeLtbdpKtNbR/1sRvsOHAUgbN56MSZNDY7jpZt54tzranzASOEZ6ZbbWsGsnLceP4R5eQPb8+L9UiQR2sV47dDzPOuPKyWH0R+7n6H/9J6f/8Hu81gyyZrWtBuuvqaF+105wuci5eEnc++VfdwNn/vwn6rf+nUa7BKe5mdwrrmT4suWdjkVSmzJ+IiIy5K1efSvz589o8+e93/sWH93+Ls1+PwA+n4/nXv7vuPdpn5noyn68zipQqm9fz0Te3/YVUc9VUe3ePj9/9VkaSnaDy0X2osQDqsHEnT+McZ/6dDTg6KzA0PBlyzHcbprLjxJoqO/wnLMvvwSBAJ7CIsrGXIrTQWuU1mJl/ZrKDgGQMXFS9LFGX5CKjAnRQDLectHIEtH891yH4eq8/2Znrz3WPOtMpjUjFJg5DlX/+zP81W0z0GdfehGCQbIunNPpck13Xh65V1wFQLCxkaz5Cxh57wcxjPjvsaQ+BX4iIjLkJdS03XAxsiB+lcZIgZbuils2Xtm+Huvoh/aeBn61m98BxyHrwjm4srJ6ZZwDXWe/0DA9HtLD2bemgwfOOx5obKQm3DNvzMc/ScP4WThx2p9A7P+3Iv3v0idOjD62ZVMZTrsgp6PAsenQIRp278JITyfvyqviPn9EIr/M6W7l3YL3rcA73SJQXc2xX62L7sP019Rw5i9/BmD4LcsSutfw996MmZlJ5sxZjC7+WEJBraQ+LfUUEZEhL5Fllp40N//z8Nf6NOMWyRZs2LCelpaWc8+tbF+viPzQ3lra6HDgV9nNwO/t0DLPnEGyzLO/eKdOo2n/Phr37yPrwrltjtW8/hrBpkgxlQnced/5LQaq1v2cmtc3UXT3+xkWZ+9d0+FDwLmMX6yKpa2Xizo4vPjMHuaeDVVizb/6Pee1cOiJjuZZIgzTZNSHP0rZFz9P/fZt1Ly+ibzLr+D0H36P4/ORNW8+3qnTErqXp7CIqd/9HzDNNm0fZGjTTBARkSGp9fLOG264Cp/PF/Pc/gy8YlagVLavT0Qyfr6jRxPqo9aa/+xZmg7sx/B4yJ7X8V62oco7LRSgNO7f3+bxRIupZEyZCkDTgfMzhhH+hkZajh0Dl4u0MWOB+BVLnWCQzZvK2LKpjMoj1ew8amC43Qy78abEX1gf8wwfzoi77wHgxG8fo/HAfqo3vgxA4a2runQvw+1W0CdtaDaIiMiQlMjyzoj+DLy6WxlQusczYgTuYcMJVJ+lca/dpWvrd2wDIHPmLMyMjL4Y3qCVMSUU+DWVHmzToqBh105ajh3DPXx43GIqkcxW48H9Mc+pLy0FxyF97DhMj6fT/oTBIOzZXkHJ9ioAKnOmkbbkatz5w7r8+vpSzqWXkTVvPsHGRo5++5s4fj85Fy9R83XpMQV+IiIyJMXbT9ea293/gVdnZeOl9ximSe4VVwJQ/eorXbq2bnso8MuaO6/XxzXYufPy8BSNwPH58JUfjT5+5qVwtq+TYippY8dhpGfgP3kSf/XZDs+pP3AQOLe/L5H+hEF/kEC4bYSDwcFhc+OenwyGYTDy3g9iZmbh+P1gmhQsX5nsYUkKUOAnIiJDUmdVNCNcrv4PvLpbGVC6J++KK8EwqHt3M4G6uoSuCbY007BrJ6DAL5aM8HLPpv37APBVlNOwczuGx0PelVfHvdYwTTImxy4QA1AXDvwi+/sS6k9omBCuIOqYLvbtr4nbHD5Z3Pn5jLxnDRgGeVdfQ9qoUckekqQAFXcREZEhq7OiLsnI9kW07gEofctTUEjmrNk07NpJzZuvM+z6Gzu9JtIfLX38BDzDC/phlIOPd+o0at94ncYD+8m/9npO//5ZAHKvuDKhYireqdNoLNlD44EDZC9YdN7x+oPhjN+ESUDn/Qlf+dNeSrZVEmwVG8br8ZdsORcvwTt9Oq7cvGQPRVKEAj8RERmyIpm1p9c/gb+Dwh7JyPZFdLcyoHRP3pVX07BrJ9V/e5X8625o0/PMcRzKv/8dnOZmxn7q05jp6dRtCy/znKdsXyzeqaFgqvHAfnwV5dS+8za4XAy/eWlC12dMDRV4adi1kzse+QX7yko7PnHVLdG/WtYMHn98w3mn1Nf5sHceaxP0Qfzm8APBQNt/KIOblnqKiMiQVV/nY1z2Eox2PwyapqlllkNM9vwFuHJyaC4/SlPpwTbHmisqaNi1k8Z9eznxu8dxHIf6bVsByJobu0DJUJc2dixmRmif3vFfPwqOQ94VVyWcIfVOmQaGge/IYSY31OPupAG5x+Nh3ryOvx9xq33GaA4vkmoU+ImIyJC1+bUyGhq9zB83G3e40ITH42Hp0uXdasAsg5fhdpN72eXA+UVeInv5AKo3vsyZPz6P//QpXLm5ZEya1J/DHFQM04y2ZWgs2RPK9iXYgBzAlZ3NiHs/QPaixbz/8qswOwn8YhVC6rTaZzjrNxD3+on0JgV+IiIyJNXX+bC3VwIGMxfcjRkO/EzT5MEHP826dY8q2zfERAqO1L7zFsFWfR3rd4cCv4xpoaWLJ596EggVdVGftPgyWjUcz7v8SjwFXdsPmX/VNYz52CeY96WvsXzFKtxGx+93vLYniVT7VNZPhgJ9WomIyJC0+bUyguH+YllZw7lo4XVa3jnEpY0aTcaUKTg+H3Xb/g5AsKUl2t9vzP0fxztjZvT8rLlq2t4ZbzhYDmX7EtvbF8tH1z6Ay9NxeYp4bU8SqfYZDDhUlVf3aHwiA52Ku4iIyJATyfY5RijLF3QMpo25lvq5x7W8c4jLWXIpTQcPUvvWm+RefAlN+/fhNDeTNm487vx8Rt33Ecq+8gUIOmTNmp3s4Q54mdYMcpZcSsbUqXh6+AuVoqIRLF+xig1PP0mL3x99PF62Dzqv9ikyVCjjJyIiQ86WTWU47cr7ZXrzuO8fvqRs3xCXs/hiME3qd+4gUFdHfaRX3+xQkOcZPpxJX/oaE7/4FcyMjGQOdVAw3G5Gf+SjDLv2+l65X3Hx2uiy7Ih42T4ROUeBn4iIDCnRQg+0LRShAg8C4M7LI3PmLAgEqN3yDg27dwGQOevCc+fk53d5r5r0jkgLFo/HA3Se7RORc3q81NOyrKXAVwEPcBr4oG3bpZZlTQd+BRQAp4A1tm3vC18T85iIiEhfSqSs+0Bs5iz9J/eSS2nYtZOzL79Ec/lRDI8H7wXTkz0sCSsuXsuzzz4NKNsn0hU9yvhZljWMUAB3l23bc4CfAz8JH34Y+JFt29OBHwE/bXVpvGMiIiJ9QmXdJRHZCxZipKXRXH4UAO90CzNt4DX3HqoiWT8VYxLpmp4u9ZwGHLNte2/46z8AN1mWNQJYCPwm/PhvgIWWZRXFO9bDsYiIiMSlsu6SCDPDS/a8cxU7M1XEZcApLl7LkiVLlO0T6YKeLvXcC4yyLOsi27bfAd4ffnw8UG7bdgDAtu2AZVkV4ceNOMdOJPrEBQXZPRx63ygqykn2ECRFaW5JXxoq8+vksfqEyrqfPFY3ZN6TvjZY30fXjdey5523ARh3xRKyBunrSFVFRTmsX78+2cOQFDdYP79i6VHgZ9t2tWVZq4HvWZaVAfwROAv0eVR26lQdwWD8f7z7W1FRDidO1CZ7GJKCNLekLw2l+bVqzQIAmg6XcfgrXyRtzFgmfeU/Ojx3qLwnfWkwzy1n/DTSxozBSEunPnMYDYP0daSywTy/ZOAb6PPLNI0uJ8J6XNzFtu2/AH8BsCxrJPAvwCFgrGVZrnBGzwWMAY4QyvjFOiYiItLn/KdPA+AePjzJI5GBynC7mfilr4X+bhidnC0iMvD1uJ2DZVmjwv81ga8DD9u2XQZsBe4On3Y38Hfbtk/Ytn081rGejkVERCQR/jOhwM+jwE/iMEwTw1TnKxFJDT3O+AFfsyzrciAN+DPw2fDj9wO/sizrC8AZYE2ra+IdExER6VMtkYzfMAV+IiIyNPTGUs8Px3i8BFjS1WMiIiJ9LZLxU+AnIiJDhdYviIjIkKM9fiIiMtQo8BMRkSFHe/xERGSoUeAnIiJDiuM4+M+cAbTUU0REhg4FfiIiMqQEamtx/H7MzCzM9PRkD0dERKRfKPATEZEhRfv7RERkKFLgJyIiQ0p0f9+wYUkeiYiISP9R4CciIkNKyxll/EREZOhR4CciIkOKX83bRURkCFLgJyIiQ4qat4uIyFCkwE9ERIaUSMZPPfxERGQoUeAnIiJDivb4iYjIUKTAT0REhgwnGKS+poktY2+m2ZOV7OGIiIj0GwV+IiIyZARqayjNu5CzGSN5952qZA9HRESk37iTPQAREZHetHr1rdh2SafnFf55PM9e/jyZ2Wn9MCoREZHkUsZPRERSyty583G54v9e0zRdjCycwuZNZf00KhERkeRS4CciIinlnvd/GDDinmMYJgtnLaVkRxUNdc39MzAREZEkUuAnIiIppcxuYMaUyzBNV4fHTdOFNfkyMr15OI6jrJ+IiAwJCvxERCRl1Nf5KNlxjAWzlmIYHf8TZxgmi2YvBSAYcJT1ExGRIUGBn4iIpIwtm8pwHIcsbx7W5EvPy/q1zvZFKOsnIiJDgQI/ERFJCZFsXzDgALBw9rLzsn6ts30RyvqJiMhQoMBPRERSQiTbF9E+69dRti9CWT8REUl1CvxERGTQq6/zUbK9Kprti2id9eso2xcRDDhUlVf3+ThFRESSRQ3cRURk0NuyqYxA0Dnv8UjWb/f+vzFjymVcdNlMrrrpgiSMUEREJLkU+ImIyKBXcaQazo/7gFDW70x1JQtnLVVWT0REhiwFfiIiMuiNGZ9H9ekGgkEwnAAz543h6ltmRI9/huVJHJ2IiEjyaY+fiIgMatFqnsHQ147hwt59QlU6RUREWlHgJyIig1r7ap6gKp0iIiLtKfATEZFBq33vvgj15hMREWlLgZ+IiAxaHWX7IpT1ExEROUeBn4iIDEqxsn0RyvqJiIico8BPRGQAq6/zseGxrQpeOhAv2xehrJ+IiEiIAj8RkQFsy6YyKo9UK3jpQFV5TcxsX0Qw4Kh3n4iICOrjJyIyYEWWMgKU7Khi8eUTycxOS/KoBo4771sc/XvZV76I73AZ4x/6PN4LLkjiqERERAamHgd+lmUtA74KGOE/X7Zt+ynLsg4BTeE/AA/Ztv1C+JpLgJ8CXuAQcI9t28d7OhYRkVRy5x23Ul5ZGv36x492fJ5lzeDxxzf006gGHicQoLmiHIC0ceOSPBoREZGBqUdLPS3LMoBHgHtt254P3Av8yrKsyH1vt217fvhPJOgzgUeBj9u2PR14FfhmT8YhIpJq6ut85GeNxzRdcc/zeDzMm7egn0Y1MDVXVeH4/XgKi3B5vckejoiIyIDUG0s9g0Be+O/5QKVt20HLsmKdvwhosm37tfDXDxPK+t3XC2MRERlQVq++Fdsu6fS81lk7x3HY9OtXWDjzvZSUvgEEYl5nmibFxWt7a7iDku/oEQDSxo9P8khEREQGrh5l/GzbdoA7gWcsyyoDNgBrWp3ymGVZ2y3L+rFlWfnhxyYAZa3ucRIwLcsa3pOxiIgMRHPnzsfj8cQ9p3XWzgkGOfLb31F60kVmVgHW5EtjZv08Hg8rVqyisLCo18c9mPiOHAYgfZwCPxERkVh6lPGzLMsNfA5YYdv2JsuyLgeesCxrFnClbdtHLMtKB74P/BC4p8cjDisoyO6tW/WqoqKcZA9BUpTm1uBw4403smvXri5d43K5+JdPPUDLm69S8dzv2RacgpNTCMDC2cuwY2T9XC4Xn/vcv/bK3BjM8+vEiUoARsyeTsEgfh2pajDPLRn4NL+kL6Xa/OrpUs/5wBjbtjcBhIO/emCmbdvvhB/zWZb1Y+DZ8DWHgYmRG1iWVQgEbds+3ZUnPnWqjmAwfhnv/lZUlMOJE7XJHoakIM2twWPWrDns3buXlpaWhM73uD3cMHsOZQ/9G8HGRnwuL5WTpuMYoSxfljcPa/KllBzcRDB4LvjzeDwsX74Sw/D2eG4M5vlVX+fjpRPjmO0qoSmncNC+jlQ1mOeWDHyaX9KXBvr8Mk2jy4mwnvbxOwqMs8Ib+izLmgmMBCosy8oLP2YAdwFbw9dsAbyWZV0R/vp+4Hc9HIeIyIBQXLwW00z8o9UIBHifP0CwsRHvBdM5duU94G77O7mFs5dhGO3vaQz5vX0A72zczxlPAaWFC/EUDe0lryIiIvH0dI9fFfAx4EnLsrYBvyVUpCUd2GhZ1nZgJzAdWBu+Jkio+udPLMvaB1wNfLYn4xARGSiKikawfPnKTvf1AbgNg2uKihh/+VVM+PwXGP/Qv3G6Of28puSRrF9kr59pupgz48ohv7evvs7H3t0nwTCozJ5KY4M/2UMSEREZsAzHGVjLJRMwCSjVUk8ZSjS3BpcTJ46zbNkN+Hy+uOelezxs+PV6Rl8wPaF7Ln3ve2gOBEj3eHj+jy/3WuA3WOfXqy/sZc/fKwhiYBJk5oJxXHWTmrcPJIN1bsngoPklfWmgz69WSz0nE+qQ0Pk1fTkgEZGhKFbWz8CILgP1eDysWHl7QkFf5J7vXXwxBnDj7LlDOtvnBIMce+0t9rx7lCAGAEFMSnZU0VDXnOTRiYiIDEy90cdPRETaKS5eyzNPPdnmMU9aKBBsbm7uVv+9f7z3Pvbt2sntEyb11jAHlER7Hk4ZVsAHL7kXJ+cCwnEfEOp/uHlTmbJ+IiIiHVDgJ5LCutM8XBKT6Hsb4fF4uPXW23AchyeffLxb/ffGzV/Al2fMxjh5AicQwHB13N9vsJo7dz4HDx6IWxHVbZpM9qRTmXuu8mlEMOBQsqOKxZdPJDM7ra+HKyIiMqgo8BNJYYn8IN26ebgkLpH31gU4pkkwGIxm+BzH4cCB/d2qyOnKzsZdUID/1Cmaq6pIHzu2B68gMf35y4Pi4rU8++zTcc8xHYdFC1ZS63JB8PzjyvqJiIh0THv8RFJYIq0FurPkUBJ7b11uN0uXLscwjGiGr6hoBOvWPdrtPXoZEycB4Cs71K3ru+pCayZuw4h7Tm/98qCoaATvu3kZHlfHv5N0GwZXj51EXeE8gh0EfXAu66e9fiIiIm0p8BNJYYm0FvD5fFx//ZXMnz+D+fNnsHr1rf04wt5RX+djw2Nb+/WH/c7eW7dpcuutt/HAA//MggWLei24Tg8Hfk19EPh19D6utmYSP+zr3V8erMjMglaN6ts/zxWrP0tn9ZwjWT8RERE5R0s9RVJcIsvnIgbrss8tm8qoPFLN5k1lLLp8Ai8+s4cbV8zq0j6v7ixpjPfeujweiu//BIWFRaxb92jC4+hMNON3uPcDm9bv41U3XYATDOLetpX3FBbx8qmT+GOk2SK/PIjo7rLPYEsLGYcOdfh8HrebW1fdga8li2CgPv59Ag5V5dVdfn4REZFUpsBPJMVFMlNPPfk4gU76dg7GZZ/1dT5KdhwDoGRHFf6WQJvgJVFz587nwN69+J0Yawg5PzCOvLcbnnqSloC/zXndKd6SiPSJEwFoOlyGEwxidLLcNFHt38fFl0/EKS3Bf/o0qy+cxyuvv4q/k76E0LNfHjQdPIDT3MxdCy/ilY1/afN8pstFcfHaId3GQkREpCe01FNkCPjwB/4Rs5MFe30ZrPSFyLLEtzaW4oQD2mAwyN5d54KXriz9/NCqOzE6WUTY0tLCE0/8ps2y2LsXXnTe0sS+DKDdObm4hw/H8florqrqtftu2VQWfR8jSyXPvroRgMk33MTy5Stxuzv/XWFPXnvDnt0AjFuwsM0y2sE2N0VERAYiBX4iQ0Dm8eO8p7AQV5wiHYMt2xdZlrh31zGCgXDAEoRIUtMJBnnzuS00Htif0P285eW8p7Co00ImER6PhxkjRuFf/7vQdeHWCv0RpKT3YoGX+p072PvbDezZWhF9H4MBh5LtlZzeWQKmSe5lV1BcvBZXJ+0jevraI4Ff5oxZbYrnDLa5KSIiMhAp8BMZAuq3beW20eNi/uA+2DIqrZclOjGWrwaDsK+0gf3f+g7H/u8XBJvjZ//qt4feIzOBrBaAaRgsra0D4CMfWYsrfF1/BCkZE0LLPWveepPGA/tx/P5OruhY87FjlP/3d/nbX/bhBNpmLYOBAKV5c8metwB3fn50WWu8rF9PXnuwqZGmQ6VgmnitGdHna10RVURERLpPgZ9IinOCQeq3b2NYWhrLbrgZANNsGwAOtozKlk1lBKOFP2Jn6BzTpLRgPtWvvsKRb3yVhr02te+8zcmn13PquWeiwU6wqZEGu4Rh6eksX7o8bhVUCBUauaagkHy3m2HvvYUL7ryrX4MU77TQ3sWGnds58o2vsf+BtZx56cUu36f2nbfwmRlU5k3HMdsGdA4mlbkXkHbxuaIt8bJ+bperZ9m+vTYEAmRMmoTL640+X29WRBURERnKFPiJpLim0oMEamtwFxRw/z99hoULF7N06fuiSxPdpjloMir1dT7W/9+7lGyvIk4NligHk6phMwmOHI/vyBGOfusbVP70x5x+/jlOPfM0Z//6Uui+u3eHgo4pU/noxx/stD+fEQxy24hRZC9aTOGq24H+DVK8M2Yy5uOfJO/q95A2ajROczOn//h8zOxnLLXvvE3p8HlgdhzMOYbB7lOZ0a8jWTjo4JcHwSCrZ1zYxVcSUl/n448vHcfn8pI5Y1ab5+tJz0MRERE5R4GfSIqr37YVgOx58xkxYiTr1j3KAw/8czRzYzpw3z/cm8whJmzLpjKOV9QSCCQQ9YU5wLHL7ib3sivwjBhJ1rz55F5xFQCnnnkaf20N9dtD71HW3Hmd9+czDK4pKGKUNZNR/1gcrarZn0GKYRhkL1jEyHs/wMSvfh1Xfj6Bs2fxHTmc8D18FRXUVp2iMveCmM3QHcNFyc5jbYrkFBevjf7yIPIeuV0urikcQeAPz3Hq2Q1dDkC3bCrjZFMapcPmkTlzVucXiIiISJcp8BNJcXXhwC+rfRuCFaswgGsKi0iz7SSNLnH1dT72bI9UsUysAAuECpXYe06Re+caJn/9Pxn7yU8x8gMfIvPCOQQbGzm5/knqd2wHIHvufIA2hUXac7nd3HfH3Yz55IOYaYn3CewrhmGQPXcecC7IT0Td5nC2z4j/z0D7ZuiRAPeBB/45+h653G7uf/DTYBicenYDxx/9FU6saLKd+jofJdurwDBCAxJkDAAAIABJREFUQejoCQm/BhEREUmcAj+RFNZy6iTN5Ucx0jPwTrfaHCsuXsvc6TO4fcxYql/d2OUsTX/bsqksWnWyq9oHL4ZhMGL13eByUfPaqwSqq3EPG07auHEAbQqLTJ06rW1bgZW3M6P4ftw5uT1/Ub0kKxyw1u/YltD5dbVNvLjD4WzGKIKd/DMQqxl6++IrU5YtZ8zaT2B4PFS/spHDX/syR7//HY5+59tU/uxh6rZviwaDjt9P47691G5+m7dfLMEJhquymibvvlXZlZcuIiIiCVIDd5EUVvvWmwBkXXghZruli0VFI/jlb9ZT+tl/oeXYMRpL9gzIZXb1dT7+9NQuTlbVdvseHQUvaaPHMOy6Gzjz5z8BoWWeRqtWDsXFazlwYD8PPfR51qy5Cxi4RXAyZ87CcLtpKi3FX12NOy8v7vnvvLiHM+YwxvkPcO/nlzFi9DBOnOj6+xt5jyLvSfaCRYz9p89Q8cP/xne4rM25tW+/iXvYMNLHjadx316CTU34XF72TrydYLiwjIMZbR6fmZ38bKqIiEgqUeAnkqIaDx7g5DNPA5B72RUdnmO4XORecSWnn3uG2i2bB2TgF9nXF9qtF3+Jp+kymDl3NFfddEFC9x7+vhXUvPk6gZoasubNb3MssqQRYPnylTz55OMDtgiOmZ6Od8ZMGnbuoH7ndvIuvzLmufV1PvbuqwbDoCJrCo1Nie+XbK/1exSROd1i0le/QVPpQTBNDJcLX9khqv/2Ki0njuM/cwaAtFGj2Z+3EMff9nsayc4m+j0UERGRxCjwE0lB/toaKn/yIwgEyL/2OrLbBTWtRVoDNJcf7a/hdSqyJLChoaVL+/piLUuMxeX1MvbBf6bpwH6y5syNeV77zNZAlD13Xijw274tbuD3zisHQu+v4QLDZPOmMiZOLujVsbjz8sief25PadbsCxl281Ia9+3Ff/oU3gssmtOzOfrw2zhG28AzGHCU9RMREekDCvxEUowTDFL1s4fxnzlNxtRpFN15d9zz08eOBcBXXo7jOG2WO/anYEszDTt3UPvO29Rt24qZlsb+C24hGMiMeU1XM3wdyZg4iYyJk+Ke01Fma6DJmjsPfv0oDbt24vj9GO0arTcdOkTViy9jn5gY7dkXdKBkRxV1NU19Pj7DMMhstc/0jRf2xtxXqqyfiIhI71NxF5EUc/bll2jYsxtXTi6jP7r2vACgPVdePmZmJsGGegLViWfLelOgro6yL/w7FT/6AbVvv4Xj89HQ4Kf0bPyMTyQ71LrdwFDlKSwibew4gk1NNO7b2+ZYg13C4f/4MtsPNtM+1HIch1df3Nd/AyVcyXPHsZjFevR9FRER6X3K+ImkmLqt7wJQtPouPMOHd3q+YRikjx1H4769+CrKcefn99nYVq++Fdsu6fS86VOncf/qL+EcrOv0XGWHzsmaM5fm8qPU/X1LdL9moKGBqv/9OT4zg8o8C6fd7/uCAYet7xxh9sIx/ba0csumsk6ryOr7KiIi0ruU8RNJIcGWFpoOHgAgc/aFCV+XNmYM0Pf7/ObOnR+zMXqEx+Nh9tyF7D/cSF/s60tl2QsXAXD2ry9z5sUXADj+60fwnz7F4YlXgsvV4XVOsG27i75WVV7TaWsOfV9FRER6lzJ+IinEd6gUp7mZtDFju9RnLm1MeJ9fRXlfDQ0IFUl59tmn455jmiaLZi+lvNTX8fFe2NeXqrxTplJ4252cXP8EJx7/DfW7dtKwcwfNGbmUe8bFDLYC/VxQ5c77Fvf5c4iIiEhbCvxEUkhDeBml15rRpevSw4Ffc0VFr48p0eWdEMr23XLLCioONXe6/0tVHzs2/OZbcA/Lp+oX/0vDzh0AVC5ciXMq/nVaWikiIpLatNRTJIU02jYAmZbVyZltpY0dB0BzRXmne6+6KpHlnRGRbF+i+7+kY7mXXMa4T30aV14eOUsu5Qw5WlopIiIyxCnjJzIAJJoVs6wZPP74hg6POX4/jQdC1Rm907uW8XPn5uLKziFQV4v/zGk8w3uvr1tx8Vo2PP1U52Nwe1ixYhUNNS4FKb0gc+Yspnz7eximyZ2dnFtUlMOJE7X9Mi4RERFJDgV+In2kvs7Hi8/s4cYVs3Bwon+PLE/syhLICNsuYf7884M6y5rBL//j26H9faPH4M5NfH9fRNqYMTTutWmuKO/VwC/Tm8f0yZey58BrBIOBmOe5XCbFxWspLCzqtece6gxTizpEREQkRD8ViPSRLZvKqDxSzeZNZW3+Xl/nY8NjW5k1c27CSyDj8Xg8zJo1l+f/cBify9vl/X0RkeWevvLeLfCyZVMZi+YsxTBif9xEsn0K+kRERET6hgI/kT4QaVANsGd7JSXbqwAo2VHFWxtLqTxSzcLZSzGNztsVdCayL+5Eg4vSYfPI7GbgFy3w0ouBX93ZBkq2VeJNy8OafCmm2XE7gUi2T0RERET6hgI/kT7QukF1MOAQCO9ZCwaD7N0VCggrDzVxReEo3D0I/qJVMEubAYPK3Atwxk3u1r3SxvZeSwcnGOTkM0/z1+/+lqDfD8DC2cvOy/qZpolhGMr2iYiIiPQxBX4ivSyS7euoQIkThEjByqA/wMLpN2H0IPA7VwUzGLq/YbB1+9lu3Sua8auswAkGE74usnS1oa45+tjZl16k8g9/piJjIo4Z2kqc5W2b9fN4PCxdupwFCxYp2yciIiLSxxT4ifSyLZvKcIKdt0RwDBd1oxay7H234XF3vc6Sx92q513w3D1LdlS1CcIS5crOxpWXh+Pz4T/VSdO3VlrvXwRoOXWKkxueonT4PHC1fV1ts34GDz74adate1TZPhEREZE+psBPpBdFs30JBH4AuFwsvHAZpqvjvW/xGMEA86deH11KGdGTHneRrF+iyz1b72Us2VFFfa2P44/9H01+k8o8i/ZvQyTrBwbTJ19GZkZet8YpIiIiIl3T43YOlmUtA74KGOE/X7Zt+ynLsqYDvwIKgFPAGtu294WviXlMZDBrvbcvEcGAQ2VZM7fcvILfP/80LS0tuN1ugkEnbusDt2FyZeEoqg63RJdStr5nyY4qFl8+Mdo6IlFpY8bSsGc3zRXlMG9+p+e3fr2O4/DmhncYv30bh0ZdAaYJHawYXTh7GWeqK1l84VI2byrjqpsu6NIYRURERKTrepTxsyzLAB4B7rVtez5wL/Ary7JM4GHgR7ZtTwd+BPy01aXxjomwevWtzJ8/o9M/q1ffmuyhRsXb2xeP4zihCp/hnmsul4ulS9+HYRhMnTot2vLB7XZH98e5PB4WL1xJrGfqbtYvfcIEAGpe30SwpSXuufV1Pkq2VUZfbzDgsP+ID5/LS92IacTaJpjlzWP5dZ8hIy1XTdhFRERE+klvNHAPApH1WvlAJVAILARuCD/+G+CHlmUVEcoKdnjMtu0TvTAeSQFz587n4MEDtMQJPjweD/PmLejHUcXX1WxfROus34ZnfseKFav4yEc+Rnn5UR566POsWXMXEAoIb775Zn7/+2e4ZekKajPn4cQIMrub9cu5eAmn//A8zZUVnP7D7ylcsTLmua+vf5NgIADGuWWqDnBk8tXc9Ymr1DxcREREZAAxuvODamuWZV0HPA7UAznALUAL8H+2bc9udd5u4B5CgV+Hx2zbfjeBp5wElPZo0DLgHTt2jCVLLqGlJXaRkoyMDN544w1GjBgBQG1NE+sfeZfb711Idm5Gfw016qffeZVjFTXdutblMpg8I4v1z/+An/zkJ9HXBPC5z32ORx55hDVr1vDggw+ydu1ablv2AKV76qJtImLdc8GSCdxy25wujaV61y52/tsXMNxu5n3322RNnNDmuBMIsOtnj7Jhbx5B8/zfHbndJg98/tqkfA9EREREhpjJwKFETuxRxs+yLDfwOWCFbdubLMu6HHiC0JLPPnXqVF3iBTT6SVFRDidO1CZ7GCmhscHF9EmXsufAax3udfO43CxfvhLD8Ebf81df2Mvhg6d54dndSdk3tmrNAl59YS+73q1gbHUJ1961hOz5C3hi3WZOHa+Pe20g4HDmhMPDD/8SoM08uvfeD7N3717uvffDmGYmDz/8S55Ytzlu0Be5Z+n+k12fkyMmkHf1NVS/spGS7/+A8Z/992j2LlBXR+XPfsK7J3JwcvI7vDzoOEn7Hkj36LNL+ormlvQlzS/pSwN9fpmmQUFBdpeu6elSz/nAGNu2NwGEg796oAkYa1mWy7btgGVZLmAMcIRQxi/WMREgtGxy0eyllBx8HTg/8DOcIB/+4IejX7epLrm9kqlNe8kdN5LsBQv7bclhfZ2Pku1VYIQaqTNhGgB33re4R/ctKhrB+vXr23z49PSenSm87U7qtm2l6eBBKn7wfXIuvgTPiBFU/e/PqTtVQ+WkO3CMjiuR9qS4jIiIiIj0jZ4GfkeBcZZlWbZt25ZlzQRGAvuArcDdwKPh//49sofPsqyYx4aK+jofLz6zhxtXzNIPx+1EioZ4M0Kl/0sObmqT9XObJtcUFOHevg3C7Qda768L+v1seeMIM07+jvQJEylcdTuZsy/EMIzo+/7Yhi+yb5/d6VgsawaPP74hoXG37t/nmCbvvlPFVTfldPXlDwiuzExGrvkgFT/6AfU7tlO/Y3v02OHJN4DL1WHFzohIcRll/UREREQGhh6lQmzbrgI+BjxpWdY24LfAfbZtnwbuBz5pWdZe4JPhryPiHRsS2je9lnM2/600VDSE9g2/Q1wuN7ePGcuZP/2RYFNTNNMWqS7pGC4q86bjzx+J73AZ5d//DpU//iHB5ubo+z6iYEq0WmYsXSkeE63oGV596WB2u5H6QJE9dz6Tv/4tiu56P5kzZ4HLRc7Fl1A/anrMip0RwYCjip0iIiIiA0iPq3ratv0Y8FgHj5cAS2JcE/PYUNC+6bWWxJ1TX+fD3l4VXUYYafgdyfp5PB5WrLyNUYaLpgP7OfvyX9genBxqYt566aHbzYlrP8Qc8yCnn3+Our9v4cD3/ocS82IApo25lrc2vxR3LKZpUly8NqFxt872RaRC1stTUMCw629g2PU34ASDGKbJnckelIiIiIh0meqtJ0H7ptfK+p2z+ZWDBNulk9pm/QyKi9dSsDzUv6/yxb9i7zh23n6zYMDB3n2CjCuuZ/xn/x1Xfj57zmaHAkTAm5HL9EmXRPvitefxeFixYhWFhUWdjjma7WsX+EX2ug3mrF9ras8gIiIiMnjpJ7l+1r7Jd6oFBz1RX+ejZOf5QVwk6wcG0ydfRmZGHpmzZpMxdRoHMi6I2TsvElSnjx1L4Sf/lcrc6dF7O8GOl5FGdCXb9+bGgwT8Ha99VGAvIiIiIgNBbzRwly7YsqmMx5//MqfOHG3z+I8fPf/crhQWGayCPh/Vf3uVYFMjWyoycILutks2wxbOXsaZ6koWX7g0unwy85aVVD5fhdNBLzloW11yW0ndeQVJIgHl7v2vnnetz+fj+uuvbPNYR9+P+jof+3Ydj/36VOFSRERERAYAZfz6USTbN7JgSswlhhFdKSwymJ3960uc+O1jnNrwFMcq6mK2CMjy5rH8us+QkZYbLRqyu8oD7vi/u3Achzc2HgwvxTz/+MLZywh1GIkv1vfjzY0HiZFwbDMGZf1EREREJJmU8etHoQIgQRbOXoZd+gYd9aeL6MpSw8Es0iYg5+JLeG9BAMN1krwrr8ZTUNjptVXlNQlVlyzbfyrmctAsbx4XTLqYfYfeinuflpYWnnjiNzzxxG+AUPbvt799mrJ9JzsdpypcioiIiEiyKfDrJ+cKgJxfqbK9rhQWGcyCTU007t8HhsGI99+LKyurS9cn0sS8vs7HYw+/Hd1T2ZEl825j36G3gU5Sd2EejwcrJ5c9n/lXWgreC62WmrrcJvfcv0TLOkVERERkQNFSz37Svtx/bxUWGcwa7BIIBMiYPKXLQV+iWldQjSWS9UuUaZosa/GzP20qjtF2maiWdYqIiIjIQKTAr5+EliWeC0AiWb/2e/1cpntIZPsAGnbtACBz9oV99hxV5TVxs30RS+bdRmZGbkJ7L2++7Eq8GXlU5k3vsI2EqrSKiIiIyECjpZ795I418yn93L/iP3OaMQ/8E9lz53H7iZksW3YDPt+55Z5uj2tIZPsA6nftBCCrDwO/1stBn1i3mVPH6zs8L8ubx6qb/p3f/P7zdLb38q5Zc9h70CHW701SoXG7iIiIiKQWBX79pOnwYfxnTuMpKiLrwjkAFBWNYPnylTy9/gn8wSAe19DJ9rWcOEHLsWOYXi8Zk6f0y3MmsifQl/YuGzasp6Wl5bxjkb2XRsVxKnMuIxijGqhaOIiIiIjIQKOlnv2kufwIABlTpmKY59724uK1mOGvDcMYOtm+3aFsX+bMWRiu+Msr+1Pr70d7pmnyj+//AHbTiPP29rWnvX4iIiIiMpAo8OsnvvJyANLHjmvzeFHRCN675DIM4MaZs4ZEtg+gIbzMM3P2nCSPpK1IFtYwDKZOnYYn3CfQbZqsWLGKrNOnqU4vitlvMEItHERERERkINFSz37SHA780saMPe/Yh9d8iH3b/s4dk/pnyWOyOYEADXt2A5A1e3aSR3O+4uK1HDiwn4ce+jxr1twFfj+m4/DBVXfSsG0rS46+wPBlyym8dVWyhyoiIiIikhBl/PqJL7zUM33cuPOOjZk5my/PmE3W2bOdth5IBU0HDxJsbMQzchSeAZjhLCoawbp1j2JZM0PZP+CawhFklJbSaJcAkGnNSO4gRURERES6QIFfP/DX1hCoqcFIz8A9vOC8466cHMzMLIKNjQSqU3t5oOM4nHnxTwDRIjcDWXHxWuZOt7h9zFhq3ngN35HD4HKRMWVqsocmIiIiIpIwBX79oDm6v29sm8IuEYZhkDZ6dOjcqsp+HVt/q337Tere3YKZkcGwG29K9nA6VVQ0gl888gTDsrJprqgAx8E7ZSpmenqyhyYiIiIikjAFfv3AV34UgLSx5+/vi0gb1T+BX32djw2PbU1Kg3H/2TMcf+wRAIpW342noLDfx9AdZnp6m+ykd7qVxNGIiIiIiHSdAr9+0ByjomdrvRH4JbI/cMumMiqPVPd7qwHHcTj2q18QbGgga85ccq+4ql+fv6eyF53rAejV/j4RERERGWQU+PWDSMYvbuAXWepZ2b3AzwkGKf/uf1H6+c8S9Pk6PKe+zkfJjmMAlOyo6jTr5zgONW9sovJ/f0agoaFb44qofect6ndsx8zMYuQHPoTRSR+8gSZr7nyM9HSM9Ay8U6clezgiIiIiIl2idg59zHEcmivCrRz6MONXt2UzDXt2AVC/fRs5F10cPeY/e5bmY1VsPuBEs4KRBuNX3XRBh/cLNDZy/JFfUfv2mwB4p0wl/z3XdWtsALVvvgFAwa0rcecP6/Z9ksXl9TL+oX8Dx9H+PhEREREZdJTx6wWB+noOf+NrVDz7+/OO+U+fJtjYiCsnB3dubsx7eAoLweXCf+pUzIxdLE4gwMkNT0W/rt389rljwSBHv/stDnz3vynZWkEwEAr8ggEnZtbPd+QIh7/yxWjQB1AfbrjeHcHmZhpK9gCQs3BRt++TbBkTJpIxcVKyhyEiIiIi0mUK/HpB0Oej6eABDv3qEVpOnGhz7Fxhl9jZPgDD7SZtxEgAmo9Vden5aza9RsuxKtzDQpm0+h3bo8Fjw57dNFdUUFqwAIe2yysjWb82j/n9VDz8I1pOHCd9/ATGffpfw/fZg+P3dzqWjorHNNolOM3NpE+YOCizfSIiIiIig52WevYCz/Dh5FxyKbVvvM7JDU8x+iMfjR5rTmB/X0TaqNE0V1bQXFVJxoSJCT13sKWZU889A0Dh7as5+9KfaTp4kPod28hZfDHVG/+Kz+WlMm86jnMu8HvyT1/l1Nmj8BjwUIybb34Ta/d2/tOaRXNFBY0H9nfauLx18ZjIMtK67VsByJo7L6HXJCIiIiIivUsZv15SuGIlhttN7Vtv0HT4XBYtkVYOEd0p8FL917/iP3Oa9PHjybnoYrIXXQRA7eZ3aDlzhrptf6e0YD60K6YysnAKpumKe2+Px8O8eQvInB1qZdDQyXLPjorHOI5D/fZtQKhAioiIiIiI9D9l/HqJp7CI0UtvpuKZ5zi5/neM+6fPAIm1coiIFHhpSbDAS6CujlN/eA6AgpW3YZgmOYsv4uTvHqd++zY8BYX4jHQqc6cTDLa9duHsZdilbwCBmPc3TZPi4rV4q6o4++IL1O/cQeGq22Oef+cdt1JeWRr9+sePtjth1S0AWNYMHn98Q0KvUUREREREek4Zv1407vbbML1eGnbt5OzGl2mwS2iurAAgPYGMn6eLlT1PPvM0wbo6vNYMsuaEllF6CgrJmDwFp7mZM3/+E6XD54Fx/rc5y5uHNfnSmFk/j8fDihWrKCwswjvdwvB48B0uw19T0+H59XU+8rMnJJxFFBERERGR/qPArxd5cnMYfvNSAI4/+n8c/fY3cfx+3AUFmBneTq9PGz0aTBNfeTn+s2fintt0uIzqjS+DaTLiH+5p0xcve3FouSeOQ032WIIx+rovnL0Mo4OgEM5l+wDMtDS80y0AGnZ3vNxzy6YyFs1ZGvN+Hd1XRERERET6h5Z69rL862+k5eRJWk6ewPH7cfwt5F11TULXurxeshcspG7LZs6+spHCFSs7PM9xHI7/+lFwHPKvu/68ZaQ5ixZz8nePA7B0STrDrr/6vHsEGhspfegzHB8+jJdPnsDvnIsOW2f7IrJmX0jDrp3U79pJ7iWXtblXZG+fNy2URSw5uIlg8PwlpB3dV0RERERE+p4Cv15mpqUxcs0Hu319/nuuo27LZqpffYWCpe/DcJ//Lap98w2a9u/DlZNLwfJbzzvuKSwie9FifIfLyL3s8g6fx+X1MuofP8IH/vYKG3/5c2jVqqGjrFyowMtvadi1EycYxDDPZfa2bCqLNoaPt3dQ2T4RERERkeTQUs8BxmvNIG30GALVZ6nb+u55xx3H4eTT6wEovO0OXJlZHd5nzMc+weRvfDvmcYDsefOZ/YkHWbHydjweDxA7K5c2ZgzuYcMI1NTgO3ok+ngk2xdpDB9r76CyfSIiIiIiyaPAb4AxDIO891wLwNm/vnze8UBNNf7TpzAzM2Nm87qquHgtZjiDFysrZxgGWXPmAlD37pbo462zfREd7x00lO0TEREREUkSBX4DUO6ll2Okp9Nol+ALt4OIiPT4Sxs9ps1yy54oKhrB8uUrMQwjblYu56IlANS+9WY02Ksqr4lm+yLaZ/1M08WcGVcq2yciIiIikiQK/AYgl9cbLaBydmPbrF808Au3fugtxcVrWbBgUdysnNeagSsvn5YTx/EdCvXru/O+xXzss1dz98UtXLf/F6zI28HHPns1//2Tr+HxhPYnejxuvvW9L/XqeEVEREREJHEK/Aao/PByz9o3X8dp1X090hcwbXTvBn5FRSNYt+7RuFk5wzTJuehiAGreerPNsbrt2wDImjsver9EsogiIiIiItL3elTV07KsScCGVg/lA7m2bQ+3LOsQ0BT+A/CQbdsvhK+7BPgp4AUOAffYtn28J2NJNenjxuMeNhz/mdO0HKsibfQYoO8yfonKXXIJZ//yZ2rfeYuiO+/CME2CPh+NJXsAyLpwbvTc4uK1HDiwX3v7RERERESSrEeBn23bh4D5ka8ty/p+u3vebtt2m47flmWZwKPAB23bfs2yrH8Hvgnc15OxpKL0iRPxnzlNU9mhc4Ff1bk9fkkZ06TJeEaMpOX4MRrtEjJnzqJhz24cv5+MyVNw5+VFz41kEUVEREREJLl6bamnZVlpwPuBdZ2cughosm37tfDXDwN39tY4UknGxEkA+MrKAAg2NeI/cxrD7cZTlJylk4ZhkLPkEgBq3nqDxn17Of7rR4BzyzxFRERERGRg6c0G7suBctu2Wzefe8yyLAN4Dfg327bPAhOAssgJtm2ftCzLtCxruG3bpxN9soKC7N4ad68qKsrptXu55s7k1DNPE6g8SlFRDrX7jgHgHTuGESPzOrm672S991pOP/cMtW+9Sc3rmyAYJPuCaUy9YwWenN57/dJWb84tkfY0v6SvaG5JX9L8kr6UavOrNwO/+2ib7bvStu0jlmWlA98Hfgjc01tPdupUHcGg0/mJ/aioKIcTJ2p77X7+/BEA1O0/wPFj1dTu2Q+AWTSyV5+ny9LzSJ8wEd/hMjAMht28lMIVKznbBDQlcVwprLfnlkhrml/SVzS3pC9pfklfGujzyzSNLifCemWpp2VZY4Grgccij9m2fST8Xx/wYyDSbfwwMLHVtYVAsCvZvqHCnZePKz+fYFMTLSeOJ72wS2tFd6wmc/aFjP2nz1B02x0Y7t78HYKIiIiIiPSm3vpp/QPA87ZtnwKwLCsLcNu2XR1e6nkXsDV87hbAa1nWFeF9fvcDv+ulcaScjAkTqT97lqayQ22atydb5sxZZM6clexhiIiIiIhIAnqruMsHabvMcySw0bKs7cBOYDqwFsC27SBwL/ATy7L2EcoUfraXxpFy0qMFXg71WQ8/ERERERFJbb2S8bNte3q7rw8CC+Kc/zowpzeeO9VFKns2HTxI84njYBikjRyV3EGJiIiIiMigoo1ZA1wk49e4fx84Du7CQsz09OQOSkREREREBpVe6+MnfcOdn48rNxecUAXTgVDYRUREREREBhcFfgOcYRjR5Z4wMAq7iIiIiIjI4KLAbxBInxjtfqHCLiIiIiIi0mUK/AaBNhk/LfUUEREREZEuUuA3CKS3CvzStdRTRERERES6SFU9BwH3sOHkLLkUTANXTk6yhyMiIiIiIoOMAr9BwDAMRn/ko8kehoiIiIiIDFJa6ikiIiIiIpLiFPiJiIiIiIikOAV+IiIiIiIiKU6Bn4iIiIiISIpT4CciIiIiIpLiFPiJiIiIiIikOAV+IiIiIiIiKU6Bn4j8JkkaAAAEq0lEQVSIiIiISIpT4CciIiIiIpLi3MkeQDe4AEzTSPY4OjRQxyWDn+aW9CXNL+krmlvSlzS/pC8N5PnVamyuRK8xHMfpm9H0nSuAvyV7ECIiIiIiIkl2JfBaIicOxsAvHbgIqAQCSR6LiIiIiIhIf3MBo4F3AF8iFwzGwE9ERERERES6QMVdREREREREUpwCPxERERERkRSnwE9ERERERCTFKfATERERERFJcQr8REREREREUpwCPxERERERkRSnwE9ERERERCTFuZM9gFRgWdZ04FdAAXAKWGPb9r7kjkoGK8uyDgFN4T8AD9m2/YJlWZcAPwW8wCHgHtu2jydjjDJ4WJb1X8BtwCRgjm3bO8OPx/zc0meaJCLO3DpEB59h4WP6HJNOWZZVADwCTAWagX3AR23bPhFvDml+SSI6mV8OsAMIhk+/17btHeHr3gd8m1D8tAX4kG3bDf09/p5Qxq93PAz8yLbt6cCPCH3oiPTE7bZtzw//ecGyLBN4FPh4eJ69CnwzuUOUQWIDcBVQ1u7xeJ9b+kyTRMSaW9DuMwxAn2PSBQ7wLdu2Ldu25wAHgG/Gm0OaX9IFHc6vVscva/X5FQn6soGfA++zbXsaUAt8pr8H3lMK/HrIsqwRwELgN+GHfgMstCyrKHmjkhS0CGiybfu18NcPA3cmcTwySNi2/Zpt20daPxbvc0ufaZKojuZWJ/Q5Jgmxbfu0bdsbWz30JjCR+HNI80sSEmd+xXMzsLnV6peHgdV9MLw+pcCv58YD5bZtBwDC/60IPy7SXY9ZlrXdsqwfW5aVD0yg1W/Vbds+CZiWZQ1P2ghlMIv3uaXPNOkN7T/DQJ9j0g3hTN7HgGeJP4c0v6TL2s2viI2WZW21LOsblmWlhx9rM7+AwwzCfxcV+IkMPFfatj0PuAgwgB8meTwiIl2hzzDpTT8A6tA8kr7Rfn5NsG17MaFl7LOA/y9ZA+sLCvx67ggw1rIsF0D4v2PCj4t0WWTplG3bPuDHwOWEfrMUXYZgWVYhELRt+3RSBimDXbzPLX2mSY/E+AwDfY5JF4ULCF0ArLZtO0j8OaT5JV3Swfxq/flVA/z/xPj8IpQBHHT/Lirw66FwtaitwN3hh+4G/m7b9onkjUoGK8uysizLygv/3QDuIjS/tgBey7KuCJ96P/C75IxSBrt4n1v6TJOeiPMZBvocky6wLOvrhPbt3Rr+JQLEn0OaX5KwjuaXZVnDLMvyhv/uBm7n3OfXn4CLLMu6IPz1/cAT/TvqnjMcx0n2GAY9y7JmECp9Pgw4Q6j0uZ3cUclgZFnWFGA94Ar/2Q08YNt2pWVZlxGqrpjBuTLVx5I1VhkcLMv6H2AVMAo4CZyybXt2vM8tfaZJIjqaW8D7iPEZFr5Gn2PSKcuyZgM7gb1AY/jhUtu2V8abQ5pfkohY8wv4FqH54wAe4HXgU7Zt14WvWxE+xwX8Hfigbdv1/Tv6nlHgJyIiIiIikuK01FNERERERCTFKfATERERERFJcQr8REREREREUpwCPxERERERkRSnwE9ERERERCTFKfATERERERFJcQr8REREREREUpwCPxERERERkRT3/wA5BAdTgpH0CAAAAABJRU5ErkJggg==\n","text/plain":["
"]},"metadata":{"tags":[],"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"mu7wAQEIikv3"},"source":["## Evolution Strategy agent"]},{"cell_type":"code","metadata":{"id":"3Dlij-wJY6C3","outputId":"56fa16b6-9cef-416e-89bf-2ea2b55b31f3"},"source":["import pkg_resources\n","import types\n","\n","df= df_full.copy()\n","name = 'Evolution Strategy agent'\n","\n","\n","def get_imports():\n"," for name, val in globals().items():\n"," if isinstance(val, types.ModuleType):\n"," name = val.__name__.split('.')[0]\n"," elif isinstance(val, type):\n"," name = val.__module__.split('.')[0]\n"," poorly_named_packages = {'PIL': 'Pillow', 'sklearn': 'scikit-learn'}\n"," if name in poorly_named_packages.keys():\n"," name = poorly_named_packages[name]\n"," yield name\n","\n","\n","imports = list(set(get_imports()))\n","requirements = []\n","for m in pkg_resources.working_set:\n"," if m.project_name in imports and m.project_name != 'pip':\n"," requirements.append((m.project_name, m.version))\n","\n","for r in requirements:\n"," print('{}=={}'.format(*r))"],"execution_count":null,"outputs":[{"output_type":"stream","text":["seaborn==0.9.0\n","pandas==0.23.4\n","numpy==1.14.5\n","matplotlib==3.0.2\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"WuNpK2cRY6DH"},"source":["class Deep_Evolution_Strategy:\n","\n"," inputs = None\n","\n"," def __init__(\n"," self, weights, reward_function, population_size, sigma, learning_rate\n"," ):\n"," self.weights = weights\n"," self.reward_function = reward_function\n"," self.population_size = population_size\n"," self.sigma = sigma\n"," self.learning_rate = learning_rate\n","\n"," def _get_weight_from_population(self, weights, population):\n"," weights_population = []\n"," for index, i in enumerate(population):\n"," jittered = self.sigma * i\n"," weights_population.append(weights[index] + jittered)\n"," return weights_population\n","\n"," def get_weights(self):\n"," return self.weights\n","\n"," def train(self, epoch = 100, print_every = 1):\n"," lasttime = time.time()\n"," for i in range(epoch):\n"," population = []\n"," rewards = np.zeros(self.population_size)\n"," for k in range(self.population_size):\n"," x = []\n"," for w in self.weights:\n"," x.append(np.random.randn(*w.shape))\n"," population.append(x)\n"," for k in range(self.population_size):\n"," weights_population = self._get_weight_from_population(\n"," self.weights, population[k]\n"," )\n"," rewards[k] = self.reward_function(weights_population)\n"," rewards = (rewards - np.mean(rewards)) / (np.std(rewards) + 1e-7)\n"," for index, w in enumerate(self.weights):\n"," A = np.array([p[index] for p in population])\n"," self.weights[index] = (\n"," w\n"," + self.learning_rate\n"," / (self.population_size * self.sigma)\n"," * np.dot(A.T, rewards).T\n"," )\n"," if (i + 1) % print_every == 0:\n"," print(\n"," 'iter %d. reward: %f'\n"," % (i + 1, self.reward_function(self.weights))\n"," )\n"," print('time taken to train:', time.time() - lasttime, 'seconds')\n","\n","\n","class Model:\n"," def __init__(self, input_size, layer_size, output_size):\n"," self.weights = [\n"," np.random.randn(input_size, layer_size),\n"," np.random.randn(layer_size, output_size),\n"," np.random.randn(1, layer_size),\n"," ]\n","\n"," def predict(self, inputs):\n"," feed = np.dot(inputs, self.weights[0]) + self.weights[-1]\n"," decision = np.dot(feed, self.weights[1])\n"," return decision\n","\n"," def get_weights(self):\n"," return self.weights\n","\n"," def set_weights(self, weights):\n"," self.weights = weights"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"_UZ69p0CY6DL"},"source":["class Agent:\n","\n"," POPULATION_SIZE = 15\n"," SIGMA = 0.1\n"," LEARNING_RATE = 0.03\n","\n"," def __init__(self, model, window_size, trend, skip, initial_money):\n"," self.model = model\n"," self.window_size = window_size\n"," self.half_window = window_size // 2\n"," self.trend = trend\n"," self.skip = skip\n"," self.initial_money = initial_money\n"," self.es = Deep_Evolution_Strategy(\n"," self.model.get_weights(),\n"," self.get_reward,\n"," self.POPULATION_SIZE,\n"," self.SIGMA,\n"," self.LEARNING_RATE,\n"," )\n","\n"," def act(self, sequence):\n"," decision = self.model.predict(np.array(sequence))\n"," return np.argmax(decision[0])\n"," \n"," def get_state(self, t):\n"," window_size = self.window_size + 1\n"," d = t - window_size + 1\n"," block = self.trend[d : t + 1] if d >= 0 else -d * [self.trend[0]] + self.trend[0 : t + 1]\n"," res = []\n"," for i in range(window_size - 1):\n"," res.append(block[i + 1] - block[i])\n"," return np.array([res])\n","\n"," def get_reward(self, weights):\n"," initial_money = self.initial_money\n"," starting_money = initial_money\n"," self.model.weights = weights\n"," state = self.get_state(0)\n"," inventory = []\n"," quantity = 0\n"," for t in range(0, len(self.trend) - 1, self.skip):\n"," action = self.act(state)\n"," next_state = self.get_state(t + 1)\n"," \n"," if action == 1 and starting_money >= self.trend[t]:\n"," inventory.append(self.trend[t])\n"," starting_money -= close[t]\n"," \n"," elif action == 2 and len(inventory):\n"," bought_price = inventory.pop(0)\n"," starting_money += self.trend[t]\n","\n"," state = next_state\n"," return ((starting_money - initial_money) / initial_money) * 100\n","\n"," def fit(self, iterations, checkpoint):\n"," self.es.train(iterations, print_every = checkpoint)\n","\n"," def buy(self):\n"," initial_money = self.initial_money\n"," state = self.get_state(0)\n"," starting_money = initial_money\n"," states_sell = []\n"," states_buy = []\n"," inventory = []\n"," for t in range(0, len(self.trend) - 1, self.skip):\n"," action = self.act(state)\n"," next_state = self.get_state(t + 1)\n"," \n"," if action == 1 and initial_money >= self.trend[t]:\n"," inventory.append(self.trend[t])\n"," initial_money -= self.trend[t]\n"," states_buy.append(t)\n"," print('day %d: buy 1 unit at price %f, total balance %f'% (t, self.trend[t], initial_money))\n"," \n"," elif action == 2 and len(inventory):\n"," bought_price = inventory.pop(0)\n"," initial_money += self.trend[t]\n"," states_sell.append(t)\n"," try:\n"," invest = ((close[t] - bought_price) / bought_price) * 100\n"," except:\n"," invest = 0\n"," print(\n"," 'day %d, sell 1 unit at price %f, investment %f %%, total balance %f,'\n"," % (t, close[t], invest, initial_money)\n"," )\n"," state = next_state\n","\n"," invest = ((initial_money - starting_money) / starting_money) * 100\n"," total_gains = initial_money - starting_money\n"," return states_buy, states_sell, total_gains, invest"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"ngdPbts9Y6DT","outputId":"fd2d86c9-6ab5-4303-bd46-f3881d0a3f2b"},"source":["close = df.Close.values.tolist()\n","window_size = 30\n","skip = 1\n","initial_money = 10000\n","\n","model = Model(input_size = window_size, layer_size = 500, output_size = 3)\n","agent = Agent(model = model, \n"," window_size = window_size,\n"," trend = close,\n"," skip = skip,\n"," initial_money = initial_money)\n","agent.fit(iterations = 500, checkpoint = 10)"],"execution_count":null,"outputs":[{"output_type":"stream","text":["iter 10. reward: 8.610248\n","iter 20. reward: 12.257399\n","iter 30. reward: 7.689600\n","iter 40. reward: 18.719300\n","iter 50. reward: 16.883897\n","iter 60. reward: 18.100399\n","iter 70. reward: 17.280399\n","iter 80. reward: 15.865947\n","iter 90. reward: 17.435298\n","iter 100. reward: 22.108749\n","iter 110. reward: 21.537897\n","iter 120. reward: 21.986898\n","iter 130. reward: 22.303096\n","iter 140. reward: 27.540547\n","iter 150. reward: 24.151497\n","iter 160. reward: 26.339196\n","iter 170. reward: 26.184596\n","iter 180. reward: 25.859546\n","iter 190. reward: 28.623797\n","iter 200. reward: 30.171547\n","iter 210. reward: 29.712899\n","iter 220. reward: 28.880399\n","iter 230. reward: 29.221448\n","iter 240. reward: 26.622551\n","iter 250. reward: 21.736548\n","iter 260. reward: 32.192049\n","iter 270. reward: 31.077749\n","iter 280. reward: 30.869947\n","iter 290. reward: 30.829648\n","iter 300. reward: 32.587899\n","iter 310. reward: 32.627998\n","iter 320. reward: 32.198498\n","iter 330. reward: 31.940298\n","iter 340. reward: 32.789998\n","iter 350. reward: 33.619697\n","iter 360. reward: 32.738196\n","iter 370. reward: 34.456997\n","iter 380. reward: 34.972598\n","iter 390. reward: 34.632198\n","iter 400. reward: 32.573597\n","iter 410. reward: 35.826097\n","iter 420. reward: 33.999698\n","iter 430. reward: 35.530297\n","iter 440. reward: 35.589196\n","iter 450. reward: 32.944796\n","iter 460. reward: 36.473798\n","iter 470. reward: 38.662997\n","iter 480. reward: 37.648599\n","iter 490. reward: 37.361099\n","iter 500. reward: 37.407198\n","time taken to train: 33.66626238822937 seconds\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"6p-enWJxY6DZ","outputId":"74d1abc1-2ac5-4666-ae7a-15dfbae43055"},"source":["states_buy, states_sell, total_gains, invest = agent.buy()"],"execution_count":null,"outputs":[{"output_type":"stream","text":["day 1: buy 1 unit at price 762.130005, total balance 9237.869995\n","day 3: buy 1 unit at price 782.520020, total balance 8455.349975\n","day 4, sell 1 unit at price 790.510010, investment 3.723775 %, total balance 9245.859985,\n","day 5, sell 1 unit at price 785.309998, investment 0.356538 %, total balance 10031.169983,\n","day 6: buy 1 unit at price 762.559998, total balance 9268.609985\n","day 10: buy 1 unit at price 764.479980, total balance 8504.130005\n","day 11: buy 1 unit at price 771.229980, total balance 7732.900025\n","day 12: buy 1 unit at price 760.539978, total balance 6972.360047\n","day 17: buy 1 unit at price 768.239990, total balance 6204.120057\n","day 18: buy 1 unit at price 770.840027, total balance 5433.280030\n","day 19: buy 1 unit at price 758.039978, total balance 4675.240052\n","day 20: buy 1 unit at price 747.919983, total balance 3927.320069\n","day 21: buy 1 unit at price 750.500000, total balance 3176.820069\n","day 24, sell 1 unit at price 771.190002, investment 1.131715 %, total balance 3948.010071,\n","day 25: buy 1 unit at price 776.419983, total balance 3171.590088\n","day 26, sell 1 unit at price 789.289978, investment 3.245343 %, total balance 3960.880066,\n","day 27: buy 1 unit at price 789.270020, total balance 3171.610046\n","day 29, sell 1 unit at price 797.070007, investment 3.350496 %, total balance 3968.680053,\n","day 30, sell 1 unit at price 797.849976, investment 4.905725 %, total balance 4766.530029,\n","day 31, sell 1 unit at price 790.799988, investment 2.936582 %, total balance 5557.330017,\n","day 32: buy 1 unit at price 794.200012, total balance 4763.130005\n","day 33: buy 1 unit at price 796.419983, total balance 3966.710022\n","day 34: buy 1 unit at price 794.559998, total balance 3172.150024\n","day 36: buy 1 unit at price 789.909973, total balance 2382.240051\n","day 37, sell 1 unit at price 791.549988, investment 2.686674 %, total balance 3173.790039,\n","day 40: buy 1 unit at price 771.820007, total balance 2401.970032\n","day 41: buy 1 unit at price 786.140015, total balance 1615.830017\n","day 42: buy 1 unit at price 786.900024, total balance 828.929993\n","day 44: buy 1 unit at price 806.150024, total balance 22.779969\n","day 45, sell 1 unit at price 806.650024, investment 6.412597 %, total balance 829.429993,\n","day 48, sell 1 unit at price 806.359985, investment 7.813670 %, total balance 1635.789978,\n","day 49, sell 1 unit at price 807.880005, investment 7.645570 %, total balance 2443.669983,\n","day 50, sell 1 unit at price 804.609985, investment 3.630767 %, total balance 3248.279968,\n","day 51: buy 1 unit at price 806.070007, total balance 2442.209961\n","day 52: buy 1 unit at price 802.174988, total balance 1640.034973\n","day 53: buy 1 unit at price 805.020020, total balance 835.014953\n","day 56, sell 1 unit at price 835.669983, investment 5.878845 %, total balance 1670.684936,\n","day 57, sell 1 unit at price 832.150024, investment 4.778395 %, total balance 2502.834960,\n","day 59: buy 1 unit at price 802.320007, total balance 1700.514953\n","day 61: buy 1 unit at price 795.695007, total balance 904.819946\n","day 62: buy 1 unit at price 798.530029, total balance 106.289917\n","day 69, sell 1 unit at price 819.239990, investment 2.865323 %, total balance 925.529907,\n","day 70, sell 1 unit at price 820.450012, investment 3.258409 %, total balance 1745.979919,\n","day 71: buy 1 unit at price 818.979980, total balance 926.999939\n","day 72: buy 1 unit at price 824.159973, total balance 102.839966\n","day 74, sell 1 unit at price 831.659973, investment 5.285412 %, total balance 934.499939,\n","day 76, sell 1 unit at price 831.330017, investment 7.710348 %, total balance 1765.829956,\n","day 77, sell 1 unit at price 828.640015, investment 5.406162 %, total balance 2594.469971,\n","day 78, sell 1 unit at price 829.280029, investment 5.385691 %, total balance 3423.750000,\n","day 79: buy 1 unit at price 823.210022, total balance 2600.539978\n","day 80: buy 1 unit at price 835.239990, total balance 1765.299988\n","day 81: buy 1 unit at price 830.630005, total balance 934.669983\n","day 83: buy 1 unit at price 827.780029, total balance 106.889954\n","day 85, sell 1 unit at price 835.369995, investment 3.624632 %, total balance 942.259949,\n","day 88: buy 1 unit at price 845.539978, total balance 96.719971\n","day 89, sell 1 unit at price 845.619995, investment 4.906520 %, total balance 942.339966,\n","day 90, sell 1 unit at price 847.200012, investment 5.612868 %, total balance 1789.539978,\n","day 92, sell 1 unit at price 852.119995, investment 5.850783 %, total balance 2641.659973,\n","day 93, sell 1 unit at price 848.400024, investment 5.743346 %, total balance 3490.059997,\n","day 95: buy 1 unit at price 829.590027, total balance 2660.469970\n","day 96: buy 1 unit at price 817.580017, total balance 1842.889953\n","day 98: buy 1 unit at price 819.510010, total balance 1023.379943\n","day 99: buy 1 unit at price 820.919983, total balance 202.459960\n","day 105, sell 1 unit at price 831.409973, investment 4.488525 %, total balance 1033.869933,\n","day 107: buy 1 unit at price 824.669983, total balance 209.199950\n","day 113, sell 1 unit at price 836.820007, investment 4.795058 %, total balance 1046.019957,\n","day 115: buy 1 unit at price 841.650024, total balance 204.369933\n","day 116, sell 1 unit at price 843.190002, investment 2.956119 %, total balance 1047.559935,\n","day 118: buy 1 unit at price 872.299988, total balance 175.259947\n","day 119, sell 1 unit at price 871.729980, investment 5.771939 %, total balance 1046.989927,\n","day 120: buy 1 unit at price 874.250000, total balance 172.739927\n","day 121, sell 1 unit at price 905.960022, investment 10.052113 %, total balance 1078.699949,\n","day 122, sell 1 unit at price 912.570007, investment 9.258419 %, total balance 1991.269956,\n","day 123, sell 1 unit at price 916.440002, investment 10.330712 %, total balance 2907.709958,\n","day 124, sell 1 unit at price 927.039978, investment 11.991102 %, total balance 3834.749936,\n","day 125, sell 1 unit at price 931.659973, investment 10.185207 %, total balance 4766.409909,\n","day 126, sell 1 unit at price 927.130005, investment 11.757612 %, total balance 5693.539914,\n","day 127, sell 1 unit at price 934.299988, investment 14.276275 %, total balance 6627.839902,\n","day 128, sell 1 unit at price 932.169983, investment 13.747236 %, total balance 7560.009885,\n","day 129: buy 1 unit at price 928.780029, total balance 6631.229856\n","day 130: buy 1 unit at price 930.599976, total balance 5700.629880\n","day 132: buy 1 unit at price 937.080017, total balance 4763.549863\n","day 133: buy 1 unit at price 943.000000, total balance 3820.549863\n","day 136: buy 1 unit at price 934.010010, total balance 2886.539853\n","day 137, sell 1 unit at price 941.859985, investment 14.732252 %, total balance 3828.399838,\n","day 139, sell 1 unit at price 954.960022, investment 15.799052 %, total balance 4783.359860,\n","day 140, sell 1 unit at price 969.539978, investment 15.195146 %, total balance 5752.899838,\n","day 141, sell 1 unit at price 971.469971, investment 11.368793 %, total balance 6724.369809,\n","day 142, sell 1 unit at price 975.880005, investment 11.624822 %, total balance 7700.249814,\n","day 143, sell 1 unit at price 964.859985, investment 3.884661 %, total balance 8665.109799,\n","day 144, sell 1 unit at price 966.950012, investment 3.906086 %, total balance 9632.059811,\n","day 145, sell 1 unit at price 975.599976, investment 4.110637 %, total balance 10607.659787,\n","day 146, sell 1 unit at price 983.679993, investment 4.313891 %, total balance 11591.339780,\n","day 147: buy 1 unit at price 976.570007, total balance 10614.769773\n","day 148, sell 1 unit at price 980.940002, investment 5.024571 %, total balance 11595.709775,\n","day 153, sell 1 unit at price 950.760010, investment -2.642923 %, total balance 12546.469785,\n","day 154: buy 1 unit at price 942.309998, total balance 11604.159787\n","day 155: buy 1 unit at price 939.780029, total balance 10664.379758\n","day 156: buy 1 unit at price 957.369995, total balance 9707.009763\n","day 158, sell 1 unit at price 959.450012, investment 1.818936 %, total balance 10666.459775,\n","day 160, sell 1 unit at price 965.590027, investment 2.746387 %, total balance 11632.049802,\n","day 161, sell 1 unit at price 952.270020, investment -0.532707 %, total balance 12584.319822,\n","day 163: buy 1 unit at price 940.489990, total balance 11643.829832\n","day 164: buy 1 unit at price 917.789978, total balance 10726.039854\n","day 166: buy 1 unit at price 898.700012, total balance 9827.339842\n","day 167: buy 1 unit at price 911.710022, total balance 8915.629820\n","day 168: buy 1 unit at price 906.690002, total balance 8008.939818\n","day 171: buy 1 unit at price 930.090027, total balance 7078.849791\n","day 172, sell 1 unit at price 943.830017, investment 0.355137 %, total balance 8022.679808,\n","day 174, sell 1 unit at price 955.989990, investment 4.162174 %, total balance 8978.669798,\n","day 175: buy 1 unit at price 953.419983, total balance 8025.249815\n","day 176, sell 1 unit at price 965.400024, investment 7.421833 %, total balance 8990.649839,\n","day 178, sell 1 unit at price 968.150024, investment 6.190565 %, total balance 9958.799863,\n","day 179, sell 1 unit at price 972.919983, investment 7.304589 %, total balance 10931.719846,\n","day 180, sell 1 unit at price 980.340027, investment 5.402703 %, total balance 11912.059873,\n","day 181, sell 1 unit at price 950.700012, investment -0.285286 %, total balance 12862.759885,\n","day 183: buy 1 unit at price 934.090027, total balance 11928.669858\n","day 185: buy 1 unit at price 930.500000, total balance 10998.169858\n","day 186: buy 1 unit at price 930.830017, total balance 10067.339841\n","day 187: buy 1 unit at price 930.390015, total balance 9136.949826\n","day 188: buy 1 unit at price 923.650024, total balance 8213.299802\n","day 192: buy 1 unit at price 922.900024, total balance 7290.399778\n","day 194: buy 1 unit at price 914.390015, total balance 6376.009763\n","day 195: buy 1 unit at price 922.669983, total balance 5453.339780\n","day 197: buy 1 unit at price 926.960022, total balance 4526.379758\n","day 202: buy 1 unit at price 927.000000, total balance 3599.379758\n","day 203: buy 1 unit at price 921.280029, total balance 2678.099729\n","day 204: buy 1 unit at price 915.890015, total balance 1762.209714\n","day 205: buy 1 unit at price 913.809998, total balance 848.399716\n","day 210, sell 1 unit at price 928.450012, investment -0.603798 %, total balance 1776.849728,\n","day 212, sell 1 unit at price 935.950012, investment 0.585708 %, total balance 2712.799740,\n","day 214: buy 1 unit at price 929.080017, total balance 1783.719723\n","day 215: buy 1 unit at price 932.070007, total balance 851.649716\n","day 216, sell 1 unit at price 935.090027, investment 0.457657 %, total balance 1786.739743,\n","day 217: buy 1 unit at price 925.109985, total balance 861.629758\n","day 222, sell 1 unit at price 932.450012, investment 0.221412 %, total balance 1794.079770,\n","day 223: buy 1 unit at price 928.530029, total balance 865.549741\n","day 227, sell 1 unit at price 949.500000, investment 2.798676 %, total balance 1815.049741,\n","day 228, sell 1 unit at price 959.109985, investment 3.923498 %, total balance 2774.159726,\n","day 229: buy 1 unit at price 953.270020, total balance 1820.889706\n","day 230, sell 1 unit at price 957.789978, investment 4.746329 %, total balance 2778.679684,\n","day 232, sell 1 unit at price 969.960022, investment 5.125347 %, total balance 3748.639706,\n","day 233, sell 1 unit at price 978.890015, investment 5.602183 %, total balance 4727.529721,\n","day 234, sell 1 unit at price 977.000000, investment 5.393743 %, total balance 5704.529721,\n","day 235: buy 1 unit at price 972.599976, total balance 4731.929745\n","day 236, sell 1 unit at price 989.250000, investment 7.377775 %, total balance 5721.179745,\n","day 237, sell 1 unit at price 987.830017, investment 7.854655 %, total balance 6709.009762,\n","day 238, sell 1 unit at price 989.679993, investment 8.302601 %, total balance 7698.689755,\n","day 239, sell 1 unit at price 992.000000, investment 6.772289 %, total balance 8690.689755,\n","day 241, sell 1 unit at price 992.809998, investment 6.516677 %, total balance 9683.499753,\n","day 242, sell 1 unit at price 984.450012, investment 6.414375 %, total balance 10667.949765,\n","day 243, sell 1 unit at price 988.200012, investment 6.426285 %, total balance 11656.149777,\n","day 244: buy 1 unit at price 968.450012, total balance 10687.699765\n","day 248, sell 1 unit at price 1019.270020, investment 6.923537 %, total balance 11706.969785,\n","day 249, sell 1 unit at price 1017.109985, investment 4.576394 %, total balance 12724.079770,\n","day 250, sell 1 unit at price 1016.640015, investment 4.975993 %, total balance 13740.719785,\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"NZOg5ZkJY6D2","outputId":"73e727ef-733c-49c9-9c69-7e232f330b85"},"source":["fig = plt.figure(figsize = (15,5))\n","plt.plot(close, color='r', lw=2.)\n","plt.plot(close, '^', markersize=10, color='m', label = 'buying signal', markevery = states_buy)\n","plt.plot(close, 'v', markersize=10, color='k', label = 'selling signal', markevery = states_sell)\n","plt.title('total gains %f, total investment %f%%'%(total_gains, invest))\n","plt.legend()\n","plt.savefig('output/'+name+'.png')\n","plt.show()"],"execution_count":null,"outputs":[{"output_type":"display_data","data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAA34AAAFBCAYAAAAomn1FAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzs3Xd8VFX6+PHPvTOTBBJqCr2o4ImAdAREEOwKUkTFhmVXs7usi7qWr7quuqvr6u7Pra5l7SsWFLGs2NuqKCqgiECO0msghABJSJuZ+/vj3hlmJjOTSW/P+/XiJdx67uROvM99nnOOYVkWQgghhBBCCCFaL7OpGyCEEEIIIYQQomFJ4CeEEEIIIYQQrZwEfkIIIYQQQgjRykngJ4QQQgghhBCtnAR+QgghhBBCCNHKSeAnhBBCCCGEEK2cBH5CiDZNKfWUUuruBjjuRKWUru/jipZLKXW5UuqzGOv6KqWKlVKuxm6XEEKItsHd1A0QQoh4lFKbgSu11u83xPYNRWv9KaDq+7hKqY+AIUAysAm4XWv9mrPuVuDWkM1dznZZWuu9IcfoCmi7mfqEkOUnA/8C+gJfApdrrbdEaUNfYG3E4lTgBq31/UqpHsAjwGigB3CE1npzyP69gAeBicAh4G6t9cPOuonAW1GOfa7W+mWllAHcBVwBpAHfAL/UWq9x9n8KuAioCNm/k9baF3kdUa7rKWC71vq26ratzfbxaK23Yl9Pk1BKTQYWaK17N9H5P3bO/1iM9RnAa0A29n29Dvt+W+qsfxi4JGQXD1Chte5QzXkvBZ4Grgqc27nH7gWudDZ7DLhZa20lcH8OAe4HRgHpWmsj4nzHYH/HRgH5wI1a61dC1p8P/A7oDWwDbtVav+qsO9lpSzvgWq31C87yzsCHwIla66J41yuEaNsk4yeEEC3LNUAPrXVHIAdY4ARaaK3v0VqnBf4A9wEfhwZ9jvuwH5yDnAfrxcBvga7AcmBhtAZorbdGnOdYwA+87GziB94GZse4hgXYQWs3YCpwj1JqinPsTyOOPQ0odo4HcB7wE+ygsSvwBfBMxPH/FHqMRII+0ewVY//cM4Eu2Pfwf5VSbgCt9c8j7pvngZfiHVAp1QX7RcmaiFU5wExgGDAUOBv4mXOe6u7PSuBF4KdRzufGDl7fwL53A9/fo531vbC/G78GOgI3As8ppbKcQ/zNacvpwIMh2eE/AvdK0CeEqI5k/IQQzZZS6hns7NN/lVI+4Pda6z8ppaZjP+z0Ar4FfqG1Xhdn+5ewA4V2wCpn+8iHvWjndwF/Ai4DirDf5P8T8GitvUqpK4CbsN/O5wP3aa0fcfadTEgGxclEPgBcCvTDflC8TGtd5gRdTwEnYAdNa7Df3vsj26S1/i7knxZ2ZqMPsCui7YZzrt9FLD8eO2P4b8IfTs8B1mitX3K2uxPYq5TK1lrnVvNRXQp8Esjqaa13Yz+YVvl/jFIqDZgMnK+1rgRWKaUWYT/UfxTl2JcBi7TWJc6/jwA+01pvdI63ALiumvZVSymVA1wMWEqpa4GPtNZnOxmah4DhwA7gFq3163G2vxm4CsjCztj8JjSjE+f8/bGD4cC99THwKXASdvDxBXCR1nqvUuotYInW+oGQ/VcBv9NaL1ZKZWPfp4Gs0m+11i86250F/D/se+Yg8Ffn+t4CkpVSxc4hj8YOTAYD5cAMYDN2MD8b+zMvB36qtX7XOXYn4C/AWdj38ZPAHVprn1LqcuwM2jLs+24/ME9r/ZZS6g/Y389xSqm/AU9pra8O/Xy01mXYWWqUUibgww4AuwJ7Ij7LVKeN06r52P8I/AM4P2L5ZcD9WuvtzvHux/6ZPhzlGGH3p9ZaA1opNSDKttlAT+CvWmsL+FAptRSYi/3CpTewX2sdyCguUUqVAEc515iqtf7eaVMFkO7cN0dorX9RzbUKIYRk/IQQzZfWei6wFTjbecP+J+ft+PPAtdhv/9/EDvSSom3vHOotYCD2w/hK4NkEm3AVcCb2Q/9I7CxAqD3YD5cdsUsP/6qUGhnneOcDZ2AHL0OBy53l1wPbnevphp2FsGIdRCn1hlKqDLsc82Ps7FykidjX+3LIfi7s4PPqKMcfjB0UA+A8yG5wlscUEmA+HW+7EEbEfwN/HxLl2KnAuRHHfgE4Sil1tFLKg/3g/XbErvOUUvuUUiuUUrGyjmG01v/Gvi8C2cKzneP/F3gX+7P8FfCsUkpF29451Absz74TdtAdzMjWwkXY91UWkATc4Cx/HrgwsJFSahD2y4Qlzmf2HvCcs98F2EH4IGfzx4GfOSWQQ4APnZ/1mcDOkGzWTmf7s7Ezql2wy2rfwX526AX8HrukN+ApwAsMAEYAp3G4XBJgLHbwloH9QuVxpZShtf4NdpB7tXPusKAvlFLqO6AMeB14TGu9J8pms7ED3k/iHOc47FLkaMFc2HfB+XuV70GM+7OmQu/95cA6pdR0pZRLKTUTO7gOvOzZo5QappQahh1YFwJ/B+bX4fxCiDZEAj8hREszBzvb8Z6TMfp/2Jm842PtoLV+QmtdpLUuB+4EhjnZieqcD/xda71da12I3e8n9LhLtNYbtNaW1vp/2AHCxDjH+4fWeqfWeh92QDHcWV6J3Reun9a60iknixn4aa2nAR2wMyvvRssMcjgTURyybD7wpdZ6RZTt04ADEcsOOOeJ5wTsYHVRNdsF2l4ELAV+q5RKcQLl2UD7KJufA+wF/heybBfwGXYAUYpd+hma8fsHh4P83wJPKaUmJNK2KMZhfy73aq0rtNYfYpfpXRhrB631S87P2K+1Xgj8CBxXy/M/qbX+QWtdil0+GLhfXgGGK6X6Of++GFjs3N/TgM1a6ye11l6t9TfYwf95zraVwCClVEetdaHWemU1bfhUa/2O1tqLXTqZif15VGIH4f2VUp2VUt2w78drtdYlTkD2V+zAM2CL1vpRp/T2aex7vltNPhCt9VDsFy0XYd8H0VwG/CfWd8h5AfIgdqAZ7bsT+V04AKQ5LzlCRbs/4zYf+2XRjUopj1LqNOBEnHvf+Vz+gx20lzv//VlItvvn2IHev7GzhL8A3gdSlFLvKKU+UkqdmGBbhBBtkJR6CiFamp5AcMARrbVfKbUNOwNRhfOQ9wfsB99M7DflYGcdIgOdaOfaFvLv0L+jlDoTuAO7LM7EfoBbHed4eSF/P+QcH+DP2AHpu0opgH9rre8lDufB+y2l1DVKqfVa69dD2tUe+3pnhCzriR34jYpxyGLsB+pQHbFLXOO5DHg5IsCszsXYA1xsAzZi92uKllmM9gB/OzAGu1QxD3tAjw+VUoO11ociApk3lVLPYj+gL61B+wJ6AtsigoMtxLjXIDhYyK+B/s6iNOx7rTYi75c0sINnpdQS7KDqPuxA9Cpnu37AWKXU/pB93RzuBzkbuA2418me3ay1/iJOG3aH/L0U2KsP95ksdf6bhv1ZeYBdzj0M9nci9DsTvB6t9SFnuxoPaOOUfT6vlFqnlPpWax3Mzil74KHJHP48opkHfKe1XhZjfeR3oSNQHCWQjBtgRml3pZPF+yfwf9gZvhexgzyUUqdgZ0InY1cmjAJeV0qdqbX+Vmv9rbMOJ4t8PzAeO/C8FtgJfKKU6pdom4QQbYsEfkKI5i7yAWYn9mAiQLDUsA92/6to21+EHQCdgt1HqRN2iVTk2/todmH3uwnoE3LeZOxMyqXAa85D3asJHjeMkwW7Hrhe2aMCfqiU+lpr/UECu7ux+wCFmgXswy4DDTgOO8Oy1nngbge0U0rlYQcya7AfZAPXl+ocN2ZfSKVUO+wAc1YC7QzS9kihwf5XSqnngK8ijt0H+yH3ZxG7DwcWBvpfYWf0/gYMInrJq0XiP5No91ofpZQZEvz1BX6Itr2TgXsUOBn4wunb9m0Nzl8TzwN3KKU+AVI43D9yG/A/rfWp0XbSWn8NzHDKWK/GDjz6RF5LLWzDDmAynOxgTdXm/B7gSMLLMucCSwN9QGM4GTjR6e8Idj/BEUqp4U6Z6RrsgV0C9+QwIr4Hce7PuLTdRzeYlVNKfc7hUtHh2H1lA/fx10qpL7F/d30bcai/ArdprUuVUscCy7XWFc7PNZOIfo9CCAES+Akhmr/d2A93AS8CNyt7aPNPsEe5LAc+j7F9B2d9AXZG7p4anPtF4Bonu1KC/ZY+IAl7qoR8wOtk/04Dvq/B8QFQSk0DcrH7hx3AHriiSgmaM2jHEdgBnRe77HUS9gAzoaJlIt7icBYKZ9+LgBlOgPIK8GenT9wS7Mzadzr+wC6zsIPoKoOyKKVSsIfdB3vQkBQnUxMY0n479s/lfOzP7ZiIQ8wFPtdab4hY/jVwnlLqBezP/mLsAGC9c+xzsfv8HcJ+YL4Eu59aoF0WMEVr/XGU64m8d750jnOTM8DHBOdYY2Jsn4odwOQ757qCKH0X68mbwBPY/ewWhgSmb2Bn8+Zil2KCHVAUY99f5wFvaK0PKKUOcvg+2409WEgnrXV1mfAqtNa7lFLvAvcrpX7rnO8IoLdTBl2dyM8yjFJqHPYzy1fY99V87DLRLyM2vRQ7CxrP5djBcsBi7FLlx51//wf4tVLqTeyf5/XYWbpQUe9P50VUMvbvh8D3wHLKcFFKDcV+cWBiZx57YPeNBPvevtkJQL9VSo3ALh1/MOIcpwIpWus3nEWbgJOcyodk7N91QghRhfTxE0I0d38EblNK7VdK3aC11tgP8//E7l9zNvZgLhXRtsd+iNuCnRFciz2qYKIexe639x32wBZvYgdcPidLNx87OCzEDqJej3Gc6gzE7qtTjD1644Na62gjXBrYJaF7sIOLa4A5oeWNyh4S/iTs6w7SWpdrrfMCf7ADzErn72it87HLAP/gXM9YQvpnKaUeVvZcaaEuA56JUVZW6lwP2EFtaci607FLPAux+y2d4Zw/VKwBY+7DzvB8iz0y5HXAbK11oLTxGuyf9X7sEtqrAkGek6UpInY57uPY/d/2K6Vede6ps7EHPtmL/QB+aUgwHLn9Wuzyuy+wA5ljqV2JabWcQGIxdnD7XMjyIuxA+gLsjGUe9meW7GwyF9jsBH0/xw6cca7peWCjcz2BMuSauBQ74FmL/bNdhB3YJOLvwLlKqUKl1D+irE/GLg8uwP75ngVM1YcHoUEpNR47Q19lGgel1FvKnucSrfX+iO9CBXAwJOB9BLsP7mrsFzlLCB/EJnCt0e7Pftj3eiBDWIozGqljLnYlwR7szOOpgaDQCZDvBBYppYqwKwru0c6oqc51JGPf19eEHPNX2IPUvI89UqpMXyKEiMqwLCkDF0KIRDhZvYe11v2q3Vg0O0qpS4DBWutbmrotQgghRGOTwE8IIWJw+rBNwc76dcN+A79Ma31tkzZMCCGEEKKGpNRTCCFiM7DnYivELvVch933TQghhBCiRZGMnxBCCCGEEEK0cpLxE0IIIYQQQohWriVO55CMPZT2Luwhz4UQQgghhBCiLXFhj5z8Nfb0SNVqiYHfGODTpm6EEEIIIYQQQjSxicBniWzYEgO/XQCFhSX4/c2rf2J6ehoFBcXVbyhEDcm9JRqS3F+ioci9JRqS3F+iITX3+8s0Dbp0SQUnNkpESwz8fAB+v9XsAj+gWbZJtA5yb4mGJPeXaChyb4mGJPeXaEgt5P5KuOubDO4ihBBCCCGEEK2cBH5CCCGEEEII0cq1xFLPqHw+L4WF+Xi9FU3Whj17TPx+f5OdvyUzTRft2qWRltYJwzCaujlCCCGEEEK0Kq0m8CsszCclpT2pqd2bLHBwu028Xgn8asqyLHw+L0VF+ykszKdr16ymbpIQQgghhBCtSqsp9fR6K0hN7SjZohbIMAzcbg+dO6dTUVHW1M0RQgghhBCi1Wk1gR8gQV8LZxgm0CJGTxJCCCGEEKJFaVWBX22VFJfz6rPfcqi46foHCiGEEEIIIURDkcAPWLF0C7u2HWD50i31dswTThjNoUOH6u14jz32MB988G69HS+W3Ny1/O53tzXY8d9887/cdttNDXZ8IYQQQggh6ouvtBSrlQze2OYDv5LicnJX7wYgd3Ves836XXnlzzn55NMa/DzZ2YO44467G/w8QgghhBBCNGelP/7Ahmt+SeHbbzZ1U+pFqxnVs7ZWLN2CZdn9yizLYvnSLUw6fWC9HPv555/h00//R3l5GT/72S+ZPPlkdu3ayZVXzmXJkg8Awv59//330aNHDy666FIAfvghlzvuuJXnnnuZe+75HdnZxzB79hwef/wRtm7dQklJMTt37qBXr97cddd9pKSkUFxczB//+Ds2bdpIZmYWGRmZdOnSlauvvjasbWVlZdx99x1s3rwRl8tN3779uOuue1m5cjn/+tffefzxZwB4+eWFvPTSC6SldWD8+AksXvwiS5Z8EGz39OnnsGzZUsrKyrj55tsZNmw4Xq+Xm266lgMHDlBeXs6gQYO58cZb8Xg89fK5CiGEEEIIUVNz5sxE69xqt1Mqmw8//IB9774Nfj8YrSNX1jquopYC2T6/zw78/D6rXrN+pmny1FPPcd99f+FPf7qHwsJ9cbefPft8XnttcTAQffnlF5k167yog9ZovY477vgDzz67CK/Xy7vvvgXAk08+SocOHXnuuZe56657+e67b6Oe68svv+DQoRIWLHiJp59+nhtvvLXKNuvX/8gzzzzFQw89wWOP/YeioqKw9QcOHGDIkKE8+eRzXHHFVTz88D8AcLlc3HHH3Tz++DM888xCfD4fS5a8Vv0HJoQQQgghRAMZOnR4tYkIj8fDsGEjKC/YR8mqb8HlouPxxzdSCxtWmw78QrN9AYGsX32YNm0GAH379ufooxVr1qyOu33//kfQs2cvli37nIMHD7J06SecddbZUbc97rhxdOjQAcMwGDRoCDt2bAfgm2+WB/fp2LETEyeeGHX/AQMGsnnzJu6//z4+/PB9kpKSqmzzzTcrGD9+Al26dAFg6tTpYevbtWvPhAkTARg8+Fh27NgBgN/v5/nnF3D55Rdx2WUXsHLlcn788Ye41y6EEEIIIURDysmZh2nGD38qKyt58cXnOXLosZz/1eec/+VSRp84juHDs5kzZ2YjtbRhtNnALzLbF1DfWb9ILpcLv//wOSsqws9z7rkX8Mori1iy5HUmTZpCWlpa1OMkJSUH/26aJj6fr0bt6NWrNwsWvMiYMWNZvvxLLr/8QsrLy2t0jKSkw29M7DZ4AXjvvbf57rtvefDBR/nPfxYya9a5Va5TCCGEEEKIxpSZmcX06bNq1f0okAlsydps4Bct2xdQX1m/JUteB2Dbtq38+KNm8OBj6do1Ha/Xy/bt2wA7SAo1fvwEtm7dwsKFz3LOOefX+JwjRozi7beXAFBUVMSnn34Sdbs9e3Zjmi4mTZrM/PnXs39/IUVFB8O2GT58JMuWfc7+/fsBePvtNxJqQ3FxEZ06daZ9+1SKi4urXKMQQgghhBBNIZGsXzSmaZKTM68BWtR42uTgLrGyfQGBrN/oCf1on1a1BDJRPp+PK664iLKyMm688Va6dOkKwDXXXM911/2Szp07M378CWH7mKbJmWdOZdmyzxkwoOaDzFx++VXcc8/vuOii2aSnZ5CdfUzUrOGGDet5+OEHAPD7fVxyyeVkZGSydevhgHfgwKO56KJL+fnPr6B9+1RGjx5Damr0DGSoM86YxqeffsJFF82mS5eudp10DbOJQgghhBBC1LdA1u+VxS/hTbBizuPxMGPGOWRkZDZw6xqWESvr1Yz1BzYVFBSHlUzm5W2he/d+CR3gk3d+YN13eTEDPwDTZXDM0B41GuHT7Tbxeus+z8e1185j+vRzOOmkU2q8r9frxefzkZycTElJMfPmXcnVV1/HmDFja9WWQ4dKaN8+FYDHH3+EHTu2c/vtd9XqWImoyc+xLcnM7EB+flH1GwpRC3J/iYYi95ZoSHJ/idrKz9/D1DNPosLrTWj75ORklix5v1kFfqZpkJ6eBnAEsDmRfdpkxi9vx8G4QR/YWb+8HQcaqUW23Ny13H77LRx9tGLy5JNqdYyiooNcf/18/H4/FRXlnHrqGbUO+gAeeugBVq9ehddbSc+evbjppt/U+lhCCCGEEEI0tczMLE49ZjDvfP8d3mqSYK0l2wdtNOPXUOor49eWNYefY3MkbzVFQ5L7SzQUubdEQ5L7S9TF6nvv5icLn6WymlioOWb7oHYZvzY7uIsQQgghhBCibepkwZSMTAzD4KijBgRH+jQMIzj4S2vK9oEEfkIIIYQQQog2xldcxOwevRk++FjuuefPYcGe2233hmsNI3mGksBPCCGEEEII0ab4iovpkpTEow89hlLHMH36LAzDYObM2cyYcQ6GYbSqbB+00cFd5syZida51W6nVDYLF77aCC0SQgghhBBCNAbL78d/6BAYBi5n9PqcnHls2LCenJx5WJbFtm2bW1W2D9po4Dd06HA2btxAZWVlzG08Hg/Dho1oxFYJIYQQQgghGpq/pAQsC7N9KobLBdgjfT7xxILgNi+//HKrGzyoTZZ65uTMC9bxxtLYNb1vvvlfbrvtJgBWrlzOT386F4C9e/P51a9+1ihtuPfeu1i16psGO/65557Nxo3rG+z4QgghhBBCVMdXbAd0rg5pTdySxtUmA7/MzCymT58VHL0nUnMawScjI5N//vORRjnXzTf/VrKcQgghhBCiVfMVlwDgSm1bgV+bLPUEO+v3+uuvRF1X12xfWVkZd999B5s3b8TlctO3bz/uuuteAN566w0WL34Jn89HWloaN9xwM3379o95rF27dnLllXNZsuQDAE44YTQ5OfP45JOPOXDgAL/85XwmTz4ZgI8//oB///tBkpOTmTLlFP797wd5991PaN++fdgxP/30Yx599CFM04XP5+W6625i5MjRXH11DhdeOJcJEyaSn7+Hu+++g4KCAnr16oVlwdix45g9ew5/+MOdJCUlsW3bVvbs2c3gwcdy222/wzAM3n33bV566Xm8XruM9pe/vJbRo4+r9WcphBBCCCFEfQpm/NIk8GsTAlm/V199OayvX31k+7788gsOHSphwYKXADh48CAAq1Z9w4cfvse//vUoSUlJfPHFUv74x9/z0ENP1Oj4qampPPbYf/juu2+5/fZbmDz5ZPbtK+BPf7qHRx55kj59+rJw4bMx93/ssUe46abfMGTIUHw+H2VlpVW2+dvf/syIEaO4/PIrycvbxaWXXsDYseOC6zdu3MDf/vYgpmlyxRUXs3z5l4wZM46xY8dx6qmnYxgGW7du5ppr5vHKK2/W6PqEEEIIIYRoKL6SYkACvyqUUv8PmA30B47VWn/vLD8aeBpIBwqAS7XWP9ZlXWOLlvWrj759AwYMZPPmTdx//32MGDGK448/AYClSz9h/fofycm5HADLsigqOljj45988ukADB58LHv35lNeXs7atd9z9NGKPn36AjB16gz++c+/Rt1/1KjR/OMff2Hy5JMYN+54jjxyQJVtVq5cwbXX3ghA9+49GDVqTNj6iRMnk5ycDIBSih07tjNmDOzYsZ077/wN+fn5uN1u9u0roKBgL+npGTW+TiGEEEIIIeqbr8gJ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\n","text/plain":["
"]},"metadata":{"tags":[],"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"viN03Xp5i7DD"},"source":["## Double Q-learning agent"]},{"cell_type":"code","metadata":{"id":"ncrkX6cOY6ER"},"source":["from collections import deque\n","import random\n","\n","df= df_full.copy()\n","name = 'Double Q-learning agent'\n","\n","class Model:\n"," def __init__(self, input_size, output_size, layer_size, learning_rate):\n"," self.X = tf.placeholder(tf.float32, (None, input_size))\n"," self.Y = tf.placeholder(tf.float32, (None, output_size))\n"," feed_forward = tf.layers.dense(self.X, layer_size, activation = tf.nn.relu)\n"," self.logits = tf.layers.dense(feed_forward, output_size)\n"," self.cost = tf.reduce_sum(tf.square(self.Y - self.logits))\n"," self.optimizer = tf.train.AdamOptimizer(learning_rate = learning_rate).minimize(self.cost)\n"," \n","class Agent:\n","\n"," LEARNING_RATE = 0.003\n"," BATCH_SIZE = 32\n"," LAYER_SIZE = 500\n"," OUTPUT_SIZE = 3\n"," EPSILON = 0.5\n"," DECAY_RATE = 0.005\n"," MIN_EPSILON = 0.1\n"," GAMMA = 0.99\n"," MEMORIES = deque()\n"," COPY = 1000\n"," T_COPY = 0\n"," MEMORY_SIZE = 300\n"," \n"," def __init__(self, state_size, window_size, trend, skip):\n"," self.state_size = state_size\n"," self.window_size = window_size\n"," self.half_window = window_size // 2\n"," self.trend = trend\n"," self.skip = skip\n"," tf.reset_default_graph()\n"," self.model = Model(self.state_size, self.OUTPUT_SIZE, self.LAYER_SIZE, self.LEARNING_RATE)\n"," self.model_negative = Model(self.state_size, self.OUTPUT_SIZE, self.LAYER_SIZE, self.LEARNING_RATE)\n"," self.sess = tf.InteractiveSession()\n"," self.sess.run(tf.global_variables_initializer())\n"," self.trainable = tf.trainable_variables()\n"," \n"," def _assign(self):\n"," for i in range(len(self.trainable)//2):\n"," assign_op = self.trainable[i+len(self.trainable)//2].assign(self.trainable[i])\n"," self.sess.run(assign_op)\n","\n"," def _memorize(self, state, action, reward, new_state, done):\n"," self.MEMORIES.append((state, action, reward, new_state, done))\n"," if len(self.MEMORIES) > self.MEMORY_SIZE:\n"," self.MEMORIES.popleft()\n","\n"," def _select_action(self, state):\n"," if np.random.rand() < self.EPSILON:\n"," action = np.random.randint(self.OUTPUT_SIZE)\n"," else:\n"," action = self.get_predicted_action([state])\n"," return action\n","\n"," def _construct_memories(self, replay):\n"," states = np.array([a[0] for a in replay])\n"," new_states = np.array([a[3] for a in replay])\n"," Q = self.predict(states)\n"," Q_new = self.predict(new_states)\n"," Q_new_negative = self.sess.run(self.model_negative.logits, feed_dict={self.model_negative.X:new_states})\n"," replay_size = len(replay)\n"," X = np.empty((replay_size, self.state_size))\n"," Y = np.empty((replay_size, self.OUTPUT_SIZE))\n"," for i in range(replay_size):\n"," state_r, action_r, reward_r, new_state_r, done_r = replay[i]\n"," target = Q[i]\n"," target[action_r] = reward_r\n"," if not done_r:\n"," target[action_r] += self.GAMMA * Q_new_negative[i, np.argmax(Q_new[i])]\n"," X[i] = state_r\n"," Y[i] = target\n"," return X, Y\n","\n"," def predict(self, inputs):\n"," return self.sess.run(self.model.logits, feed_dict={self.model.X:inputs})\n"," \n"," def get_predicted_action(self, sequence):\n"," prediction = self.predict(np.array(sequence))[0]\n"," return np.argmax(prediction)\n"," \n"," def get_state(self, t):\n"," window_size = self.window_size + 1\n"," d = t - window_size + 1\n"," block = self.trend[d : t + 1] if d >= 0 else -d * [self.trend[0]] + self.trend[0 : t + 1]\n"," res = []\n"," for i in range(window_size - 1):\n"," res.append(block[i + 1] - block[i])\n"," return np.array(res)\n"," \n"," def buy(self, initial_money):\n"," starting_money = initial_money\n"," states_sell = []\n"," states_buy = []\n"," inventory = []\n"," state = self.get_state(0)\n"," for t in range(0, len(self.trend) - 1, self.skip):\n"," action = self._select_action(state)\n"," next_state = self.get_state(t + 1)\n"," \n"," if action == 1 and initial_money >= self.trend[t]:\n"," inventory.append(self.trend[t])\n"," initial_money -= self.trend[t]\n"," states_buy.append(t)\n"," print('day %d: buy 1 unit at price %f, total balance %f'% (t, self.trend[t], initial_money))\n"," \n"," elif action == 2 and len(inventory):\n"," bought_price = inventory.pop(0)\n"," initial_money += self.trend[t]\n"," states_sell.append(t)\n"," try:\n"," invest = ((close[t] - bought_price) / bought_price) * 100\n"," except:\n"," invest = 0\n"," print(\n"," 'day %d, sell 1 unit at price %f, investment %f %%, total balance %f,'\n"," % (t, close[t], invest, initial_money)\n"," )\n"," \n"," state = next_state\n"," invest = ((initial_money - starting_money) / starting_money) * 100\n"," total_gains = initial_money - starting_money\n"," return states_buy, states_sell, total_gains, invest\n"," \n"," \n"," def train(self, iterations, checkpoint, initial_money):\n"," for i in range(iterations):\n"," total_profit = 0\n"," inventory = []\n"," state = self.get_state(0)\n"," starting_money = initial_money\n"," for t in range(0, len(self.trend) - 1, self.skip):\n"," if (self.T_COPY + 1) % self.COPY == 0:\n"," self._assign()\n"," \n"," action = self._select_action(state)\n"," next_state = self.get_state(t + 1)\n"," \n"," if action == 1 and starting_money >= self.trend[t]:\n"," inventory.append(self.trend[t])\n"," starting_money -= self.trend[t]\n"," \n"," elif action == 2 and len(inventory) > 0:\n"," bought_price = inventory.pop(0)\n"," total_profit += self.trend[t] - bought_price\n"," starting_money += self.trend[t]\n"," \n"," invest = ((starting_money - initial_money) / initial_money)\n"," \n"," self._memorize(state, action, invest, next_state, starting_money < initial_money)\n"," batch_size = min(len(self.MEMORIES), self.BATCH_SIZE)\n"," replay = random.sample(self.MEMORIES, batch_size)\n"," state = next_state\n"," X, Y = self._construct_memories(replay)\n"," \n"," cost, _ = self.sess.run([self.model.cost, self.model.optimizer], \n"," feed_dict={self.model.X: X, self.model.Y:Y})\n"," self.T_COPY += 1\n"," self.EPSILON = self.MIN_EPSILON + (1.0 - self.MIN_EPSILON) * np.exp(-self.DECAY_RATE * i)\n"," if (i+1) % checkpoint == 0:\n"," print('epoch: %d, total rewards: %f.3, cost: %f, total money: %f'%(i + 1, total_profit, cost,\n"," starting_money))"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"QFML6aw0Y6EV","outputId":"2a70d551-172e-4406-ca15-9a1b5c4ac6ce"},"source":["close = df.Close.values.tolist()\n","initial_money = 10000\n","window_size = 30\n","skip = 1\n","batch_size = 32\n","agent = Agent(state_size = window_size, \n"," window_size = window_size, \n"," trend = close, \n"," skip = skip)\n","agent.train(iterations = 200, checkpoint = 10, initial_money = initial_money)"],"execution_count":null,"outputs":[{"output_type":"stream","text":["epoch: 10, total rewards: 1241.885127.3, cost: 1.110860, total money: 1744.875178\n","epoch: 20, total rewards: 89.105106.3, cost: 0.649060, total money: 8097.275088\n","epoch: 30, total rewards: 719.079470.3, cost: 0.823131, total money: 9699.809450\n","epoch: 40, total rewards: 684.040043.3, cost: 1.931746, total money: 134.750004\n","epoch: 50, total rewards: 1744.829771.3, cost: 0.895153, total money: 11744.829771\n","epoch: 60, total rewards: 149.195010.3, cost: 1.097174, total money: 5196.854982\n","epoch: 70, total rewards: 1389.289786.3, cost: 0.860031, total money: 9399.319754\n","epoch: 80, total rewards: 529.019898.3, cost: 0.305593, total money: 10529.019898\n","epoch: 90, total rewards: 1285.264893.3, cost: 1.882383, total money: 9251.514893\n","epoch: 100, total rewards: 409.474970.3, cost: 0.146280, total money: 551.414972\n","epoch: 110, total rewards: 1074.725155.3, cost: 0.661549, total money: 2231.475154\n","epoch: 120, total rewards: 1713.854676.3, cost: 1.219318, total money: 11713.854676\n","epoch: 130, total rewards: 871.945621.3, cost: 1.460638, total money: 8947.665652\n","epoch: 140, total rewards: 1564.314818.3, cost: 1.133385, total money: 2767.354796\n","epoch: 150, total rewards: 855.729796.3, cost: 1.886093, total money: 10855.729796\n","epoch: 160, total rewards: 302.970157.3, cost: 0.642825, total money: 6320.700137\n","epoch: 170, total rewards: 512.139521.3, cost: 3.411159, total money: 1801.649470\n","epoch: 180, total rewards: 769.354739.3, cost: 0.379282, total money: 10769.354739\n","epoch: 190, total rewards: 332.274720.3, cost: 1.111366, total money: 10332.274720\n","epoch: 200, total rewards: 395.419923.3, cost: 0.270106, total money: 5401.389893\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"_uiABCNXY6Ee","outputId":"0c330e7e-ccdd-4392-d0e7-5e04fb4c7e4c"},"source":["states_buy, states_sell, total_gains, invest = agent.buy(initial_money = initial_money)"],"execution_count":null,"outputs":[{"output_type":"stream","text":["day 7: buy 1 unit at price 754.020020, total balance 9245.979980\n","day 9, sell 1 unit at price 758.489990, investment 0.592818 %, total balance 10004.469970,\n","day 10: buy 1 unit at price 764.479980, total balance 9239.989990\n","day 11: buy 1 unit at price 771.229980, total balance 8468.760010\n","day 12, sell 1 unit at price 760.539978, investment -0.515383 %, total balance 9229.299988,\n","day 13, sell 1 unit at price 769.200012, investment -0.263212 %, total balance 9998.500000,\n","day 17: buy 1 unit at price 768.239990, total balance 9230.260010\n","day 19, sell 1 unit at price 758.039978, investment -1.327712 %, total balance 9988.299988,\n","day 21: buy 1 unit at price 750.500000, total balance 9237.799988\n","day 22, sell 1 unit at price 762.520020, investment 1.601602 %, total balance 10000.320008,\n","day 26: buy 1 unit at price 789.289978, total balance 9211.030030\n","day 27, sell 1 unit at price 789.270020, investment -0.002529 %, total balance 10000.300050,\n","day 30: buy 1 unit at price 797.849976, total balance 9202.450074\n","day 33, sell 1 unit at price 796.419983, investment -0.179231 %, total balance 9998.870057,\n","day 41: buy 1 unit at price 786.140015, total balance 9212.730042\n","day 42, sell 1 unit at price 786.900024, investment 0.096676 %, total balance 9999.630066,\n","day 45: buy 1 unit at price 806.650024, total balance 9192.980042\n","day 46: buy 1 unit at price 804.789978, total balance 8388.190064\n","day 47, sell 1 unit at price 807.909973, investment 0.156195 %, total balance 9196.100037,\n","day 49, sell 1 unit at price 807.880005, investment 0.383954 %, total balance 10003.980042,\n","day 54: buy 1 unit at price 819.309998, total balance 9184.670044\n","day 55, sell 1 unit at price 823.869995, investment 0.556566 %, total balance 10008.540039,\n","day 61: buy 1 unit at price 795.695007, total balance 9212.845032\n","day 62, sell 1 unit at price 798.530029, investment 0.356295 %, total balance 10011.375061,\n","day 64: buy 1 unit at price 801.340027, total balance 9210.035034\n","day 65, sell 1 unit at price 806.969971, investment 0.702566 %, total balance 10017.005005,\n","day 66: buy 1 unit at price 808.380005, total balance 9208.625000\n","day 67: buy 1 unit at price 809.559998, total balance 8399.065002\n","day 68: buy 1 unit at price 813.669983, total balance 7585.395019\n","day 69, sell 1 unit at price 819.239990, investment 1.343426 %, total balance 8404.635009,\n","day 70, sell 1 unit at price 820.450012, investment 1.345177 %, total balance 9225.085021,\n","day 71, sell 1 unit at price 818.979980, investment 0.652598 %, total balance 10044.065001,\n","day 74: buy 1 unit at price 831.659973, total balance 9212.405028\n","day 76, sell 1 unit at price 831.330017, investment -0.039674 %, total balance 10043.735045,\n","day 79: buy 1 unit at price 823.210022, total balance 9220.525023\n","day 80, sell 1 unit at price 835.239990, investment 1.461349 %, total balance 10055.765013,\n","day 83: buy 1 unit at price 827.780029, total balance 9227.984984\n","day 84, sell 1 unit at price 831.909973, investment 0.498918 %, total balance 10059.894957,\n","day 97: buy 1 unit at price 814.429993, total balance 9245.464964\n","day 98, sell 1 unit at price 819.510010, investment 0.623751 %, total balance 10064.974974,\n","day 102: buy 1 unit at price 829.559998, total balance 9235.414976\n","day 103, sell 1 unit at price 838.549988, investment 1.083706 %, total balance 10073.964964,\n","day 104: buy 1 unit at price 834.570007, total balance 9239.394957\n","day 105, sell 1 unit at price 831.409973, investment -0.378642 %, total balance 10070.804930,\n","day 107: buy 1 unit at price 824.669983, total balance 9246.134947\n","day 108: buy 1 unit at price 824.729980, total balance 8421.404967\n","day 109, sell 1 unit at price 823.349976, investment -0.160065 %, total balance 9244.754943,\n","day 110, sell 1 unit at price 824.320007, investment -0.049710 %, total balance 10069.074950,\n","day 113: buy 1 unit at price 836.820007, total balance 9232.254943\n","day 114, sell 1 unit at price 838.210022, investment 0.166107 %, total balance 10070.464965,\n","day 117: buy 1 unit at price 862.760010, total balance 9207.704955\n","day 118, sell 1 unit at price 872.299988, investment 1.105751 %, total balance 10080.004943,\n","day 120: buy 1 unit at price 874.250000, total balance 9205.754943\n","day 123, sell 1 unit at price 916.440002, investment 4.825851 %, total balance 10122.194945,\n","day 125: buy 1 unit at price 931.659973, total balance 9190.534972\n","day 126: buy 1 unit at price 927.130005, total balance 8263.404967\n","day 127, sell 1 unit at price 934.299988, investment 0.283367 %, total balance 9197.704955,\n","day 128, sell 1 unit at price 932.169983, investment 0.543611 %, total balance 10129.874938,\n","day 132: buy 1 unit at price 937.080017, total balance 9192.794921\n","day 133, sell 1 unit at price 943.000000, investment 0.631748 %, total balance 10135.794921,\n","day 135: buy 1 unit at price 930.239990, total balance 9205.554931\n","day 138, sell 1 unit at price 948.820007, investment 1.997336 %, total balance 10154.374938,\n","day 139: buy 1 unit at price 954.960022, total balance 9199.414916\n","day 140, sell 1 unit at price 969.539978, investment 1.526761 %, total balance 10168.954894,\n","day 141: buy 1 unit at price 971.469971, total balance 9197.484923\n","day 143, sell 1 unit at price 964.859985, investment -0.680411 %, total balance 10162.344908,\n","day 153: buy 1 unit at price 950.760010, total balance 9211.584898\n","day 154, sell 1 unit at price 942.309998, investment -0.888764 %, total balance 10153.894896,\n","day 157: buy 1 unit at price 950.630005, total balance 9203.264891\n","day 158, sell 1 unit at price 959.450012, investment 0.927807 %, total balance 10162.714903,\n","day 161: buy 1 unit at price 952.270020, total balance 9210.444883\n","day 162: buy 1 unit at price 927.330017, total balance 8283.114866\n","day 163, sell 1 unit at price 940.489990, investment -1.237047 %, total balance 9223.604856,\n","day 164, sell 1 unit at price 917.789978, investment -1.028764 %, total balance 10141.394834,\n","day 171: buy 1 unit at price 930.090027, total balance 9211.304807\n","day 172, sell 1 unit at price 943.830017, investment 1.477275 %, total balance 10155.134824,\n","day 178: buy 1 unit at price 968.150024, total balance 9186.984800\n","day 179, sell 1 unit at price 972.919983, investment 0.492688 %, total balance 10159.904783,\n","day 180: buy 1 unit at price 980.340027, total balance 9179.564756\n","day 181: buy 1 unit at price 950.700012, total balance 8228.864744\n","day 182: buy 1 unit at price 947.799988, total balance 7281.064756\n","day 183: buy 1 unit at price 934.090027, total balance 6346.974729\n","day 185: buy 1 unit at price 930.500000, total balance 5416.474729\n","day 186, sell 1 unit at price 930.830017, investment -5.050290 %, total balance 6347.304746,\n","day 188: buy 1 unit at price 923.650024, total balance 5423.654722\n","day 189: buy 1 unit at price 927.960022, total balance 4495.694700\n","day 190, sell 1 unit at price 929.359985, investment -2.244665 %, total balance 5425.054685,\n","day 193, sell 1 unit at price 907.239990, investment -4.279384 %, total balance 6332.294675,\n","day 195, sell 1 unit at price 922.669983, investment -1.222585 %, total balance 7254.964658,\n","day 196, sell 1 unit at price 922.219971, investment -0.889847 %, total balance 8177.184629,\n","day 197, sell 1 unit at price 926.960022, investment 0.358361 %, total balance 9104.144651,\n","day 198, sell 1 unit at price 910.979980, investment -1.829825 %, total balance 10015.124631,\n","day 202: buy 1 unit at price 927.000000, total balance 9088.124631\n","day 205: buy 1 unit at price 913.809998, total balance 8174.314633\n","day 207, sell 1 unit at price 929.570007, investment 0.277239 %, total balance 9103.884640,\n","day 208, sell 1 unit at price 939.330017, investment 2.792705 %, total balance 10043.214657,\n","day 215: buy 1 unit at price 932.070007, total balance 9111.144650\n","day 217: buy 1 unit at price 925.109985, total balance 8186.034665\n","day 218: buy 1 unit at price 920.289978, total balance 7265.744687\n","day 219: buy 1 unit at price 915.000000, total balance 6350.744687\n","day 220: buy 1 unit at price 921.809998, total balance 5428.934689\n","day 221, sell 1 unit at price 931.580017, investment -0.052570 %, total balance 6360.514706,\n","day 222: buy 1 unit at price 932.450012, total balance 5428.064694\n","day 223: buy 1 unit at price 928.530029, total balance 4499.534665\n","day 224, sell 1 unit at price 920.969971, investment -0.447516 %, total balance 5420.504636,\n","day 225: buy 1 unit at price 924.859985, total balance 4495.644651\n","day 226: buy 1 unit at price 944.489990, total balance 3551.154661\n","day 228, sell 1 unit at price 959.109985, investment 4.218236 %, total balance 4510.264646,\n","day 229, sell 1 unit at price 953.270020, investment 4.182516 %, total balance 5463.534666,\n","day 230, sell 1 unit at price 957.789978, investment 3.903188 %, total balance 6421.324644,\n","day 231, sell 1 unit at price 951.679993, investment 2.062307 %, total balance 7373.004637,\n","day 232, sell 1 unit at price 969.960022, investment 4.461890 %, total balance 8342.964659,\n","day 235: buy 1 unit at price 972.599976, total balance 7370.364683\n","day 236, sell 1 unit at price 989.250000, investment 6.962137 %, total balance 8359.614683,\n","day 238: buy 1 unit at price 989.679993, total balance 7369.934690\n","day 241: buy 1 unit at price 992.809998, total balance 6377.124692\n","day 242, sell 1 unit at price 984.450012, investment 4.230857 %, total balance 7361.574704,\n","day 243: buy 1 unit at price 988.200012, total balance 6373.374692\n","day 244: buy 1 unit at price 968.450012, total balance 5404.924680\n","day 245, sell 1 unit at price 970.539978, investment -0.211803 %, total balance 6375.464658,\n","day 246: buy 1 unit at price 973.330017, total balance 5402.134641\n","day 247, sell 1 unit at price 972.559998, investment -1.729852 %, total balance 6374.694639,\n","day 248: buy 1 unit at price 1019.270020, total balance 5355.424619\n","day 249, sell 1 unit at price 1017.109985, investment 2.447597 %, total balance 6372.534604,\n","day 250: buy 1 unit at price 1016.640015, total balance 5355.894589\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"NhaJxtjyY6Et","outputId":"7e2fe462-8c4b-4c29-d8d9-e7f8a5f12f3e"},"source":["fig = plt.figure(figsize = (15,5))\n","plt.plot(close, color='r', lw=2.)\n","plt.plot(close, '^', markersize=10, color='m', label = 'buying signal', markevery = states_buy)\n","plt.plot(close, 'v', markersize=10, color='k', label = 'selling signal', markevery = states_sell)\n","plt.title('total gains %f, total investment %f%%'%(total_gains, invest))\n","plt.legend()\n","plt.savefig('output/'+name+'.png')\n","plt.show()"],"execution_count":null,"outputs":[{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["
"]},"metadata":{"tags":[],"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"8Pfd6VDvjQL8"},"source":["## Recurrent Q-learning agent"]},{"cell_type":"code","metadata":{"id":"3De2HdkaY6FH"},"source":["from collections import deque\n","import random\n","\n","df= df_full.copy()\n","name = 'Recurrent Q-learning agent'\n"," \n","class Agent:\n","\n"," LEARNING_RATE = 0.003\n"," BATCH_SIZE = 32\n"," LAYER_SIZE = 256\n"," OUTPUT_SIZE = 3\n"," EPSILON = 0.5\n"," DECAY_RATE = 0.005\n"," MIN_EPSILON = 0.1\n"," GAMMA = 0.99\n"," MEMORIES = deque()\n"," MEMORY_SIZE = 300\n"," \n"," def __init__(self, state_size, window_size, trend, skip):\n"," self.state_size = state_size\n"," self.window_size = window_size\n"," self.half_window = window_size // 2\n"," self.trend = trend\n"," self.skip = skip\n"," tf.reset_default_graph()\n"," self.INITIAL_FEATURES = np.zeros((4, self.state_size))\n"," self.X = tf.placeholder(tf.float32, (None, None, self.state_size))\n"," self.Y = tf.placeholder(tf.float32, (None, self.OUTPUT_SIZE))\n"," cell = tf.nn.rnn_cell.LSTMCell(self.LAYER_SIZE, state_is_tuple = False)\n"," self.hidden_layer = tf.placeholder(tf.float32, (None, 2 * self.LAYER_SIZE))\n"," self.rnn,self.last_state = tf.nn.dynamic_rnn(inputs=self.X,cell=cell,\n"," dtype=tf.float32,\n"," initial_state=self.hidden_layer)\n"," self.logits = tf.layers.dense(self.rnn[:,-1], self.OUTPUT_SIZE)\n"," self.cost = tf.reduce_sum(tf.square(self.Y - self.logits))\n"," self.optimizer = tf.train.AdamOptimizer(learning_rate = self.LEARNING_RATE).minimize(self.cost)\n"," self.sess = tf.InteractiveSession()\n"," self.sess.run(tf.global_variables_initializer())\n"," \n"," def _memorize(self, state, action, reward, new_state, dead, rnn_state):\n"," self.MEMORIES.append((state, action, reward, new_state, dead, rnn_state))\n"," if len(self.MEMORIES) > self.MEMORY_SIZE:\n"," self.MEMORIES.popleft()\n","\n"," def _construct_memories(self, replay):\n"," states = np.array([a[0] for a in replay])\n"," new_states = np.array([a[3] for a in replay])\n"," init_values = np.array([a[-1] for a in replay])\n"," Q = self.sess.run(self.logits, feed_dict={self.X:states, self.hidden_layer:init_values})\n"," Q_new = self.sess.run(self.logits, feed_dict={self.X:new_states, self.hidden_layer:init_values})\n"," replay_size = len(replay)\n"," X = np.empty((replay_size, 4, self.state_size))\n"," Y = np.empty((replay_size, self.OUTPUT_SIZE))\n"," INIT_VAL = np.empty((replay_size, 2 * self.LAYER_SIZE))\n"," for i in range(replay_size):\n"," state_r, action_r, reward_r, new_state_r, dead_r, rnn_memory = replay[i]\n"," target = Q[i]\n"," target[action_r] = reward_r\n"," if not dead_r:\n"," target[action_r] += self.GAMMA * np.amax(Q_new[i])\n"," X[i] = state_r\n"," Y[i] = target\n"," INIT_VAL[i] = rnn_memory\n"," return X, Y, INIT_VAL\n"," \n"," def get_state(self, t):\n"," window_size = self.window_size + 1\n"," d = t - window_size + 1\n"," block = self.trend[d : t + 1] if d >= 0 else -d * [self.trend[0]] + self.trend[0 : t + 1]\n"," res = []\n"," for i in range(window_size - 1):\n"," res.append(block[i + 1] - block[i])\n"," return np.array(res)\n"," \n"," def buy(self, initial_money):\n"," starting_money = initial_money\n"," states_sell = []\n"," states_buy = []\n"," inventory = []\n"," state = self.get_state(0)\n"," init_value = np.zeros((1, 2 * self.LAYER_SIZE))\n"," for k in range(self.INITIAL_FEATURES.shape[0]):\n"," self.INITIAL_FEATURES[k,:] = state\n"," for t in range(0, len(self.trend) - 1, self.skip):\n"," action, last_state = self.sess.run([self.logits,self.last_state],\n"," feed_dict={self.X:[self.INITIAL_FEATURES],\n"," self.hidden_layer:init_value})\n"," action, init_value = np.argmax(action[0]), last_state\n"," next_state = self.get_state(t + 1)\n"," \n"," if action == 1 and initial_money >= self.trend[t]:\n"," inventory.append(self.trend[t])\n"," initial_money -= self.trend[t]\n"," states_buy.append(t)\n"," print('day %d: buy 1 unit at price %f, total balance %f'% (t, self.trend[t], initial_money))\n"," \n"," elif action == 2 and len(inventory):\n"," bought_price = inventory.pop(0)\n"," initial_money += self.trend[t]\n"," states_sell.append(t)\n"," try:\n"," invest = ((close[t] - bought_price) / bought_price) * 100\n"," except:\n"," invest = 0\n"," print(\n"," 'day %d, sell 1 unit at price %f, investment %f %%, total balance %f,'\n"," % (t, close[t], invest, initial_money)\n"," )\n"," \n"," new_state = np.append([self.get_state(t + 1)], self.INITIAL_FEATURES[:3, :], axis = 0)\n"," self.INITIAL_FEATURES = new_state\n"," invest = ((initial_money - starting_money) / starting_money) * 100\n"," total_gains = initial_money - starting_money\n"," return states_buy, states_sell, total_gains, invest\n"," \n"," \n"," def train(self, iterations, checkpoint, initial_money):\n"," for i in range(iterations):\n"," total_profit = 0\n"," inventory = []\n"," state = self.get_state(0)\n"," starting_money = initial_money\n"," init_value = np.zeros((1, 2 * self.LAYER_SIZE))\n"," for k in range(self.INITIAL_FEATURES.shape[0]):\n"," self.INITIAL_FEATURES[k,:] = state\n"," for t in range(0, len(self.trend) - 1, self.skip):\n"," \n"," if np.random.rand() < self.EPSILON:\n"," action = np.random.randint(self.OUTPUT_SIZE)\n"," else:\n"," action, last_state = self.sess.run([self.logits,\n"," self.last_state],\n"," feed_dict={self.X:[self.INITIAL_FEATURES],\n"," self.hidden_layer:init_value})\n"," action, init_value = np.argmax(action[0]), last_state\n"," \n"," next_state = self.get_state(t + 1)\n"," \n"," if action == 1 and starting_money >= self.trend[t]:\n"," inventory.append(self.trend[t])\n"," starting_money -= self.trend[t]\n"," \n"," elif action == 2 and len(inventory) > 0:\n"," bought_price = inventory.pop(0)\n"," total_profit += self.trend[t] - bought_price\n"," starting_money += self.trend[t]\n"," \n"," invest = ((starting_money - initial_money) / initial_money)\n"," new_state = np.append([self.get_state(t + 1)], self.INITIAL_FEATURES[:3, :], axis = 0)\n"," self._memorize(self.INITIAL_FEATURES, action, invest, new_state, \n"," starting_money < initial_money, init_value[0])\n"," self.INITIAL_FEATURES = new_state\n"," batch_size = min(len(self.MEMORIES), self.BATCH_SIZE)\n"," replay = random.sample(self.MEMORIES, batch_size)\n"," X, Y, INIT_VAL = self._construct_memories(replay)\n"," \n"," cost, _ = self.sess.run([self.cost, self.optimizer], \n"," feed_dict={self.X: X, self.Y:Y,\n"," self.hidden_layer: INIT_VAL})\n"," self.EPSILON = self.MIN_EPSILON + (1.0 - self.MIN_EPSILON) * np.exp(-self.DECAY_RATE * i)\n"," \n"," if (i+1) % checkpoint == 0:\n"," print('epoch: %d, total rewards: %f.3, cost: %f, total money: %f'%(i + 1, total_profit, cost,\n"," starting_money))"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"ynsI0rAgY6FM","outputId":"709572ed-a2c5-490c-baab-08cfa65c0c82"},"source":["close = df.Close.values.tolist()\n","initial_money = 10000\n","window_size = 30\n","skip = 1\n","batch_size = 32\n","agent = Agent(state_size = window_size, \n"," window_size = window_size, \n"," trend = close, \n"," skip = skip)\n","agent.train(iterations = 200, checkpoint = 10, initial_money = initial_money)"],"execution_count":null,"outputs":[{"output_type":"stream","text":["WARNING:tensorflow:: Using a concatenated state is slower and will soon be deprecated. Use state_is_tuple=True.\n","epoch: 10, total rewards: 449.400388.3, cost: 0.117951, total money: 7420.680355\n","epoch: 20, total rewards: 513.109983.3, cost: 0.187314, total money: 7552.130003\n","epoch: 30, total rewards: 1755.114813.3, cost: 0.337607, total money: 6759.834784\n","epoch: 40, total rewards: 545.719909.3, cost: 0.555657, total money: 9529.079894\n","epoch: 50, total rewards: 593.435182.3, cost: 0.399239, total money: 6611.165162\n","epoch: 60, total rewards: 285.174678.3, cost: 0.071772, total money: 6314.564631\n","epoch: 70, total rewards: 169.200014.3, cost: 0.796504, total money: 4264.030030\n","epoch: 80, total rewards: 520.019840.3, cost: 0.567794, total money: 6501.959842\n","epoch: 90, total rewards: 498.320189.3, cost: 0.245750, total money: 9481.210204\n","epoch: 100, total rewards: 1572.605044.3, cost: 1.142984, total money: 11572.605044\n","epoch: 110, total rewards: 297.584960.3, cost: 0.973414, total money: 10297.584960\n","epoch: 120, total rewards: 912.394901.3, cost: 2.032860, total money: 6987.034854\n","epoch: 130, total rewards: 22.109988.3, cost: 0.097879, total money: 10022.109988\n","epoch: 140, total rewards: 471.779909.3, cost: 0.532008, total money: 10471.779909\n","epoch: 150, total rewards: 215.255126.3, cost: 0.236825, total money: 10215.255126\n","epoch: 160, total rewards: 147.780093.3, cost: 0.432537, total money: 9174.450076\n","epoch: 170, total rewards: 203.309817.3, cost: 0.413111, total money: 10203.309817\n","epoch: 180, total rewards: 76.350403.3, cost: 0.132205, total money: 8084.520385\n","epoch: 190, total rewards: 173.749880.3, cost: 1.325852, total money: 10173.749880\n","epoch: 200, total rewards: 4.325196.3, cost: 0.500293, total money: 8987.685181\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"l2_IseMoY6FR","outputId":"98d2339b-7cd9-48c4-be57-9f78a23497ac"},"source":["states_buy, states_sell, total_gains, invest = agent.buy(initial_money = initial_money)"],"execution_count":null,"outputs":[{"output_type":"stream","text":["day 13: buy 1 unit at price 769.200012, total balance 9230.799988\n","day 14: buy 1 unit at price 768.270020, total balance 8462.529968\n","day 15, sell 1 unit at price 760.989990, investment -1.067346 %, total balance 9223.519958,\n","day 17: buy 1 unit at price 768.239990, total balance 8455.279968\n","day 18, sell 1 unit at price 770.840027, investment 0.334519 %, total balance 9226.119995,\n","day 19, sell 1 unit at price 758.039978, investment -1.327712 %, total balance 9984.159973,\n","day 29: buy 1 unit at price 797.070007, total balance 9187.089966\n","day 30: buy 1 unit at price 797.849976, total balance 8389.239990\n","day 33, sell 1 unit at price 796.419983, investment -0.081552 %, total balance 9185.659973,\n","day 34: buy 1 unit at price 794.559998, total balance 8391.099975\n","day 36, sell 1 unit at price 789.909973, investment -0.995175 %, total balance 9181.009948,\n","day 37, sell 1 unit at price 791.549988, investment -0.378827 %, total balance 9972.559936,\n","day 39: buy 1 unit at price 782.789978, total balance 9189.769958\n","day 40, sell 1 unit at price 771.820007, investment -1.401394 %, total balance 9961.589965,\n","day 46: buy 1 unit at price 804.789978, total balance 9156.799987\n","day 47: buy 1 unit at price 807.909973, total balance 8348.890014\n","day 49, sell 1 unit at price 807.880005, investment 0.383954 %, total balance 9156.770019,\n","day 50, sell 1 unit at price 804.609985, investment -0.408460 %, total balance 9961.380004,\n","day 51: buy 1 unit at price 806.070007, total balance 9155.309997\n","day 54, sell 1 unit at price 819.309998, investment 1.642536 %, total balance 9974.619995,\n","day 110: buy 1 unit at price 824.320007, total balance 9150.299988\n","day 111, sell 1 unit at price 823.559998, investment -0.092198 %, total balance 9973.859986,\n","day 128: buy 1 unit at price 932.169983, total balance 9041.690003\n","day 129: buy 1 unit at price 928.780029, total balance 8112.909974\n","day 130, sell 1 unit at price 930.599976, investment -0.168425 %, total balance 9043.509950,\n","day 131, sell 1 unit at price 932.219971, investment 0.370372 %, total balance 9975.729921,\n","day 173: buy 1 unit at price 947.159973, total balance 9028.569948\n","day 175, sell 1 unit at price 953.419983, investment 0.660924 %, total balance 9981.989931,\n","day 182: buy 1 unit at price 947.799988, total balance 9034.189943\n","day 183, sell 1 unit at price 934.090027, investment -1.446504 %, total balance 9968.279970,\n","day 197: buy 1 unit at price 926.960022, total balance 9041.319948\n","day 198, sell 1 unit at price 910.979980, investment -1.723919 %, total balance 9952.299928,\n","day 204: buy 1 unit at price 915.890015, total balance 9036.409913\n","day 205, sell 1 unit at price 913.809998, investment -0.227103 %, total balance 9950.219911,\n","day 207: buy 1 unit at price 929.570007, total balance 9020.649904\n","day 209, sell 1 unit at price 937.340027, investment 0.835872 %, total balance 9957.989931,\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"w-SAzKY9Y6FZ","outputId":"130881f3-947b-484b-c3b1-84a4ec2d670a"},"source":["fig = plt.figure(figsize = (15,5))\n","plt.plot(close, color='r', lw=2.)\n","plt.plot(close, '^', markersize=10, color='m', label = 'buying signal', markevery = states_buy)\n","plt.plot(close, 'v', markersize=10, color='k', label = 'selling signal', markevery = states_sell)\n","plt.title('total gains %f, total investment %f%%'%(total_gains, invest))\n","plt.legend()\n","plt.savefig('output/'+name+'.png')\n","plt.show()"],"execution_count":null,"outputs":[{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["
"]},"metadata":{"tags":[],"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"CSVcFMujj0jV"},"source":["## Double Recurrent Q-learning agent"]},{"cell_type":"code","metadata":{"id":"ZBtNunUBY6Fu"},"source":["from collections import deque\n","import random\n","\n","\n","df= df_full.copy()\n","name = 'Double Recurrent Q-learning agent'\n","\n","\n","class Model:\n"," def __init__(self, input_size, output_size, layer_size, learning_rate, name):\n"," with tf.variable_scope(name):\n"," self.X = tf.placeholder(tf.float32, (None, None, input_size))\n"," self.Y = tf.placeholder(tf.float32, (None, output_size))\n"," cell = tf.nn.rnn_cell.LSTMCell(layer_size, state_is_tuple = False)\n"," self.hidden_layer = tf.placeholder(tf.float32, (None, 2 * layer_size))\n"," self.rnn,self.last_state = tf.nn.dynamic_rnn(inputs=self.X,cell=cell,\n"," dtype=tf.float32,\n"," initial_state=self.hidden_layer)\n"," self.logits = tf.layers.dense(self.rnn[:,-1], output_size)\n"," self.cost = tf.reduce_sum(tf.square(self.Y - self.logits))\n"," self.optimizer = tf.train.AdamOptimizer(learning_rate = learning_rate).minimize(self.cost)\n"," \n","class Agent:\n","\n"," LEARNING_RATE = 0.003\n"," BATCH_SIZE = 32\n"," LAYER_SIZE = 256\n"," OUTPUT_SIZE = 3\n"," EPSILON = 0.5\n"," DECAY_RATE = 0.005\n"," MIN_EPSILON = 0.1\n"," GAMMA = 0.99\n"," MEMORIES = deque()\n"," COPY = 1000\n"," T_COPY = 0\n"," MEMORY_SIZE = 300\n"," \n"," def __init__(self, state_size, window_size, trend, skip):\n"," self.state_size = state_size\n"," self.window_size = window_size\n"," self.half_window = window_size // 2\n"," self.trend = trend\n"," self.skip = skip\n"," tf.reset_default_graph()\n"," self.INITIAL_FEATURES = np.zeros((4, self.state_size))\n"," self.model = Model(self.state_size, self.OUTPUT_SIZE, self.LAYER_SIZE, self.LEARNING_RATE,\n"," 'real_model')\n"," self.model_negative = Model(self.state_size, self.OUTPUT_SIZE, self.LAYER_SIZE, self.LEARNING_RATE,\n"," 'negative_model')\n"," self.sess = tf.InteractiveSession()\n"," self.sess.run(tf.global_variables_initializer())\n"," self.trainable = tf.trainable_variables()\n"," \n"," def _assign(self, from_name, to_name):\n"," from_w = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES, scope=from_name)\n"," to_w = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES, scope=to_name)\n"," for i in range(len(from_w)):\n"," assign_op = to_w[i].assign(from_w[i])\n"," self.sess.run(assign_op)\n","\n"," def _memorize(self, state, action, reward, new_state, dead, rnn_state):\n"," self.MEMORIES.append((state, action, reward, new_state, dead, rnn_state))\n"," if len(self.MEMORIES) > self.MEMORY_SIZE:\n"," self.MEMORIES.popleft()\n","\n"," def _select_action(self, state):\n"," if np.random.rand() < self.EPSILON:\n"," action = np.random.randint(self.OUTPUT_SIZE)\n"," else:\n"," action = self.get_predicted_action([state])\n"," return action\n","\n"," def _construct_memories(self, replay):\n"," states = np.array([a[0] for a in replay])\n"," new_states = np.array([a[3] for a in replay])\n"," init_values = np.array([a[-1] for a in replay])\n"," Q = self.sess.run(self.model.logits, feed_dict={self.model.X:states, \n"," self.model.hidden_layer:init_values})\n"," Q_new = self.sess.run(self.model.logits, feed_dict={self.model.X:new_states, \n"," self.model.hidden_layer:init_values})\n"," Q_new_negative = self.sess.run(self.model_negative.logits, \n"," feed_dict={self.model_negative.X:new_states, \n"," self.model_negative.hidden_layer:init_values})\n"," replay_size = len(replay)\n"," X = np.empty((replay_size, 4, self.state_size))\n"," Y = np.empty((replay_size, self.OUTPUT_SIZE))\n"," INIT_VAL = np.empty((replay_size, 2 * self.LAYER_SIZE))\n"," for i in range(replay_size):\n"," state_r, action_r, reward_r, new_state_r, dead_r, rnn_memory = replay[i]\n"," target = Q[i]\n"," target[action_r] = reward_r\n"," if not dead_r:\n"," target[action_r] += self.GAMMA * Q_new_negative[i, np.argmax(Q_new[i])]\n"," X[i] = state_r\n"," Y[i] = target\n"," INIT_VAL[i] = rnn_memory\n"," return X, Y, INIT_VAL\n"," \n"," def get_state(self, t):\n"," window_size = self.window_size + 1\n"," d = t - window_size + 1\n"," block = self.trend[d : t + 1] if d >= 0 else -d * [self.trend[0]] + self.trend[0 : t + 1]\n"," res = []\n"," for i in range(window_size - 1):\n"," res.append(block[i + 1] - block[i])\n"," return np.array(res)\n"," \n"," def buy(self, initial_money):\n"," starting_money = initial_money\n"," states_sell = []\n"," states_buy = []\n"," inventory = []\n"," state = self.get_state(0)\n"," init_value = np.zeros((1, 2 * self.LAYER_SIZE))\n"," for k in range(self.INITIAL_FEATURES.shape[0]):\n"," self.INITIAL_FEATURES[k,:] = state\n"," for t in range(0, len(self.trend) - 1, self.skip):\n"," action, last_state = self.sess.run([self.model.logits,self.model.last_state],\n"," feed_dict={self.model.X:[self.INITIAL_FEATURES],\n"," self.model.hidden_layer:init_value})\n"," action, init_value = np.argmax(action[0]), last_state\n"," next_state = self.get_state(t + 1)\n"," \n"," if action == 1 and initial_money >= self.trend[t]:\n"," inventory.append(self.trend[t])\n"," initial_money -= self.trend[t]\n"," states_buy.append(t)\n"," print('day %d: buy 1 unit at price %f, total balance %f'% (t, self.trend[t], initial_money))\n"," \n"," elif action == 2 and len(inventory):\n"," bought_price = inventory.pop(0)\n"," initial_money += self.trend[t]\n"," states_sell.append(t)\n"," try:\n"," invest = ((close[t] - bought_price) / bought_price) * 100\n"," except:\n"," invest = 0\n"," print(\n"," 'day %d, sell 1 unit at price %f, investment %f %%, total balance %f,'\n"," % (t, close[t], invest, initial_money)\n"," )\n"," \n"," new_state = np.append([self.get_state(t + 1)], self.INITIAL_FEATURES[:3, :], axis = 0)\n"," self.INITIAL_FEATURES = new_state\n"," invest = ((initial_money - starting_money) / starting_money) * 100\n"," total_gains = initial_money - starting_money\n"," return states_buy, states_sell, total_gains, invest\n"," \n"," \n"," def train(self, iterations, checkpoint, initial_money):\n"," for i in range(iterations):\n"," total_profit = 0\n"," inventory = []\n"," state = self.get_state(0)\n"," starting_money = initial_money\n"," init_value = np.zeros((1, 2 * self.LAYER_SIZE))\n"," for k in range(self.INITIAL_FEATURES.shape[0]):\n"," self.INITIAL_FEATURES[k,:] = state\n"," for t in range(0, len(self.trend) - 1, self.skip):\n"," if (self.T_COPY + 1) % self.COPY == 0:\n"," self._assign('real_model', 'negative_model')\n"," \n"," if np.random.rand() < self.EPSILON:\n"," action = np.random.randint(self.OUTPUT_SIZE)\n"," else:\n"," action, last_state = self.sess.run([self.model.logits,\n"," self.model.last_state],\n"," feed_dict={self.model.X:[self.INITIAL_FEATURES],\n"," self.model.hidden_layer:init_value})\n"," action, init_value = np.argmax(action[0]), last_state\n"," \n"," next_state = self.get_state(t + 1)\n"," \n"," if action == 1 and starting_money >= self.trend[t]:\n"," inventory.append(self.trend[t])\n"," starting_money -= self.trend[t]\n"," \n"," elif action == 2 and len(inventory) > 0:\n"," bought_price = inventory.pop(0)\n"," total_profit += self.trend[t] - bought_price\n"," starting_money += self.trend[t]\n"," \n"," invest = ((starting_money - initial_money) / initial_money)\n"," new_state = np.append([self.get_state(t + 1)], self.INITIAL_FEATURES[:3, :], axis = 0)\n"," \n"," self._memorize(self.INITIAL_FEATURES, action, invest, new_state, \n"," starting_money < initial_money, init_value[0])\n"," self.INITIAL_FEATURES = new_state\n"," batch_size = min(len(self.MEMORIES), self.BATCH_SIZE)\n"," replay = random.sample(self.MEMORIES, batch_size)\n"," X, Y, INIT_VAL = self._construct_memories(replay)\n"," \n"," cost, _ = self.sess.run([self.model.cost, self.model.optimizer], \n"," feed_dict={self.model.X: X, self.model.Y:Y,\n"," self.model.hidden_layer: INIT_VAL})\n"," self.T_COPY += 1\n"," self.EPSILON = self.MIN_EPSILON + (1.0 - self.MIN_EPSILON) * np.exp(-self.DECAY_RATE * i)\n"," if (i+1) % checkpoint == 0:\n"," print('epoch: %d, total rewards: %f.3, cost: %f, total money: %f'%(i + 1, total_profit, cost,\n"," starting_money))"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"Bg_KX0osY6F1","outputId":"b891d5a5-4313-4453-9524-e0250fd8c41e"},"source":["close = df.Close.values.tolist()\n","initial_money = 10000\n","window_size = 30\n","skip = 1\n","batch_size = 32\n","agent = Agent(state_size = window_size, \n"," window_size = window_size, \n"," trend = close, \n"," skip = skip)\n","agent.train(iterations = 200, checkpoint = 10, initial_money = initial_money)"],"execution_count":null,"outputs":[{"output_type":"stream","text":["WARNING:tensorflow:: Using a concatenated state is slower and will soon be deprecated. Use state_is_tuple=True.\n","WARNING:tensorflow:: Using a concatenated state is slower and will soon be deprecated. Use state_is_tuple=True.\n","epoch: 10, total rewards: 1305.274912.3, cost: 0.402263, total money: 777.284860\n","epoch: 20, total rewards: 582.070375.3, cost: 0.782595, total money: 804.650331\n","epoch: 30, total rewards: 420.380369.3, cost: 1.481925, total money: 80.210326\n","epoch: 40, total rewards: 1502.554748.3, cost: 0.343374, total money: 2823.564757\n","epoch: 50, total rewards: 589.170222.3, cost: 0.370314, total money: 6597.640193\n","epoch: 60, total rewards: 1069.864985.3, cost: 0.733583, total money: 10052.755000\n","epoch: 70, total rewards: 900.360168.3, cost: 0.154633, total money: 8866.610168\n","epoch: 80, total rewards: 625.559509.3, cost: 0.573019, total money: 9652.999511\n","epoch: 90, total rewards: 966.905028.3, cost: 0.080430, total money: 6971.785033\n","epoch: 100, total rewards: 784.169802.3, cost: 0.568819, total money: 10784.169802\n","epoch: 110, total rewards: 658.149963.3, cost: 0.052230, total money: 9641.509948\n","epoch: 120, total rewards: 615.210201.3, cost: 0.802322, total money: 9595.940181\n","epoch: 130, total rewards: 623.289978.3, cost: 0.278659, total money: 10623.289978\n","epoch: 140, total rewards: 595.960078.3, cost: 0.094435, total money: 10595.960078\n","epoch: 150, total rewards: 594.979550.3, cost: 0.360762, total money: 1819.289547\n","epoch: 160, total rewards: 794.614687.3, cost: 1.058314, total money: 3118.034730\n","epoch: 170, total rewards: 1225.854981.3, cost: 0.226553, total money: 5322.584961\n","epoch: 180, total rewards: 1099.610169.3, cost: 0.275357, total money: 6189.200135\n","epoch: 190, total rewards: 857.554813.3, cost: 0.417154, total money: 7946.004825\n","epoch: 200, total rewards: 1049.100096.3, cost: 0.839669, total money: 3317.970090\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"B0EYcm2QY6F9","outputId":"d0514aee-0e81-4242-e58b-8e9526375904"},"source":["states_buy, states_sell, total_gains, invest = agent.buy(initial_money = initial_money)"],"execution_count":null,"outputs":[{"output_type":"stream","text":["day 0: buy 1 unit at price 768.700012, total balance 9231.299988\n","day 1, sell 1 unit at price 762.130005, investment -0.854691 %, total balance 9993.429993,\n","day 3: buy 1 unit at price 782.520020, total balance 9210.909973\n","day 4, sell 1 unit at price 790.510010, investment 1.021059 %, total balance 10001.419983,\n","day 5: buy 1 unit at price 785.309998, total balance 9216.109985\n","day 6, sell 1 unit at price 762.559998, investment -2.896945 %, total balance 9978.669983,\n","day 7: buy 1 unit at price 754.020020, total balance 9224.649963\n","day 8, sell 1 unit at price 736.080017, investment -2.379248 %, total balance 9960.729980,\n","day 13: buy 1 unit at price 769.200012, total balance 9191.529968\n","day 16, sell 1 unit at price 761.679993, investment -0.977642 %, total balance 9953.209961,\n","day 19: buy 1 unit at price 758.039978, total balance 9195.169983\n","day 20, sell 1 unit at price 747.919983, investment -1.335021 %, total balance 9943.089966,\n","day 24: buy 1 unit at price 771.190002, total balance 9171.899964\n","day 28: buy 1 unit at price 796.099976, total balance 8375.799988\n","day 29: buy 1 unit at price 797.070007, total balance 7578.729981\n","day 31: buy 1 unit at price 790.799988, total balance 6787.929993\n","day 32, sell 1 unit at price 794.200012, investment 2.983702 %, total balance 7582.130005,\n","day 33, sell 1 unit at price 796.419983, investment 0.040197 %, total balance 8378.549988,\n","day 35, sell 1 unit at price 791.260010, investment -0.728919 %, total balance 9169.809998,\n","day 36, sell 1 unit at price 789.909973, investment -0.112546 %, total balance 9959.719971,\n","day 38: buy 1 unit at price 785.049988, total balance 9174.669983\n","day 41: buy 1 unit at price 786.140015, total balance 8388.529968\n","day 42, sell 1 unit at price 786.900024, investment 0.235658 %, total balance 9175.429992,\n","day 43, sell 1 unit at price 794.020020, investment 1.002367 %, total balance 9969.450012,\n","day 44: buy 1 unit at price 806.150024, total balance 9163.299988\n","day 46, sell 1 unit at price 804.789978, investment -0.168709 %, total balance 9968.089966,\n","day 47: buy 1 unit at price 807.909973, total balance 9160.179993\n","day 49, sell 1 unit at price 807.880005, investment -0.003709 %, total balance 9968.059998,\n","day 51: buy 1 unit at price 806.070007, total balance 9161.989991\n","day 52: buy 1 unit at price 802.174988, total balance 8359.815003\n","day 54: buy 1 unit at price 819.309998, total balance 7540.505005\n","day 55, sell 1 unit at price 823.869995, investment 2.208243 %, total balance 8364.375000,\n","day 56: buy 1 unit at price 835.669983, total balance 7528.705017\n","day 57: buy 1 unit at price 832.150024, total balance 6696.554993\n","day 58, sell 1 unit at price 823.309998, investment 2.634713 %, total balance 7519.864991,\n","day 59, sell 1 unit at price 802.320007, investment -2.073695 %, total balance 8322.184998,\n","day 61, sell 1 unit at price 795.695007, investment -4.783584 %, total balance 9117.880005,\n","day 62, sell 1 unit at price 798.530029, investment -4.040136 %, total balance 9916.410034,\n","day 68: buy 1 unit at price 813.669983, total balance 9102.740051\n","day 69, sell 1 unit at price 819.239990, investment 0.684554 %, total balance 9921.980041,\n","day 76: buy 1 unit at price 831.330017, total balance 9090.650024\n","day 77: buy 1 unit at price 828.640015, total balance 8262.010009\n","day 79, sell 1 unit at price 823.210022, investment -0.976747 %, total balance 9085.220031,\n","day 81, sell 1 unit at price 830.630005, investment 0.240151 %, total balance 9915.850036,\n","day 86: buy 1 unit at price 838.679993, total balance 9077.170043\n","day 88: buy 1 unit at price 845.539978, total balance 8231.630065\n","day 89, sell 1 unit at price 845.619995, investment 0.827491 %, total balance 9077.250060,\n","day 91, sell 1 unit at price 848.780029, investment 0.383193 %, total balance 9926.030089,\n","day 95: buy 1 unit at price 829.590027, total balance 9096.440062\n","day 96, sell 1 unit at price 817.580017, investment -1.447704 %, total balance 9914.020079,\n","day 97: buy 1 unit at price 814.429993, total balance 9099.590086\n","day 101: buy 1 unit at price 831.500000, total balance 8268.090086\n","day 102: buy 1 unit at price 829.559998, total balance 7438.530088\n","day 104, sell 1 unit at price 834.570007, investment 2.472897 %, total balance 8273.100095,\n","day 105, sell 1 unit at price 831.409973, investment -0.010827 %, total balance 9104.510068,\n","day 106, sell 1 unit at price 827.880005, investment -0.202516 %, total balance 9932.390073,\n","day 108: buy 1 unit at price 824.729980, total balance 9107.660093\n","day 109, sell 1 unit at price 823.349976, investment -0.167328 %, total balance 9931.010069,\n","day 114: buy 1 unit at price 838.210022, total balance 9092.800047\n","day 117, sell 1 unit at price 862.760010, investment 2.928859 %, total balance 9955.560057,\n","day 121: buy 1 unit at price 905.960022, total balance 9049.600035\n","day 122: buy 1 unit at price 912.570007, total balance 8137.030028\n","day 124: buy 1 unit at price 927.039978, total balance 7209.990050\n","day 125: buy 1 unit at price 931.659973, total balance 6278.330077\n","day 130, sell 1 unit at price 930.599976, investment 2.719762 %, total balance 7208.930053,\n","day 131, sell 1 unit at price 932.219971, investment 2.153256 %, total balance 8141.150024,\n","day 132, sell 1 unit at price 937.080017, investment 1.083021 %, total balance 9078.230041,\n","day 133, sell 1 unit at price 943.000000, investment 1.217185 %, total balance 10021.230041,\n","day 137: buy 1 unit at price 941.859985, total balance 9079.370056\n","day 138, sell 1 unit at price 948.820007, investment 0.738966 %, total balance 10028.190063,\n","day 142: buy 1 unit at price 975.880005, total balance 9052.310058\n","day 143: buy 1 unit at price 964.859985, total balance 8087.450073\n","day 144: buy 1 unit at price 966.950012, total balance 7120.500061\n","day 145, sell 1 unit at price 975.599976, investment -0.028695 %, total balance 8096.100037,\n","day 146, sell 1 unit at price 983.679993, investment 1.950543 %, total balance 9079.780030,\n","day 147: buy 1 unit at price 976.570007, total balance 8103.210023\n","day 148: buy 1 unit at price 980.940002, total balance 7122.270021\n","day 150, sell 1 unit at price 949.830017, investment -1.770515 %, total balance 8072.100038,\n","day 151: buy 1 unit at price 942.900024, total balance 7129.200014\n","day 152, sell 1 unit at price 953.400024, investment -2.372588 %, total balance 8082.600038,\n","day 153: buy 1 unit at price 950.760010, total balance 7131.840028\n","day 154, sell 1 unit at price 942.309998, investment -3.938060 %, total balance 8074.150026,\n","day 155, sell 1 unit at price 939.780029, investment -0.330894 %, total balance 9013.930055,\n","day 156, sell 1 unit at price 957.369995, investment 0.695232 %, total balance 9971.300050,\n","day 159: buy 1 unit at price 957.090027, total balance 9014.210023\n","day 160: buy 1 unit at price 965.590027, total balance 8048.619996\n","day 161, sell 1 unit at price 952.270020, investment -0.503611 %, total balance 9000.890016,\n","day 162: buy 1 unit at price 927.330017, total balance 8073.559999\n","day 163: buy 1 unit at price 940.489990, total balance 7133.070009\n","day 165: buy 1 unit at price 908.729980, total balance 6224.340029\n","day 167: buy 1 unit at price 911.710022, total balance 5312.630007\n","day 169, sell 1 unit at price 918.590027, investment -4.867490 %, total balance 6231.220034,\n","day 170, sell 1 unit at price 928.799988, investment 0.158516 %, total balance 7160.020022,\n","day 173, sell 1 unit at price 947.159973, investment 0.709203 %, total balance 8107.179995,\n","day 174: buy 1 unit at price 955.989990, total balance 7151.190005\n","day 175: buy 1 unit at price 953.419983, total balance 6197.770022\n","day 176: buy 1 unit at price 965.400024, total balance 5232.369998\n","day 177, sell 1 unit at price 970.890015, investment 6.840320 %, total balance 6203.260013,\n","day 178: buy 1 unit at price 968.150024, total balance 5235.109989\n","day 179: buy 1 unit at price 972.919983, total balance 4262.190006\n","day 180: buy 1 unit at price 980.340027, total balance 3281.849979\n","day 181, sell 1 unit at price 950.700012, investment 4.276578 %, total balance 4232.549991,\n","day 182, sell 1 unit at price 947.799988, investment -0.856704 %, total balance 5180.349979,\n","day 184, sell 1 unit at price 941.530029, investment -1.247085 %, total balance 6121.880008,\n","day 185, sell 1 unit at price 930.500000, investment -3.615084 %, total balance 7052.380008,\n","day 186: buy 1 unit at price 930.830017, total balance 6121.549991\n","day 190: buy 1 unit at price 929.359985, total balance 5192.190006\n","day 191, sell 1 unit at price 926.789978, investment -4.272070 %, total balance 6118.979984,\n","day 192, sell 1 unit at price 922.900024, investment -5.141220 %, total balance 7041.880008,\n","day 193, sell 1 unit at price 907.239990, investment -7.456600 %, total balance 7949.119998,\n","day 196: buy 1 unit at price 922.219971, total balance 7026.900027\n","day 198: buy 1 unit at price 910.979980, total balance 6115.920047\n","day 199, sell 1 unit at price 910.669983, investment -2.165813 %, total balance 7026.590030,\n","day 200, sell 1 unit at price 906.659973, investment -2.442542 %, total balance 7933.250003,\n","day 201, sell 1 unit at price 924.690002, investment 0.267835 %, total balance 8857.940005,\n","day 204, sell 1 unit at price 915.890015, investment 0.538984 %, total balance 9773.830020,\n","day 205: buy 1 unit at price 913.809998, total balance 8860.020022\n","day 206, sell 1 unit at price 921.289978, investment 0.818549 %, total balance 9781.310000,\n","day 209: buy 1 unit at price 937.340027, total balance 8843.969973\n","day 210: buy 1 unit at price 928.450012, total balance 7915.519961\n","day 211, sell 1 unit at price 927.809998, investment -1.016710 %, total balance 8843.329959,\n","day 212: buy 1 unit at price 935.950012, total balance 7907.379947\n","day 214, sell 1 unit at price 929.080017, investment 0.067856 %, total balance 8836.459964,\n","day 216, sell 1 unit at price 935.090027, investment -0.091884 %, total balance 9771.549991,\n","day 217: buy 1 unit at price 925.109985, total balance 8846.440006\n","day 219, sell 1 unit at price 915.000000, investment -1.092841 %, total balance 9761.440006,\n","day 220: buy 1 unit at price 921.809998, total balance 8839.630008\n","day 221: buy 1 unit at price 931.580017, total balance 7908.049991\n","day 222: buy 1 unit at price 932.450012, total balance 6975.599979\n","day 226, sell 1 unit at price 944.489990, investment 2.460376 %, total balance 7920.089969,\n","day 227: buy 1 unit at price 949.500000, total balance 6970.589969\n","day 229, sell 1 unit at price 953.270020, investment 2.328303 %, total balance 7923.859989,\n","day 230: buy 1 unit at price 957.789978, total balance 6966.070011\n","day 231: buy 1 unit at price 951.679993, total balance 6014.390018\n","day 232: buy 1 unit at price 969.960022, total balance 5044.429996\n","day 233, sell 1 unit at price 978.890015, investment 4.980428 %, total balance 6023.320011,\n","day 234: buy 1 unit at price 977.000000, total balance 5046.320011\n","day 237, sell 1 unit at price 987.830017, investment 4.036863 %, total balance 6034.150028,\n","day 239, sell 1 unit at price 992.000000, investment 3.571767 %, total balance 7026.150028,\n","day 240, sell 1 unit at price 992.179993, investment 4.255632 %, total balance 8018.330021,\n","day 243, sell 1 unit at price 988.200012, investment 1.880489 %, total balance 9006.530033,\n","day 244, sell 1 unit at price 968.450012, investment -0.875127 %, total balance 9974.980045,\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"8UiDs2g9Y6GB","outputId":"c2fde5c6-00de-427b-e839-db42a87ca78b"},"source":["fig = plt.figure(figsize = (15,5))\n","plt.plot(close, color='r', lw=2.)\n","plt.plot(close, '^', markersize=10, color='m', label = 'buying signal', markevery = states_buy)\n","plt.plot(close, 'v', markersize=10, color='k', label = 'selling signal', markevery = states_sell)\n","plt.title('total gains %f, total investment %f%%'%(total_gains, invest))\n","plt.legend()\n","plt.savefig('output/'+name+'.png')\n","plt.show()"],"execution_count":null,"outputs":[{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["
"]},"metadata":{"tags":[],"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"OqEiMmYxkAEs"},"source":["## Duel Q-learning agent"]},{"cell_type":"code","metadata":{"id":"XeqtoEHjY6Gl"},"source":["from collections import deque\n","import random\n","\n","df= df_full.copy()\n","name = 'Duel Q-learning agent'\n","\n","class Agent:\n"," def __init__(self, state_size, window_size, trend, skip, batch_size):\n"," self.state_size = state_size\n"," self.window_size = window_size\n"," self.half_window = window_size // 2\n"," self.trend = trend\n"," self.skip = skip\n"," self.action_size = 3\n"," self.batch_size = batch_size\n"," self.memory = deque(maxlen = 1000)\n"," self.inventory = []\n","\n"," self.gamma = 0.95\n"," self.epsilon = 0.5\n"," self.epsilon_min = 0.01\n"," self.epsilon_decay = 0.999\n","\n"," tf.reset_default_graph()\n"," self.sess = tf.InteractiveSession()\n"," self.X = tf.placeholder(tf.float32, [None, self.state_size])\n"," self.Y = tf.placeholder(tf.float32, [None, self.action_size])\n"," feed = tf.layers.dense(self.X, 512, activation = tf.nn.relu)\n"," tensor_action, tensor_validation = tf.split(feed,2,1)\n"," feed_action = tf.layers.dense(tensor_action, self.action_size)\n"," feed_validation = tf.layers.dense(tensor_validation, 1)\n"," self.logits = feed_validation + tf.subtract(feed_action,tf.reduce_mean(feed_action,axis=1,keep_dims=True))\n"," self.cost = tf.reduce_mean(tf.square(self.Y - self.logits))\n"," self.optimizer = tf.train.GradientDescentOptimizer(1e-5).minimize(\n"," self.cost\n"," )\n"," self.sess.run(tf.global_variables_initializer())\n","\n"," def act(self, state):\n"," if random.random() <= self.epsilon:\n"," return random.randrange(self.action_size)\n"," return np.argmax(\n"," self.sess.run(self.logits, feed_dict = {self.X: state})[0]\n"," )\n"," \n"," def get_state(self, t):\n"," window_size = self.window_size + 1\n"," d = t - window_size + 1\n"," block = self.trend[d : t + 1] if d >= 0 else -d * [self.trend[0]] + self.trend[0 : t + 1]\n"," res = []\n"," for i in range(window_size - 1):\n"," res.append(block[i + 1] - block[i])\n"," return np.array([res])\n","\n"," def replay(self, batch_size):\n"," mini_batch = []\n"," l = len(self.memory)\n"," for i in range(l - batch_size, l):\n"," mini_batch.append(self.memory[i])\n"," replay_size = len(mini_batch)\n"," X = np.empty((replay_size, self.state_size))\n"," Y = np.empty((replay_size, self.action_size))\n"," states = np.array([a[0][0] for a in mini_batch])\n"," new_states = np.array([a[3][0] for a in mini_batch])\n"," Q = self.sess.run(self.logits, feed_dict = {self.X: states})\n"," Q_new = self.sess.run(self.logits, feed_dict = {self.X: new_states})\n"," for i in range(len(mini_batch)):\n"," state, action, reward, next_state, done = mini_batch[i]\n"," target = Q[i]\n"," target[action] = reward\n"," if not done:\n"," target[action] += self.gamma * np.amax(Q_new[i])\n"," X[i] = state\n"," Y[i] = target\n"," cost, _ = self.sess.run(\n"," [self.cost, self.optimizer], feed_dict = {self.X: X, self.Y: Y}\n"," )\n"," if self.epsilon > self.epsilon_min:\n"," self.epsilon *= self.epsilon_decay\n"," return cost\n"," \n"," def buy(self, initial_money):\n"," starting_money = initial_money\n"," states_sell = []\n"," states_buy = []\n"," inventory = []\n"," state = self.get_state(0)\n"," for t in range(0, len(self.trend) - 1, self.skip):\n"," action = self.act(state)\n"," next_state = self.get_state(t + 1)\n"," \n"," if action == 1 and initial_money >= self.trend[t] and t < (len(self.trend) - self.half_window):\n"," inventory.append(self.trend[t])\n"," initial_money -= self.trend[t]\n"," states_buy.append(t)\n"," print('day %d: buy 1 unit at price %f, total balance %f'% (t, self.trend[t], initial_money))\n"," \n"," \n"," elif action == 2 and len(inventory):\n"," bought_price = inventory.pop(0)\n"," initial_money += self.trend[t]\n"," states_sell.append(t)\n"," try:\n"," invest = ((close[t] - bought_price) / bought_price) * 100\n"," except:\n"," invest = 0\n"," print(\n"," 'day %d, sell 1 unit at price %f, investment %f %%, total balance %f,'\n"," % (t, close[t], invest, initial_money)\n"," )\n"," \n"," state = next_state\n"," invest = ((initial_money - starting_money) / starting_money) * 100\n"," total_gains = initial_money - starting_money\n"," return states_buy, states_sell, total_gains, invest\n"," \n"," def train(self, iterations, checkpoint, initial_money):\n"," for i in range(iterations):\n"," total_profit = 0\n"," inventory = []\n"," state = self.get_state(0)\n"," starting_money = initial_money\n"," for t in range(0, len(self.trend) - 1, self.skip):\n"," action = self.act(state)\n"," next_state = self.get_state(t + 1)\n"," \n"," if action == 1 and starting_money >= self.trend[t] and t < (len(self.trend) - self.half_window):\n"," inventory.append(self.trend[t])\n"," starting_money -= self.trend[t]\n"," \n"," elif action == 2 and len(inventory) > 0:\n"," bought_price = inventory.pop(0)\n"," total_profit += self.trend[t] - bought_price\n"," starting_money += self.trend[t]\n"," \n"," invest = ((starting_money - initial_money) / initial_money)\n"," self.memory.append((state, action, invest, \n"," next_state, starting_money < initial_money))\n"," state = next_state\n"," batch_size = min(self.batch_size, len(self.memory))\n"," cost = self.replay(batch_size)\n"," if (i+1) % checkpoint == 0:\n"," print('epoch: %d, total rewards: %f.3, cost: %f, total money: %f'%(i + 1, total_profit, cost,\n"," starting_money))"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"wM7bti2oY6Go","outputId":"44bed94a-4ae4-4e84-e4f4-50b454f70c39"},"source":["close = df.Close.values.tolist()\n","initial_money = 10000\n","window_size = 30\n","skip = 1\n","batch_size = 32\n","agent = Agent(state_size = window_size, \n"," window_size = window_size, \n"," trend = close, \n"," skip = skip, \n"," batch_size = batch_size)\n","agent.train(iterations = 200, checkpoint = 10, initial_money = initial_money)"],"execution_count":null,"outputs":[{"output_type":"stream","text":["WARNING:tensorflow:From :30: calling reduce_mean (from tensorflow.python.ops.math_ops) with keep_dims is deprecated and will be removed in a future version.\n","Instructions for updating:\n","keep_dims is deprecated, use keepdims instead\n","epoch: 10, total rewards: 231.100222.3, cost: 0.499693, total money: 10231.100222\n","epoch: 20, total rewards: 195.875063.3, cost: 0.324152, total money: 10195.875063\n","epoch: 30, total rewards: 219.615054.3, cost: 0.237771, total money: 10219.615054\n","epoch: 40, total rewards: 56.505131.3, cost: 0.183305, total money: 10056.505131\n","epoch: 50, total rewards: 190.745120.3, cost: 0.129967, total money: 10190.745120\n","epoch: 60, total rewards: 165.275088.3, cost: 0.134246, total money: 10165.275088\n","epoch: 70, total rewards: 201.795107.3, cost: 0.075016, total money: 10201.795107\n","epoch: 80, total rewards: 187.545045.3, cost: 0.062454, total money: 10187.545045\n","epoch: 90, total rewards: 206.835023.3, cost: 0.050687, total money: 10206.835023\n","epoch: 100, total rewards: 199.895082.3, cost: 0.041359, total money: 10199.895082\n","epoch: 110, total rewards: 184.405092.3, cost: 0.035289, total money: 10184.405092\n","epoch: 120, total rewards: 242.405092.3, cost: 0.047248, total money: 10242.405092\n","epoch: 130, total rewards: 148.405032.3, cost: 0.050786, total money: 10148.405032\n","epoch: 140, total rewards: 225.724978.3, cost: 0.021171, total money: 10225.724978\n","epoch: 150, total rewards: 168.344972.3, cost: 0.018388, total money: 10168.344972\n","epoch: 160, total rewards: 230.095034.3, cost: 0.199324, total money: 10230.095034\n","epoch: 170, total rewards: 206.275026.3, cost: 0.044696, total money: 10206.275026\n","epoch: 180, total rewards: 364.895023.3, cost: 0.016494, total money: 10364.895023\n","epoch: 190, total rewards: 220.664980.3, cost: 0.014381, total money: 10220.664980\n","epoch: 200, total rewards: 175.284975.3, cost: 0.010883, total money: 10175.284975\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"_yvtgOnYY6Gu","outputId":"cb94003d-5a14-43f0-dac2-7607d3b9137b"},"source":["states_buy, states_sell, total_gains, invest = agent.buy(initial_money = initial_money)"],"execution_count":null,"outputs":[{"output_type":"stream","text":["day 7: buy 1 unit at price 754.020020, total balance 9245.979980\n","day 8: buy 1 unit at price 736.080017, total balance 8509.899963\n","day 9, sell 1 unit at price 758.489990, investment 0.592818 %, total balance 9268.389953,\n","day 11: buy 1 unit at price 771.229980, total balance 8497.159973\n","day 12, sell 1 unit at price 760.539978, investment 3.323003 %, total balance 9257.699951,\n","day 14, sell 1 unit at price 768.270020, investment -0.383797 %, total balance 10025.969971,\n","day 22: buy 1 unit at price 762.520020, total balance 9263.449951\n","day 24, sell 1 unit at price 771.190002, investment 1.137017 %, total balance 10034.639953,\n","day 28: buy 1 unit at price 796.099976, total balance 9238.539977\n","day 29: buy 1 unit at price 797.070007, total balance 8441.469970\n","day 31, sell 1 unit at price 790.799988, investment -0.665744 %, total balance 9232.269958,\n","day 32: buy 1 unit at price 794.200012, total balance 8438.069946\n","day 33: buy 1 unit at price 796.419983, total balance 7641.649963\n","day 37, sell 1 unit at price 791.549988, investment -0.692539 %, total balance 8433.199951,\n","day 39, sell 1 unit at price 782.789978, investment -1.436670 %, total balance 9215.989929,\n","day 41, sell 1 unit at price 786.140015, investment -1.290772 %, total balance 10002.129944,\n","day 48: buy 1 unit at price 806.359985, total balance 9195.769959\n","day 49: buy 1 unit at price 807.880005, total balance 8387.889954\n","day 50, sell 1 unit at price 804.609985, investment -0.217025 %, total balance 9192.499939,\n","day 52: buy 1 unit at price 802.174988, total balance 8390.324951\n","day 53, sell 1 unit at price 805.020020, investment -0.354011 %, total balance 9195.344971,\n","day 56, sell 1 unit at price 835.669983, investment 4.175522 %, total balance 10031.014954,\n","day 67: buy 1 unit at price 809.559998, total balance 9221.454956\n","day 68: buy 1 unit at price 813.669983, total balance 8407.784973\n","day 69, sell 1 unit at price 819.239990, investment 1.195710 %, total balance 9227.024963,\n","day 71: buy 1 unit at price 818.979980, total balance 8408.044983\n","day 72, sell 1 unit at price 824.159973, investment 1.289219 %, total balance 9232.204956,\n","day 76: buy 1 unit at price 831.330017, total balance 8400.874939\n","day 77, sell 1 unit at price 828.640015, investment 1.179520 %, total balance 9229.514954,\n","day 78: buy 1 unit at price 829.280029, total balance 8400.234925\n","day 79, sell 1 unit at price 823.210022, investment -0.976747 %, total balance 9223.444947,\n","day 80: buy 1 unit at price 835.239990, total balance 8388.204957\n","day 81, sell 1 unit at price 830.630005, investment 0.162789 %, total balance 9218.834962,\n","day 83, sell 1 unit at price 827.780029, investment -0.893152 %, total balance 10046.614991,\n","day 88: buy 1 unit at price 845.539978, total balance 9201.075013\n","day 89, sell 1 unit at price 845.619995, investment 0.009463 %, total balance 10046.695008,\n","day 91: buy 1 unit at price 848.780029, total balance 9197.914979\n","day 92: buy 1 unit at price 852.119995, total balance 8345.794984\n","day 93: buy 1 unit at price 848.400024, total balance 7497.394960\n","day 96, sell 1 unit at price 817.580017, investment -3.675865 %, total balance 8314.974977,\n","day 97: buy 1 unit at price 814.429993, total balance 7500.544984\n","day 100, sell 1 unit at price 831.409973, investment -2.430411 %, total balance 8331.954957,\n","day 101, sell 1 unit at price 831.500000, investment -1.991988 %, total balance 9163.454957,\n","day 103, sell 1 unit at price 838.549988, investment 2.961580 %, total balance 10002.004945,\n","day 104: buy 1 unit at price 834.570007, total balance 9167.434938\n","day 105: buy 1 unit at price 831.409973, total balance 8336.024965\n","day 106, sell 1 unit at price 827.880005, investment -0.801611 %, total balance 9163.904970,\n","day 107: buy 1 unit at price 824.669983, total balance 8339.234987\n","day 108: buy 1 unit at price 824.729980, total balance 7514.505007\n","day 110: buy 1 unit at price 824.320007, total balance 6690.185000\n","day 111: buy 1 unit at price 823.559998, total balance 5866.625002\n","day 112, sell 1 unit at price 837.169983, investment 0.692800 %, total balance 6703.794985,\n","day 113, sell 1 unit at price 836.820007, investment 1.473320 %, total balance 7540.614992,\n","day 114, sell 1 unit at price 838.210022, investment 1.634479 %, total balance 8378.825014,\n","day 115, sell 1 unit at price 841.650024, investment 2.102341 %, total balance 9220.475038,\n","day 116, sell 1 unit at price 843.190002, investment 2.383555 %, total balance 10063.665040,\n","day 122: buy 1 unit at price 912.570007, total balance 9151.095033\n","day 123, sell 1 unit at price 916.440002, investment 0.424077 %, total balance 10067.535035,\n","day 125: buy 1 unit at price 931.659973, total balance 9135.875062\n","day 126, sell 1 unit at price 927.130005, investment -0.486225 %, total balance 10063.005067,\n","day 144: buy 1 unit at price 966.950012, total balance 9096.055055\n","day 145, sell 1 unit at price 975.599976, investment 0.894562 %, total balance 10071.655031,\n","day 146: buy 1 unit at price 983.679993, total balance 9087.975038\n","day 148: buy 1 unit at price 980.940002, total balance 8107.035036\n","day 149, sell 1 unit at price 983.409973, investment -0.027450 %, total balance 9090.445009,\n","day 151, sell 1 unit at price 942.900024, investment -3.877911 %, total balance 10033.345033,\n","day 155: buy 1 unit at price 939.780029, total balance 9093.565004\n","day 157, sell 1 unit at price 950.630005, investment 1.154523 %, total balance 10044.195009,\n","day 160: buy 1 unit at price 965.590027, total balance 9078.604982\n","day 161, sell 1 unit at price 952.270020, investment -1.379468 %, total balance 10030.875002,\n","day 164: buy 1 unit at price 917.789978, total balance 9113.085024\n","day 166, sell 1 unit at price 898.700012, investment -2.079993 %, total balance 10011.785036,\n","day 168: buy 1 unit at price 906.690002, total balance 9105.095034\n","day 171: buy 1 unit at price 930.090027, total balance 8175.005007\n","day 172, sell 1 unit at price 943.830017, investment 4.096220 %, total balance 9118.835024,\n","day 173, sell 1 unit at price 947.159973, investment 1.835300 %, total balance 10065.994997,\n","day 176: buy 1 unit at price 965.400024, total balance 9100.594973\n","day 179, sell 1 unit at price 972.919983, investment 0.778947 %, total balance 10073.514956,\n","day 180: buy 1 unit at price 980.340027, total balance 9093.174929\n","day 181, sell 1 unit at price 950.700012, investment -3.023442 %, total balance 10043.874941,\n","day 194: buy 1 unit at price 914.390015, total balance 9129.484926\n","day 195, sell 1 unit at price 922.669983, investment 0.905518 %, total balance 10052.154909,\n","day 197: buy 1 unit at price 926.960022, total balance 9125.194887\n","day 199: buy 1 unit at price 910.669983, total balance 8214.524904\n","day 201, sell 1 unit at price 924.690002, investment -0.244889 %, total balance 9139.214906,\n","day 202, sell 1 unit at price 927.000000, investment 1.793187 %, total balance 10066.214906,\n","day 208: buy 1 unit at price 939.330017, total balance 9126.884889\n","day 211, sell 1 unit at price 927.809998, investment -1.226408 %, total balance 10054.694887,\n","day 214: buy 1 unit at price 929.080017, total balance 9125.614870\n","day 216, sell 1 unit at price 935.090027, investment 0.646878 %, total balance 10060.704897,\n","day 219: buy 1 unit at price 915.000000, total balance 9145.704897\n","day 221: buy 1 unit at price 931.580017, total balance 8214.124880\n","day 222, sell 1 unit at price 932.450012, investment 1.907105 %, total balance 9146.574892,\n","day 223, sell 1 unit at price 928.530029, investment -0.327399 %, total balance 10075.104921,\n","day 224: buy 1 unit at price 920.969971, total balance 9154.134950\n","day 226: buy 1 unit at price 944.489990, total balance 8209.644960\n","day 227: buy 1 unit at price 949.500000, total balance 7260.144960\n","day 228, sell 1 unit at price 959.109985, investment 4.141287 %, total balance 8219.254945,\n","day 229, sell 1 unit at price 953.270020, investment 0.929605 %, total balance 9172.524965,\n","day 230: buy 1 unit at price 957.789978, total balance 8214.734987\n","day 231: buy 1 unit at price 951.679993, total balance 7263.054994\n","day 232, sell 1 unit at price 969.960022, investment 2.154821 %, total balance 8233.015016,\n","day 233, sell 1 unit at price 978.890015, investment 2.202992 %, total balance 9211.905031,\n","day 234, sell 1 unit at price 977.000000, investment 2.660559 %, total balance 10188.905031,\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"VdF9jhW9Y6Gy","outputId":"342e825d-2336-4ae5-cf8f-91c0447fa1ce"},"source":["fig = plt.figure(figsize = (15,5))\n","plt.plot(close, color='r', lw=2.)\n","plt.plot(close, '^', markersize=10, color='m', label = 'buying signal', markevery = states_buy)\n","plt.plot(close, 'v', markersize=10, color='k', label = 'selling signal', markevery = states_sell)\n","plt.title('total gains %f, total investment %f%%'%(total_gains, invest))\n","plt.legend()\n","plt.savefig('output/'+name+'.png')\n","plt.show()"],"execution_count":null,"outputs":[{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["
"]},"metadata":{"tags":[],"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"YCBzml2rkNDK"},"source":["## Double Duel Q-learning agent"]},{"cell_type":"code","metadata":{"id":"dBXz9F_oY6Hb"},"source":["from collections import deque\n","import random\n","\n","df= df_full.copy()\n","name = 'Double Duel Q-learning agent'\n","\n","class Model:\n"," def __init__(self, input_size, output_size, layer_size, learning_rate):\n"," self.X = tf.placeholder(tf.float32, (None, input_size))\n"," self.Y = tf.placeholder(tf.float32, (None, output_size))\n"," feed = tf.layers.dense(self.X, layer_size, activation = tf.nn.relu)\n"," tensor_action, tensor_validation = tf.split(feed,2,1)\n"," feed_action = tf.layers.dense(tensor_action, output_size)\n"," feed_validation = tf.layers.dense(tensor_validation, 1)\n"," self.logits = feed_validation + tf.subtract(feed_action,tf.reduce_mean(feed_action,axis=1,keep_dims=True))\n"," self.cost = tf.reduce_sum(tf.square(self.Y - self.logits))\n"," self.optimizer = tf.train.AdamOptimizer(learning_rate = learning_rate).minimize(self.cost)\n"," \n","class Agent:\n","\n"," LEARNING_RATE = 0.003\n"," BATCH_SIZE = 32\n"," LAYER_SIZE = 500\n"," OUTPUT_SIZE = 3\n"," EPSILON = 0.5\n"," DECAY_RATE = 0.005\n"," MIN_EPSILON = 0.1\n"," GAMMA = 0.99\n"," MEMORIES = deque()\n"," COPY = 1000\n"," T_COPY = 0\n"," MEMORY_SIZE = 300\n"," \n"," def __init__(self, state_size, window_size, trend, skip):\n"," self.state_size = state_size\n"," self.window_size = window_size\n"," self.half_window = window_size // 2\n"," self.trend = trend\n"," self.skip = skip\n"," tf.reset_default_graph()\n"," self.model = Model(self.state_size, self.OUTPUT_SIZE, self.LAYER_SIZE, self.LEARNING_RATE)\n"," self.model_negative = Model(self.state_size, self.OUTPUT_SIZE, self.LAYER_SIZE, self.LEARNING_RATE)\n"," self.sess = tf.InteractiveSession()\n"," self.sess.run(tf.global_variables_initializer())\n"," self.trainable = tf.trainable_variables()\n"," \n"," def _assign(self):\n"," for i in range(len(self.trainable)//2):\n"," assign_op = self.trainable[i+len(self.trainable)//2].assign(self.trainable[i])\n"," self.sess.run(assign_op)\n","\n"," def _memorize(self, state, action, reward, new_state, done):\n"," self.MEMORIES.append((state, action, reward, new_state, done))\n"," if len(self.MEMORIES) > self.MEMORY_SIZE:\n"," self.MEMORIES.popleft()\n","\n"," def _select_action(self, state):\n"," if np.random.rand() < self.EPSILON:\n"," action = np.random.randint(self.OUTPUT_SIZE)\n"," else:\n"," action = self.get_predicted_action([state])\n"," return action\n","\n"," def _construct_memories(self, replay):\n"," states = np.array([a[0] for a in replay])\n"," new_states = np.array([a[3] for a in replay])\n"," Q = self.predict(states)\n"," Q_new = self.predict(new_states)\n"," Q_new_negative = self.sess.run(self.model_negative.logits, feed_dict={self.model_negative.X:new_states})\n"," replay_size = len(replay)\n"," X = np.empty((replay_size, self.state_size))\n"," Y = np.empty((replay_size, self.OUTPUT_SIZE))\n"," for i in range(replay_size):\n"," state_r, action_r, reward_r, new_state_r, done_r = replay[i]\n"," target = Q[i]\n"," target[action_r] = reward_r\n"," if not done_r:\n"," target[action_r] += self.GAMMA * Q_new_negative[i, np.argmax(Q_new[i])]\n"," X[i] = state_r\n"," Y[i] = target\n"," return X, Y\n","\n"," def predict(self, inputs):\n"," return self.sess.run(self.model.logits, feed_dict={self.model.X:inputs})\n"," \n"," def get_predicted_action(self, sequence):\n"," prediction = self.predict(np.array(sequence))[0]\n"," return np.argmax(prediction)\n"," \n"," def get_state(self, t):\n"," window_size = self.window_size + 1\n"," d = t - window_size + 1\n"," block = self.trend[d : t + 1] if d >= 0 else -d * [self.trend[0]] + self.trend[0 : t + 1]\n"," res = []\n"," for i in range(window_size - 1):\n"," res.append(block[i + 1] - block[i])\n"," return np.array(res)\n"," \n"," def buy(self, initial_money):\n"," starting_money = initial_money\n"," states_sell = []\n"," states_buy = []\n"," inventory = []\n"," state = self.get_state(0)\n"," for t in range(0, len(self.trend) - 1, self.skip):\n"," action = self._select_action(state)\n"," next_state = self.get_state(t + 1)\n"," \n"," if action == 1 and initial_money >= self.trend[t]:\n"," inventory.append(self.trend[t])\n"," initial_money -= self.trend[t]\n"," states_buy.append(t)\n"," print('day %d: buy 1 unit at price %f, total balance %f'% (t, self.trend[t], initial_money))\n"," \n"," elif action == 2 and len(inventory):\n"," bought_price = inventory.pop(0)\n"," initial_money += self.trend[t]\n"," states_sell.append(t)\n"," try:\n"," invest = ((close[t] - bought_price) / bought_price) * 100\n"," except:\n"," invest = 0\n"," print(\n"," 'day %d, sell 1 unit at price %f, investment %f %%, total balance %f,'\n"," % (t, close[t], invest, initial_money)\n"," )\n"," \n"," state = next_state\n"," invest = ((initial_money - starting_money) / starting_money) * 100\n"," total_gains = initial_money - starting_money\n"," return states_buy, states_sell, total_gains, invest\n"," \n"," \n"," def train(self, iterations, checkpoint, initial_money):\n"," for i in range(iterations):\n"," total_profit = 0\n"," inventory = []\n"," state = self.get_state(0)\n"," starting_money = initial_money\n"," for t in range(0, len(self.trend) - 1, self.skip):\n"," if (self.T_COPY + 1) % self.COPY == 0:\n"," self._assign()\n"," \n"," action = self._select_action(state)\n"," next_state = self.get_state(t + 1)\n"," \n"," if action == 1 and starting_money >= self.trend[t]:\n"," inventory.append(self.trend[t])\n"," starting_money -= self.trend[t]\n"," \n"," elif action == 2 and len(inventory) > 0:\n"," bought_price = inventory.pop(0)\n"," total_profit += self.trend[t] - bought_price\n"," starting_money += self.trend[t]\n"," \n"," invest = ((starting_money - initial_money) / initial_money)\n"," \n"," self._memorize(state, action, invest, next_state, starting_money < initial_money)\n"," batch_size = min(len(self.MEMORIES), self.BATCH_SIZE)\n"," state = next_state\n"," replay = random.sample(self.MEMORIES, batch_size)\n"," X, Y = self._construct_memories(replay)\n"," \n"," cost, _ = self.sess.run([self.model.cost, self.model.optimizer], \n"," feed_dict={self.model.X: X, self.model.Y:Y})\n"," self.T_COPY += 1\n"," self.EPSILON = self.MIN_EPSILON + (1.0 - self.MIN_EPSILON) * np.exp(-self.DECAY_RATE * i)\n"," if (i+1) % checkpoint == 0:\n"," print('epoch: %d, total rewards: %f.3, cost: %f, total money: %f'%(i + 1, total_profit, cost,\n"," starting_money))"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"-LWDczUmY6Hh","outputId":"6034a88f-9703-46c2-aaa4-273191adb250"},"source":["close = df.Close.values.tolist()\n","initial_money = 10000\n","window_size = 30\n","skip = 1\n","batch_size = 32\n","agent = Agent(state_size = window_size, \n"," window_size = window_size, \n"," trend = close, \n"," skip = skip)\n","agent.train(iterations = 200, checkpoint = 10, initial_money = initial_money)"],"execution_count":null,"outputs":[{"output_type":"stream","text":["WARNING:tensorflow:From :12: calling reduce_mean (from tensorflow.python.ops.math_ops) with keep_dims is deprecated and will be removed in a future version.\n","Instructions for updating:\n","keep_dims is deprecated, use keepdims instead\n","epoch: 10, total rewards: 1486.684997.3, cost: 0.694152, total money: 10514.124999\n","epoch: 20, total rewards: 313.279660.3, cost: 0.878157, total money: 8354.909665\n","epoch: 30, total rewards: 752.595089.3, cost: 0.320037, total money: 10752.595089\n","epoch: 40, total rewards: 1159.299987.3, cost: 0.318166, total money: 10186.739989\n","epoch: 50, total rewards: 993.220279.3, cost: 0.391151, total money: 4149.310245\n","epoch: 60, total rewards: 1616.499880.3, cost: 0.307440, total money: 9630.939883\n","epoch: 70, total rewards: 941.484560.3, cost: 0.332979, total money: 6969.054506\n","epoch: 80, total rewards: 904.899903.3, cost: 0.718111, total money: 1132.559876\n","epoch: 90, total rewards: 346.619873.3, cost: 0.482044, total money: 542.599852\n","epoch: 100, total rewards: 141.554626.3, cost: 0.238426, total money: 6115.974608\n","epoch: 110, total rewards: -159.529845.3, cost: 0.202412, total money: 8852.270143\n","epoch: 120, total rewards: -37.579779.3, cost: 0.433529, total money: 8945.780206\n","epoch: 130, total rewards: 1049.544800.3, cost: 0.408910, total money: 8099.664795\n","epoch: 140, total rewards: 59.114809.3, cost: 0.028664, total money: 7098.904848\n","epoch: 150, total rewards: 96.424866.3, cost: 0.070552, total money: 9079.784851\n","epoch: 160, total rewards: 74.179754.3, cost: 0.044092, total money: 10074.179754\n","epoch: 170, total rewards: 80.999883.3, cost: 0.018813, total money: 8047.249883\n","epoch: 180, total rewards: 62.700011.3, cost: 0.083292, total money: 10062.700011\n","epoch: 190, total rewards: 70.424991.3, cost: 0.013884, total money: 9053.315006\n","epoch: 200, total rewards: 10.620115.3, cost: 0.030838, total money: 10010.620115\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"dLVffjKaY6Hm","outputId":"15b4e56c-9cb5-4381-8368-49de5f1aa690"},"source":["states_buy, states_sell, total_gains, invest = agent.buy(initial_money = initial_money)"],"execution_count":null,"outputs":[{"output_type":"stream","text":["day 1: buy 1 unit at price 762.130005, total balance 9237.869995\n","day 2, sell 1 unit at price 762.020020, investment -0.014431 %, total balance 9999.890015,\n","day 11: buy 1 unit at price 771.229980, total balance 9228.660035\n","day 12: buy 1 unit at price 760.539978, total balance 8468.120057\n","day 13, sell 1 unit at price 769.200012, investment -0.263212 %, total balance 9237.320069,\n","day 15, sell 1 unit at price 760.989990, investment 0.059170 %, total balance 9998.310059,\n","day 34: buy 1 unit at price 794.559998, total balance 9203.750061\n","day 35, sell 1 unit at price 791.260010, investment -0.415323 %, total balance 9995.010071,\n","day 36: buy 1 unit at price 789.909973, total balance 9205.100098\n","day 37, sell 1 unit at price 791.549988, investment 0.207620 %, total balance 9996.650086,\n","day 38: buy 1 unit at price 785.049988, total balance 9211.600098\n","day 40, sell 1 unit at price 771.820007, investment -1.685241 %, total balance 9983.420105,\n","day 54: buy 1 unit at price 819.309998, total balance 9164.110107\n","day 55, sell 1 unit at price 823.869995, investment 0.556566 %, total balance 9987.980102,\n","day 62: buy 1 unit at price 798.530029, total balance 9189.450073\n","day 64, sell 1 unit at price 801.340027, investment 0.351896 %, total balance 9990.790100,\n","day 68: buy 1 unit at price 813.669983, total balance 9177.120117\n","day 69, sell 1 unit at price 819.239990, investment 0.684554 %, total balance 9996.360107,\n","day 72: buy 1 unit at price 824.159973, total balance 9172.200134\n","day 73, sell 1 unit at price 828.070007, investment 0.474427 %, total balance 10000.270141,\n","day 74: buy 1 unit at price 831.659973, total balance 9168.610168\n","day 75, sell 1 unit at price 830.760010, investment -0.108213 %, total balance 9999.370178,\n","day 79: buy 1 unit at price 823.210022, total balance 9176.160156\n","day 80, sell 1 unit at price 835.239990, investment 1.461349 %, total balance 10011.400146,\n","day 90: buy 1 unit at price 847.200012, total balance 9164.200134\n","day 91, sell 1 unit at price 848.780029, investment 0.186499 %, total balance 10012.980163,\n","day 93: buy 1 unit at price 848.400024, total balance 9164.580139\n","day 94: buy 1 unit at price 830.460022, total balance 8334.120117\n","day 95, sell 1 unit at price 829.590027, investment -2.217114 %, total balance 9163.710144,\n","day 96, sell 1 unit at price 817.580017, investment -1.550948 %, total balance 9981.290161,\n","day 100: buy 1 unit at price 831.409973, total balance 9149.880188\n","day 101, sell 1 unit at price 831.500000, investment 0.010828 %, total balance 9981.380188,\n","day 104: buy 1 unit at price 834.570007, total balance 9146.810181\n","day 106: buy 1 unit at price 827.880005, total balance 8318.930176\n","day 107, sell 1 unit at price 824.669983, investment -1.186242 %, total balance 9143.600159,\n","day 108, sell 1 unit at price 824.729980, investment -0.380493 %, total balance 9968.330139,\n","day 110: buy 1 unit at price 824.320007, total balance 9144.010132\n","day 111, sell 1 unit at price 823.559998, investment -0.092198 %, total balance 9967.570130,\n","day 115: buy 1 unit at price 841.650024, total balance 9125.920106\n","day 116, sell 1 unit at price 843.190002, investment 0.182971 %, total balance 9969.110108,\n","day 125: buy 1 unit at price 931.659973, total balance 9037.450135\n","day 126, sell 1 unit at price 927.130005, investment -0.486225 %, total balance 9964.580140,\n","day 127: buy 1 unit at price 934.299988, total balance 9030.280152\n","day 128, sell 1 unit at price 932.169983, investment -0.227979 %, total balance 9962.450135,\n","day 141: buy 1 unit at price 971.469971, total balance 8990.980164\n","day 142, sell 1 unit at price 975.880005, investment 0.453955 %, total balance 9966.860169,\n","day 152: buy 1 unit at price 953.400024, total balance 9013.460145\n","day 153, sell 1 unit at price 950.760010, investment -0.276905 %, total balance 9964.220155,\n","day 156: buy 1 unit at price 957.369995, total balance 9006.850160\n","day 157, sell 1 unit at price 950.630005, investment -0.704011 %, total balance 9957.480165,\n","day 166: buy 1 unit at price 898.700012, total balance 9058.780153\n","day 167, sell 1 unit at price 911.710022, investment 1.447648 %, total balance 9970.490175,\n","day 172: buy 1 unit at price 943.830017, total balance 9026.660158\n","day 173, sell 1 unit at price 947.159973, investment 0.352813 %, total balance 9973.820131,\n","day 185: buy 1 unit at price 930.500000, total balance 9043.320131\n","day 186: buy 1 unit at price 930.830017, total balance 8112.490114\n","day 187, sell 1 unit at price 930.390015, investment -0.011820 %, total balance 9042.880129,\n","day 188, sell 1 unit at price 923.650024, investment -0.771354 %, total balance 9966.530153,\n","day 193: buy 1 unit at price 907.239990, total balance 9059.290163\n","day 194, sell 1 unit at price 914.390015, investment 0.788107 %, total balance 9973.680178,\n","day 197: buy 1 unit at price 926.960022, total balance 9046.720156\n","day 199, sell 1 unit at price 910.669983, investment -1.757362 %, total balance 9957.390139,\n","day 211: buy 1 unit at price 927.809998, total balance 9029.580141\n","day 212, sell 1 unit at price 935.950012, investment 0.877336 %, total balance 9965.530153,\n","day 213: buy 1 unit at price 926.500000, total balance 9039.030153\n","day 214, sell 1 unit at price 929.080017, investment 0.278469 %, total balance 9968.110170,\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"9YukOB8aY6H_","outputId":"6eedb9fb-0ae6-43bc-bdfe-7edd7a32c325"},"source":["fig = plt.figure(figsize = (15,5))\n","plt.plot(close, color='r', lw=2.)\n","plt.plot(close, '^', markersize=10, color='m', label = 'buying signal', markevery = states_buy)\n","plt.plot(close, 'v', markersize=10, color='k', label = 'selling signal', markevery = states_sell)\n","plt.title('total gains %f, total investment %f%%'%(total_gains, invest))\n","plt.legend()\n","plt.savefig('output/'+name+'.png')\n","plt.show()"],"execution_count":null,"outputs":[{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["
"]},"metadata":{"tags":[],"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"PtTAdFevkqP8"},"source":["## Duel Recurrent Q-learning agent"]},{"cell_type":"code","metadata":{"id":"F910c0BkY6IP"},"source":["from collections import deque\n","import random\n","\n","df= df_full.copy()\n","name = 'Duel Recurrent Q-learning agent'\n"," \n","class Agent:\n","\n"," LEARNING_RATE = 0.003\n"," BATCH_SIZE = 32\n"," LAYER_SIZE = 256\n"," OUTPUT_SIZE = 3\n"," EPSILON = 0.5\n"," DECAY_RATE = 0.005\n"," MIN_EPSILON = 0.1\n"," GAMMA = 0.99\n"," MEMORIES = deque()\n"," MEMORY_SIZE = 300\n"," \n"," def __init__(self, state_size, window_size, trend, skip):\n"," self.state_size = state_size\n"," self.window_size = window_size\n"," self.half_window = window_size // 2\n"," self.trend = trend\n"," self.skip = skip\n"," tf.reset_default_graph()\n"," self.INITIAL_FEATURES = np.zeros((4, self.state_size))\n"," self.X = tf.placeholder(tf.float32, (None, None, self.state_size))\n"," self.Y = tf.placeholder(tf.float32, (None, self.OUTPUT_SIZE))\n"," cell = tf.nn.rnn_cell.LSTMCell(self.LAYER_SIZE, state_is_tuple = False)\n"," self.hidden_layer = tf.placeholder(tf.float32, (None, 2 * self.LAYER_SIZE))\n"," self.rnn,self.last_state = tf.nn.dynamic_rnn(inputs=self.X,cell=cell,\n"," dtype=tf.float32,\n"," initial_state=self.hidden_layer)\n"," tensor_action, tensor_validation = tf.split(self.rnn[:,-1],2,1)\n"," feed_action = tf.layers.dense(tensor_action, self.OUTPUT_SIZE)\n"," feed_validation = tf.layers.dense(tensor_validation, 1)\n"," self.logits = feed_validation + tf.subtract(feed_action,tf.reduce_mean(feed_action,axis=1,keep_dims=True))\n"," self.cost = tf.reduce_sum(tf.square(self.Y - self.logits))\n"," self.optimizer = tf.train.AdamOptimizer(learning_rate = self.LEARNING_RATE).minimize(self.cost)\n"," self.sess = tf.InteractiveSession()\n"," self.sess.run(tf.global_variables_initializer())\n"," \n"," def _memorize(self, state, action, reward, new_state, dead, rnn_state):\n"," self.MEMORIES.append((state, action, reward, new_state, dead, rnn_state))\n"," if len(self.MEMORIES) > self.MEMORY_SIZE:\n"," self.MEMORIES.popleft()\n","\n"," def _construct_memories(self, replay):\n"," states = np.array([a[0] for a in replay])\n"," new_states = np.array([a[3] for a in replay])\n"," init_values = np.array([a[-1] for a in replay])\n"," Q = self.sess.run(self.logits, feed_dict={self.X:states, self.hidden_layer:init_values})\n"," Q_new = self.sess.run(self.logits, feed_dict={self.X:new_states, self.hidden_layer:init_values})\n"," replay_size = len(replay)\n"," X = np.empty((replay_size, 4, self.state_size))\n"," Y = np.empty((replay_size, self.OUTPUT_SIZE))\n"," INIT_VAL = np.empty((replay_size, 2 * self.LAYER_SIZE))\n"," for i in range(replay_size):\n"," state_r, action_r, reward_r, new_state_r, dead_r, rnn_memory = replay[i]\n"," target = Q[i]\n"," target[action_r] = reward_r\n"," if not dead_r:\n"," target[action_r] += self.GAMMA * np.amax(Q_new[i])\n"," X[i] = state_r\n"," Y[i] = target\n"," INIT_VAL[i] = rnn_memory\n"," return X, Y, INIT_VAL\n"," \n"," def get_state(self, t):\n"," window_size = self.window_size + 1\n"," d = t - window_size + 1\n"," block = self.trend[d : t + 1] if d >= 0 else -d * [self.trend[0]] + self.trend[0 : t + 1]\n"," res = []\n"," for i in range(window_size - 1):\n"," res.append(block[i + 1] - block[i])\n"," return np.array(res)\n"," \n"," def buy(self, initial_money):\n"," starting_money = initial_money\n"," states_sell = []\n"," states_buy = []\n"," inventory = []\n"," state = self.get_state(0)\n"," init_value = np.zeros((1, 2 * self.LAYER_SIZE))\n"," for k in range(self.INITIAL_FEATURES.shape[0]):\n"," self.INITIAL_FEATURES[k,:] = state\n"," for t in range(0, len(self.trend) - 1, self.skip):\n"," action, last_state = self.sess.run([self.logits,self.last_state],\n"," feed_dict={self.X:[self.INITIAL_FEATURES],\n"," self.hidden_layer:init_value})\n"," action, init_value = np.argmax(action[0]), last_state\n"," next_state = self.get_state(t + 1)\n"," \n"," if action == 1 and initial_money >= self.trend[t]:\n"," inventory.append(self.trend[t])\n"," initial_money -= self.trend[t]\n"," states_buy.append(t)\n"," print('day %d: buy 1 unit at price %f, total balance %f'% (t, self.trend[t], initial_money))\n"," \n"," elif action == 2 and len(inventory):\n"," bought_price = inventory.pop(0)\n"," initial_money += self.trend[t]\n"," states_sell.append(t)\n"," try:\n"," invest = ((close[t] - bought_price) / bought_price) * 100\n"," except:\n"," invest = 0\n"," print(\n"," 'day %d, sell 1 unit at price %f, investment %f %%, total balance %f,'\n"," % (t, close[t], invest, initial_money)\n"," )\n"," \n"," new_state = np.append([self.get_state(t + 1)], self.INITIAL_FEATURES[:3, :], axis = 0)\n"," self.INITIAL_FEATURES = new_state\n"," invest = ((initial_money - starting_money) / starting_money) * 100\n"," total_gains = initial_money - starting_money\n"," return states_buy, states_sell, total_gains, invest\n"," \n"," \n"," def train(self, iterations, checkpoint, initial_money):\n"," for i in range(iterations):\n"," total_profit = 0\n"," inventory = []\n"," state = self.get_state(0)\n"," starting_money = initial_money\n"," init_value = np.zeros((1, 2 * self.LAYER_SIZE))\n"," for k in range(self.INITIAL_FEATURES.shape[0]):\n"," self.INITIAL_FEATURES[k,:] = state\n"," for t in range(0, len(self.trend) - 1, self.skip):\n"," \n"," if np.random.rand() < self.EPSILON:\n"," action = np.random.randint(self.OUTPUT_SIZE)\n"," else:\n"," action, last_state = self.sess.run([self.logits,\n"," self.last_state],\n"," feed_dict={self.X:[self.INITIAL_FEATURES],\n"," self.hidden_layer:init_value})\n"," action, init_value = np.argmax(action[0]), last_state\n"," \n"," next_state = self.get_state(t + 1)\n"," \n"," if action == 1 and starting_money >= self.trend[t]:\n"," inventory.append(self.trend[t])\n"," starting_money -= self.trend[t]\n"," \n"," elif action == 2 and len(inventory) > 0:\n"," bought_price = inventory.pop(0)\n"," total_profit += self.trend[t] - bought_price\n"," starting_money += self.trend[t]\n"," \n"," invest = ((starting_money - initial_money) / initial_money)\n"," new_state = np.append([self.get_state(t + 1)], self.INITIAL_FEATURES[:3, :], axis = 0)\n"," self._memorize(self.INITIAL_FEATURES, action, invest, new_state, \n"," starting_money < initial_money, init_value[0])\n"," self.INITIAL_FEATURES = new_state\n"," batch_size = min(len(self.MEMORIES), self.BATCH_SIZE)\n"," replay = random.sample(self.MEMORIES, batch_size)\n"," X, Y, INIT_VAL = self._construct_memories(replay)\n"," \n"," cost, _ = self.sess.run([self.cost, self.optimizer], \n"," feed_dict={self.X: X, self.Y:Y,\n"," self.hidden_layer: INIT_VAL})\n"," self.EPSILON = self.MIN_EPSILON + (1.0 - self.MIN_EPSILON) * np.exp(-self.DECAY_RATE * i)\n"," \n"," if (i+1) % checkpoint == 0:\n"," print('epoch: %d, total rewards: %f.3, cost: %f, total money: %f'%(i + 1, total_profit, cost,\n"," starting_money))"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"6ToYk3F4Y6IT","outputId":"887d9b39-0434-474f-94d5-854f12aded73"},"source":["close = df.Close.values.tolist()\n","initial_money = 10000\n","window_size = 30\n","skip = 1\n","batch_size = 32\n","agent = Agent(state_size = window_size, \n"," window_size = window_size, \n"," trend = close, \n"," skip = skip)\n","agent.train(iterations = 200, checkpoint = 10, initial_money = initial_money)"],"execution_count":null,"outputs":[{"output_type":"stream","text":["WARNING:tensorflow:: Using a concatenated state is slower and will soon be deprecated. Use state_is_tuple=True.\n","WARNING:tensorflow:From :35: calling reduce_mean (from tensorflow.python.ops.math_ops) with keep_dims is deprecated and will be removed in a future version.\n","Instructions for updating:\n","keep_dims is deprecated, use keepdims instead\n","epoch: 10, total rewards: 1303.755127.3, cost: 0.204159, total money: 2622.175109\n","epoch: 20, total rewards: 1332.510133.3, cost: 2.512769, total money: 11332.510133\n","epoch: 30, total rewards: 167.034789.3, cost: 0.204751, total money: 10167.034789\n","epoch: 40, total rewards: 885.269897.3, cost: 0.095390, total money: 8848.889892\n","epoch: 50, total rewards: 312.624996.3, cost: 0.415782, total money: 10312.624996\n","epoch: 60, total rewards: 220.209960.3, cost: 0.119438, total money: 10220.209960\n","epoch: 70, total rewards: 407.794859.3, cost: 0.983801, total money: 8417.984861\n","epoch: 80, total rewards: 200.149718.3, cost: 0.235913, total money: 9226.819701\n","epoch: 90, total rewards: 87.564821.3, cost: 0.034903, total money: 8097.894838\n","epoch: 100, total rewards: 1056.600041.3, cost: 0.286240, total money: 11056.600041\n","epoch: 110, total rewards: 537.204957.3, cost: 0.140037, total money: 7610.014955\n","epoch: 120, total rewards: 263.944828.3, cost: 0.535866, total money: 9247.304813\n","epoch: 130, total rewards: 387.030092.3, cost: 0.352989, total money: 8396.590090\n","epoch: 140, total rewards: 207.069887.3, cost: 0.474047, total money: 10207.069887\n","epoch: 150, total rewards: -119.230104.3, cost: 0.301262, total money: 9880.769896\n","epoch: 160, total rewards: 21.299804.3, cost: 0.709494, total money: 10021.299804\n","epoch: 170, total rewards: 241.145077.3, cost: 0.486697, total money: 10241.145077\n","epoch: 180, total rewards: 5.329770.3, cost: 0.447255, total money: 7042.329770\n","epoch: 190, total rewards: 126.395198.3, cost: 0.240739, total money: 9107.125178\n","epoch: 200, total rewards: 91.499876.3, cost: 0.259028, total money: 8055.119871\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"wWkyTt7NY6Ia","outputId":"7fb02213-e687-4598-90cf-ca52115c26bc"},"source":["states_buy, states_sell, total_gains, invest = agent.buy(initial_money = initial_money)"],"execution_count":null,"outputs":[{"output_type":"stream","text":["day 53: buy 1 unit at price 805.020020, total balance 9194.979980\n","day 54, sell 1 unit at price 819.309998, investment 1.775108 %, total balance 10014.289978,\n","day 64: buy 1 unit at price 801.340027, total balance 9212.949951\n","day 68, sell 1 unit at price 813.669983, investment 1.538667 %, total balance 10026.619934,\n","day 79: buy 1 unit at price 823.210022, total balance 9203.409912\n","day 82: buy 1 unit at price 829.080017, total balance 8374.329895\n","day 84, sell 1 unit at price 831.909973, investment 1.056832 %, total balance 9206.239868,\n","day 86, sell 1 unit at price 838.679993, investment 1.157907 %, total balance 10044.919861,\n","day 111: buy 1 unit at price 823.559998, total balance 9221.359863\n","day 116, sell 1 unit at price 843.190002, investment 2.383555 %, total balance 10064.549865,\n","day 167: buy 1 unit at price 911.710022, total balance 9152.839843\n","day 169, sell 1 unit at price 918.590027, investment 0.754626 %, total balance 10071.429870,\n","day 182: buy 1 unit at price 947.799988, total balance 9123.629882\n","day 183, sell 1 unit at price 934.090027, investment -1.446504 %, total balance 10057.719909,\n","day 185: buy 1 unit at price 930.500000, total balance 9127.219909\n","day 187: buy 1 unit at price 930.390015, total balance 8196.829894\n","day 188, sell 1 unit at price 923.650024, investment -0.736161 %, total balance 9120.479918,\n","day 190, sell 1 unit at price 929.359985, investment -0.110709 %, total balance 10049.839903,\n","day 206: buy 1 unit at price 921.289978, total balance 9128.549925\n","day 207, sell 1 unit at price 929.570007, investment 0.898743 %, total balance 10058.119932,\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"M2Puz6jlY6Ie","outputId":"785ff7fd-28bf-4176-f44e-3fb88e76b38e"},"source":["fig = plt.figure(figsize = (15,5))\n","plt.plot(close, color='r', lw=2.)\n","plt.plot(close, '^', markersize=10, color='m', label = 'buying signal', markevery = states_buy)\n","plt.plot(close, 'v', markersize=10, color='k', label = 'selling signal', markevery = states_sell)\n","plt.title('total gains %f, total investment %f%%'%(total_gains, invest))\n","plt.legend()\n","plt.savefig('output/'+name+'.png')\n","plt.show()"],"execution_count":null,"outputs":[{"output_type":"display_data","data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAA34AAAFBCAYAAAAomn1FAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzs3Xd4VFX6wPHvtPRe6FWRI6ACIiIiRcXey2Jvq+KuunZd29r7rrv+1oa9YceCirKoICACilQVDj0JkN7bzGRm7u+Pe2dIQhLSE5L38zw+knvPPffcyYHnvvOeYjMMAyGEEEIIIYQQXZe9oxsghBBCCCGEEKJtSeAnhBBCCCGEEF2cBH5CCCGEEEII0cVJ4CeEEEIIIYQQXZwEfkIIIYQQQgjRxUngJ4QQQgghhBBdnAR+QgjRSEqpN5VSj7RBvROVUrq16xUdSyl1uVLqx3rODVBKlSmlHO3dLiGEEN2Ts6MbIIQQrUUptR24Smv9XVuUbyta68WAau16refrCfitQz9prY+3ztmAh4ErgBhgFXCd1vr3eup6GDgTGAY8orV+oNq53sBLwGFAb2Cw1np7tfN9gReAiUCFdf2MaudPAx4HBgFrMX8nf1jnzgceBHoBHuAb4G9a6xKlVLhV71QgCdgC3KW1/qaRn8+bwA6t9b1tUb4hWut0zM+9QyilpgAztdb9Ouj+P1j3f7WBMqOA1zD73HrgSq316gbqOwLwWYd2aq1VtfN/A24BkoGNwE1a6x+tc0cD9wGHAoVa60G16m6o79uAu4FrgATga2C61rrEOl9v31dKxQMfAeOAOcClWmu/de5lYK7W+tP6Ph8hhGgqyfgJIUTXdprWOsb67/hqx/8E/BnzhTQJWAq800A9m4E7MF9QawsAc4Fz6rl2JrANMwg9BXjMetlGKXUA8C7wF8wX5y+BL5RSwS8mlwATtNbxwH6YX1gGs65OIAOYDMQD9wIfKaUGNfAcYh+glAoDZmP2nUTgLWC2dbw+11fr69WDvnHAE8C5mP3kNeCzatnWcuB14PZ66m2o718KXAJMAPoAkcCz1c7X2/cxg8VV1rlBwFlWe8cDfSToE0K0Nsn4CSG6BKXUO8AA4EullB94SGv9lFLqdMxsUl9gNfBXrfX6Bsp/jBkMRQJrrPJ1ZsFq3d8BPAVcBpQCT2O+ALq01j6l1BWYL4/9gFzgSa31S9a1U6iWfbEydc9hvlQOxAyqLtNau5VSKcCbwFGYAdfvwGStdaCJH9lg4Eet9VbrnjOBm+srrLV+yyp3UR3nsoEXqgVrIUqpGGAKME1rXQWsUUrNwgw6FwAnAIurZV+exMy+TAa+11pn1KrSDwyx7lsOPFDt3FdKqW3AGGB7Qw+vlJoOXAQYSqmbgAVa69OUUsOAF4FRwE7MDOIXDZS/E7ga6IEZhN6jtf6soXtb9x+EGRAE+8cPwGLgGOAQzED8Qq11nlLqG2CO1vq5atevAR7UWn+qlDoQs6+Nwexb/9Baf2SVOxn4F9AfKAH+Yz3fN0C4UqrMqnIoMB0YgZlZPcP6DM+x/rvZOn6l1nqeVXc88G/gZMy++AZwv9bar5S6HLgKWAZcCRQB12qtv1FKPYr5d+wIpdQzwJta6+trfURTMN9RntFaG8B/lVK3WZ/P3L19vrUMAn7XWv9qtfttzCxcDyBTa/0z8LNSampdFzfU94HTgNeC/dTqv/OVUn/F/HJ9CvX3/cHA51prj1JqMbCf9e/If4ALm/iMQgixV5LxE0J0CVrrS4B0dme4nlJKDQXeB24CUjGHYX2plAqrq7xV1TfAAZgvhSsxs1GNcTVwEmbAcCjm0LDqcoBTgTjM4ZX/UUod2kB904ATMV8ODwEut47fCuywnqcn5jAzo4F63lVK5Sql5imlRlY7/gGwv1JqqFLKhRmwNvWFujFstf4f/PNBdZQJ/rnGeaXUUUqpYsyA+hzgmbpupJTqiRnA7DVQ11q/jPm7fcr6/Z9mfQ5fAvMwf/9/w/z8VF3lraq2YAYx8ZhDUmdaQ1+b40LMvtEDCANus46/D1xQ7TmHY34hMEcpFQ18C7xnXXc+ZhA+3Cr+GnCN1joW8zOdbwXMJwG7qmXIdlnlT8PM/CZiZqP+h/mu0Bd4CHNIb9CbmEMrhwCjgeMxg72gcYAGUjC/FHlNKWXTWt+DGeQGM3S1gz4wA9C1VtAXtNY6Xp/HlVJ5Sqkl1pcpQd8ADqXUOCuw+jPml0BZDdTVFLX7bzjmvyF76/u/AVOVUpGYfeh34Abgm+AXMkII0Zok8BNCdGXnYWZKvrW+cf8XZibvyPou0Fq/rrUu1Vp7MLNJI63Mxt5MA/5Pa71Da12IObSser1ztNZbtNaG1nohZnAxsYH6/qu13qW1LsAMRkZZx6sw59EN1FpXaa0X13o5ru4izGzHQMwMw/+UUgnWuUzgR8wX80rMoZ/1ZvyaS2tdijlc8x9KqQgr2D0HiLKKfAdMVkpNsYbx3Y0Z9ERVq+NHa6hnP+Cf1JHNs4K2d4G3tNYbmtncIzDn3T2htfZqrecDX1Et6Krj+T62fk8BrfWHwCbg8Gbe/w2t9UatdSXm3K/g7/wzYJRSaqD180XAp1YfPRXYrrV+Q2vt01qvAj7B/H2C2V+GK6XitNaFWuuVe2nDYq31/7TWPuBjzC8YnrD+/nwADFJKJVhB9smYc+XKtdY5mJmq86vVlaa1fsWat/YWZr/t2cjPIgYornWsGIitp/zfMYcC9wVexvyCZ3/rXCnmZ/IjZtbyfsx5eA19YdJYc4GrlFKDrH8n/m4dj2pE338N8wuD5ZiB8BrMYaPPKKVmKKUWqTZYTEoI0X3JUE8hRFfWB0gL/qC1DiilMjBfDvdgZQMexXxpTsUcvgZmxqL2S2hd96o+LLHGEEWl1EmYL5xDMb90iwLWNVBf9WxEhVU/mIHPA8A8pRTAy1rrJ6iD1npJtR8fV0pdhhlsfok5nHIs5hDALOBizCFqI7TWFQ20qzkuAp7H/Ey2Ys57GmG1cYPVrucwA4OZwB+YWc3az7NTKTUXMwAJZUuVUnbMLJUXqCt71Fh9gIxaw2bTqKe/WPe+FHPRkEHWoRjM/tIctX/nMWAGz0qpOZhB1ZOYgejVVrmBwDilVFG1a53snq95DubcxyeUUmuBO7XWSxtoQ3a1P1cCecEFR6yfsdrVB3ABmVY/BLNfV+/3oefRWldY5Rq7oE0ZZna8ujjMIG4PWuvl1X58Syl1AWZg+izmUNMrMPvcZszM5FdKqdHVMp3N9Trm36EfMD/3pzGzpsH+21Dfd2MOrwXAGmZ+t3WNHXO48zyl1Ila67bIxgshuhkJ/IQQXUntb/B3AQcHf7BW4OuPOXerrvIXYs5tmoqZVYoHCqk5VKs+mZgZqaD+1e4bjplxuBSYrbWuUkp93sh6a7CyCLcCtyqlDsIM1n7RWn/fiMuNavccBXyotQ6+oL5pzbcaDqxoarv20uY0zMwUAEqp94Cfq52fBcyyziVgvqj/Uk91TiCYyQn+Tl/DzCSdbGWmGquu/tJfKWWvFvwNwFwFco/yVgbuFeBYYKk1t201zfi9NsL7wP1KqUVABGYGF8yAYqHW+ri6LtJa/wKcYWVEr8fMJPav/SzNkIGZPUuxsoNNtbf7/47Zx23VMnOHYAZRja2/el//Smsd/D3OVUplYmb+ZzWhzXuw+sn91n8opY7H/Pdlp3W+wb5f7fiJgE1rPVcp9SKwQmttKKVWYD63BH5CiBaTwE8I0ZVkYw73CvoIuFMpdSywCLgR82X1p3rKx1rn8zEzco814d4fATdamZlydg/5AnPoYjjmwhs+K/t3POYcnyZRSp0KbMCcW1aMudjJHgu7KKUGYL7g/4KZPfgbZiYqmAX8BfiTUuoDq10XYWZwNtdzXxfgsOpyKqUigCq9e/n5COs8mIuGRFgZDawFU3ZgfrbTrGcfVq3uMZhzrpIwX+y/CA7XtBbUWKy1TrcCrUeB6kHui1ZdU60hkrXbbQBHa61/qOOxav/+l2Nm2u5QSj2NuVLjaZiZ0brKR2MGGLnWva6g5tzF1vQ1ZnbpIcyAPfg7/wozm3cJZiYUzECnDLOP/Akz6ClWSpWwu69kA8lKqXit9d6y2XvQWmcqpeYBTyul/mHdbzDQzxrKvDe1P8vafsDs2zcopWawO8M5v3ZB68uCccBCzDmH5wGTMP++g9nX71FKPYu5oM5UzMz7b9b1dsy/oy7AZvXlgNbaa52vt+8rpZIw50NuxeyH/8ZcKCpgXdtg37fKRGAODQ8GiNuAKcrcPmQC8N8GPichhGg0meMnhOhKHgfuVUoVKaVu01przCGMzwJ5mC/xpwVf6GqXB97GHNq3E3O44bIm3PsVzHl7azEXxfga8yXUb2XpbsAMDgsxM4tfNPMZD8CcF1eGufLjC1rrBXWUi8UMigoxn+dE4CStdb51/knMOUWrMVdcvBk4R2tdBGDNMZpRrb5XMIf6XQDcY/35kmrnK602gRmYVg/CTsB8MS7E3LbhRK11brXz/2e1QVtlrq52bjjwk1KqHDNo1cHzViB4DWagk6XMDdHLrGARpVR/zKGB9Q2pfQ1z/luRUupzq1+chrnwSR7myo+XVpszWLv8H5hD+5ZiBjIHszuwblXWfL5PMYOW96odL8UMJs7HzFhmYf5uw60ilwDbraDvL5gBPtYzvQ9stZ4nOJS4KS7FDJj+wPy9zcIcrtsY/wecq5QqVErtEdhYv4szrXsUYS7Icma1YOxuZa52CmbA9ghmAJ6H+SXHmdUyfG9jBsU/YK5s+l/MBW+Cv9dJmP31a8wMbyXm3+Wghvp+inVdOeYiMq9bCwEF7a3vgzm8891q2feXrHpzMYPGva4SK4QQjWEzjNaY2yyEEKI6K6s3Q2s9cK+FRZtQSl0MjNBa39XRbRFCCCE6mgR+QgjRCqwl2Y/GzBT0xJzTt0xrfVOHNkwIIYQQAhnqKYQQrcWGuY9bIeZQz/WYK2cKIYQQQnQ4yfgJIYQQQgghRBcnGT8hhBBCCCGE6OL2xe0cwjGX1s7EXOpZCCGEEEIIIboTB+ZKyr9gbhmzV/ti4DcWWNzRjRBCCCGEEEKIDjYR+LExBffFwC8ToLCwnECgc81PTE6OIT+/bO8FhWgi6VuiLUn/Em1F+pZoS9K/RFvq7P3LbreRmBgNVmzUGPti4OcHCASMThf4AZ2yTaJrkL4l2pL0L9FWpG+JtiT9S7SlfaR/NXrqmyzuIoQQQgghhBBdnAR+QgghhBBCCNHF7YtDPevk9/soLMzF5/N2WBtycuwEAoEOu/++zG53EBkZQ0xMPDabraObI4QQQgghRJfSZQK/wsJcIiKiiI7u1WGBg9Npx+eTwK+pDMPA7/dRWlpEYWEuSUk9OrpJQgghhBBCdCldZqinz+clOjpOskX7IJvNhtPpIiEhGa/X3dHNEUIIIYQQosvpMoEfIEHfPs5mswP7xOpJQgghhBBC7FO6VODXXOVlHj5/dzUVZR03P1AIIYQQQggh2ooEfsCvS9LIzChmxZK0VqvzqKMOo6KiotXqe/XVGXz//bxWq68+Gzb8wYMP3ttm9X/99Zfce+8dbVa/EEIIIYQQrcVfWYnRRRZv7PaBX3mZhw3rsgHYsC6r02b9rrrqLxx77PFtfp8DDxzO/fc/0ub3EUIIIYQQojOr3LSRLTdeR+Hcrzu6Ka2iy6zq2Vy/LknDMMx5ZYZhsGJJGpNOOKBV6n7//XdYvHghHo+ba665jilTjiUzcxdXXXUJc+Z8D1Dj56effpLevXtz4YWXArBx4wbuv/9u3nvvEx577EEOPHAY55xzHq+99hLp6WmUl5exa9dO+vbtx8MPP0lERARlZWU8/viDbNu2ldTUHqSkpJKYmMT1199Uo21ut5tHHrmf7du34nA4GTBgIA8//AQrV67g+ef/j9deeweATz75kI8//oCYmFjGj5/Ap59+xJw534faffrpZ7Ns2RLcbjd33nkfI0eOwufzcccdN1FcXIzH42H48BHcfvvduFyuVvlchRBCCCGEaGsF8+ZCIAC2rpEr6xpP0UzBbF/AbwZ+Ab/Rqlk/u93Om2++x5NP/punnnqMwsKCBsufc840Zs/+NBSIfvLJR5x11p/qXLRG6/Xcf/+jvPvuLHw+H/PmfQPAG2+8QmxsHO+99wkPP/wEa9eurvNey5cvpaKinJkzP+att97n9tvv3qPM5s2beOedN3nxxdd59dW3KS0trXG+uLiYgw46hDfeeI8rrriaGTP+C4DD4eD++x/htdfe4Z13PsTv9zNnzuy9f2BCCCGEEEJ0Ap78AsrXrAaHg7gjj+zo5rSKbh34Vc/2BQWzfq3h1FPPAGDAgEEMHar4/fd1DZYfNGgwffr0ZdmynygpKWHJkkWcfPJpdZY9/PAjiI2NxWazMXz4QezcuQOAVatWhK6Ji4tn4sTJdV4/ZMgBbN++jaeffpL5878jLCxsjzKrVv3K+PETSExMBOCUU06vcT4yMooJEyYCMGLEwezcuROAQCDA++/P5PLLL+Syy85n5coVbNq0scFnF0IIIYQQorPI+X4+BALEjBqNMz6ho5vTKrpt4Fc72xfU2lm/2hwOB4HA7nt6vTXvc+655/PZZ7OYM+cLJk06mpiYmDrrCQsLD/3Zbrfj9/ub1I6+ffsxc+ZHjB07jhUrlnP55Rfg8XiaVEdY2O6hm2YbfAB8++1c1q5dzQsvvMLbb3/IWWedu8dzCiGEEEII0RkZgQDZ874FIH7SlI5tTCvqtoFfXdm+oNbK+s2Z8wUAGRnpbNqkGTHiYJKSkvH5fOzYkQGYQVJ148dPID09jQ8/fJezz57W5HuOHj2GuXPnAFBaWsrixYvqLJeTk43d7mDSpCnccMOtFBUVUlpaUqPMqFGHsmzZTxQVFQEwd+5XjWpDWVkp8fEJREVFU1ZWtsczCiGEEEII0ZG8WZlk/OtJCr//FqNWAqX8t3V4cvNwpaYSNWx4B7Ww9XXLxV3qy/YFBbN+h00YSFTMnkMgG8vv93PFFRfidru5/fa7SUxMAuDGG2/l5puvIyEhgfHjj6pxjd1u56STTmHZsp8YMqTpi8xcfvnVPPbYg1x44TkkJ6dw4IHD6swabtmymRkzngMgEPBz8cWXk5KSSnr67oD3gAOGcuGFl/KXv1xBVFQ0hx02lujoujOQ1Z144qksXryICy88h8TEJEaOHN3kbKIQQgghhBBtpWzlr1RuWE/lhvWULPmRHhdfSuR++wNQvOgHAOInTsZm7zp5Mlt9Wa9ObBCwLT+/rMaQyaysNHr1GtioChb9byPr12bVG/gB2B02hh3Su0krfDqddny+lu/zcdNN13L66WdzzDFTm3ytz+fD7/cTHh5OeXkZ1157FddffzNjx45rVlsqKsqJiooG4LXXXmLnzh3cd9/DzaqrMZrye+xOUlNjyc0t3XtBIZpB+pdoK9K3RFuS/iVaIvejDyicNxdsNrDiIWdyMq7UHlRu1NhsNgY/9W+c8fEd3NK62e02kpNjAAYD2xtzTbfM+GXtLGkw6AMz65e1s7idWmTasOEP7rvvLoYOVUyZckyz6igtLeHWW28gEAjg9Xo47rgTmx30Abz44nOsW7cGn6+KPn36cscd9zS7LiGEEEIIIToDf5n5pUHq+RfiLy6mcN5cfPn5+PLzAUg+akKnDfqaq1sGftP+fFhHN6FOBx44nI8+atm2B4mJSbz++sxWahHceuvfW60uIYQQQgghOgN/WRkArqRkEo89juTTz6QqP4+q3Fz8JSUMOHoCRV1splK3DPyEEEIIIYQQ3Ze/vBwAh7UWhs3pJKxnL8J69gLAFRcLXWwocdeZrSiEEEIIIYQQjRAc6umoZ+u0rkgCPyGEEEIIIUS3Ehzqae9GgV+3HOp53nlnovWGvZZT6kA+/PDzdmiREEIIIYQQoj0YgQCBigqw2XBYq9d3B90y43fIIaNwuVwNlnG5XIwcObqdWiSEEEIIIYRoD4HycjAM7JFR2ByOjm5Ou+mWgd/06ddi38tmjHa7nenTr22nFsHXX3/JvffeAcDKlSu48spLAMjLy+Vvf7umXdrwxBMPs2bNqjar/9xzT2Pr1s1tVr8QQgghhBB7E5rfF9t9hnlCNw38UlN7cPrpZ9Wb9XO5XJxxxtmkpKS2c8v2lJKSyrPPvtQu97rzzn9IllMIIYQQQnRp/jJrRc/o7hX4dcs5fmBm/b744rM6z7U02+d2u3nkkfvZvn0rDoeTAQMG8vDDTwDwzTdf8emnH+P3+4mJieG22+5kwIBB9daVmbmLq666hDlzvgfgqKMOY/r0a1m06AeKi4u57robmDLlWAB++OF7Xn75BcLDwzn66Km8/PILzJu3iKioqBp1Ll78A6+88iJ2uwO/38fNN9/BoYcexvXXT+eCCy5hwoSJ5Obm8Mgj95Ofn0/fvn0xDBg37gjOOec8Hn30AcLCwsjISCcnJ5sRIw7m3nsfxGazMW/eXD7++H18vioArrvuJg477PBmf5ZCCCGEEEK0pu64oid048AvmPX7/PNPqKqqCh1vjWzf8uVLqagoZ+bMjwEoKSkBYM2aVcyf/y3PP/8KYWFhLF26hMcff4gXX3y9SfVHR0fz6qtvs3btau677y6mTDmWgoJ8nnrqMV566Q369x/Ahx++W+/1r776EnfccQ8HHXQIfr8ft7tyjzLPPPNPRo8ew+WXX0VWViaXXno+48YdETq/desWnnnmBex2O1dccRErVixn7NgjGDfuCI477gRsNhvp6du58cZr+eyzr5v0fEIIIYQQQrQVf7m5oqcEfrUopf4FnAMMAg7WWv9mHR8KvAUkA/nApVrrTS05197qyvq1xty+IUMOYPv2bTz99JOMHj2GI488CoAlSxaxefMmpk+/HADDMCgtLWly/cceewIAI0YcTF5eLh6Phz/++I2hQxX9+w8A4JRTzuDZZ/9T5/VjxhzGf//7b6ZMOYYjjjiS/fYbskeZlSt/5aabbgegV6/ejBkztsb5iROnEB4eDoBSip07dzB2LOzcuYMHHriH3NxcnE4nBQX55OfnkZyc0uTnFEIIIYQQorX5S63Ar5sN9WzMHL/PgUlAWq3jM4DntdZDgeeBl1rhXLuqPdevteb29e3bj5kzP2Ls2HGsWLGcyy+/AI/Hg2HAKaeczptvvsebb77HW2+9z6efzmly/WFhYQA4rFWI/H5/k66/4YZb+fvf78XpdPGPf9xZ75DXhoSHh4X+bA4ZNdvwwAP3cNZZf2LmzI94/fWZOBwOvF5vk+sXQgghhBCiLYQyfrGxHdyS9rXXwE9r/aPWOqP6MaVUD+BQ4H3r0PvAoUqp1Oaea/mjNE/1FT5bayXPnJxs7HYHkyZN4YYbbqWoqJDS0hImTJjI3LlzyMnJBsyAbcOG9S2+H8Dw4QexcaNm584dgDmXsD7p6dvZf/8hTJt2AccffxLr1/+xR5nRo8eE6sjOzmLlyl8a1Y6ysjJ69+4DwJw5X0jQJ4QQQgghOpXgHD97N8v4NXeOX39gp9baD6C19iuldlnHbc08l9uyR2meYNZv1qwPW20lzy1bNjNjxnMABAJ+Lr74clJSUklJSWX69Gu5885b8PsD+HxVHH30VA48cFiL75mUlMxtt93FbbfdQEREBEceORGn00lERMQeZV988Tl27EjH4XASExPDXXfdt0eZG2+8lUceuZ958+bSp08fhg0bQXQj/nLccMMt3H33bcTGxjJu3JHEx8e3+NmEEEIIIYRoLf6y7jnHz2YYRqMKKqW2A6dqrX9TSo0B3tZaj6h2/g/gYszgrsnntNYrG9nmQcC22gd///0P+vQZ2MgqasrNzeG2227m6aef6RRbODRXeXk50dHRAHz11Wy++GI2L7/ctIVjgtxuN06nE6fTSV5eLldccQnPPTeDgQMHtWKL97RrVxojRgxv03sIIYQQQojua+2d91C6fgMHPfoQ8QeN2PsFndtgYHtjCjY345cB9FVKOaysnQPoYx23NfNck+TnlxEI7A5aA4EAPl+gWQ+TmJjCa6+9A9DsOgCcTnuLrm+pDz54jwULvsfv9xEXF88dd9zT7PZs357GI4/cj2EY+P0+rrjiavr2HdDmzxcIBMjNLW3Te+yLUlNj5XMRbUb6l2gr0rdEW5L+JZrLU1gMQKnPgbeePtTZ+5fdbiM5uWkZy2YFflrrHKXUauACYKb1/1Va61yA5p4TLXPZZVdy2WVXtkpdQ4YcwJtvvtcqdQkhhBBCCNFZ7N7OIbqDW9K+GrOdw3+Bs4FewHdKqXxrqOZfgLeUUvcBhcCl1S5r7rkWMQwDm83WWtWJdmYYAcyksBBCCCGEEK3PCAR2z/GTxV1q0lrfANxQx/ENwLh6rmnWuZZwOsMoLy8hOjpOgr99THA4aWlpIWFhey5GI4QQQgghuifDMPAVFmJ4PYT16t3i+gKVlWAY2CMjsTmbO+tt39RlnjYxMZXCwlzKyoo6rA12u51AoOPm+O3L7HYHkZExxMTIKqBCCCGEEN1R5aZNlK5cQaCygoDbjb+kBM+OHQQqygHoc8PNxBwyskX3CG7l0N2yfdCFAj+Hw0lKSsu/BWiJzj4JVAghhBBCiM4m4K4kd9bHFP8wv87zNpcLo6qKwnlzWyHwM4d52rvZVg7QhQI/IYQQQgghROcUqPIScLtxxsaFjhmGQfnqleS8/x6+gnxwOEg4ZiphvXtjj4jAER1DWJ++2MPD2Hr7LVRuWI9n507C+/Ztdju66x5+IIGfEEIIIYQQoo1lvjyD8lUriRyqiJ98NI6YGPI//xT3tq0AhA8cRK/L/0x4/wF1Xh93xJEUL1xA0fzv6HnJZQAYPh+ejHTCBw7CZrc3qh0S+AkhhBBCCCFEGzB8PirWrQWgcqOmcqMOnXPExpF0ymkkHH0MNoej3joSjplK8cIFlCxdQso552JzONn5f/+mcqOm91+vI3bM2Ea1JTTHTwI/IYQQQgghhGg9nox0DJ8PV2oPEk84keJFC/GXlpJw9DEkHHsc9vDwvdYR3rcvkQcOo3LDeooXLqRCrw8FkJWbNjU68AuUmwvFOGJim/9A+yh/U37hAAAgAElEQVQJ/IQQQgghhBBtJjicM3LIASRMOYaEKcc0q56EY6ZSuWE9eZ98ZB6w2yEQwLMjo9F1dOdVPRs3GFYIIYQQ3ZqvpITSX37GaGDbIiMQoCo/rx1bJYTYF1RagV/E4MEtqidm5CicSckA2CMj6XPt3wDw7MjAMIxG1RGa4xcrgZ8QQgghxB6yXn+FzJdeoGj+d3We9+bmkPHU42z7+22U/vpLO7dOCNGZubdagd9++7eoHpvDQcq5fyK8/wD63ngL0SNHYY+KJlBWhr+4cXt5hwK/bpjxk6GeQgghhGiQZ+dOKn5bB0DBN3OInzQFe1gYYC7HXvLjInI+eB/D4zbLp6U1er6NEKJr85eXU5Wdhc3pJLxf/xbXF3f4EcQdfkTo5/B+/ajcqPHsyMCZkLj39nTjVT0l4yeEEEKIBhV9Py/0Z39xMcWLfgj9nPfxh2S/9QaGx40rNRUAX1FhezexW6sqKCD/y9kE3O6ObooQe3Bv3wZA+ICB2Jytn3MKBpOejB2NKh+c42fvhou7SOAnhBBCiHr5S0spWfoTACnnTgOg4JuvCXi9FC9ZTOG8ueBw0OvK6fS46BIAfIWNG3IlWkfW66+QP/szSpYu6eimiG6qKj8Pd9r2Os8FF3aJ2G+/Nrl3KPBrxAIvhmHgD63qGd0m7enMZKinEEIIIepVtHABRlUV0YeMJPGEkyj9eTme9DRy3n2H0uVLAehx0SXEjT8y9OIlGb/2U7llM5Ub1gPgzcnp4NaI7sjw+ch44lF8hYVEDRtOytnnEjF4d5Dn3roFoMax1hTWhMAv4HaD348tPBy7K6xN2tOZScZPCCGEEHUyfD6KFswHIGHq8dhsNpJPPxOAkiWLMXw+4o8+hoRJUwBC82sk8Gs/BV9/FfqzT1ZUFR2gbPVKfIXm3/mK9X+Q/uhDZL4yA8PnwzCM3Rm/wS1b2KU+4X37gs2GNysTw+drsGx33soBJPATQgghuqXiRQvJfHkGAY+n3jKlv/yMv7iIsL79iBo2HIDokaMIHzAQgMihih7nXRgqb4+OxuZyEaislPlm7cCTkUH5mtWhn6sKCjqwNaK7Kl64EIDkM84i8cSTsblclC5fRs77M/Hl5+EvLcUeExOaA9za7OHhuHr0AL8fb2Zmg2UD3XhhF5ChnkIIIUS3U7Z6FdlvvwFA9MGHEDf+yDrLBbduSJx6HDabDQCbzUavK6+mZOlPJJ14co3FGmw2G86ERKpyc8ysX/+2edETpoJv5gAQM+Ywyn5dIRk/0e68OTlUrP8dm8tFwjFTcURHE3vYWDKeeJTihT9QlW9+GRExaL/QvyFtIbxff6qys/HsyCC8f/0rh3bnFT1BMn5CCCFEt+LN3EXWqy+Ffi5duaLOcu7t23Fv24o9KprYceNrnAvv24/Uc6fV+fLkTLSGexbKcM+25M3OpvSX5eBwkDrtfHA48JeWNpjBFaK1lfy4CICYw8biiDYXS4kYNJiel10BQMVvawGIbKOFXYIaWuDFm5VF3qezKFrwPZXWfENHN1zREyTjJ4QQQnQb/ooKdj73XwJuN1EjDqLi99+o+G0dAY8He3h4jbJFP5hz++ImHBXas68xQvP8JPBrM4ZhkDvrQzAM4sZPwJWcgispiarcXHyFBYT16t3RTRTdgOHzUWwFfsF5vkFx4yfgTk+n6Nv/AW23omdQeL9+wJ6BX+nKX8l+/ZU9hp53xxU9QTJ+QgghRLdQsVGz419PUpWdRVjffvS59m9E7Lc/RlUV5evW1ijrryin9OdlACRMPrpJ93EmJgCywEtrqcrLpWjB/BovrkXzv6N81UrskZEkn3Y6AM6kZLN8fn6HtFN0P2VrVuMvKSGsdx8ihhywx/nUc6cRc+gYXL16ETlkaJu2ZffKnuZefkYgQN6ns8h84VkCbjfRI0cRe8R4XD17YnO5iBo2ok3b01lJxk8IIYTowry5OeS+/y7la9cA5lDMPtffgD08nJgxh+HeuoWylb8Se9jY0DUlP/2E4fUSNWw4Yb16Nel+wYxflWT8Wizg9bLjP/+iKjubogXf0fsv12N4veR9/CEAPS//M67kFABcyclUYu6nJkR7KF70AwDxkybXOX/P5nDQ59q/YRhGm87vA3Alp2ALj8BfXETZql/J/2I2nox0sNtJOedPJB5/YqgN7dGezkoCPyGEEKILy3zxeTzpadjCI0g68SQSjzsBe0QEADGHjiHv4w8pX7uaQFUVdpcLwzAotoZ5xk9pWrYPwJmYBEjGrzXkf/E5VdnZAHh37SL90QdxREVb22gcS+yY3cG60woAfQWS8RNtL1DlpWLDerDZiBs/ocGy7RFk2ex2wvv1w71lM7uefxYws+C9/nwVUQcOa/f2dFYS+AkhhBBdlK+4yAz6wsIY/NiTOOPja5wPS+1BeP8BeDLSqVj/OzGHjKJSb8CblYkjPoGYkaObfE9Z3KV1uNO2UzhvLths9LvldooXL6T05+X4PB7C+w8gddp5Ncq7ksyAW4Z6ivbg3bkT/H7CevfpNCtkhg8YgHvLZmxOJ4knnULSiSfvMXe5u5PATwghhOiiKjdtBCBy/wP2CPqCYg4dgycjnbJff8XmcJLz7juANXzL2fTXBNnEveUMn4/sN1+HQICEqccTNWw4kQcOI3KoonztGlLPvwi7q+aCO6GMnwR+oh2409IAQnt6dgZJJ52CMz6BuHHj22zPwH2dBH5CCCFEF1W5UQMQqVS9ZWLGHEb+7M8oWbqEkiWLAQjr1ZuEY45t1j2d8fFgs+EvLsbw+5tVR0v4iovY8a+niBl9KClnn9vu928Nhd/Nw5ORjjMlhZSzzgHM4WkJU44hYcoxdV7jSrYWd5GhnqIdeNK3AxAxsPMEfq6kZJJPPb2jm9GpyaqeQgghRBdVsdHK+A2tP/AL693HXP4/EMAWHkHKOdMY+MDDOGPjmnVPm9OJIzYWDANvUVGz6miJogXz8WbuomjB9x0SeLaUYRgUL/wBgB4XXNzooWpOa6inr7AQIxBoq+YJAYAnPR3oXBk/sXeS8RNCCCG6IH9ZGd6dO7A5nUQMHlxvOZvNRq8rr6Z83VriJ00ODdVsCWdCIv6SErz5BZDYtFVBW8Lw+UIrDQYqK3Fv30bk/kPa7f6toSo7i6rcHOzR0UQfdHCjr7O7wnDExeEvKcFXVIjL2t5BiNZm+HzmipmY8+rEvkMyfkIIIUQXVLl5ExgGEfvtv8d8sNoiBu9H8ulntkrQB7sXePHmF7RKfY1VunIF/pKS0M8Vf/zervdvDcFtN6IPOgSbw9Gka12heX7t+7mL7sWblYnh8+FKTcUR1T03Qt9XSeAnhBBCdEGh+X1D23bj5LoEA0hvO883K15gbkMRNeIgACrW/9Gu928NZcHAb+TIJl/rDM3zk738RNuRYZ77Lgn8hBBCiC6oIhj4HVD//L62Esz4edow8xRwV5L11usUfv8tRiCAJyODyk0bsUdE0POyK8Bmo3LLZgJud5u1obX5K8rNlVjtdqJHNH6YZ1BweKes7Cmao2L9H7i3bd1rObe1sIsEfvsemeMnhBBCdDEBdyWetO3gcBA55IB2v38o45dfQFsNBCtasICSxYsAKP15ubmgDBB35ARcSclEDBqMe9tWKjdtJPrgQ9qoFa2r4vffwe8ncqjCEd30Ty6U8ZPATzRRVW4uO/79T2wuF4MeehRXyu7tELxZmWCzEdbTnK/rsbZy6EwreorGkYyfEEII0cVUbt5szu8bOLBDNjAOzfEraHnGz5uTw9Y7b6No/nehY0YgEFrExR4RgXvLZspXrwIgfoq5DUXUsOEAlO9D8/zK1q4GIPqQpg/zhN1z/CTwE01VsnQJGAaG10vOB++FjrvT00h78D7SHnqAKmvFWHdwqGd/Cfz2NRL4CSGEEF1MZQcO84TdGT9PXssDkLJfV+DLyyN31kf4iosBqNiwnqrcHJxJSQx+/J/EjZ8AQPTIUYT36QNA1PARZtlOHPiVLF/Krhkv4Nm1CyMQoGLdOgCiDxnVrPpCWzrIHD/RBIZhmIEfgM1G+epVlK1Zjb+sjF0vPItRVYXhcZP3yUdU5eZgeNw4EhLMPTvFPkWGegohhBBdTMUGc1GThjZub0vOxATAzPgZhoHNZmt2Xe607QAYXi8Fc76kx4UXU7xwAQDxEyfjiI2l15VXk3z6mTjidu89GLH/EGxhYXh37sBXXIQzPqH5D9QGAh4POTPfJlBZSfna1cRPnIy/rBRXaiphvXs3q87dGb+Wf+6i+3Bv3kRVbi7OxEQSph5P3scfkvP+TMJ69sKXl0dYv/5UZWVSumwpjpgYACJkft8+STJ+QgghRBdS/ts63Fu3Yo+I6LCMnz0yCltYGAG3m0BlZY1z/spKCr7+Cs+uXY2qy5O2LfTnooULqNy6hbLVq8BuJ+6oSaFzrtTUGsNa7S4XkQeYK5pWbFjfksdpE6UrfiZQWYktPALD66Xo+28BM9vX3IDNHhWFPSICw+MmUF7ems0VXVgw2xc7bjyJU48nrF9/fHl5VPz+G46YWPrecBOJx58IQNF3Zj8NHzioo5orWqDFgZ9S6hSl1Eql1Dql1EKl1GDr+Hal1Aal1GrrvxOqXXOEUmqNUmqjUmqeUqpHS9shhBBCdHeGz0fuh+8DkHTq6TgiIzukHTabLTTPz1dUWONcwRefk/fpLNIfeYDiHxdjGEa99fjLyqjKzcXmchE79nDw+9n5zL/B7yf6kJG4EhvedzA03PP3zjfcs3jhDwD0uOBCel01HXtEBAAxow9tdp02mw1nMOtXkE95mYfP311NRZm3xe0VXVPA66X0l58Bc2Ekm8NBz4suNU/abPS+5q+4kpJJOvlUHAm7s+YRsnH7PqlFgZ9SKhF4Czhfa30w8ArwYrUi52qtR1n//c+6xg7MBK7TWg8FFgFPtKQdQgghhICiH+bjzdyFq0dPEo49rkPbEpzn5yvcHfgZgQClK8yXTMPrJfvN18h67WUCHk+ddbjTzdUDw/sPIPmsc8HhIFBhZrISJh+91zZEqWEAVG7d3PwHaQOejAzcW7dgj4wkduw44o44koEPPUrfm24h6sBhLarbFZznl5/Hr0vSyMwoZsWStNZotuiCylevIlBZSfigwYT36QtA5AEH0Oe6G+h74y2hRZLsERGknjstdF34gEEd0VzRQi3N+A0BsrXWG62fvwZOUEqlNHDNGMCttf7R+nkGMK2B8kIIIYTYC19pCfmzPwMgddr52F2uDm1PKPCrlvFzb9mCr7AQZ1ISPS+/EltYGKXLlpL3ycd11uHZbg7zjBg0iLAePYifONmsOzk5tEl7Q4Jz5apyczH8/hY9T2sqWmTOUYw94sjQ8FRXUjLRB7V82wmntQx/1veL2bA2C4AN67Ik6yfqVPyTOcwz7sgJNY7HjD6U6INq7iUZO2488ZMmE3fUpNBCQmLf0tLFXTYCvZRSY7XWvwAXWceD+d93lVI24Efgbq11kXUu9NWT1jpPKWVXSiVprRu97nNyckwLm942UlNjO7oJoouSviXakvSvfd+WWe8RqKwkYdRIBk2d2OELe1QM7EvpcjDStpJ65skAbP3M3HKhx6SjGHzWyfQcPoS1d9xFyU8/oq6+DGdUVI068jN3AJB68DBSU2NJuPIStvo9pE6ZTFLPxqwoGEt6UhLeggLibB4iUnu26jM2h9/tZsvyZQAMPvMUolv5717UWafy24qf+S0/gkCcD2wOMAx+X7mLk89p+qbwnZ3829V8ZVu3UfHHb9icTgafdCyuuL1/lj1uvaEdWtZ5dLX+1aLAT2tdrJQ6D/iPUioC+AYoAnzARK11hlIqHHgGeA64uKUNDsrPLyMQqH9eQEdITY0lN7e0o5shuiDpW6ItSf/a93mzs8ma9x3Y7cSfPY28vLKObhLOkWNh1qfk/LCQqGNPwJXag5wfzeyCc8Qos88l9SZyqKJyo2brl/8j8ZipNeoo3mQO0fQm9bL6qI2ky67GD43us46UVCgoIGv9VqLtUXu/oI0VL16Iv6KCiP2HUBGdREVr/92LSiT5prvIfG8Dhs0BgN9vsOrnDEYc2oeomLDWvV8Hkn+7mi/g8ZD+1L8hECBu8tEUeWwgn2UNnb1/2e22JifCWry4i9b6O631UVrrwzCDu0hgi9Y6wzrvAV4AgjnkdCC0Bqw1LDTQlGyfEEIIIXbL/2q2+QJ35ITQPJ2OFtazJz2OORoCAfK/mE3lpo34i4txpaQSPmhwqFyCFewVz/++xkIv/tJSfHl52MLCCOvVvO0NAFw9zCxfVU52s+toLd7sbPK/nA1A/KQpbXafNRvKwFHzu33DMGSunwjJnfUR3sxdhPXqXWPunujaWmNVz17W/+3AY5hz9lBKxVv/twHnA6utS34FIpVSR1k//wWoe3C/EEIIIRrkzdxF6bKl4HCQfOrpHd2cGvqfZy7IUvrzMgq++hKAmMPG1hiGGjNqNI6EBLxZmVRW23YhuH9f+ICB2ByOZrchrKcZ+HmzOzbw82RkkPHko/gKCojYfwixh49rk/uUl3nYsC57j1FRAb8hc/0EAGVr11C84HtwOOg1/S81tkERXVtr7OP3iFJqPbAJ8AJ3Aj2BH5RSa4HfgKHAtQBa6wBwCfCiUmoTMNm6RgghhBBNlP/F52AYxB81EZe1sEdnEdGjB/GTJoNhULHe3FKhdsBjczpDK3QWzv8udDwY+EUMGtSiNrh6mDtGdWTGr3LrVjL++Tj+khKihg2n3823tdniO78uSat3iwzJ+omAx0P2G68BkHLmObIRezfT0sVd0FpfVcfhrcDoBq75Ceh6M4yFEEKIZjIMg4KvvsCZkBBavXJvPDsyKF3xCzank6RTTmvjFjZP0smnUbJ4EYbPh6tnT8L777n/V/ykyeR/9QXlq1dRlZ+PKzkZz/btAES0cKPosB69AKjKyWlRPS2R/earBCoqiB59KL2n/wW7q23m2YWyff66A79g1u+wCQO71Fw/0XjutO34S0sI692HxBNO7OjmiHbWGhk/IYQQQrRQ6bKl5M/+jJx338EIBBp1Tf6Xs81s36TJuJKS27iFzeNKTAzN44s74sg6Vxt1xicQO2YsGAbZb76Gr7gYd5q5lUP4wMF7lG/S/YMZv7zcRn+uramqIB/vrl3YIyLoc821bRb0QcPZviDDMPhl8VZKli4h4K5ss7aIzsmzIwOAiP33x2aXMKC7kd+4EEII0cH8FRXkfvwBAIbPR1V+3l6v8WZlUvbrCjPbd/Kpbd3EFkk550/0vfEWkk46pd4ySaechj0qmor1f5B2/734CgqwhUcQ1qtXi+5tDw/HkZCA4fPhK8gPHS9ZvoyKjbpFdTdG5YYNAEQOVdicLR5o1aCsnSX1ZvuCAn6Dnet3kPXaK+R99mmbtkd0Pl4r8Avv17+DWyI6Qtv+CySEEEKIvcr/4nP8JSWhn6uysghL7dHgNYXz/gdA3JFHhTZL76xsDgfRBze8OXl4374MfOBhsl5/JbTIS8SAAa2SlQjr0ZPKoiK82dm4UlLx7NxJ1iszcCYmsd8//93i+htSseEPAKIOHN6m9wGY9ufD9jhmBAJsveVG/GWlDHrkCRwxMWz9+60YQOmKX0g97wLJ/NTBs2sX5WtWETf+yE7/96spPBL4dWsS+AkhhBAdyLMjg6L534HNRsT+Q3Bv3oQ3K7PBQMlXUkLJTz8CkHj8Ce3V1DbnSkqi3y23UzhvLgVffUHs2MNbp94ePancqM15fiOg4vd1APgKC/BXlOOIim6V+9RmGAYVVhAbNWxYm9yjIeeddyZab9h94MQpexY6dC5KHciHH37ebu3aF2S9/gqe7dvI/3I2SSedQuLxJ+7zq18agQCeHTsACfy6K/mKRwghhOggRiBAzrvvQCBAwtHHEHuombHxZmU1eF3Rgu8xfD6iR45q0R53nZHNbifpxJPZ/9kXQ3MDWyrMmufntVb2LP/j99C5vX3WLVGVk42voAB7TAxhffu12X3qc8gho3DtZfVQp8PByJH1rsfXLXl27cKzfRvY7RheL/mzP2P7P+6iKj9/7xd3YlW5ORheL87ERBwxTdv4W3QNEvgJIYQQHaTw2/9RuWkjjthYks88G5c1n82bXX8wEvB4KFrwPQCJJ5zULu3sCHUtAtNc1TdxD1RVUVltbp83M7PV7lNbKNunDuyQ4ZTTp1+LfS/3tRsGV1/913Zq0b6hdNlPAMRNOIp+t99JWN9++AoKKPz2f/Ve49m1k+y338BXXNxezWyy4DDPsL6S7euuJPATQgghWsiblYW/oqJJ17i3bSXv01kA9LzszziiokPZu6oGAr+Sn5YQKCsjfNBgIg8Y2vxGdyPBTdyrcnJwb9mM4d29ibk3qw0Dv/VW4NcO8/vqkprag9NPP6verJ/TZmNKciqOglI+f3f1Hpu7l5d56jzelRmBACXLlgIQN34CUepAev3Z3Lms5KclBKrq/ixyZr5N8aKFFHz9VaPuU/zjYrbecStlq35tnYY3QmiYZ38J/LormeMnhBBCtEDFhvXsePop7FFRpJx9LvETJ+81u+OvrCTz5RfB7yfh2OOIGWUOtXOlpGBzOvEVFhJwu7FHRNS8rrSUgrlzAEg64aRWzYp1ZS5roZyq3BzKfzPn9zmTkvEV5LdZ4GcEAlTq4Py+jgn8wMz6ffHFZ3WeszscnNunL78s2ERmUSQrlqQx6YQDQud/XZJGZkZxjeN7zBusx74wb3CvzzLtDMB8lqcOGoUnbTtlK1YQN/7IGsXc6WmhLHLJ8qWk/um8eldwNQIB8j6dReHcrwEomPsNMaPHtMLT7J0nIx2Q+X3dmWT8hBBCiEaqvUeaYRjkz/4MDINAeTk577xF+mMP405Pq7eOgLuS7Ldepyo3l/D+A0g5d1ronM1uD+07V3u4p7+igh3/+Re+/HzC+/cn5tD2eVnsCuwRETjizS0dSpaaw/gSjj4GgKo2Gurp3bUTf2kpzsREXFbGsSOEsn61AhGXy8UpU44lMiKe7YXm3oIb1mWFsnvBzeBrH2/MvEGXy7VPzBtsyrPET5oCQPGiH/YoU/TdvNCfA2VllK1dU2ddAY+HXS8+ZwZ9Dgc2pxP3ls14c3Oa3HYjEMCdnkbhd/PIfGUGpb+u2Os1XlnYpduTwE8IIYRohMpNG9l6+83kfvLx7mN6A5WbNmKPiqbnFVfhTEzEs30bGU8+vscecb6iInI/+dgc3rXiF2zh4fS+5q/Ya714hvU0h3tWX3Qk4PGw69ln8KSn4UrtQd8bb8XmcLTh03Y9wQVe/MVF2JxO4idOBpsNb24Ohs/X6vcLzu+LPHBYh2dmp0+/Fnut/mK327n2trvYnjom9IWGEQiwdPYKKrds5pf5m3YfNwxWLEnbXdfe5g3a7Uyffm0bPEnrasqzxI0bhy08gspNG/Hs2hU67ysupvTn5WCzEX/0sQChFXerqyosJOPJxyhftRJ7VBT9brqVmDFjASi1hpY2VlVuLltvv5n0h+4n94P3KF2+jMyXXqBs7ep6r/FXVlKVl4vN6QwNfRbdjwR+QgghxF74iovYNeN5/EVFFH4zh+Il5otd/hfmULbE444nfsJRDHr4cWIPH4fhcbPzmacp/20dvuIicj54l2133kbhN3MIVFQQecBQ+t10a50rcoYWeKk2BDHzlRlUbtqIMzGRfrfejjMhoR2eumupnnWLGHIAjpgYnMnJ4PdT1YyMS0M8u3ZSunwZAFEHtv82DrXVnuvncrk444yziYpJZFfM/hh2MxsYCMDmtEr+ePp59G/Zoc3gA34jlPXb27zBYN0pKant83At0JRnsUdEEjfuCACKFy8MlSleuCC0wm7yqaeD3U752jU1Fnlxp20n/dEHQ1/cDLjrXqKGDSfuiPGAOTy09miChhQt+gF/cTGO+Hjixk8gbvwECATInPEClVs213lNMNsX1qdvvcNQRdcngZ8QQgjRAMPvJ/PlGfiLi3EmJQOQM/MtCr+bR+VGjT0qioRjjwPMIYW9rrqGuImTMLxedj77DNvuuoOi777F8PmIOXQM/e/+B/3/fne9C7OEWYFfcIEXz86dlK9ehT0ign633I5rH3ih7ozCeuwO/KKHjzCP9QpmV1tnuGf5b+tIe+h+0u67B/e2rWC3EzVsRKvU3VLVs1vBLNavS9KgVsbLsNv5o/9UjFpZyupZv6uv+is26s5i7ivZvqCGsn61nyU43LPkpx+pKsgnUFVF0YL5ACROPR5nfLy5/2YgEAr8S5YvI+PJx/AXFRF5wFAG3P0Pwnr3ASBq+AgcsbFUZWXhSat/eHh1RiBA6XIzQ9j7mmvpdeXV9PzzVcQdNdH8N+e//6mRkQzavXF7+28rIjoPCfmFEEKIBuR9/imVegOOuDgG3P0P8mZ/SsniReR+8B5gvvA5oqJC5W12Oz0vvQJ7eLgZ8Pn9RI8+lJTTz2rUanq7gxEz8Ctd8TMAMYeNDb0wiqZzVQv8ooYfBJifdcVv68wtHVo4Jc2cv/U8hseNPTKS2LGHEz9xMq6kpJZV3EqC2a1Zsz7kjDPOJjIijg3rNhAI1CxnYKfMFsOsuQ+TX7Sj5sl3gb/Xfw+Xw9kq2T7DMFo0PLYp1wc/l88/m0VVtSG/dWUuIwYNInzAQDzpaWy741Zs4REYHjdh/foTqQ4EIO7Ioyhfs5riHxfh2ZFOyU9LrOMT6HHJ5TWGdtscDmLHjqNo/neULF9KxKBBe21v5UaNr6AAZ3IykUPMBXdsNhs9L7kcf0kJ5WvXkPXqSwz4xwM1PoPdgZ/M7+vOJOMnhBBC1KNy8yYKv5kDdju9r7kWZ0ICPS68mPBBgwGwR0aSMPW4Pa6z2Wyknnchfa6/kQH3PUjf625o9BLqYT137+VnGAZlv/4CQOxhh7fSU3VPwUyqPSaG8AEDzGO9Wy/jV75mNUuhS4AAACAASURBVIbHTfigwez37/+j56VXEDF4vxbX25qmT7+W0aPHhLJ9DQ0v7JmyH3Z70+aR2gJ+zu0/sEVt9JeXk/7wA+x89pkmX1u5dStpD93P9nvuxFda0ujrpk+/do/8ZX2Zyx4XXETkUIU9KgrD4wYg6aSTQ0FWzMhR2GNi8O7aSclPS7CFhdHjksvpecVVe8znBYi1hnuW/rwco3YUXofg4kRxRxxZY/Vgm8NB72uuxREXhyc9jYrff6txXSjw6z9gr/cQXZdk/IQQQoh6BBdpSDzueKKsb/TtrjD6/PV6st9+g7hx43FERdd5rc1mC23T0BSOmBjsMTEEysqo+ON3vLt2YY+O7hRzxfZlYX37kXLuNHOOk/XC3JpDPUt+Nof2xR0xHrsrrMX1tYXU1B68/v/s3Xd4XPWV//H3nSaNeneRG7bxtXHHuIApxvReQ1lKQoqTkE2ybLLpm2w2u2x6WAIJSX4hS4AQEorpEJoxmGobd/u6y1aX1TUjzWhm7u+PGY0tW5Ilq4zK5/U8frDnljljLkJH5/s958FHYh07d8T38HXk1JmXY+17Dwh3eo7D4cDhcBIKteJyOlmWmw9vraImv4Cciy/tcXy2bVP+p/9H4EARgQNFhOrrcGUefz9rJBCgeuVT1L72D4gls4f+9jijP/O5417rawrwzsvFnJU/hrfKiwnZdpf7FL0nT2P8N76NbduEamuI+HztkinD5SJz6ZnUvvIynsJxjPn8F0kaW9jp+yefNBl3fgGtVZX4d2yPL0Pu7HO2/SDo6JESAI6kJLIvuIhDT/6dmpdeIHXWbCC6PLRthp9HSz1HNFX8REREOmCHQjSujw5Xzjh9abtj7txcxt31dTLOWNrRpb3WVvWref5ZANLmL1BDhl4yDIOciy8lbc7c+GttS2eDZWU9aq5xtLDfh3/LZjCMIVGZPV61DyDVm4l50umdVv3cbjeXXXYlTmf0W0mny8UXv/4tAA498Tfq33m7x3HVvfYPfBs+jv+5ec+ebl1Xet+91L76CgCZy5ZjuFw0vLcm3lm1K+vWFFFe0sCp5sXH7IHsimEYuHNyO6yg5V1zPeO+9g0mfPf7XSZ9bfdpq/pVP/M0drjzRLtp48dEWqJV5Y4aQ0H08zu83mjH4Vijl7ZqtDMzE1d6RpfxyPCmxE9ERKQDfmsHkaYmPKPH4Ckc2J+St31T17xrJwDppy0c0PcfKZzp6ThSUok0NxNuqD/+BUSHfs+bN73drwVnLOAT77/DDR+9x2nLljBv3nRuvPHqfo7+xJWXNHRZ7Wtz6szLMYzOG5989atf48orr8EwDK666lpOuvBi8m+6BYCKP/+py/ECEO122bRpI4HSUvw7Laqe+BsAyZOjS2Rb9h4/8Qv7ffi3b8VwuZjw3e8z6tbbybn8ymgMDz9EpLW102sPzyo0aCqYx4VnnBP/LL3Zp2i4XKTMOAWHp3uV3+zl5+PMyqJlz+54p+CONLYt8+yg2tfG6fWSFRsrUfPSCzTv3kXZHx4AIGvZ8u5+BBmm9ONDERGRDsSbqixcNOBz2Nr2owFa5tmPDMPAM2ZMdIh2WVm3lhXOmTOPvXv30NpFQjHYB5jf8OnTun1uwLOelU8/SWvo8Oc9cinkihV3smfP7niFLPv8Cwg3NlDzwnMcevIJ0ubM6/C+wYpyDtz9IziqwpV13gWkzJxJ6b330NLJaIJ28R04AIBn3HiSY3tvsy+6hMb33yNYXkbtyy+Se8VVHV67bk0Rdji6r842DBafdRulvoYB70rqTE9nzOe+QPHPf0LNi8/jNacfs+Qz1NCAb+sWcDpJX7S4y/tlnXcBtf94Gd+Gj2m2dmAHg2SceVY8IZaRSxU/ERGRo9ihEE2xZZ6JWLp3ZOKnZZ79q6f7/IbTAPPuiA5/b/95j/x8bfsGj6yQ5Vx+JYbLRbCkmLDf1+F96954HcJh3Hn50Y6rTifeaSZ519+Ad/JUIFoRtI/otNmRlqL9ACRPnHQ4Prebgts+CUDNC88RLDt2vEFbtS8SK3zahpOyAyHuu/fBhMwgTDGnRxMz26b8j79vNwcQoO71VyESIXXW7OMu13RlZpJx5tkARJqbSZ03n1G3fWrAf4Alg48SPxERkaP4rR1EfD48Y8aSVNj1Hp3+4B51eP9O+sLBv2dsKOtp4jecBph3R2fD37v6fA63O975tqPlmuHmZhrWRPcAjv3Slznp7p9w8gP/j/Hf+DYOtxtnWhruUaOxg8F4N8rOtM2/S5rYvptoijk9OtsuFKL8/x48pmPmujVFx7x25KzCRMi94iq800zC9fVUPPRgfB9mqKEh2rgGyLn08m7dK+fiS3CkpJAy4xTGrPgihrNnHVpleFLiJyIicpTGjw7PzksET0EBruxs3Pn58W6i0j/iIx3Kut/ZsydDv4eDjoa/H493SrRq17x71zHHGt59h0hLC95pZrw5ytHVKO+UKdHrj7Pcs+XAfqB9xa9N/g034cyM7p2re/3V+Ovxat9R0xMiYZsdm8vxNwW7fM/+YjgcjP7s53F4vfg2bYzPAKx58XnsQIDUufPif6/H487LZ8ov76Xwrq93e6+hDH9K/ERERI5gh0I0fZy4ZZ4QbQ4x8fv/yYTv/kDLPPtZW8UvUFzcrTlqcEQVzNW+6jfcqn1t2j5vTxqfeKe2JX7tEzc7EqHujdeA6F60ziRPjiZ+LV109gz5m2mtqACnE08H3TOdKamMii35PPT0kwQrKoCOq33x+BJc9XPn5FBw860AVP31UZr37KZ+1RsA5F19bY/uZbhc7Wb9iehpEBEROULjhx9El3mOTcwyzzbO9HScaWkJe/+Rwl1QgCs7h3B9Hc07rU7P8zUFWPnohng1aMWKOzl6y9RwrPa1OXL4e3ckt+3T27e33YgC/9YttFZU4MrJ6XLOZbxiuLfzip9v3z6wbZIKx3U4HB0gbd580hefjh0MUvF/f6Sxur7Dal+bRFf9ANJPP4PUufOINDdT/LMfY4dCpC9arOHr0mtK/ERERGL827dR8ec/AZB17vkJjkYGguFwkHHmWQDUr36r0/PWrSmi7GB9vBqUn1/A+VOn4Yplf8O12temoyYuXXFlZuLOL8AOBAiUFMdfr309Vu0797wu9515CsdhJCUTOnSIUH1dh+f49uwFjt3fd7SCm2/BmZ5B866drLr3qS5n5UHiq36GYTDqtk/hSEmNNrdxOMi98pqExSPDhxI/ERERoGX/Pkruuxc7FCJr+flkLjs30SHJAMk88ywwDJrWryXc1HTM8cPz3ohXgyKtQa5OTaOt6Decq30nKjm23LMlts8vUFqCf8smDLebzLPO6fJaw+Eg+aTOG8QANMUSv4729x3JmZbGuH/9N5InT6bOyCRid93dMhK2KS/p3lzH/uLKymLUrbeDYZB5zrJ2nX5FTpQ2DoiIyIjXWlVFyT2/xA60kL54Cfk3/ZNan48g7tw8Uk6ZiX/rFhref5fs8y9sd3zdmqJ4h8W2atCCwmayMDhv0mRe2b93WFf7TpR3ylQa33uX5j27yVp+PjXPPwtAxplndWsZs3fKVJp3bKd5zx7S5i845rhvb6ziN2HSce+VNH4847/1Pa56/z2qnvwbkeZmJnz3+yQVjuvZhxpA6YsW4502DWdGZqJDkWFCiZ+IiIx4VX//K+GmRlJmzmL0HZ9VQ4QRKPOsc/Bv3UL926vJOu+CeOIf7wAZjiZ+bXvAJlZEB4ffce31VL75uqp9HfBOORmIduYMlJZEu+U6neRcclm3rk+Odfb0b92Cf9ZsnBmZeAoKMFwuIoEA/uIScDhIGt+95M1wOMg4YylpCxcSaW7BldH1PLzBwJWVnegQZBhR4iciIiNa857dNK1fh+HxMPqOz6iL5giVNm8+zvR0giXFtOzbizfWVbKzeW+b97YyDZiw9BwevO2OBEQ8+HkKC3EkR/fpVf7lEbBtMs88G3dObreu906eCoZB4OABin/+EyA6pmDcv32LUF0tRCJ4xo3H4e7ZuAKH29Pja0SGA/1IU0RERizbtjn05N8ByD7/Qv10fQQzXC4yzlgKHG7y0tW8txLPeEJZ+SRPmjTAkQ4dhsMRH8vQvGN7tNrXzQHkEN2bV3DbJ0lbcBrek6fhzMyk9VAVJf/7C/zbtwGQPKHrxi4icpgSPxERGbH8WzbTvNPCkZJK9sWXJDocSbC2hiONH31AJBBot7fvaDZwYPyZWhZ8HMlHDBzPXHoW7tzuVfvaZJ29jLFf/GfGf/M7TPrPu/GMHUuwtJTqZ54GIEmJt0i36auViIiMSHYkQlWs2pdz2eU4U1ITHJEkmmf0GJInT8YOBKj6cH27vX1Hsx0uDgSyEjrvbSjwTo3u84tW+7q3t68zztRUCr/6NZxZWRBLyFXxE+k+JX4iIjIiNX28nmDxQVw5OWQtPy/R4cggkb74dADWf1DSabWvjY2R0HlvQ0GKOZ30xaeTf+PNuPug66k7N5dxX/1XHF4vztQUDTUX6QHtYBcRkREpULQfgIwzlqrRg8Sln7aIqscf45DPSSSp68QvEkn8vLfBznC5GPO5z/fpPZPGT2DiD/+L7IxkmlxJfXpvkeFMiZ+IiIxIrbU1QHSGm0gbV2YmKTNOYfHWZyi47ZPUv7WKwIEiCu/6OqkzZyU6PIlx5+TizU+nqaox0aGIDBm9TvxM07wM+BHgBmqAT1mWtc80zWnAQ0AuUA3cblnWrtg1nR4TEREZCKHaWgBc3WwtLyNHxpLT8W/dQt0brxMsKcZwu/GePC3RYYmI9Eqv9viZpplNNIG7ybKs2cAfgN/GDj8A3G9Z1jTgfuB3R1za1TEREZF+F6qJVvxc2RrhIO2lzT8Vw+MhWFIMgHeaicOj5cAiMrT1trnLVKDCsqydsT+/CFxkmmYBcCrwWOz1x4BTTdPM7+pYL2MRERHpFtu2CbUt9czJSXA0Mtg4kr2kzZ0X/3PKKTMTGI2ISN/o7VLPncBo0zQXWpb1EXBL7PXxQIllWWEAy7LCpmmWxl43ujhW1d03zs1N62Xo/SM/Pz3RIcgwpWdL+tNIe75aGxqwW1txpqYwanxBosMZ1obqs+W8cDnbP/oQgHFnLiZ1iH6O4W6oPl8yNAy356tXiZ9lWfWmad4I/Mo0zWTgJaAO6PesrLq6iUik625bAy0/P50qbTKWfqBnS/rTSHy+Wg4cAMCZmT3iPvtAGsrPlj1+Kp6xYzE8SfhSsvEP0c8xnA3l50sGv8H+fDkcRo8LYb1u7mJZ1mvAawCmaY4C/g3YDxSapumMVfScwFjgINGKX2fHRERE+l18f5+WeUonDJeLif/xX9HfG0aCoxER6b1eD3A3TXN07J8O4G7gAcuyioANwM2x024GPrYsq8qyrMrOjvU2FhERke7Q/j7pDsPhwHD0+lslEZFBoS/m+P2XaZpLAQ/wD+Bbsde/ADxkmub3gVrg9iOu6eqYiIhIv2qNd/RU4iciIiNDXyz1/Gwnr+8AFvf0mIiISH9rq/gp8RMRkZFC6xdERGTE0R4/EREZaZT4iYjIiKM9fiIiMtIo8RMRkRElOry9FtBSTxERGTmU+ImIyIgSbmzEDoVwpKTiSEpKdDgiIiIDQomfiIiMKNrfJyIiI5ESPxERGVHi+/uysxMciYiIyMBR4iciIiNKa60qfiIiMvIo8RMRkRElpOHtIiIyAinxExGREUXD20VEZCRS4iciIiNKW8VPM/xERGQkUeInIiIjivb4iYjISKTET0RERgw7Ejk8vD1LXT1FRGTkUOInIiIjRrixAcJhHGlpGt4uIiIjihI/EREZMeL7+9TYRURERhglfiIiMmK0ti3z1PB2EREZYZT4iYjIiGCHQvg2rAfAlZOb4GhEREQGlivRAYiIiPS1SGsQ//ZtuDIy8YweQ6i+jrI//I7A/n1gGKTNm5/oEEVERAaUEj8RERl2qp99htqXXjj8gtMJ4TCunFxGf3YFKdPMxAUnIiKSAEr8RERkWLHDYRrWvA2Ae9RoWg9VQThM+uIlFNxyG86U1ARHKCIiMvCU+ImIyLDi27qZcEMDntFjmPijuyESIdLSgjNVCZ+IiIxcSvxERGRYaVjzDgAZZyzFMAxwOpX0iYjIiKeuniIiMmyEm5rwbdwAhkH66UsTHY6IiMigocRPRESGjcaPPsQOhUg5ZSZuzeoTERGJU+InIiLDRsO7h5d5ioiIyGFK/EREZFgIlpXSsm8vDq+XtHmnJjocERGRQUWJn4iIDAsNH34AQNppC3EkJSU4GhERkcFFiZ+IiAwLLfv2ApA6a06CIxERERl8lPiJiMiwECg+CEDS+AkJjkRERGTwUeInIiJDXrixkXBdHUZSMu68vESHIyIiMugo8RMRkSEvXu0bNw7Dof+1iYiIHE3/dxQRkSEvcLAt8Ruf4EhEREQGJyV+IiIy5B2u+CnxExER6YgSPxERGfKU+ImIiHTN1dsbmKZ5OfAjwIj9+qFlWU+ZprkfaIn9AvimZVmvxK5ZAvwO8AL7gVsty6rsbSwiIsNNJBDQTLrjsMNhgqUlAHjGjUtwNCIiIoNTryp+pmkawMPAbZZlzQNuAx4yTbPtvtdbljUv9qst6XMAjwBfsixrGrAa+HFv4hARGY5q33iN3V+5k7I//h47Ekl0OINWsLwcOxTCnZeP0+tNdDgiIiKDUl8s9YwAmbHfZwFllmV19R3KAqDFsqx3Yn9+ALihD+IQERkWbNum+vlnqfrLIxAO0/jeu1Q89Cclf51oW+bpGa9lniIiIp3pVeJnWZZNNGl7xjTNImAlcPsRpzxqmuYm0zR/Y5pmVuy1CUDREfc4BDhM08zpTSwiIsOBHYlw6InHqV75FBgG2RddguHx0LDmbar++ii2bSc6xEEncPAAoP19IiIiXenVHj/TNF3At4GrLMtaY5rmUuBvpmmeApxlWdZB0zSTgHuA+4Bbex1xTG5uWl/dqk/l56cnOgQZpvRsDW8hfzOVr79B6XPPE6ioxHA6mfavXyXvzKXUnbGQbT+6m7o3Xif7pAmMvfLyPn//ofx8VVWVAVAwcxq5Q/hzDFdD+dmSwU/Pl/Sn4fZ89ba5yzxgrGVZawBiyZ8PmGFZ1kex1wKmaf4GeDZ2zQFgYtsNTNPMAyKWZdX05I2rq5uIRAbXT77z89OpqmpMdBgyDOnZGr5aa6qpe/016levItLcDIA7P5+CW27HNmdH/70XTmbU7XdQ/uAfKHvzLdynn9OnMQyl5+vGG6/GsnZ0fPD66+K/Nc3pPP74ygGKSjozlJ4tGXr0fEl/GuzPl8Nh9LgQ1tvErxgYZ5qmaVmWZZrmDGAUUGqaZqZlWfWxBjA3ARti16wDvKZpnhnb5/cF4O+9jENEZNBrra2l8b01hP1+7HCYUE01TR+vh9jePe/J08i64CLS5s3HcLRfiZ86dx4QHVRuh8MYTueAxz8YzJkzj71799Da2trpOW63m7lz5w9gVCIiIoNfrxI/y7LKTdP8IvCEaZptXQc+DSQBz5um6QScwDbgztg1EdM0bwN+Z5pmMrFxDr2JQ0RkMLMjEerfXs2hJx6PV/XiHA7SFy0h+4ILST5pcqf3cKam4s7Pp7WqimBpKUkjtJHJihV38uyzT3d5jsPhYMWKOwcoIhERkaGh13P8LMt6FHi0g0Od/rjVsqx3gdm9fW8RkcGgy+WHR5jkTeH+m27Fe/I0cDpxeJJInTMXd25ut94naeIkWquqaDmwf8Qmfvn5BVx55TWsXPlkh1U/t9vNVVddS15efgKiExERGbz6YpyDiMiINmfOPNxud5fnuAyDeYuWMPYrd5Fz6eXkXHQJWecu73bSB5A8Ibo9OlC0vzfhDnmf++wXMTo5pmqfiIhIx5T4iYj00ooVd+JwdP3l1Onx8M///kMMo7OU5fiSJk4CoKWoqOsTh7FIMEjwsUdZlpWN66i/S1X7REREOqfET0Skl9qWH3ZW9XO7XH2SkCTHEr/AwQPY4XCv7jUURQIBSu79Ff4tm7hh6nQczva7FVTtExER6ZwSPxGRPtBV1c/hdPZJQuJMS8OVm4sdDBIsL+/1/bqracPHNH28bsDeryNhv4+Se35B847tODMzmf3vP+Cqa66LJ9uq9omIiHRNiZ+ISB+IV/1c7atQfZ2QxKt+A7TPr7WmmtL776X0/l9Tv+adfn+/cGMjjevW4rd2ECwvp3nPbsofepC9//Y1mnftxJWdw/h/+zZJYwvbJduq9omIiHSt1109RWTosEMhDJf+sz9R3e3eeaS+TkiSJk6iaf06Wor2k3HG0j67b2ca3nkbbBuAij//CVdmJqmz+q8pc/lDD+Lb8HGHx7zTTEbd8Rk8+QXA4WT7iSceV7VPRETkOFTxExkhGtd9xK4vfZ7qZ1dix76Rl/Z8WzZT8cifCft9HR7vTvdOI/YL+mf5Ybzid6D/G7zYkQj176wGIGXmLAiHKf3tfbTs398v7xdpbcW/bSsAyVOm4s7Px5WbS/aFFzPpR3cz/hvfjid9bVasuJP58xeo2iciInIc+tG/yAhR//ZqCIejiV84TO7V1/aqw+RwVPXXvxAsLyNUV8vYL33lmL+f7gwPdzmdGE4nwWCwX5YfJk2MjnRoOVCEHYlgHKebaG/4t24hVFODOz+fwq/+K+V//AONH7xHyT2/YOxX7sI7ufOB8yeiZe8e7GAQT+E4Jnz7e926Jj+/gAcffKRP4xARERmOVPETGQEiLS0079gOhgEOBzUvPEf100+q8neEYGUlwfIyAHwbPqb25Zfix3xNAVY+uoFUb1aX3TtdTifXXHcDV10VTar7Y/mhKz0DV04OdiDQ7w1e6lavAiDzrHMwHA5G3/EZUufMJdzUSPHPf0zTpg19+n7+7dsASJkxo0/vKyIiIkr8REYE37at2KEQySdNZsyKL0STvxefpz72jf1QV/fWKiofe5TGtR8RbmzEjkRoPVSFb/Mmmvfs7tY9fJs2AuAeNRqAQ0/9Hf+O7QCsW1NE2cF61q4p6rJ7p9PlYsWKO/t9+WFSHzZ48W3ZTPFTK6l+7hkOrXySxnVrsSMRQnV1+DZuAIeDjDPOBMBwuRh755fJOONM7GCQ0vvupf7tt3odQ5t44jf9lD67p4iIiERpqafICODbGK3MpM6dR/ppi4i0tFDxfw9S++orZJ69bEgv+ax+7hmqn4kuv6x7/VUADLcbu7U1fk7m2eeQf9MtODyeTu/ji1Wvci+/gkBpKbUvvUDZ735L2rU3s2NTCIAdm8s5belErrzyGlY+/QStoVD8+qP38/Xn8sPkCRPxfbyehg/ex11QQPLESSfUtCdYUUHJ//4y3rylTdLESXjGjIFIhLT5C3BlZcWPGS4Xo+74DK6cbGqef46Kh/6E3dpK1vLze/WZIi3NtOzfBw4HXnN6r+4lIiIix1LiJzLM2ZFIvJqVNnceABmnL6X6madpLS+n2dpByvShubSu+oXnokmfYZC5bDmt5WU0796F3dqKMzMTz6jRtOzdQ/3qt2jZt5f8m28lXF9PoPgghstFzqWXYzidRFqa8Vs7wDBInTWH9EVLaNm3l+Yd2/ngxY1EMqaB4cSORFi7pohPXXktK5/8W7tYBnKcgHfqyQD4t2zCv2UThsdD3nWfIPu8C3p0n8aPPgDbJu3kqXimzQDbpn7NOwSK9seriZlnn3PMdYZhkHf1dTjTM6h67FEq//IINpDdi+TPv9OCcJjkyZNxer0nfB8RERHpmBI/kWGuZd9ewo0NuHJz8RSOA8BwOsk482xqnnuG+tWrhmTiV/PSi1Q//SQYBqM//TkyTj8DiHaGtFtbcaakANEmKGUP/IbAwYMU//R/2t3D4fWSff6F+LZtiyYdU6biTE8HoPCrd1Gxag1la21swxm9dwS2f1xM/huvcm5uHm9UHyIUiQz48HDv9BmM/dKX8W3ZQrO1g2B5GTUvvUDW8vN7VL1t/OhDAMbf+AnCk0wAci67gtpXX6H25RdxF4yKdvPsRPZ5F2AYBpV/eYSqvzwCEZvs83uWfEJ0D+VLr1cy3eklR8s8RURE+oX2+IkMc23LPNPmzmuXFGSeeTYYBo3r1hJqbEhUeCekbvUqDj35NzAMRn3qM/GkD8DhdseTPogui5zwvR+QccaZuAtGkTp3Hhlnng1A9TNP01BezUtvVhFwekmdM/eI+3jYFSmEo5ZQ2pEIu4wJ/NOSM3HGmrwM9PBwwzBIm7+AUbd9kok/uhtnVhbhujoCBw90+x6B0lKCJcU4UlLImnfE505KIvfyK5lyz31M+M6/H7draNby8ym45TYAqv766AmNC1m3pohDLR72Zc8lZYYSPxERkf6gip/IMNcU3983v93r7txcUmfPwbdpIw3vriHnoksSEV6PNX28jsqHHwKg4J9uI3Ppmce9xpmSwuhPfzb+Z9u2CdXV4t+ymXcfX0N1MIN92XOZNmde/BxfU4AdmyuIhNsnMbbDRXm2ybJPfoIrkz0JHx5uGAZpc+ZSv/otfBs3kDxhYreua1obrfalzV+Aw+0GWtrftwd7BrPOPQ/D6aLi4f+j+tmVhOrrKLjl9m6NmvA1BdixqRwMg7KMk4mMmdDt9xUREZHuU+InMoy1Vh8iWFKMkZSMd5p5zPHMs5fh27SR+tWryL7w4kHf5MW/06Lsd78F2ybniqvIOnf5Cd3HMAwKbrwZa+c+inyp4DAoy5xGKKuApNg569YUdVq5sh1ONmysYcWKO9mzZ3fCh4enzpkXTfw2byT3iquOe75t2/FlnukLF/ZJDJlnn4MzPY2y3z9A/VuraNm3D2dGBoQjONPTSV9yOqmzZmM4HNihEC379hKqr2PtwSTsSPTv2XY4WP9BGWdfdHKfxCQiIiKHKfETGeJuvPFqLGvHcc8zb/0Ejz++st1rqbPn4MrOobWiguYd2wf1MrvW2lpK77sXv4mJSgAAIABJREFUOxQi85xzyb3y6l7dzzNmLKUzL8Wuj71gOFj37gHOvujkTqt9bSJhO97hczAMD0+ZcQqGy0XLvn2E6utxZWZ2eX6wtIRgWSmOtLQ+HZ2QNn8BhXd9ndL7/pfAgaJ2xxo/fB9XdjZJ48bTvGsnkZYWAk4vOydeT8QR/V+RjSP+95qS1nkHVhEREek57fETGeLmzJnX6UDxNm6Xi7lHLfWEtiYvZwHQuG5tv8TXF2zbpuKhB4n4faTMnEXBLbf1ujrpawpQ5E/DjiUdEQx2bC7H3xTsstp3ZExr1xR1ec5AcSQl4Z0e7crp27LpuOc3fvQBAOmnLjihMRBdSZlmMulH/8PYf/4qY79yF4V3fZ28a6/HnV9AqLYW3+ZNRFpa8Iwew8Gpy7GP+vc4mP5eRUREhhNV/ESGuBUr7uTZZ5/u8hyH09npcsS20QDBkuI+j+1E2ZEIQHyPWP3qVfi3bMaRksroOz7Trb1jx7NuTRFHp3ZtSUd5SUOn1b42kbBNeUl9l+cMpLQ5c/Fv2Yxv00Yyl57V6Xlhv4/GD2P7+05b1C+xuDIzSZt3+AcNqTNnkX3JZTTv2kmophrvySbBpDSKH/gQ24i0u/bIaqqqfiIiIn1HiZ/IEJefXxAdKL7ySVqPGFre5nijBpIKCwEIlJRg23bC9vlFWoP4t2ym8aMPadq4AYfHQ8aZZ5M6cxZVf/srAKNuvR1XVnav36uzpZxtScetX1g85JKO1Dlz4S+P4N+6BTsUOqaS17J/P3VvvErj2o+wg0GcGRmkDOCgdMMwSDlin+l7r+zsfA9lLAHXXj8REZG+o6WeIsPAihV34uikCna8UQPOzCwcKSlE/D7C9YmpYIWbmij6/vcovf/XNH74AXYgQLixkdqXXqD45z/BDgRIX7SY9EWL++T9umzcMkSXGrrz8vEUjiPS0kLzrp3tjvmtHRz47x/S8O4a7GCQlBkzKfzyv2A4nQmJtbt7KP1NwQGOTEREZPhSxU9kGOis6tedweKGYZBUOI7mXTsJlJbgysrqtzi724hm2pSpPPTTe6h783Wa1n6EMzOTgn+6rU9i6EnjliFX9Zs9h2BJMU0fr4s36gn7/ZT/8Q9g22ScvpScK67CU1CQ0Dh7sodSVT8REZG+oYqfyDDRUdWvu4PFPWPHAv2/z69bjWjcbuYtWIh3ylTGfPbzTP7Vr5n0w//GmZbWJzEMtcYtPZF26gIA6t58g9pXXwGg8i8PE6qpJmnSSYz65B0JT/qAIbmHUkREZKhTxU9kmMjPL+DSc5bz3KsvE7LtblX72njGxvb5lZb0a4zdakRzVLLq9Hr7NIbhnHR4J08h77obOPTk36h6/DF8W7fg37IZw+NhzGdX9HkHzxN1w6dPS3QIIiIiI87g+C5ARPrEzfMX8PyrLwPdr/YBJMUSv2Bpab/FBr1vRNMXhnvSkXPJpbiysyj/0x/xb9kMQP4nbsIzekyCIxMREZFE0lJPkWEkpbSMc/PyMQyjRwmUp3AcEB3sfbxlkL3Vm0Y00j0ZS85g3L98DWdmJumLTydz2bmJDklEREQSTBU/kWHCDoVo3rOL68aMo2psYY8SKFdGBs60dMJNjYRqa3Dn5PZbnPn5BVy2/EKeffl5QkckmQNR7RtJUmacwuSf/apPZh6KiIjI0KfvCESGiZb9+7CDQUZNnMSfHnqsxwlUvMFLP+/zC9XVcqnPx9HTAlXt63tK+kRERKSNvisQGQZ8TQFeePEAAacX7wkO5W5b7hko6Z/EL9zYSN3qVRT/4mdk+P2cP+XkeIdPVftERERE+peWeookUGtNNYHig6SeMqtdx8XW6kO0VlbinT4Dwzi6NnasdWuKqPI78WTPZdIJJn7xBi99mPjZoRBNG9ZT//Zq/Nu3QSQCgHvUaL763R/wxk1XA6r2iYiIiPQ3JX4i/ci2bcJNjbRWVmK43SRPmBg/1rxrFyX33UPE58OZlUXWsuUkT5pE/Vtv0bRhPdg2mWcvo+DW27t8D19TgB2bKgCDsoyTsceddEKxegr7bqSDHYlQ/dwz1K96g3BjY/RFp5OUWbNJP20haQsW4vR6ufLKa3jiicdV7RMRERHpZ0r8RPrJoaeeoO7N14k0N8dfS5kxk9xrriNUW035H36HHQrhSEklXFdH9cqnDl/sdGIYBvWrVxH2NZH37a8TrKigfvWbBIqLKbj5lnh7/uhA8mglzTYMNmyq4+wxPU+i4hW/slLsSOSE9of5mgK8+sx2FmVX0PTcM0B0CWnm2eeQsfj0Y4awr1hxJ3v27Fa1T0RERKSfKfET6QeRlmZqXnkJwmEcXi/u/AJaqyrxb9+Kf/vW+HmZ55xLwc234Ld2UPf6q7RWVZF22kKyzjmXYGUFpb++h6Z1a1n3hX8meOhQ/LriX/6c8d/6LkFPKjs2V7StoMQ2nOzYXM5pSyeSkubpUczOtDScmZmE6+sJVVfjzu958rhuTRFlB+tZu+0A04HRn/sC6YsWd7pcNT+/gAcffKTH7yMiIiIiPaPET6Qf+LZtg3CY5ClTGf+t72IYBmGfj9pXXqL2tX9gB4PkXXs92ZdchmEYpM6cRerMWe3u4crKYty/fYuSe35B8NAhDLeb9IWLCJaX07J3DyX3/Jx9C24mEgpxZJ8m27ZZu6aIsy86ucdxJ40txF9fT6C0pMeJn68pwI7NFQCUpU5m1qkRMhYv6XEMIiIiItL3ep34maZ5OfAjwIj9+qFlWU+ZpjkNeAjIBaqB2y3L2hW7ptNjIsOBb9NGAFLnzI1Xu5ypqeRdez1ZF1xIuLExvrSyK8kTJjLhez/AVbKfyEkmzrQ0wk1NHPzp3TRW1LJzayW2o/1/xpGwfcJVP8/YQvzbt0VHOsyd16Nr160pwg4fXnJ6YPxSJvfoDiIiIiLSX3o1zsE0TQN4GLjNsqx5wG3AQ6ZpOoAHgPsty5oG3A/87ohLuzomMqTZto1v8yYA0ubMPea4Kz2jW0lfG3dOLgXLl8X3xznT0ij8l69TNGYRdifXtFX9eippwgQAGt5dQ6S19bjnN+/ZTdGP/oPt3/4u29cXE4kFZBtOdlq1+JuCPY5BRERERPpeX8zxiwCZsd9nAWVAHnAq8Fjs9ceAU03TzDdNs6CzY30Qi0jCBQ4UEa6vw5Wdg2fc+H55j6AnldLUKcdU+9q0Vf16mnilL1qMe9RogmWl1Lz4fJfn1q95h+Kf/ZhA0X52MR7bbp+GnmjyKSIiIiJ9r1dLPS3Lsk3TvAF4xjRNH5AOXAqMB0osywrHzgubplkae93o4lhVd987Nzft+CclQH5+eqJDkAQ7+MYOAHIXLaCgIKPP7nvks/Xh6v3Hv8C22bq+lEuvm92j90n+6p1s+c73qX3pBSZcsIzUiRPa3zYcZt+f/kzFc9HEMPPCS6koGo0dbp/4RcI21pZyLrryFNIyknsUgww8fe2S/qJnS/qTni/pT8Pt+epV4meapgv4NnCVZVlrTNNcCvyN6JLPflVd3UQk0tlCt8TIz0+nqqox0WEMS6011bTs2UPz3j0Ei4vJPHc56acuSHRYHap8/0MAnCef0mfPw9HP1v7dhwiHu37+w2GbfbsP9TyGgglknrOM+rdWseOeXzP+W9+Lj3YINzVR9vvf4t+2FZxOCm65jU3NY4lQ3uGtIhGbV57ddkKNZmTg6GuX9Bc9W9Kf9HxJfxrsz5fDYfS4ENbb5i7zgLGWZa0BiCV/PqAFKDRN0xmr6DmBscBBohW/zo6JxPm2bcW3YT2+rVtprWifWASKD5A6cxaOpKRjrgv7/dSvegP3qNGkzT/1hObRnahQYwMt+/ZhuFykzDil397nhk+f1m/3Bsi77gaaNm6gZe9eSn99D+mLluAuKKD8j3+gtbICZ3o6Y+/8MpExE9nxwIdEOklCe9NoRkRERET6Tm8Tv2JgnGmapmVZlmmaM4BRwC5gA3Az8Ejsnx9bllUFYJpmp8dEAOrXvE3Fn/4Y/7PD6yV5ylS8U6bS9PF6AgeKqHvzdXIuvjR+jm3bNK1fS+VjjxKuqwMgacJE8q69npSZszqdJdeX/Js3g23jNad3mJQOFc6UFEbd/ilK7/81vs2b4s1qIPp3OvZLX8Gdm8vqV3Yes7fvaL0ZLyEiIiIifaO3e/zKTdP8IvCEaZqxEdJ82rKsGtM0v0C0w+f3gVrg9iMu7eqYjHCR1iDVK58GIPPc88hYvITkkyZjOJ0AJJ80mZJ7fkHtyy+RtWw5juRkwn4f5X/8A76NGwBImjiJUF0dgQNFlNzzC9LmL2D05z6Pw9O/VaemtjEOs4/t5jnUpM2Zx0l3/5Smj9fj2/gx/p0W6QsWMuqTd8ST2vKShk6rfW0iYZvykvqBCFlEREREOtHrOX6WZT0KPNrB6zuAxZ1c0+kxkfq3VhGqrSFp/HgKbr7lmKWaKTNnkTxlKi17dlP3xmtknnUOxb/6OYEDRTi8XvKu/QSZ5yzDbm2l7s3XqXnhOZo+XkfJPb9g7Jf/BafX2y9xhxob8G0+PL9vOHDn5pJ9/gVkn38BdiRyzL+L/l5yKiIiIiJ9Y+A2P4l0Q6SlhZoXngMg96prO9yfZxgGuVdeDUDNKy9x8Gc/JnCgCHfBKCb+4D/JOnc5hsOBIymJnIsvZfy3voczK4vmnRbFP/sxoYaGdvezIxF8W7cQKC3tVey1r7yMHQiQOnsOnoKCXt1rMBrIvZIiIiIi0rd6XfGTE9Pw4fu4s3Pxnqx9T0eqff1Vwo2NJE+eTOrceZ2el3LKzHjVL+jz4Rk7lnH/+g1cWVnHnJtUWMiEb36X4l/+jMCBIvZ9+xukL1xIxhlnEiwrpfaVl2mtrMCRkspJd/8kPii9J8KNjdS9+ToAOVdc3ePrRURERET6kxK/BGjetZPy3z+A4fEw8Qf/iWfU6ESHlDCRQID6t1cTaWkGw6D2lZcAyLvm+i6bsRiGQd6111P8y5+RVDiOwru+hiu985l57vx8xn/rO5T94Xc079hOwztv0/DO24dPcDiI+H3UvPg8+Tfc1OPPUfOPaLUvZdYcvJMn9/h6EREREZH+pMQvAWr/8QoAdjBI+YP/j/Hf/M6IXUZX9+brHHrib+1e806f0a1RCCnmdCb/5Bc4MzK69ffnysxi/Ne/SbCslPo179C09iOc6elkX3AR7vx8Dvz3f1L3xmtkLT8Pd15+tz9DuLGRujei1b7cK6/q9nUiIiIiIgNFid8AC1ZW0rRhPYbLhSM1jZY9u6l95SVyLrks0aElRNuYgPRFS3Dl5mI4HWSedU63r+9oaefxeMaMJf/6G8i//oZ2r6cvPp3GD97j0MqnGPPZzx/3PrZt03qoipoXn8cOtJAyazbeyVN6HI+IiIiISH9T4jfA6l77B9g26YuWkL5oESX3/JLqZ54mdfYcksaNT3R4AyrS0kLz7l1gGBTcchvO1NSExpN3zbU0rfuIxvffI/vCi0meMLHTcw899QT1b79FuLEx/lruFar2iYiIiMjgNDLXFyZI2O+jfk10X1n2BReROmtOdOxAKETFI39OcHQDz2/tgHCY5JMmJzzpA3Dn5ZO1/HwAKv78f7TWVHd4XrixkZoXnyfc2IgzLZ3UOXMZveILeKdMHchwRURERES6TYnfAKpf/Va0AciMmSSNj1b38q6/EQyDlr17sEOhBEc4sPxbNwPRuXyDRc6ll+PMzCSwfx/7//271L7xGnYk0u4c/66dAHinmUz+1b0UfuUuMhYtSUS4IiIiIiLdosRvgNihEHWvvwZA1gUXxl93er248/IgEiFYWZmo8BLCt3ULAKmDKPFzpqUx4Xv/Qdr8BdiBFqr+8gil99+Lbdvxc5qtHQB4zelddh4VERERERkslPgNkJYDBwjV1uDOzyd11ux2xzyjxwAQLC9LRGgJ0VpVRWtFBQ6vl+STBtf4A3d2NmO/9GXG3PllHMnJ+DZuIFh2eLh7885o4pdiTk9UiCIiIiIiPaLEb4AESw4CkDx5yjGjB9oSv9YRlPj5tkWrfSkzTsFwOhMcTcfST11A2oKFADStWwtAuKmJQHExhstFsjp4ioiIiMgQocRvgARKSgBIKhx3zDH3mFjFr2zkJH7+2DLPlJmzj3NmYqUtWABA0/po4te8ayfYNsmTp+DweBIZmoiIiIhItynxGyDBWOLnGVt4zLGRttTTDofxb98GQOrMmQmOpmspM2bi8HoJHDxIsLIS/04LiDZ2EREREREZKpT4DZBAbKln0rhjK35HJn5HNhEZrlr27iXS3Ix71GjcefmJDqdLDreb1Dlzgehyz7bGLtrfJyIiIiJDiRK/ARBqbCDc0ICRlIwrJ/eY4870dBwpqUSamwnX1ycgwoFj2za1r74McEyTm8Eq7dTocs+G994hcPAAOJ3a3yciIiIiQ4oSvwEQjO/vKzymsQuAYRh4xoyM5Z6NH75P0/p1OJKTyb7wokSH0y2ps+ZgeDwES0vBtvFOnoIjKSnRYYmIiIiIdJsSvwEQKCkGwFN47P6+NiNhn1+orpbKRx8GIP/Gm3Hn5iU4ou5xJCW1q05qf5+IiIiIDDVK/AZAsIuOnm36IvEbzPsDbdum4qE/EfH7SZ09h4wzz050SD2StuC0+O+92t8nIiIiIkOMEr8B0Fbx6zLx6+VIBzsSoeSXP2ffd79FJBA4oXscc0/bpuG9NZT98feE/f5e3avxow/wbd6EIyWVUZ+8A8Mw+iTGgZI6Zx5GUhJGUjLeKVMTHY6IiIiISI+4Eh3AcGfbNsHS2CiHfqz4Na1bi3/7VgB8mzaSvnBR/Fioro5gRTnJk07q9t60cHMzlQ8/ROOH7wPgnTyFrHPPO6HYABrffw+A3KuvwZWVfcL3SRSn18v4b34HbFv7+0RERERkyFHi1wfCPh8l9/6K1mVn4T79nHbHQjU1RJqbcaan48rI6PQe7rw8cDoJVVcTCQR6lFzY4TCHVj4V/3Pj2g/jiZ8diVD8y59GG5M4nXinTCV98RIyz17WadUtcPAgpb/5Na1VlfHXfFu3nHDiFwkG8e/YDkB6rEPmUJQ8YWKiQxAREREROSFa6tkHIoEALXv3sP+hh2mtqmp37HBjl86rfQCGy4WnYBQAwYryHr1/w5p3aK0ox5UdraT5Nm+KL/f0b99GsLQUw+WCSITmnRaVDz9E08frO7yXHQpR+sD9tFZVkjR+AuO+9o3YfbZjh0I9iqtNs7UDOxgkacLEIVntExEREREZ6pT49QF3Tg7pS07HDoXaVd4Agt3Y39fmRJZ7RlqDVD/3DAB5199I8uTJ2MEgvs0bAahf9SYAOZddwZR77iPn0ssBqHn+2Q6bwdS/s5rWinLcBaMY/53vkTLjFDxjx2IHWmjes7vbcR2padMGgPggdBERERERGVhK/PpI3lXXYLhcNH7wHi0HiuKvd2eUQ5sTafBS/+abhGprSBo/nvSFi0hbsBCAxrUf0VpbS9PGj8HpJPOsc3CmppJz+ZU4MzIIHCiKJ4dtIi0tVD+7Mvp5rr0Oh9sDQMrM6CgD/9Yt3Y6rjW3b+DZF3yd1zrweXy8iIiIiIr2nxK+PuPPyGXPZJQAcevLv8de7M8qhTVvFr7WbFb9wUxPVLz4HQO4112E4HKSfFk38fJs2UvfaPyASIW3+qbiysgBweDxkXxSN8+iqX+2rrxBuaCD5pMnxBBIgdeas6D23bO5WXEcKlpYSqq7GmZ5B8qRJPb5eRERERER6T4lfHxp3/XU4vF78W7dQt+oN/NYOgmWlACR1o+Ln7uFSz0PPPE2kqQmvOZ3U2dFllO7cPJJPii73rP3HywBkLVve7rqsZctxpqXTsncv/m3RTqChhgZqXn4JgLzrb2jX+MU7zcRwuwkcKCLU0NBlTMHKSqr+/jitNdUAh6t9s2djOPS4iYiIiIgkgr4T70PujHRyLrkMgMpH/kzxz36MHQrhys3Fkew97vWeMWPA4SBQUkKorrbLc1sOFFG/6g1wOCj4p1vbJWppsaofto1n9JhjBo47kpLIvvAiAA498TgVDz9E8U//BzvQQursOaQcfb7Hg3eaCYB/W9fLPaufeZraV17i4I/vJlhRgU/7+0REREREEk6JXx/LOv9CMs9eRsopM/FOM0mePJncK67q1rVOr5e0+adCJELdW6s6Pc+2bSr/8gjYNlnLzztmGWn6gtPiv89cdm6HYxsyzz0PR0oqgYMHqX/rTYLlZTjS0si7/sYO3zO+3LOLfX52OIxvyyYAQjXVHPzp/0QbwjidpJwyq9PrRERERESkf2mOXx9zeDyMuv1TJ3x91rnn0bRuLfWr3yL3siuiYxiO0vj+e7Ts3oUzPYPcK68+5rg7L5+0BacROFBExhlLO3wfp9fL6M98jqb160gqLCRpwkSSJk7C6e24Mhlt8PJX/Fu3YEciHS7bbNm7h4jPhzsvH1duLs3WDgC802fgTEnpwd+CiIiIiIj0JSV+g4zXnI5nzFiCZaU0bVhP+mmL2h23bZtDTz8JQN51n8CZktrhfcZ+8Z+P+15pc+eRNrd7nTY9Y8fiys4mVFtLoPhgh8PMmzbGlnXOm0/etddT+ptf49+ymfQjGsWIiIiIiMjA01LPQcYwDDLPjTZjqXvzjWOOhxvqCdVU40hJ6bSa119xpc6eA0DT+nUdntPWyCVt7jwcHg+FX/4XJnzvP8g8Z9lAhSkiIiIiIh1Q4jcIZZy+FCMpiWZrB4HYOIg2bTP+PGPGDniXzPSFiwFo/OD9Y4a/tx6qIlhagiM5Ge/J0wAwnE6SJ01SN08RERERkQTTd+SDkNPrJWPJGQDUrWpf9YsnfrHRDwPJa07HmZlFa1Ulgf372h1rq/alzJzV4b5EERERERFJHCV+g1RWbLln4/vvYkci8dfb5gJ6xgx84mc4HKQvjO45bPjg/XbHmtrm9Wlsg4iIiIjIoNOr0oxpmpOAlUe8lAVkWJaVY5rmfqAl9gvgm5ZlvRK7bgnwO8AL7AdutSyrsjexDDdJ48bjys4hVFtDa0U5njFjgcRW/AAyFi+h7rV/0PjRB+TfcBOGw0EkEKB5x3YAUmfNSUhcIiIiIiLSuV4lfpZl7QfibSFN07znqHteb1lWu8Fvpmk6gEeAT1mW9Y5pmt8Dfgx8ujexDEdJEycSqq2hpWj/4cSv/PAev4TENOkk3AWjaK2soNnaQcqMU/Bv34YdCpF80mRcmZkJiUtERERERDrXZ0s9TdP0ALcADx7n1AVAi2VZ78T+/ABwQ1/FMZwkT5wEQKCoCIBISzOh2hoMlwt3fn5CYjIMg/TFSwBo+OA9mnftpPIvDwNa5ikiIiIiMlj1ZReOK4ESy7LWH/Hao6ZpGsA7wHcsy6oDJgBFbSdYlnXINE2HaZo5lmXVdPfNcnPT+iruPpWfn95n93LOmUH1M08TLismPz+dxl0VAHgLx1IwKnGVtdSLl1Pz3DM0fvA+De+ugUiEtJOnMuUTV+FO77vPL+315bMlcjQ9X9Jf9GxJf9LzJf1puD1ffZn4fZr21b6zLMs6aJpmEnAPcB9wa1+9WXV1E5GIffwTB1B+fjpVVY19dr9QVgEATbv3UFlRT+P23QA48kf16fv0WFImSRMmEjhQBIZB9iWXkXfVNdS1AC0JjGsY6+tnS+RIer6kv+jZkv6k50v602B/vhwOo8eFsD5Z6mmaZiFwDvBo22uWZR2M/TMA/AZomzZ+AJh4xLV5QKQn1b6RwpWZhTMri0hLC61VlQlv7HKk/E/cSMrMWRTe9XXyr/uERjiIiIiIiAxiffXd+ieBFyzLqgYwTTMVcFmWVR9b6nkTsCF27jrAa5rmmbF9fl8A/t5HcQw7yRMm4quro6Vof7vh7YmWMuMUUmackugwRERERESkG/qqucunaL/McxSwyjTNTcAWYBpwJ4BlWRHgNuC3pmnuIlop/FYfxTHsJMUbvOxP6Aw/EREREREZuvqk4mdZ1rSj/rwXmN/F+e8Cs/vivYe7ts6eLXv3EqyqBMPAM2p0YoMSEREREZEhRRuzBrm2il/z7l1g27jy8nAkJSU2KBERERERGVL6bI6f9A9XVhbOjAywox1MB0NjFxERERERGVqU+A1yhmHEl3vC4GjsIiIiIiIiQ4sSvyEgaWJ8+oUau4iIiIiISI8p8RsC2lX8tNRTRERERER6SInfEJB0ROKXpKWeIiIiIiLSQ+rqOQS4snNIX3w6OAyc6emJDkdERERERIYYJX5DgGEYjPnc5xMdhoiIiIiIDFFa6ikiIiIiIjLMKfETEREREREZ5pT4iYiIiIiIDHNK/ERERERERIY5JX4iIiIiIiLDnBI/ERERERGRYU6Jn4iIiIiIyDCnxE9ERERERGSYU+InIiIiIiIyzLkSHcAJcAI4HEai4+jQYI1Lhj49W9Kf9HxJf9GzJf1Jz5f0p8H8fB0Rm7O71xi2bfdPNP3nTODtRAchIiIiIiKSYGcB73TnxKGY+CUBC4EyIJzgWERERERERAaaExgDfAQEunPBUEz8REREREREpAfU3EVERERERGSYU+InIiIiIiIyzCnxExERERERGeaU+ImIiIiIiAxzSvxERERERESGOSV+IiIiIiIiw5wSPxERERERkWHOlegAhgPTNKcBDwG5QDVwu2VZuxIblQxVpmnuB1pivwC+aVnWK6ZpLgF+B3iB/cCtlmVVJiJGGTpM0/w5cB0wCZhtWdaW2Oudft3S1zTpji6erf108DUsdkxfx+S4TNPMBR4GpgBBYBfwecuyqrp6hvR8SXcc5/mygc1AJHb6bZZlbY5ddwXwM6L50zrgDsuy/AMdf2+o4tc3HgDutyxrGnA/0S86Ir1xvWVZ82K/XjFN0wE8Anwp9pytBn6c2BBliFgJnA0UHfV6V1+39DVNuqOzZwuO+hoGoK9j0gM28FPLskzLsmYDe4Afd/UM6fmSHujw+Tri+BkK91KzAAAC/0lEQVRHfP1qS/rSgD8AV1iWNRVoBL4+0IH3lhK/XjJNswA4FXgs9tJjwKmmaeYnLioZhhYALZZlvRP78wPADQmMR4YIy7LesSzr4JGvdfV1S1/TpLs6eraOQ1/HpFssy6qxLGvVES+9D0yk62dIz5d0SxfPV1cuAdYesfrlAeDGfgivXynx673xQIllWWGA2D9LY6+LnKhHTdPcZJrmb0zTzAL+fzt3zxpFGIVh+I5RNFhIxEIUUgjhiClsTOPHTxA/EDSdZWzEP2CrYKli5S9QbKwsrewkKUQ4NoIWIkYFiYhN1mLemBiyY9ZNMs5wXxCyGXbhFA/PcnYn7wSrPlXPzAVgR0Tsb2xCtVldb9lp2gxrOwzsMf2D8k3eNeAp9RkyXxrYmnwtex4R8xFxOyJ2l2t/5At4RwvfF138pP/Pmcw8DkwDI8D9hueRpEHYYdpM94BFzJG2xtp8TWTmCarb2I8BN5sabCu4+A3vPXA4IkYByu9D5bo0sOVbpzLzJ/AAOEX1ydLv2xAi4gCwlJlfGhlSbVfXW3aahtKnw8Ae04DKAUKTwOXMXKI+Q+ZLA1knX6v76xvwkD79RfUNYOveF138hlROi5oHZsqlGWAuMz81N5XaKiL2RsS+8ngEuEKVr5fAWEScLk+dBR43M6Xarq637DQNo6bDwB7TACLiFtX/7Z0vHyJAfYbMlzZsvXxFxHhEjJXHO4FLrPTXM2A6IibL37PAo+2dengjvV6v6RlaLyKOUh19Pg58pTr6PJudSm0UEUeAJ8Bo+XkNXM/MDxFxkup0xT2sHFP9salZ1Q4RcRe4CBwEFoDPmTlV11t2mjZivWwBZ+nTYeU19pj+KiKmgFfAG+BHufw2My/UZch8aSP65Qu4Q5WfHrALeAHcyMzF8rpz5TmjwBxwNTO/b+/0w3HxkyRJkqSO81ZPSZIkSeo4Fz9JkiRJ6jgXP0mSJEnqOBc/SZIkSeo4Fz9JkiRJ6jgXP0mSJEnqOBc/SZIkSeo4Fz9JkiRJ6rhfPH9XzvuUwwMAAAAASUVORK5CYII=\n","text/plain":["
"]},"metadata":{"tags":[],"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"MuwQb3OOkzzT"},"source":["## Double Duel Recurrent Q-learning agent"]},{"cell_type":"code","metadata":{"id":"A55H6rUmY6Iu"},"source":["from collections import deque\n","import random\n","\n","df= df_full.copy()\n","name = 'Double Duel Recurrent Q-learning agent'\n","\n","class Model:\n"," def __init__(self, input_size, output_size, layer_size, learning_rate, name):\n"," with tf.variable_scope(name):\n"," self.X = tf.placeholder(tf.float32, (None, None, input_size))\n"," self.Y = tf.placeholder(tf.float32, (None, output_size))\n"," cell = tf.nn.rnn_cell.LSTMCell(layer_size, state_is_tuple = False)\n"," self.hidden_layer = tf.placeholder(tf.float32, (None, 2 * layer_size))\n"," self.rnn,self.last_state = tf.nn.dynamic_rnn(inputs=self.X,cell=cell,\n"," dtype=tf.float32,\n"," initial_state=self.hidden_layer)\n"," tensor_action, tensor_validation = tf.split(self.rnn[:,-1],2,1)\n"," feed_action = tf.layers.dense(tensor_action, output_size)\n"," feed_validation = tf.layers.dense(tensor_validation, 1)\n"," self.logits = feed_validation + tf.subtract(feed_action,tf.reduce_mean(feed_action,axis=1,keep_dims=True))\n"," self.cost = tf.reduce_sum(tf.square(self.Y - self.logits))\n"," self.optimizer = tf.train.AdamOptimizer(learning_rate = learning_rate).minimize(self.cost)\n"," \n","class Agent:\n","\n"," LEARNING_RATE = 0.003\n"," BATCH_SIZE = 32\n"," LAYER_SIZE = 256\n"," OUTPUT_SIZE = 3\n"," EPSILON = 0.5\n"," DECAY_RATE = 0.005\n"," MIN_EPSILON = 0.1\n"," GAMMA = 0.99\n"," MEMORIES = deque()\n"," COPY = 1000\n"," T_COPY = 0\n"," MEMORY_SIZE = 300\n"," \n"," def __init__(self, state_size, window_size, trend, skip):\n"," self.state_size = state_size\n"," self.window_size = window_size\n"," self.half_window = window_size // 2\n"," self.trend = trend\n"," self.skip = skip\n"," tf.reset_default_graph()\n"," self.INITIAL_FEATURES = np.zeros((4, self.state_size))\n"," self.model = Model(self.state_size, self.OUTPUT_SIZE, self.LAYER_SIZE, self.LEARNING_RATE,\n"," 'real_model')\n"," self.model_negative = Model(self.state_size, self.OUTPUT_SIZE, self.LAYER_SIZE, self.LEARNING_RATE,\n"," 'negative_model')\n"," self.sess = tf.InteractiveSession()\n"," self.sess.run(tf.global_variables_initializer())\n"," self.trainable = tf.trainable_variables()\n"," \n"," def _assign(self, from_name, to_name):\n"," from_w = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES, scope=from_name)\n"," to_w = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES, scope=to_name)\n"," for i in range(len(from_w)):\n"," assign_op = to_w[i].assign(from_w[i])\n"," self.sess.run(assign_op)\n","\n"," def _memorize(self, state, action, reward, new_state, dead, rnn_state):\n"," self.MEMORIES.append((state, action, reward, new_state, dead, rnn_state))\n"," if len(self.MEMORIES) > self.MEMORY_SIZE:\n"," self.MEMORIES.popleft()\n","\n"," def _select_action(self, state):\n"," if np.random.rand() < self.EPSILON:\n"," action = np.random.randint(self.OUTPUT_SIZE)\n"," else:\n"," action = self.get_predicted_action([state])\n"," return action\n","\n"," def _construct_memories(self, replay):\n"," states = np.array([a[0] for a in replay])\n"," new_states = np.array([a[3] for a in replay])\n"," init_values = np.array([a[-1] for a in replay])\n"," Q = self.sess.run(self.model.logits, feed_dict={self.model.X:states, \n"," self.model.hidden_layer:init_values})\n"," Q_new = self.sess.run(self.model.logits, feed_dict={self.model.X:new_states, \n"," self.model.hidden_layer:init_values})\n"," Q_new_negative = self.sess.run(self.model_negative.logits, \n"," feed_dict={self.model_negative.X:new_states, \n"," self.model_negative.hidden_layer:init_values})\n"," replay_size = len(replay)\n"," X = np.empty((replay_size, 4, self.state_size))\n"," Y = np.empty((replay_size, self.OUTPUT_SIZE))\n"," INIT_VAL = np.empty((replay_size, 2 * self.LAYER_SIZE))\n"," for i in range(replay_size):\n"," state_r, action_r, reward_r, new_state_r, dead_r, rnn_memory = replay[i]\n"," target = Q[i]\n"," target[action_r] = reward_r\n"," if not dead_r:\n"," target[action_r] += self.GAMMA * Q_new_negative[i, np.argmax(Q_new[i])]\n"," X[i] = state_r\n"," Y[i] = target\n"," INIT_VAL[i] = rnn_memory\n"," return X, Y, INIT_VAL\n"," \n"," def get_state(self, t):\n"," window_size = self.window_size + 1\n"," d = t - window_size + 1\n"," block = self.trend[d : t + 1] if d >= 0 else -d * [self.trend[0]] + self.trend[0 : t + 1]\n"," res = []\n"," for i in range(window_size - 1):\n"," res.append(block[i + 1] - block[i])\n"," return np.array(res)\n"," \n"," def buy(self, initial_money):\n"," starting_money = initial_money\n"," states_sell = []\n"," states_buy = []\n"," inventory = []\n"," state = self.get_state(0)\n"," init_value = np.zeros((1, 2 * self.LAYER_SIZE))\n"," for k in range(self.INITIAL_FEATURES.shape[0]):\n"," self.INITIAL_FEATURES[k,:] = state\n"," for t in range(0, len(self.trend) - 1, self.skip):\n"," action, last_state = self.sess.run([self.model.logits,self.model.last_state],\n"," feed_dict={self.model.X:[self.INITIAL_FEATURES],\n"," self.model.hidden_layer:init_value})\n"," action, init_value = np.argmax(action[0]), last_state\n"," next_state = self.get_state(t + 1)\n"," \n"," if action == 1 and initial_money >= self.trend[t]:\n"," inventory.append(self.trend[t])\n"," initial_money -= self.trend[t]\n"," states_buy.append(t)\n"," print('day %d: buy 1 unit at price %f, total balance %f'% (t, self.trend[t], initial_money))\n"," \n"," elif action == 2 and len(inventory):\n"," bought_price = inventory.pop(0)\n"," initial_money += self.trend[t]\n"," states_sell.append(t)\n"," try:\n"," invest = ((close[t] - bought_price) / bought_price) * 100\n"," except:\n"," invest = 0\n"," print(\n"," 'day %d, sell 1 unit at price %f, investment %f %%, total balance %f,'\n"," % (t, close[t], invest, initial_money)\n"," )\n"," \n"," new_state = np.append([self.get_state(t + 1)], self.INITIAL_FEATURES[:3, :], axis = 0)\n"," self.INITIAL_FEATURES = new_state\n"," invest = ((initial_money - starting_money) / starting_money) * 100\n"," total_gains = initial_money - starting_money\n"," return states_buy, states_sell, total_gains, invest\n"," \n"," \n"," def train(self, iterations, checkpoint, initial_money):\n"," for i in range(iterations):\n"," total_profit = 0\n"," inventory = []\n"," state = self.get_state(0)\n"," starting_money = initial_money\n"," init_value = np.zeros((1, 2 * self.LAYER_SIZE))\n"," for k in range(self.INITIAL_FEATURES.shape[0]):\n"," self.INITIAL_FEATURES[k,:] = state\n"," for t in range(0, len(self.trend) - 1, self.skip):\n"," if (self.T_COPY + 1) % self.COPY == 0:\n"," self._assign('real_model', 'negative_model')\n"," \n"," if np.random.rand() < self.EPSILON:\n"," action = np.random.randint(self.OUTPUT_SIZE)\n"," else:\n"," action, last_state = self.sess.run([self.model.logits,\n"," self.model.last_state],\n"," feed_dict={self.model.X:[self.INITIAL_FEATURES],\n"," self.model.hidden_layer:init_value})\n"," action, init_value = np.argmax(action[0]), last_state\n"," \n"," next_state = self.get_state(t + 1)\n"," \n"," if action == 1 and starting_money >= self.trend[t]:\n"," inventory.append(self.trend[t])\n"," starting_money -= self.trend[t]\n"," \n"," elif action == 2 and len(inventory) > 0:\n"," bought_price = inventory.pop(0)\n"," total_profit += self.trend[t] - bought_price\n"," starting_money += self.trend[t]\n"," \n"," invest = ((starting_money - initial_money) / initial_money)\n"," new_state = np.append([self.get_state(t + 1)], self.INITIAL_FEATURES[:3, :], axis = 0)\n"," \n"," self._memorize(self.INITIAL_FEATURES, action, invest, new_state, \n"," starting_money < initial_money, init_value[0])\n"," self.INITIAL_FEATURES = new_state\n"," batch_size = min(len(self.MEMORIES), self.BATCH_SIZE)\n"," replay = random.sample(self.MEMORIES, batch_size)\n"," X, Y, INIT_VAL = self._construct_memories(replay)\n"," \n"," cost, _ = self.sess.run([self.model.cost, self.model.optimizer], \n"," feed_dict={self.model.X: X, self.model.Y:Y,\n"," self.model.hidden_layer: INIT_VAL})\n"," self.T_COPY += 1\n"," self.EPSILON = self.MIN_EPSILON + (1.0 - self.MIN_EPSILON) * np.exp(-self.DECAY_RATE * i)\n"," if (i+1) % checkpoint == 0:\n"," print('epoch: %d, total rewards: %f.3, cost: %f, total money: %f'%(i + 1, total_profit, cost,\n"," starting_money))"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"c_IrLTwjY6Iw","outputId":"f202270d-ed16-42ac-b6f0-78b12c4a7599"},"source":["close = df.Close.values.tolist()\n","initial_money = 10000\n","window_size = 30\n","skip = 1\n","batch_size = 32\n","agent = Agent(state_size = window_size, \n"," window_size = window_size, \n"," trend = close, \n"," skip = skip)\n","agent.train(iterations = 200, checkpoint = 10, initial_money = initial_money)"],"execution_count":null,"outputs":[{"output_type":"stream","text":["WARNING:tensorflow:: Using a concatenated state is slower and will soon be deprecated. Use state_is_tuple=True.\n","WARNING:tensorflow:From :17: calling reduce_mean (from tensorflow.python.ops.math_ops) with keep_dims is deprecated and will be removed in a future version.\n","Instructions for updating:\n","keep_dims is deprecated, use keepdims instead\n","WARNING:tensorflow:: Using a concatenated state is slower and will soon be deprecated. Use state_is_tuple=True.\n","epoch: 10, total rewards: 328.014401.3, cost: 0.233912, total money: 2446.714413\n","epoch: 20, total rewards: 629.485052.3, cost: 0.592428, total money: 5723.605047\n","epoch: 30, total rewards: 1222.065245.3, cost: 0.182284, total money: 7288.965209\n","epoch: 40, total rewards: 719.309753.3, cost: 0.690094, total money: 3739.159728\n","epoch: 50, total rewards: 328.994876.3, cost: 0.918951, total money: 2756.724856\n","epoch: 60, total rewards: 1518.540281.3, cost: 0.226017, total money: 10545.210264\n","epoch: 70, total rewards: 440.315127.3, cost: 0.145386, total money: 7494.335086\n","epoch: 80, total rewards: 656.779966.3, cost: 0.113699, total money: 6666.949948\n","epoch: 90, total rewards: 846.820129.3, cost: 0.444679, total money: 6860.080139\n","epoch: 100, total rewards: 1044.679930.3, cost: 0.240218, total money: 9067.419920\n","epoch: 110, total rewards: 207.934935.3, cost: 0.236219, total money: 10207.934935\n","epoch: 120, total rewards: 6.745002.3, cost: 1.133358, total money: 10006.745002\n","epoch: 130, total rewards: 586.910091.3, cost: 0.162622, total money: 4665.650081\n","epoch: 140, total rewards: 1084.244877.3, cost: 0.630996, total money: 6178.484867\n","epoch: 150, total rewards: 991.774842.3, cost: 1.439193, total money: 420.904786\n","epoch: 160, total rewards: 714.735100.3, cost: 0.337296, total money: 5744.735038\n","epoch: 170, total rewards: 1158.574706.3, cost: 0.186633, total money: 10185.244689\n","epoch: 180, total rewards: 1120.314817.3, cost: 0.539594, total money: 7186.704770\n","epoch: 190, total rewards: 230.760193.3, cost: 0.110742, total money: 4290.020202\n","epoch: 200, total rewards: 218.420047.3, cost: 0.125164, total money: 10218.420047\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"gYvB0HddY6Iz","outputId":"884f4060-e501-480c-9e88-4c6cf90983cc"},"source":["states_buy, states_sell, total_gains, invest = agent.buy(initial_money = initial_money)"],"execution_count":null,"outputs":[{"output_type":"stream","text":["day 17: buy 1 unit at price 768.239990, total balance 9231.760010\n","day 18, sell 1 unit at price 770.840027, investment 0.338441 %, total balance 10002.600037,\n","day 20: buy 1 unit at price 747.919983, total balance 9254.680054\n","day 21: buy 1 unit at price 750.500000, total balance 8504.180054\n","day 23, sell 1 unit at price 759.109985, investment 1.496150 %, total balance 9263.290039,\n","day 24, sell 1 unit at price 771.190002, investment 2.756829 %, total balance 10034.480041,\n","day 27: buy 1 unit at price 789.270020, total balance 9245.210021\n","day 28, sell 1 unit at price 796.099976, investment 0.865351 %, total balance 10041.309997,\n","day 34: buy 1 unit at price 794.559998, total balance 9246.749999\n","day 35, sell 1 unit at price 791.260010, investment -0.415323 %, total balance 10038.010009,\n","day 36: buy 1 unit at price 789.909973, total balance 9248.100036\n","day 38: buy 1 unit at price 785.049988, total balance 8463.050048\n","day 40: buy 1 unit at price 771.820007, total balance 7691.230041\n","day 41, sell 1 unit at price 786.140015, investment -0.477264 %, total balance 8477.370056,\n","day 44: buy 1 unit at price 806.150024, total balance 7671.220032\n","day 45, sell 1 unit at price 806.650024, investment 2.751422 %, total balance 8477.870056,\n","day 48, sell 1 unit at price 806.359985, investment 4.475134 %, total balance 9284.230041,\n","day 49, sell 1 unit at price 807.880005, investment 0.214598 %, total balance 10092.110046,\n","day 51: buy 1 unit at price 806.070007, total balance 9286.040039\n","day 52, sell 1 unit at price 802.174988, investment -0.483211 %, total balance 10088.215027,\n","day 57: buy 1 unit at price 832.150024, total balance 9256.065003\n","day 58: buy 1 unit at price 823.309998, total balance 8432.755005\n","day 61: buy 1 unit at price 795.695007, total balance 7637.059998\n","day 63: buy 1 unit at price 801.489990, total balance 6835.570008\n","day 64, sell 1 unit at price 801.340027, investment -3.702457 %, total balance 7636.910035,\n","day 66, sell 1 unit at price 808.380005, investment -1.813411 %, total balance 8445.290040,\n","day 67, sell 1 unit at price 809.559998, investment 1.742501 %, total balance 9254.850038,\n","day 68: buy 1 unit at price 813.669983, total balance 8441.180055\n","day 70, sell 1 unit at price 820.450012, investment 2.365597 %, total balance 9261.630067,\n","day 71: buy 1 unit at price 818.979980, total balance 8442.650087\n","day 73: buy 1 unit at price 828.070007, total balance 7614.580080\n","day 76, sell 1 unit at price 831.330017, investment 2.170417 %, total balance 8445.910097,\n","day 77, sell 1 unit at price 828.640015, investment 1.179520 %, total balance 9274.550112,\n","day 78: buy 1 unit at price 829.280029, total balance 8445.270083\n","day 82: buy 1 unit at price 829.080017, total balance 7616.190066\n","day 83: buy 1 unit at price 827.780029, total balance 6788.410037\n","day 84: buy 1 unit at price 831.909973, total balance 5956.500064\n","day 87: buy 1 unit at price 843.250000, total balance 5113.250064\n","day 88: buy 1 unit at price 845.539978, total balance 4267.710086\n","day 90: buy 1 unit at price 847.200012, total balance 3420.510074\n","day 91, sell 1 unit at price 848.780029, investment 2.500999 %, total balance 4269.290103,\n","day 98: buy 1 unit at price 819.510010, total balance 3449.780093\n","day 99, sell 1 unit at price 820.919983, investment -1.008109 %, total balance 4270.700076,\n","day 100: buy 1 unit at price 831.409973, total balance 3439.290103\n","day 103, sell 1 unit at price 838.549988, investment 1.142226 %, total balance 4277.840091,\n","day 104: buy 1 unit at price 834.570007, total balance 3443.270084\n","day 106: buy 1 unit at price 827.880005, total balance 2615.390079\n","day 107, sell 1 unit at price 824.669983, investment -0.375709 %, total balance 3440.060062,\n","day 108, sell 1 unit at price 824.729980, investment -0.863073 %, total balance 4264.790042,\n","day 109, sell 1 unit at price 823.349976, investment -2.359920 %, total balance 5088.140018,\n","day 110: buy 1 unit at price 824.320007, total balance 4263.820011\n","day 111, sell 1 unit at price 823.559998, investment -2.599520 %, total balance 5087.380009,\n","day 114: buy 1 unit at price 838.210022, total balance 4249.169987\n","day 115, sell 1 unit at price 841.650024, investment -0.655098 %, total balance 5090.820011,\n","day 117, sell 1 unit at price 862.760010, investment 5.277544 %, total balance 5953.580021,\n","day 118, sell 1 unit at price 872.299988, investment 4.918153 %, total balance 6825.880009,\n","day 119: buy 1 unit at price 871.729980, total balance 5954.150029\n","day 121, sell 1 unit at price 905.960022, investment 8.554107 %, total balance 6860.110051,\n","day 122, sell 1 unit at price 912.570007, investment 10.229744 %, total balance 7772.680058,\n","day 123: buy 1 unit at price 916.440002, total balance 6856.240056\n","day 124, sell 1 unit at price 927.039978, investment 12.461177 %, total balance 7783.280034,\n","day 125, sell 1 unit at price 931.659973, investment 11.148751 %, total balance 8714.940007,\n","day 126, sell 1 unit at price 927.130005, investment 6.355182 %, total balance 9642.070012,\n","day 129: buy 1 unit at price 928.780029, total balance 8713.289983\n","day 131: buy 1 unit at price 932.219971, total balance 7781.070012\n","day 134, sell 1 unit at price 919.619995, investment 0.346994 %, total balance 8700.690007,\n","day 136: buy 1 unit at price 934.010010, total balance 7766.679997\n","day 138, sell 1 unit at price 948.820007, investment 2.157667 %, total balance 8715.500004,\n","day 139, sell 1 unit at price 954.960022, investment 2.439344 %, total balance 9670.460026,\n","day 140, sell 1 unit at price 969.539978, investment 3.804024 %, total balance 10640.000004,\n","day 141: buy 1 unit at price 971.469971, total balance 9668.530033\n","day 142, sell 1 unit at price 975.880005, investment 0.453955 %, total balance 10644.410038,\n","day 143: buy 1 unit at price 964.859985, total balance 9679.550053\n","day 144, sell 1 unit at price 966.950012, investment 0.216615 %, total balance 10646.500065,\n","day 145: buy 1 unit at price 975.599976, total balance 9670.900089\n","day 146: buy 1 unit at price 983.679993, total balance 8687.220096\n","day 148, sell 1 unit at price 980.940002, investment 0.547358 %, total balance 9668.160098,\n","day 150, sell 1 unit at price 949.830017, investment -3.441157 %, total balance 10617.990115,\n","day 152: buy 1 unit at price 953.400024, total balance 9664.590091\n","day 154, sell 1 unit at price 942.309998, investment -1.163208 %, total balance 10606.900089,\n","day 162: buy 1 unit at price 927.330017, total balance 9679.570072\n","day 163: buy 1 unit at price 940.489990, total balance 8739.080082\n","day 170: buy 1 unit at price 928.799988, total balance 7810.280094\n","day 173, sell 1 unit at price 947.159973, investment 2.138393 %, total balance 8757.440067,\n","day 175: buy 1 unit at price 953.419983, total balance 7804.020084\n","day 176, sell 1 unit at price 965.400024, investment 2.648623 %, total balance 8769.420108,\n","day 177, sell 1 unit at price 970.890015, investment 4.531657 %, total balance 9740.310123,\n","day 178: buy 1 unit at price 968.150024, total balance 8772.160099\n","day 179, sell 1 unit at price 972.919983, investment 2.045269 %, total balance 9745.080082,\n","day 180, sell 1 unit at price 980.340027, investment 1.259103 %, total balance 10725.420109,\n","day 185: buy 1 unit at price 930.500000, total balance 9794.920109\n","day 186: buy 1 unit at price 930.830017, total balance 8864.090092\n","day 187: buy 1 unit at price 930.390015, total balance 7933.700077\n","day 188: buy 1 unit at price 923.650024, total balance 7010.050053\n","day 191, sell 1 unit at price 926.789978, investment -0.398713 %, total balance 7936.840031,\n","day 192, sell 1 unit at price 922.900024, investment -0.851927 %, total balance 8859.740055,\n","day 195, sell 1 unit at price 922.669983, investment -0.829763 %, total balance 9782.410038,\n","day 198: buy 1 unit at price 910.979980, total balance 8871.430058\n","day 202: buy 1 unit at price 927.000000, total balance 7944.430058\n","day 203, sell 1 unit at price 921.280029, investment -0.256590 %, total balance 8865.710087,\n","day 205, sell 1 unit at price 913.809998, investment 0.310656 %, total balance 9779.520085,\n","day 206, sell 1 unit at price 921.289978, investment -0.615968 %, total balance 10700.810063,\n","day 207: buy 1 unit at price 929.570007, total balance 9771.240056\n","day 209, sell 1 unit at price 937.340027, investment 0.835872 %, total balance 10708.580083,\n","day 212: buy 1 unit at price 935.950012, total balance 9772.630071\n","day 213, sell 1 unit at price 926.500000, investment -1.009671 %, total balance 10699.130071,\n","day 216: buy 1 unit at price 935.090027, total balance 9764.040044\n","day 217: buy 1 unit at price 925.109985, total balance 8838.930059\n","day 219: buy 1 unit at price 915.000000, total balance 7923.930059\n","day 221: buy 1 unit at price 931.580017, total balance 6992.350042\n","day 222: buy 1 unit at price 932.450012, total balance 6059.900030\n","day 223, sell 1 unit at price 928.530029, investment -0.701537 %, total balance 6988.430059,\n","day 224, sell 1 unit at price 920.969971, investment -0.447516 %, total balance 7909.400030,\n","day 225: buy 1 unit at price 924.859985, total balance 6984.540045\n","day 226: buy 1 unit at price 944.489990, total balance 6040.050055\n","day 227: buy 1 unit at price 949.500000, total balance 5090.550055\n","day 228, sell 1 unit at price 959.109985, investment 4.820763 %, total balance 6049.660040,\n","day 229, sell 1 unit at price 953.270020, investment 2.328303 %, total balance 7002.930060,\n","day 230: buy 1 unit at price 957.789978, total balance 6045.140082\n","day 235, sell 1 unit at price 972.599976, investment 4.305857 %, total balance 7017.740058,\n","day 236, sell 1 unit at price 989.250000, investment 6.962137 %, total balance 8006.990058,\n","day 238: buy 1 unit at price 989.679993, total balance 7017.310065\n","day 239, sell 1 unit at price 992.000000, investment 5.030229 %, total balance 8009.310065,\n","day 240: buy 1 unit at price 992.179993, total balance 7017.130072\n","day 241, sell 1 unit at price 992.809998, investment 4.561348 %, total balance 8009.940070,\n","day 242, sell 1 unit at price 984.450012, investment 2.783495 %, total balance 8994.390082,\n","day 244, sell 1 unit at price 968.450012, investment -2.145136 %, total balance 9962.840094,\n","day 245, sell 1 unit at price 970.539978, investment -2.181057 %, total balance 10933.380072,\n","day 248: buy 1 unit at price 1019.270020, total balance 9914.110052\n","day 249, sell 1 unit at price 1017.109985, investment -0.211920 %, total balance 10931.220037,\n","day 250: buy 1 unit at price 1016.640015, total balance 9914.580022\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"SlRP3GDnY6I3","outputId":"d23a01df-6b91-4be0-896d-fec546a99858"},"source":["fig = plt.figure(figsize = (15,5))\n","plt.plot(close, color='r', lw=2.)\n","plt.plot(close, '^', markersize=10, color='m', label = 'buying signal', markevery = states_buy)\n","plt.plot(close, 'v', markersize=10, color='k', label = 'selling signal', markevery = states_sell)\n","plt.title('total gains %f, total investment %f%%'%(total_gains, invest))\n","plt.legend()\n","plt.savefig('output/'+name+'.png')\n","plt.show()"],"execution_count":null,"outputs":[{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["
"]},"metadata":{"tags":[],"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"zAzCQAS3lLVz"},"source":["## Actor-critic agent"]},{"cell_type":"code","metadata":{"id":"PliOmM9JY6JD"},"source":["from collections import deque\n","import random\n","\n","df= df_full.copy()\n","name = 'Actor-critic agent'\n","\n","class Actor:\n"," def __init__(self, name, input_size, output_size, size_layer):\n"," with tf.variable_scope(name):\n"," self.X = tf.placeholder(tf.float32, (None, input_size))\n"," feed_actor = tf.layers.dense(self.X, size_layer, activation = tf.nn.relu)\n"," self.logits = tf.layers.dense(feed_actor, output_size)\n","\n","class Critic:\n"," def __init__(self, name, input_size, output_size, size_layer, learning_rate):\n"," with tf.variable_scope(name):\n"," self.X = tf.placeholder(tf.float32, (None, input_size))\n"," self.Y = tf.placeholder(tf.float32, (None, output_size))\n"," self.REWARD = tf.placeholder(tf.float32, (None, 1))\n"," feed_critic = tf.layers.dense(self.X, size_layer, activation = tf.nn.relu)\n"," feed_critic = tf.layers.dense(feed_critic, output_size, activation = tf.nn.relu) + self.Y\n"," feed_critic = tf.layers.dense(feed_critic, size_layer//2, activation = tf.nn.relu)\n"," self.logits = tf.layers.dense(feed_critic, 1)\n"," self.cost = tf.reduce_mean(tf.square(self.REWARD - self.logits))\n"," self.optimizer = tf.train.AdamOptimizer(learning_rate).minimize(self.cost)\n"," \n","class Agent:\n","\n"," LEARNING_RATE = 0.001\n"," BATCH_SIZE = 32\n"," LAYER_SIZE = 256\n"," OUTPUT_SIZE = 3\n"," EPSILON = 0.5\n"," DECAY_RATE = 0.005\n"," MIN_EPSILON = 0.1\n"," GAMMA = 0.99\n"," MEMORIES = deque()\n"," MEMORY_SIZE = 300\n"," COPY = 1000\n"," T_COPY = 0\n","\n"," def __init__(self, state_size, window_size, trend, skip):\n"," self.state_size = state_size\n"," self.window_size = window_size\n"," self.half_window = window_size // 2\n"," self.trend = trend\n"," self.skip = skip\n"," tf.reset_default_graph()\n"," self.actor = Actor('actor-original', self.state_size, self.OUTPUT_SIZE, self.LAYER_SIZE)\n"," self.actor_target = Actor('actor-target', self.state_size, self.OUTPUT_SIZE, self.LAYER_SIZE)\n"," self.critic = Critic('critic-original', self.state_size, self.OUTPUT_SIZE, self.LAYER_SIZE, self.LEARNING_RATE)\n"," self.critic_target = Critic('critic-target', self.state_size, self.OUTPUT_SIZE, \n"," self.LAYER_SIZE, self.LEARNING_RATE)\n"," self.grad_critic = tf.gradients(self.critic.logits, self.critic.Y)\n"," self.actor_critic_grad = tf.placeholder(tf.float32, [None, self.OUTPUT_SIZE])\n"," weights_actor = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES, scope='actor')\n"," self.grad_actor = tf.gradients(self.actor.logits, weights_actor, -self.actor_critic_grad)\n"," grads = zip(self.grad_actor, weights_actor)\n"," self.optimizer = tf.train.AdamOptimizer(self.LEARNING_RATE).apply_gradients(grads)\n"," self.sess = tf.InteractiveSession()\n"," self.sess.run(tf.global_variables_initializer())\n"," \n"," def _assign(self, from_name, to_name):\n"," from_w = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES, scope=from_name)\n"," to_w = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES, scope=to_name)\n"," for i in range(len(from_w)):\n"," assign_op = to_w[i].assign(from_w[i])\n"," self.sess.run(assign_op)\n"," \n"," def _memorize(self, state, action, reward, new_state, dead):\n"," self.MEMORIES.append((state, action, reward, new_state, dead))\n"," if len(self.MEMORIES) > self.MEMORY_SIZE:\n"," self.MEMORIES.popleft()\n"," \n"," def _select_action(self, state):\n"," if np.random.rand() < self.EPSILON:\n"," action = np.random.randint(self.OUTPUT_SIZE)\n"," else:\n"," prediction = self.sess.run(self.actor.logits, feed_dict={self.actor.X:[state]})[0]\n"," action = np.argmax(prediction)\n"," return action\n"," \n"," def _construct_memories_and_train(self, replay):\n"," states = np.array([a[0] for a in replay])\n"," new_states = np.array([a[3] for a in replay])\n"," Q = self.sess.run(self.actor.logits, feed_dict={self.actor.X: states})\n"," Q_target = self.sess.run(self.actor_target.logits, feed_dict={self.actor_target.X: states})\n"," grads = self.sess.run(self.grad_critic, feed_dict={self.critic.X:states, self.critic.Y:Q})[0]\n"," self.sess.run(self.optimizer, feed_dict={self.actor.X:states, self.actor_critic_grad:grads})\n"," \n"," rewards = np.array([a[2] for a in replay]).reshape((-1, 1))\n"," rewards_target = self.sess.run(self.critic_target.logits, \n"," feed_dict={self.critic_target.X:new_states,self.critic_target.Y:Q_target})\n"," for i in range(len(replay)):\n"," if not replay[0][-1]:\n"," rewards[i] += self.GAMMA * rewards_target[i]\n"," cost, _ = self.sess.run([self.critic.cost, self.critic.optimizer], \n"," feed_dict={self.critic.X:states, self.critic.Y:Q, self.critic.REWARD:rewards})\n"," return cost\n"," \n"," def get_state(self, t):\n"," window_size = self.window_size + 1\n"," d = t - window_size + 1\n"," block = self.trend[d : t + 1] if d >= 0 else -d * [self.trend[0]] + self.trend[0 : t + 1]\n"," res = []\n"," for i in range(window_size - 1):\n"," res.append(block[i + 1] - block[i])\n"," return np.array(res)\n"," \n"," def buy(self, initial_money):\n"," starting_money = initial_money\n"," states_sell = []\n"," states_buy = []\n"," inventory = []\n"," state = self.get_state(0)\n"," for t in range(0, len(self.trend) - 1, self.skip):\n"," action = self._select_action(state)\n"," next_state = self.get_state(t + 1)\n"," \n"," if action == 1 and initial_money >= self.trend[t]:\n"," inventory.append(self.trend[t])\n"," initial_money -= self.trend[t]\n"," states_buy.append(t)\n"," print('day %d: buy 1 unit at price %f, total balance %f'% (t, self.trend[t], initial_money))\n"," \n"," elif action == 2 and len(inventory):\n"," bought_price = inventory.pop(0)\n"," initial_money += self.trend[t]\n"," states_sell.append(t)\n"," try:\n"," invest = ((close[t] - bought_price) / bought_price) * 100\n"," except:\n"," invest = 0\n"," print(\n"," 'day %d, sell 1 unit at price %f, investment %f %%, total balance %f,'\n"," % (t, close[t], invest, initial_money)\n"," )\n"," \n"," state = next_state\n"," invest = ((initial_money - starting_money) / starting_money) * 100\n"," total_gains = initial_money - starting_money\n"," return states_buy, states_sell, total_gains, invest\n"," \n"," def train(self, iterations, checkpoint, initial_money):\n"," for i in range(iterations):\n"," total_profit = 0\n"," inventory = []\n"," state = self.get_state(0)\n"," starting_money = initial_money\n"," for t in range(0, len(self.trend) - 1, self.skip):\n"," if (self.T_COPY + 1) % self.COPY == 0:\n"," self._assign('actor-original', 'actor-target')\n"," self._assign('critic-original', 'critic-target')\n"," \n"," action = self._select_action(state)\n"," next_state = self.get_state(t + 1)\n"," \n"," if action == 1 and starting_money >= self.trend[t]:\n"," inventory.append(self.trend[t])\n"," starting_money -= self.trend[t]\n"," \n"," elif action == 2 and len(inventory) > 0:\n"," bought_price = inventory.pop(0)\n"," total_profit += self.trend[t] - bought_price\n"," starting_money += self.trend[t]\n"," \n"," invest = ((starting_money - initial_money) / initial_money)\n"," \n"," self._memorize(state, action, invest, next_state, starting_money < initial_money)\n"," state = next_state\n"," batch_size = min(len(self.MEMORIES), self.BATCH_SIZE)\n"," replay = random.sample(self.MEMORIES, batch_size)\n"," cost = self._construct_memories_and_train(replay)\n"," self.T_COPY += 1\n"," self.EPSILON = self.MIN_EPSILON + (1.0 - self.MIN_EPSILON) * np.exp(-self.DECAY_RATE * i)\n"," if (i+1) % checkpoint == 0:\n"," print('epoch: %d, total rewards: %f.3, cost: %f, total money: %f'%(i + 1, total_profit, cost,\n"," starting_money))"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"0PZo8zYuY6JF","outputId":"6bca3ef7-5ec5-44ba-f168-6d0f39237145"},"source":["close = df.Close.values.tolist()\n","initial_money = 10000\n","window_size = 30\n","skip = 1\n","batch_size = 32\n","agent = Agent(state_size = window_size, \n"," window_size = window_size, \n"," trend = close, \n"," skip = skip)\n","agent.train(iterations = 200, checkpoint = 10, initial_money = initial_money)"],"execution_count":null,"outputs":[{"output_type":"stream","text":["epoch: 10, total rewards: 1539.185237.3, cost: 2.181347, total money: 1684.395196\n","epoch: 20, total rewards: 1308.335026.3, cost: 658.992737, total money: 11308.335026\n","epoch: 30, total rewards: 810.315002.3, cost: 19406.357422, total money: 5871.594971\n","epoch: 40, total rewards: 380.889899.3, cost: 436790400.000000, total money: 7327.869879\n","epoch: 50, total rewards: 676.170224.3, cost: 27570524160.000000, total money: 10676.170224\n","epoch: 60, total rewards: 796.770199.3, cost: 935274741760.000000, total money: 10796.770199\n","epoch: 70, total rewards: 47.440366.3, cost: 8344191369216.000000, total money: 7043.150388\n","epoch: 80, total rewards: 450.169980.3, cost: 88121093914624.000000, total money: 6472.479916\n","epoch: 90, total rewards: 443.664980.3, cost: 675454474256384.000000, total money: 9427.024965\n","epoch: 100, total rewards: 350.460142.3, cost: 1153362061950976.000000, total money: 10350.460142\n","epoch: 110, total rewards: 247.584961.3, cost: 6317238688677888.000000, total money: 9230.944946\n","epoch: 120, total rewards: 138.510132.3, cost: 3956869119726321664.000000, total money: 8102.600097\n","epoch: 130, total rewards: 410.025086.3, cost: 2205253088434978816.000000, total money: 10410.025086\n","epoch: 140, total rewards: 513.814999.3, cost: 5849743807884558336.000000, total money: 9497.174984\n","epoch: 150, total rewards: 876.734991.3, cost: 25442419893862400.000000, total money: 9860.094976\n","epoch: 160, total rewards: 216.929627.3, cost: 73146239398445056.000000, total money: 9244.369629\n","epoch: 170, total rewards: 26.000066.3, cost: 210379489706770432.000000, total money: 7992.250066\n","epoch: 180, total rewards: 230.090269.3, cost: 378469838063927296.000000, total money: 8194.180234\n","epoch: 190, total rewards: 31.099796.3, cost: 1333389845631860736.000000, total money: 6978.079776\n","epoch: 200, total rewards: 158.599487.3, cost: 459357028892629008384.000000, total money: 10158.599487\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"jIfLf9RfY6JI","outputId":"20a59fdc-041e-48e9-8e29-f545f6a54e33"},"source":["states_buy, states_sell, total_gains, invest = agent.buy(initial_money = initial_money)"],"execution_count":null,"outputs":[{"output_type":"stream","text":["day 3: buy 1 unit at price 782.520020, total balance 9217.479980\n","day 4: buy 1 unit at price 790.510010, total balance 8426.969970\n","day 5, sell 1 unit at price 785.309998, investment 0.356538 %, total balance 9212.279968,\n","day 6, sell 1 unit at price 762.559998, investment -3.535694 %, total balance 9974.839966,\n","day 16: buy 1 unit at price 761.679993, total balance 9213.159973\n","day 17: buy 1 unit at price 768.239990, total balance 8444.919983\n","day 18, sell 1 unit at price 770.840027, investment 1.202609 %, total balance 9215.760010,\n","day 19, sell 1 unit at price 758.039978, investment -1.327712 %, total balance 9973.799988,\n","day 20: buy 1 unit at price 747.919983, total balance 9225.880005\n","day 21: buy 1 unit at price 750.500000, total balance 8475.380005\n","day 22, sell 1 unit at price 762.520020, investment 1.952085 %, total balance 9237.900025,\n","day 24, sell 1 unit at price 771.190002, investment 2.756829 %, total balance 10009.090027,\n","day 25: buy 1 unit at price 776.419983, total balance 9232.670044\n","day 26, sell 1 unit at price 789.289978, investment 1.657607 %, total balance 10021.960022,\n","day 27: buy 1 unit at price 789.270020, total balance 9232.690002\n","day 28: buy 1 unit at price 796.099976, total balance 8436.590026\n","day 31, sell 1 unit at price 790.799988, investment 0.193846 %, total balance 9227.390014,\n","day 32, sell 1 unit at price 794.200012, investment -0.238659 %, total balance 10021.590026,\n","day 33: buy 1 unit at price 796.419983, total balance 9225.170043\n","day 34, sell 1 unit at price 794.559998, investment -0.233543 %, total balance 10019.730041,\n","day 36: buy 1 unit at price 789.909973, total balance 9229.820068\n","day 37, sell 1 unit at price 791.549988, investment 0.207620 %, total balance 10021.370056,\n","day 49: buy 1 unit at price 807.880005, total balance 9213.490051\n","day 51: buy 1 unit at price 806.070007, total balance 8407.420044\n","day 52, sell 1 unit at price 802.174988, investment -0.706171 %, total balance 9209.595032,\n","day 53, sell 1 unit at price 805.020020, investment -0.130260 %, total balance 10014.615052,\n","day 59: buy 1 unit at price 802.320007, total balance 9212.295045\n","day 62, sell 1 unit at price 798.530029, investment -0.472377 %, total balance 10010.825074,\n","day 63: buy 1 unit at price 801.489990, total balance 9209.335084\n","day 64, sell 1 unit at price 801.340027, investment -0.018711 %, total balance 10010.675111,\n","day 67: buy 1 unit at price 809.559998, total balance 9201.115113\n","day 68, sell 1 unit at price 813.669983, investment 0.507681 %, total balance 10014.785096,\n","day 73: buy 1 unit at price 828.070007, total balance 9186.715089\n","day 74, sell 1 unit at price 831.659973, investment 0.433534 %, total balance 10018.375062,\n","day 81: buy 1 unit at price 830.630005, total balance 9187.745057\n","day 82, sell 1 unit at price 829.080017, investment -0.186604 %, total balance 10016.825074,\n","day 87: buy 1 unit at price 843.250000, total balance 9173.575074\n","day 88, sell 1 unit at price 845.539978, investment 0.271566 %, total balance 10019.115052,\n","day 92: buy 1 unit at price 852.119995, total balance 9166.995057\n","day 93, sell 1 unit at price 848.400024, investment -0.436555 %, total balance 10015.395081,\n","day 97: buy 1 unit at price 814.429993, total balance 9200.965088\n","day 98: buy 1 unit at price 819.510010, total balance 8381.455078\n","day 99, sell 1 unit at price 820.919983, investment 0.796875 %, total balance 9202.375061,\n","day 100: buy 1 unit at price 831.409973, total balance 8370.965088\n","day 101, sell 1 unit at price 831.500000, investment 1.463068 %, total balance 9202.465088,\n","day 102, sell 1 unit at price 829.559998, investment -0.222511 %, total balance 10032.025086,\n","day 107: buy 1 unit at price 824.669983, total balance 9207.355103\n","day 109, sell 1 unit at price 823.349976, investment -0.160065 %, total balance 10030.705079,\n","day 110: buy 1 unit at price 824.320007, total balance 9206.385072\n","day 111, sell 1 unit at price 823.559998, investment -0.092198 %, total balance 10029.945070,\n","day 115: buy 1 unit at price 841.650024, total balance 9188.295046\n","day 116, sell 1 unit at price 843.190002, investment 0.182971 %, total balance 10031.485048,\n","day 119: buy 1 unit at price 871.729980, total balance 9159.755068\n","day 120, sell 1 unit at price 874.250000, investment 0.289083 %, total balance 10034.005068,\n","day 129: buy 1 unit at price 928.780029, total balance 9105.225039\n","day 130, sell 1 unit at price 930.599976, investment 0.195950 %, total balance 10035.825015,\n","day 137: buy 1 unit at price 941.859985, total balance 9093.965030\n","day 138, sell 1 unit at price 948.820007, investment 0.738966 %, total balance 10042.785037,\n","day 140: buy 1 unit at price 969.539978, total balance 9073.245059\n","day 141, sell 1 unit at price 971.469971, investment 0.199063 %, total balance 10044.715030,\n","day 144: buy 1 unit at price 966.950012, total balance 9077.765018\n","day 145, sell 1 unit at price 975.599976, investment 0.894562 %, total balance 10053.364994,\n","day 147: buy 1 unit at price 976.570007, total balance 9076.794987\n","day 148, sell 1 unit at price 980.940002, investment 0.447484 %, total balance 10057.734989,\n","day 156: buy 1 unit at price 957.369995, total balance 9100.364994\n","day 157, sell 1 unit at price 950.630005, investment -0.704011 %, total balance 10050.994999,\n","day 160: buy 1 unit at price 965.590027, total balance 9085.404972\n","day 161, sell 1 unit at price 952.270020, investment -1.379468 %, total balance 10037.674992,\n","day 165: buy 1 unit at price 908.729980, total balance 9128.945012\n","day 166: buy 1 unit at price 898.700012, total balance 8230.245000\n","day 167, sell 1 unit at price 911.710022, investment 0.327935 %, total balance 9141.955022,\n","day 168, sell 1 unit at price 906.690002, investment 0.889061 %, total balance 10048.645024,\n","day 169: buy 1 unit at price 918.590027, total balance 9130.054997\n","day 170, sell 1 unit at price 928.799988, investment 1.111482 %, total balance 10058.854985,\n","day 171: buy 1 unit at price 930.090027, total balance 9128.764958\n","day 172: buy 1 unit at price 943.830017, total balance 8184.934941\n","day 173, sell 1 unit at price 947.159973, investment 1.835300 %, total balance 9132.094914,\n","day 174: buy 1 unit at price 955.989990, total balance 8176.104924\n","day 176: buy 1 unit at price 965.400024, total balance 7210.704900\n","day 177, sell 1 unit at price 970.890015, investment 2.867041 %, total balance 8181.594915,\n","day 178, sell 1 unit at price 968.150024, investment 1.271983 %, total balance 9149.744939,\n","day 179, sell 1 unit at price 972.919983, investment 0.778947 %, total balance 10122.664922,\n","day 182: buy 1 unit at price 947.799988, total balance 9174.864934\n","day 183, sell 1 unit at price 934.090027, investment -1.446504 %, total balance 10108.954961,\n","day 184: buy 1 unit at price 941.530029, total balance 9167.424932\n","day 185: buy 1 unit at price 930.500000, total balance 8236.924932\n","day 186, sell 1 unit at price 930.830017, investment -1.136449 %, total balance 9167.754949,\n","day 187, sell 1 unit at price 930.390015, investment -0.011820 %, total balance 10098.144964,\n","day 189: buy 1 unit at price 927.960022, total balance 9170.184942\n","day 190, sell 1 unit at price 929.359985, investment 0.150865 %, total balance 10099.544927,\n","day 192: buy 1 unit at price 922.900024, total balance 9176.644903\n","day 193, sell 1 unit at price 907.239990, investment -1.696829 %, total balance 10083.884893,\n","day 197: buy 1 unit at price 926.960022, total balance 9156.924871\n","day 198, sell 1 unit at price 910.979980, investment -1.723919 %, total balance 10067.904851,\n","day 199: buy 1 unit at price 910.669983, total balance 9157.234868\n","day 200, sell 1 unit at price 906.659973, investment -0.440336 %, total balance 10063.894841,\n","day 202: buy 1 unit at price 927.000000, total balance 9136.894841\n","day 203, sell 1 unit at price 921.280029, investment -0.617041 %, total balance 10058.174870,\n","day 204: buy 1 unit at price 915.890015, total balance 9142.284855\n","day 205: buy 1 unit at price 913.809998, total balance 8228.474857\n","day 206, sell 1 unit at price 921.289978, investment 0.589586 %, total balance 9149.764835,\n","day 207, sell 1 unit at price 929.570007, investment 1.724648 %, total balance 10079.334842,\n","day 209: buy 1 unit at price 937.340027, total balance 9141.994815\n","day 210, sell 1 unit at price 928.450012, investment -0.948430 %, total balance 10070.444827,\n","day 211: buy 1 unit at price 927.809998, total balance 9142.634829\n","day 212: buy 1 unit at price 935.950012, total balance 8206.684817\n","day 213: buy 1 unit at price 926.500000, total balance 7280.184817\n","day 214, sell 1 unit at price 929.080017, investment 0.136884 %, total balance 8209.264834,\n","day 215: buy 1 unit at price 932.070007, total balance 7277.194827\n","day 216: buy 1 unit at price 935.090027, total balance 6342.104800\n","day 217, sell 1 unit at price 925.109985, investment -1.158184 %, total balance 7267.214785,\n","day 218, sell 1 unit at price 920.289978, investment -0.670267 %, total balance 8187.504763,\n","day 219, sell 1 unit at price 915.000000, investment -1.831408 %, total balance 9102.504763,\n","day 221, sell 1 unit at price 931.580017, investment -0.375366 %, total balance 10034.084780,\n","day 223: buy 1 unit at price 928.530029, total balance 9105.554751\n","day 224: buy 1 unit at price 920.969971, total balance 8184.584780\n","day 225, sell 1 unit at price 924.859985, investment -0.395253 %, total balance 9109.444765,\n","day 226, sell 1 unit at price 944.489990, investment 2.553831 %, total balance 10053.934755,\n","day 227: buy 1 unit at price 949.500000, total balance 9104.434755\n","day 228, sell 1 unit at price 959.109985, investment 1.012110 %, total balance 10063.544740,\n","day 231: buy 1 unit at price 951.679993, total balance 9111.864747\n","day 232: buy 1 unit at price 969.960022, total balance 8141.904725\n","day 233: buy 1 unit at price 978.890015, total balance 7163.014710\n","day 235, sell 1 unit at price 972.599976, investment 2.198216 %, total balance 8135.614686,\n","day 236, sell 1 unit at price 989.250000, investment 1.988739 %, total balance 9124.864686,\n","day 238, sell 1 unit at price 989.679993, investment 1.102267 %, total balance 10114.544679,\n","day 243: buy 1 unit at price 988.200012, total balance 9126.344667\n","day 244: buy 1 unit at price 968.450012, total balance 8157.894655\n","day 245: buy 1 unit at price 970.539978, total balance 7187.354677\n","day 246, sell 1 unit at price 973.330017, investment -1.504756 %, total balance 8160.684694,\n","day 247: buy 1 unit at price 972.559998, total balance 7188.124696\n","day 248, sell 1 unit at price 1019.270020, investment 5.247561 %, total balance 8207.394716,\n","day 249, sell 1 unit at price 1017.109985, investment 4.798361 %, total balance 9224.504701,\n","day 250: buy 1 unit at price 1016.640015, total balance 8207.864686\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"C8-eGw7KY6JO","outputId":"db084add-83dc-476d-9d1c-c1f7b40dc03a"},"source":["fig = plt.figure(figsize = (15,5))\n","plt.plot(close, color='r', lw=2.)\n","plt.plot(close, '^', markersize=10, color='m', label = 'buying signal', markevery = states_buy)\n","plt.plot(close, 'v', markersize=10, color='k', label = 'selling signal', markevery = states_sell)\n","plt.title('total gains %f, total investment %f%%'%(total_gains, invest))\n","plt.legend()\n","plt.savefig('output/'+name+'.png')\n","plt.show()"],"execution_count":null,"outputs":[{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["
"]},"metadata":{"tags":[],"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"gU8qKzfPlU_t"},"source":["## Actor-critic Duel agent"]},{"cell_type":"code","metadata":{"id":"TOIC7kuAY6Jb"},"source":["from collections import deque\n","import random\n","\n","df= df_full.copy()\n","name = 'Actor-critic Duel agent'\n","\n","class Actor:\n"," def __init__(self, name, input_size, output_size, size_layer):\n"," with tf.variable_scope(name):\n"," self.X = tf.placeholder(tf.float32, (None, input_size))\n"," feed_actor = tf.layers.dense(self.X, size_layer, activation = tf.nn.relu)\n"," tensor_action, tensor_validation = tf.split(feed_actor,2,1)\n"," feed_action = tf.layers.dense(tensor_action, output_size)\n"," feed_validation = tf.layers.dense(tensor_validation, 1)\n"," self.logits = feed_validation + tf.subtract(feed_action,\n"," tf.reduce_mean(feed_action,axis=1,keep_dims=True))\n","\n","class Critic:\n"," def __init__(self, name, input_size, output_size, size_layer, learning_rate):\n"," with tf.variable_scope(name):\n"," self.X = tf.placeholder(tf.float32, (None, input_size))\n"," self.Y = tf.placeholder(tf.float32, (None, output_size))\n"," self.REWARD = tf.placeholder(tf.float32, (None, 1))\n"," feed_critic = tf.layers.dense(self.X, size_layer, activation = tf.nn.relu)\n"," tensor_action, tensor_validation = tf.split(feed_critic,2,1)\n"," feed_action = tf.layers.dense(tensor_action, output_size)\n"," feed_validation = tf.layers.dense(tensor_validation, 1)\n"," feed_critic = feed_validation + tf.subtract(feed_action,tf.reduce_mean(feed_action,axis=1,keep_dims=True))\n"," feed_critic = tf.nn.relu(feed_critic) + self.Y\n"," feed_critic = tf.layers.dense(feed_critic, size_layer//2, activation = tf.nn.relu)\n"," self.logits = tf.layers.dense(feed_critic, 1)\n"," self.cost = tf.reduce_mean(tf.square(self.REWARD - self.logits))\n"," self.optimizer = tf.train.AdamOptimizer(learning_rate).minimize(self.cost)\n"," \n","class Agent:\n","\n"," LEARNING_RATE = 0.001\n"," BATCH_SIZE = 32\n"," LAYER_SIZE = 256\n"," OUTPUT_SIZE = 3\n"," EPSILON = 0.5\n"," DECAY_RATE = 0.005\n"," MIN_EPSILON = 0.1\n"," GAMMA = 0.99\n"," MEMORIES = deque()\n"," MEMORY_SIZE = 300\n"," COPY = 1000\n"," T_COPY = 0\n","\n"," def __init__(self, state_size, window_size, trend, skip):\n"," self.state_size = state_size\n"," self.window_size = window_size\n"," self.half_window = window_size // 2\n"," self.trend = trend\n"," self.skip = skip\n"," tf.reset_default_graph()\n"," self.actor = Actor('actor-original', self.state_size, self.OUTPUT_SIZE, self.LAYER_SIZE)\n"," self.actor_target = Actor('actor-target', self.state_size, self.OUTPUT_SIZE, self.LAYER_SIZE)\n"," self.critic = Critic('critic-original', self.state_size, self.OUTPUT_SIZE, self.LAYER_SIZE, self.LEARNING_RATE)\n"," self.critic_target = Critic('critic-target', self.state_size, self.OUTPUT_SIZE, \n"," self.LAYER_SIZE, self.LEARNING_RATE)\n"," self.grad_critic = tf.gradients(self.critic.logits, self.critic.Y)\n"," self.actor_critic_grad = tf.placeholder(tf.float32, [None, self.OUTPUT_SIZE])\n"," weights_actor = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES, scope='actor')\n"," self.grad_actor = tf.gradients(self.actor.logits, weights_actor, -self.actor_critic_grad)\n"," grads = zip(self.grad_actor, weights_actor)\n"," self.optimizer = tf.train.AdamOptimizer(self.LEARNING_RATE).apply_gradients(grads)\n"," self.sess = tf.InteractiveSession()\n"," self.sess.run(tf.global_variables_initializer())\n"," \n"," def _assign(self, from_name, to_name):\n"," from_w = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES, scope=from_name)\n"," to_w = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES, scope=to_name)\n"," for i in range(len(from_w)):\n"," assign_op = to_w[i].assign(from_w[i])\n"," self.sess.run(assign_op)\n"," \n"," def _memorize(self, state, action, reward, new_state, dead):\n"," self.MEMORIES.append((state, action, reward, new_state, dead))\n"," if len(self.MEMORIES) > self.MEMORY_SIZE:\n"," self.MEMORIES.popleft()\n"," \n"," def _select_action(self, state):\n"," if np.random.rand() < self.EPSILON:\n"," action = np.random.randint(self.OUTPUT_SIZE)\n"," else:\n"," prediction = self.sess.run(self.actor.logits, feed_dict={self.actor.X:[state]})[0]\n"," action = np.argmax(prediction)\n"," return action\n"," \n"," def _construct_memories_and_train(self, replay):\n"," states = np.array([a[0] for a in replay])\n"," new_states = np.array([a[3] for a in replay])\n"," Q = self.sess.run(self.actor.logits, feed_dict={self.actor.X: states})\n"," Q_target = self.sess.run(self.actor_target.logits, feed_dict={self.actor_target.X: states})\n"," grads = self.sess.run(self.grad_critic, feed_dict={self.critic.X:states, self.critic.Y:Q})[0]\n"," self.sess.run(self.optimizer, feed_dict={self.actor.X:states, self.actor_critic_grad:grads})\n"," \n"," rewards = np.array([a[2] for a in replay]).reshape((-1, 1))\n"," rewards_target = self.sess.run(self.critic_target.logits, \n"," feed_dict={self.critic_target.X:new_states,self.critic_target.Y:Q_target})\n"," for i in range(len(replay)):\n"," if not replay[0][-1]:\n"," rewards[i] += self.GAMMA * rewards_target[i]\n"," cost, _ = self.sess.run([self.critic.cost, self.critic.optimizer], \n"," feed_dict={self.critic.X:states, self.critic.Y:Q, self.critic.REWARD:rewards})\n"," return cost\n"," \n"," def get_state(self, t):\n"," window_size = self.window_size + 1\n"," d = t - window_size + 1\n"," block = self.trend[d : t + 1] if d >= 0 else -d * [self.trend[0]] + self.trend[0 : t + 1]\n"," res = []\n"," for i in range(window_size - 1):\n"," res.append(block[i + 1] - block[i])\n"," return np.array(res)\n"," \n"," def buy(self, initial_money):\n"," starting_money = initial_money\n"," states_sell = []\n"," states_buy = []\n"," inventory = []\n"," state = self.get_state(0)\n"," for t in range(0, len(self.trend) - 1, self.skip):\n"," action = self._select_action(state)\n"," next_state = self.get_state(t + 1)\n"," \n"," if action == 1 and initial_money >= self.trend[t]:\n"," inventory.append(self.trend[t])\n"," initial_money -= self.trend[t]\n"," states_buy.append(t)\n"," print('day %d: buy 1 unit at price %f, total balance %f'% (t, self.trend[t], initial_money))\n"," \n"," elif action == 2 and len(inventory):\n"," bought_price = inventory.pop(0)\n"," initial_money += self.trend[t]\n"," states_sell.append(t)\n"," try:\n"," invest = ((close[t] - bought_price) / bought_price) * 100\n"," except:\n"," invest = 0\n"," print(\n"," 'day %d, sell 1 unit at price %f, investment %f %%, total balance %f,'\n"," % (t, close[t], invest, initial_money)\n"," )\n"," \n"," state = next_state\n"," invest = ((initial_money - starting_money) / starting_money) * 100\n"," total_gains = initial_money - starting_money\n"," return states_buy, states_sell, total_gains, invest\n"," \n"," def train(self, iterations, checkpoint, initial_money):\n"," for i in range(iterations):\n"," total_profit = 0\n"," inventory = []\n"," state = self.get_state(0)\n"," starting_money = initial_money\n"," for t in range(0, len(self.trend) - 1, self.skip):\n"," if (self.T_COPY + 1) % self.COPY == 0:\n"," self._assign('actor-original', 'actor-target')\n"," self._assign('critic-original', 'critic-target')\n"," \n"," action = self._select_action(state)\n"," next_state = self.get_state(t + 1)\n"," \n"," if action == 1 and starting_money >= self.trend[t]:\n"," inventory.append(self.trend[t])\n"," starting_money -= self.trend[t]\n"," \n"," elif action == 2 and len(inventory) > 0:\n"," bought_price = inventory.pop(0)\n"," total_profit += self.trend[t] - bought_price\n"," starting_money += self.trend[t]\n"," \n"," invest = ((starting_money - initial_money) / initial_money)\n"," \n"," self._memorize(state, action, invest, next_state, starting_money < initial_money)\n"," batch_size = min(len(self.MEMORIES), self.BATCH_SIZE)\n"," state = next_state\n"," replay = random.sample(self.MEMORIES, batch_size)\n"," cost = self._construct_memories_and_train(replay)\n"," self.T_COPY += 1\n"," self.EPSILON = self.MIN_EPSILON + (1.0 - self.MIN_EPSILON) * np.exp(-self.DECAY_RATE * i)\n"," if (i+1) % checkpoint == 0:\n"," print('epoch: %d, total rewards: %f.3, cost: %f, total money: %f'%(i + 1, total_profit, cost,\n"," starting_money))"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"XiEQxOF8Y6Je","outputId":"8d2a4b02-7f4c-4fac-eb65-5dff636dc772"},"source":["close = df.Close.values.tolist()\n","initial_money = 10000\n","window_size = 30\n","skip = 1\n","batch_size = 32\n","agent = Agent(state_size = window_size, \n"," window_size = window_size, \n"," trend = close, \n"," skip = skip)\n","agent.train(iterations = 200, checkpoint = 10, initial_money = initial_money)"],"execution_count":null,"outputs":[{"output_type":"stream","text":["WARNING:tensorflow:From :13: calling reduce_mean (from tensorflow.python.ops.math_ops) with keep_dims is deprecated and will be removed in a future version.\n","Instructions for updating:\n","keep_dims is deprecated, use keepdims instead\n","epoch: 10, total rewards: 707.200200.3, cost: 0.405626, total money: 9715.020207\n","epoch: 20, total rewards: 1598.640143.3, cost: 30.734631, total money: 10581.530158\n","epoch: 30, total rewards: 1271.279733.3, cost: 465.966644, total money: 10254.169748\n","epoch: 40, total rewards: 611.054993.3, cost: 38.079464, total money: 2818.014953\n","epoch: 50, total rewards: 1098.115172.3, cost: 71481.406250, total money: 1453.295102\n","epoch: 60, total rewards: 575.370237.3, cost: 45955692.000000, total money: 9558.260252\n","epoch: 70, total rewards: 1020.545110.3, cost: 244974075904.000000, total money: 10003.435125\n","epoch: 80, total rewards: 824.555359.3, cost: 62751015698432.000000, total money: 4025.125366\n","epoch: 90, total rewards: 182.215205.3, cost: 3949580517376.000000, total money: 10182.215205\n","epoch: 100, total rewards: 861.215276.3, cost: 7310792458240.000000, total money: 7918.025274\n","epoch: 110, total rewards: 68.690005.3, cost: 3184271573385216.000000, total money: 10068.690005\n","epoch: 120, total rewards: 205.980352.3, cost: 224217291292672.000000, total money: 10205.980352\n","epoch: 130, total rewards: 256.794983.3, cost: 363017178972160.000000, total money: 8275.784973\n","epoch: 140, total rewards: 1586.720156.3, cost: 530019768074240.000000, total money: 11586.720156\n","epoch: 150, total rewards: 824.849978.3, cost: 3151772092727296.000000, total money: 8881.750002\n","epoch: 160, total rewards: 222.490291.3, cost: 6080023886823424.000000, total money: 9205.850276\n","epoch: 170, total rewards: 37.630069.3, cost: 9586346603577344.000000, total money: 9020.990054\n","epoch: 180, total rewards: 510.125126.3, cost: 22490134536519680.000000, total money: 5604.765140\n","epoch: 190, total rewards: 639.559874.3, cost: 106721235701858304.000000, total money: 9669.019896\n","epoch: 200, total rewards: 945.395079.3, cost: 31826508674760704.000000, total money: 384.445006\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"JaiHbiIRY6Ji","outputId":"a65aa7f2-db2d-4a96-b99d-f29d08875db7"},"source":["states_buy, states_sell, total_gains, invest = agent.buy(initial_money = initial_money)"],"execution_count":null,"outputs":[{"output_type":"stream","text":["day 0: buy 1 unit at price 768.700012, total balance 9231.299988\n","day 2: buy 1 unit at price 762.020020, total balance 8469.279968\n","day 3, sell 1 unit at price 782.520020, investment 1.797842 %, total balance 9251.799988,\n","day 4, sell 1 unit at price 790.510010, investment 3.738746 %, total balance 10042.309998,\n","day 5: buy 1 unit at price 785.309998, total balance 9257.000000\n","day 8: buy 1 unit at price 736.080017, total balance 8520.919983\n","day 11, sell 1 unit at price 771.229980, investment -1.792925 %, total balance 9292.149963,\n","day 12: buy 1 unit at price 760.539978, total balance 8531.609985\n","day 14: buy 1 unit at price 768.270020, total balance 7763.339965\n","day 15: buy 1 unit at price 760.989990, total balance 7002.349975\n","day 17, sell 1 unit at price 768.239990, investment 4.369087 %, total balance 7770.589965,\n","day 20, sell 1 unit at price 747.919983, investment -1.659347 %, total balance 8518.509948,\n","day 21, sell 1 unit at price 750.500000, investment -2.312991 %, total balance 9269.009948,\n","day 22, sell 1 unit at price 762.520020, investment 0.201058 %, total balance 10031.529968,\n","day 27: buy 1 unit at price 789.270020, total balance 9242.259948\n","day 33: buy 1 unit at price 796.419983, total balance 8445.839965\n","day 34, sell 1 unit at price 794.559998, investment 0.670237 %, total balance 9240.399963,\n","day 35, sell 1 unit at price 791.260010, investment -0.647896 %, total balance 10031.659973,\n","day 36: buy 1 unit at price 789.909973, total balance 9241.750000\n","day 37, sell 1 unit at price 791.549988, investment 0.207620 %, total balance 10033.299988,\n","day 41: buy 1 unit at price 786.140015, total balance 9247.159973\n","day 43: buy 1 unit at price 794.020020, total balance 8453.139953\n","day 44: buy 1 unit at price 806.150024, total balance 7646.989929\n","day 45, sell 1 unit at price 806.650024, investment 2.608951 %, total balance 8453.639953,\n","day 47: buy 1 unit at price 807.909973, total balance 7645.729980\n","day 48: buy 1 unit at price 806.359985, total balance 6839.369995\n","day 49, sell 1 unit at price 807.880005, investment 1.745546 %, total balance 7647.250000,\n","day 55: buy 1 unit at price 823.869995, total balance 6823.380005\n","day 56, sell 1 unit at price 835.669983, investment 3.661844 %, total balance 7659.049988,\n","day 57, sell 1 unit at price 832.150024, investment 3.000341 %, total balance 8491.200012,\n","day 58, sell 1 unit at price 823.309998, investment 2.102040 %, total balance 9314.510010,\n","day 59: buy 1 unit at price 802.320007, total balance 8512.190003\n","day 60, sell 1 unit at price 796.789978, investment -3.286928 %, total balance 9308.979981,\n","day 62: buy 1 unit at price 798.530029, total balance 8510.449952\n","day 63, sell 1 unit at price 801.489990, investment -0.103452 %, total balance 9311.939942,\n","day 69, sell 1 unit at price 819.239990, investment 2.593511 %, total balance 10131.179932,\n","day 75: buy 1 unit at price 830.760010, total balance 9300.419922\n","day 76, sell 1 unit at price 831.330017, investment 0.068613 %, total balance 10131.749939,\n","day 77: buy 1 unit at price 828.640015, total balance 9303.109924\n","day 78: buy 1 unit at price 829.280029, total balance 8473.829895\n","day 80, sell 1 unit at price 835.239990, investment 0.796483 %, total balance 9309.069885,\n","day 83: buy 1 unit at price 827.780029, total balance 8481.289856\n","day 84, sell 1 unit at price 831.909973, investment 0.317136 %, total balance 9313.199829,\n","day 86: buy 1 unit at price 838.679993, total balance 8474.519836\n","day 87: buy 1 unit at price 843.250000, total balance 7631.269836\n","day 88: buy 1 unit at price 845.539978, total balance 6785.729858\n","day 89, sell 1 unit at price 845.619995, investment 2.155158 %, total balance 7631.349853,\n","day 91: buy 1 unit at price 848.780029, total balance 6782.569824\n","day 92: buy 1 unit at price 852.119995, total balance 5930.449829\n","day 94, sell 1 unit at price 830.460022, investment -0.980108 %, total balance 6760.909851,\n","day 95: buy 1 unit at price 829.590027, total balance 5931.319824\n","day 96: buy 1 unit at price 817.580017, total balance 5113.739807\n","day 97: buy 1 unit at price 814.429993, total balance 4299.309814\n","day 98: buy 1 unit at price 819.510010, total balance 3479.799804\n","day 104, sell 1 unit at price 834.570007, investment -1.029350 %, total balance 4314.369811,\n","day 105: buy 1 unit at price 831.409973, total balance 3482.959838\n","day 106: buy 1 unit at price 827.880005, total balance 2655.079833\n","day 107, sell 1 unit at price 824.669983, investment -2.468245 %, total balance 3479.749816,\n","day 108: buy 1 unit at price 824.729980, total balance 2655.019836\n","day 110, sell 1 unit at price 824.320007, investment -2.881786 %, total balance 3479.339843,\n","day 111, sell 1 unit at price 823.559998, investment -3.351640 %, total balance 4302.899841,\n","day 112: buy 1 unit at price 837.169983, total balance 3465.729858\n","day 118, sell 1 unit at price 872.299988, investment 5.148321 %, total balance 4338.029846,\n","day 121, sell 1 unit at price 905.960022, investment 10.809952 %, total balance 5243.989868,\n","day 122, sell 1 unit at price 912.570007, investment 12.050147 %, total balance 6156.559875,\n","day 123, sell 1 unit at price 916.440002, investment 11.827798 %, total balance 7072.999877,\n","day 125: buy 1 unit at price 931.659973, total balance 6141.339904\n","day 128: buy 1 unit at price 932.169983, total balance 5209.169921\n","day 132, sell 1 unit at price 937.080017, investment 12.709740 %, total balance 6146.249938,\n","day 133, sell 1 unit at price 943.000000, investment 13.905396 %, total balance 7089.249938,\n","day 134: buy 1 unit at price 919.619995, total balance 6169.629943\n","day 136, sell 1 unit at price 934.010010, investment 13.250401 %, total balance 7103.639953,\n","day 137, sell 1 unit at price 941.859985, investment 12.505226 %, total balance 8045.499938,\n","day 139, sell 1 unit at price 954.960022, investment 2.500918 %, total balance 9000.459960,\n","day 140: buy 1 unit at price 969.539978, total balance 8030.919982\n","day 143: buy 1 unit at price 964.859985, total balance 7066.059997\n","day 149, sell 1 unit at price 983.409973, investment 5.496850 %, total balance 8049.469970,\n","day 150: buy 1 unit at price 949.830017, total balance 7099.639953\n","day 152, sell 1 unit at price 953.400024, investment 3.673260 %, total balance 8053.039977,\n","day 153, sell 1 unit at price 950.760010, investment -1.936998 %, total balance 9003.799987,\n","day 154, sell 1 unit at price 942.309998, investment -2.337125 %, total balance 9946.109985,\n","day 156: buy 1 unit at price 957.369995, total balance 8988.739990\n","day 157, sell 1 unit at price 950.630005, investment 0.084224 %, total balance 9939.369995,\n","day 159, sell 1 unit at price 957.090027, investment -0.029243 %, total balance 10896.460022,\n","day 161: buy 1 unit at price 952.270020, total balance 9944.190002\n","day 163: buy 1 unit at price 940.489990, total balance 9003.700012\n","day 167, sell 1 unit at price 911.710022, investment -4.259296 %, total balance 9915.410034,\n","day 168: buy 1 unit at price 906.690002, total balance 9008.720032\n","day 170, sell 1 unit at price 928.799988, investment -1.242969 %, total balance 9937.520020,\n","day 171, sell 1 unit at price 930.090027, investment 2.580819 %, total balance 10867.610047,\n","day 188: buy 1 unit at price 923.650024, total balance 9943.960023\n","day 191, sell 1 unit at price 926.789978, investment 0.339951 %, total balance 10870.750001,\n","day 196: buy 1 unit at price 922.219971, total balance 9948.530030\n","day 197: buy 1 unit at price 926.960022, total balance 9021.570008\n","day 198, sell 1 unit at price 910.979980, investment -1.218797 %, total balance 9932.549988,\n","day 199: buy 1 unit at price 910.669983, total balance 9021.880005\n","day 202, sell 1 unit at price 927.000000, investment 0.004313 %, total balance 9948.880005,\n","day 203: buy 1 unit at price 921.280029, total balance 9027.599976\n","day 204, sell 1 unit at price 915.890015, investment 0.573208 %, total balance 9943.489991,\n","day 205: buy 1 unit at price 913.809998, total balance 9029.679993\n","day 206, sell 1 unit at price 921.289978, investment 0.001080 %, total balance 9950.969971,\n","day 207: buy 1 unit at price 929.570007, total balance 9021.399964\n","day 208, sell 1 unit at price 939.330017, investment 2.792705 %, total balance 9960.729981,\n","day 209: buy 1 unit at price 937.340027, total balance 9023.389954\n","day 210: buy 1 unit at price 928.450012, total balance 8094.939942\n","day 212: buy 1 unit at price 935.950012, total balance 7158.989930\n","day 213, sell 1 unit at price 926.500000, investment -0.330261 %, total balance 8085.489930,\n","day 219: buy 1 unit at price 915.000000, total balance 7170.489930\n","day 220, sell 1 unit at price 921.809998, investment -1.656819 %, total balance 8092.299928,\n","day 221, sell 1 unit at price 931.580017, investment 0.337122 %, total balance 9023.879945,\n","day 222, sell 1 unit at price 932.450012, investment -0.373952 %, total balance 9956.329957,\n","day 223: buy 1 unit at price 928.530029, total balance 9027.799928\n","day 226: buy 1 unit at price 944.489990, total balance 8083.309938\n","day 227, sell 1 unit at price 949.500000, investment 3.770492 %, total balance 9032.809938,\n","day 228: buy 1 unit at price 959.109985, total balance 8073.699953\n","day 229, sell 1 unit at price 953.270020, investment 2.664426 %, total balance 9026.969973,\n","day 231: buy 1 unit at price 951.679993, total balance 8075.289980\n","day 232, sell 1 unit at price 969.960022, investment 2.696697 %, total balance 9045.250002,\n","day 233, sell 1 unit at price 978.890015, investment 2.062332 %, total balance 10024.140017,\n","day 234, sell 1 unit at price 977.000000, investment 2.660559 %, total balance 11001.140017,\n","day 235: buy 1 unit at price 972.599976, total balance 10028.540041\n","day 238: buy 1 unit at price 989.679993, total balance 9038.860048\n","day 240, sell 1 unit at price 992.179993, investment 2.013162 %, total balance 10031.040041,\n","day 241, sell 1 unit at price 992.809998, investment 0.316264 %, total balance 11023.850039,\n","day 247: buy 1 unit at price 972.559998, total balance 10051.290041\n","day 248, sell 1 unit at price 1019.270020, investment 4.802791 %, total balance 11070.560061,\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"FFMaEsheY6Jm","outputId":"82b73cd5-6c16-4f2a-d207-b930d8a21660"},"source":["fig = plt.figure(figsize = (15,5))\n","plt.plot(close, color='r', lw=2.)\n","plt.plot(close, '^', markersize=10, color='m', label = 'buying signal', markevery = states_buy)\n","plt.plot(close, 'v', markersize=10, color='k', label = 'selling signal', markevery = states_sell)\n","plt.title('total gains %f, total investment %f%%'%(total_gains, invest))\n","plt.legend()\n","plt.savefig('output/'+name+'.png')\n","plt.show()"],"execution_count":null,"outputs":[{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["
"]},"metadata":{"tags":[],"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"6TvlxiuKleUB"},"source":["## Actor-critic Recurrent agent"]},{"cell_type":"code","metadata":{"id":"d3qVL6J5Y6J-"},"source":["from collections import deque\n","import random\n","\n","df= df_full.copy()\n","name = 'Actor-critic Recurrent agent'\n","\n","class Actor:\n"," def __init__(self, name, input_size, output_size, size_layer):\n"," with tf.variable_scope(name):\n"," self.X = tf.placeholder(tf.float32, (None, None, input_size))\n"," self.hidden_layer = tf.placeholder(tf.float32, (None, 2 * size_layer))\n"," cell = tf.nn.rnn_cell.LSTMCell(size_layer, state_is_tuple = False)\n"," self.rnn,self.last_state = tf.nn.dynamic_rnn(inputs=self.X, cell=cell,\n"," dtype=tf.float32,\n"," initial_state=self.hidden_layer)\n"," self.logits = tf.layers.dense(self.rnn[:,-1], output_size)\n","\n","class Critic:\n"," def __init__(self, name, input_size, output_size, size_layer, learning_rate):\n"," with tf.variable_scope(name):\n"," self.X = tf.placeholder(tf.float32, (None, None, input_size))\n"," self.Y = tf.placeholder(tf.float32, (None, output_size))\n"," self.hidden_layer = tf.placeholder(tf.float32, (None, 2 * size_layer))\n"," self.REWARD = tf.placeholder(tf.float32, (None, 1))\n"," feed_critic = tf.layers.dense(self.X, size_layer, activation = tf.nn.relu)\n"," cell = tf.nn.rnn_cell.LSTMCell(size_layer, state_is_tuple = False)\n"," self.rnn,self.last_state = tf.nn.dynamic_rnn(inputs=self.X, cell=cell,\n"," dtype=tf.float32,\n"," initial_state=self.hidden_layer)\n"," feed_critic = tf.layers.dense(self.rnn[:,-1], output_size, activation = tf.nn.relu) + self.Y\n"," feed_critic = tf.layers.dense(feed_critic, size_layer//2, activation = tf.nn.relu)\n"," self.logits = tf.layers.dense(feed_critic, 1)\n"," self.cost = tf.reduce_mean(tf.square(self.REWARD - self.logits))\n"," self.optimizer = tf.train.AdamOptimizer(learning_rate).minimize(self.cost)\n"," \n","class Agent:\n","\n"," LEARNING_RATE = 0.001\n"," BATCH_SIZE = 32\n"," LAYER_SIZE = 256\n"," OUTPUT_SIZE = 3\n"," EPSILON = 0.5\n"," DECAY_RATE = 0.005\n"," MIN_EPSILON = 0.1\n"," GAMMA = 0.99\n"," MEMORIES = deque()\n"," MEMORY_SIZE = 300\n"," COPY = 1000\n"," T_COPY = 0\n","\n"," def __init__(self, state_size, window_size, trend, skip):\n"," self.state_size = state_size\n"," self.window_size = window_size\n"," self.half_window = window_size // 2\n"," self.trend = trend\n"," self.INITIAL_FEATURES = np.zeros((4, self.state_size))\n"," self.skip = skip\n"," tf.reset_default_graph()\n"," self.actor = Actor('actor-original', self.state_size, self.OUTPUT_SIZE, self.LAYER_SIZE)\n"," self.actor_target = Actor('actor-target', self.state_size, self.OUTPUT_SIZE, self.LAYER_SIZE)\n"," self.critic = Critic('critic-original', self.state_size, self.OUTPUT_SIZE, self.LAYER_SIZE, self.LEARNING_RATE)\n"," self.critic_target = Critic('critic-target', self.state_size, self.OUTPUT_SIZE, \n"," self.LAYER_SIZE, self.LEARNING_RATE)\n"," self.grad_critic = tf.gradients(self.critic.logits, self.critic.Y)\n"," self.actor_critic_grad = tf.placeholder(tf.float32, [None, self.OUTPUT_SIZE])\n"," weights_actor = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES, scope='actor')\n"," self.grad_actor = tf.gradients(self.actor.logits, weights_actor, -self.actor_critic_grad)\n"," grads = zip(self.grad_actor, weights_actor)\n"," self.optimizer = tf.train.AdamOptimizer(self.LEARNING_RATE).apply_gradients(grads)\n"," self.sess = tf.InteractiveSession()\n"," self.sess.run(tf.global_variables_initializer())\n"," \n"," def _assign(self, from_name, to_name):\n"," from_w = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES, scope=from_name)\n"," to_w = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES, scope=to_name)\n"," for i in range(len(from_w)):\n"," assign_op = to_w[i].assign(from_w[i])\n"," self.sess.run(assign_op)\n"," \n"," def _memorize(self, state, action, reward, new_state, dead, rnn_state):\n"," self.MEMORIES.append((state, action, reward, new_state, dead, rnn_state))\n"," if len(self.MEMORIES) > self.MEMORY_SIZE:\n"," self.MEMORIES.popleft()\n"," \n"," def _select_action(self, state):\n"," if np.random.rand() < self.EPSILON:\n"," action = np.random.randint(self.OUTPUT_SIZE)\n"," else:\n"," prediction = self.sess.run(self.actor.logits, feed_dict={self.actor.X:[state]})[0]\n"," action = np.argmax(prediction)\n"," return action\n"," \n"," def _construct_memories_and_train(self, replay):\n"," states = np.array([a[0] for a in replay])\n"," new_states = np.array([a[3] for a in replay])\n"," init_values = np.array([a[-1] for a in replay])\n"," Q = self.sess.run(self.actor.logits, feed_dict={self.actor.X: states,\n"," self.actor.hidden_layer: init_values})\n"," Q_target = self.sess.run(self.actor_target.logits, feed_dict={self.actor_target.X: states,\n"," self.actor_target.hidden_layer: init_values})\n"," grads = self.sess.run(self.grad_critic, feed_dict={self.critic.X:states, self.critic.Y:Q,\n"," self.critic.hidden_layer: init_values})[0]\n"," self.sess.run(self.optimizer, feed_dict={self.actor.X:states, self.actor_critic_grad:grads,\n"," self.actor.hidden_layer: init_values})\n"," \n"," rewards = np.array([a[2] for a in replay]).reshape((-1, 1))\n"," rewards_target = self.sess.run(self.critic_target.logits, \n"," feed_dict={self.critic_target.X:new_states,self.critic_target.Y:Q_target,\n"," self.critic_target.hidden_layer: init_values})\n"," for i in range(len(replay)):\n"," if not replay[0][-2]:\n"," rewards[i] += self.GAMMA * rewards_target[i]\n"," cost, _ = self.sess.run([self.critic.cost, self.critic.optimizer], \n"," feed_dict={self.critic.X:states, self.critic.Y:Q, self.critic.REWARD:rewards,\n"," self.critic.hidden_layer: init_values})\n"," return cost\n"," \n"," def get_state(self, t):\n"," window_size = self.window_size + 1\n"," d = t - window_size + 1\n"," block = self.trend[d : t + 1] if d >= 0 else -d * [self.trend[0]] + self.trend[0 : t + 1]\n"," res = []\n"," for i in range(window_size - 1):\n"," res.append(block[i + 1] - block[i])\n"," return np.array(res)\n"," \n"," def buy(self, initial_money):\n"," starting_money = initial_money\n"," states_sell = []\n"," states_buy = []\n"," inventory = []\n"," state = self.get_state(0)\n"," init_value = np.zeros((1, 2 * self.LAYER_SIZE))\n"," for k in range(self.INITIAL_FEATURES.shape[0]):\n"," self.INITIAL_FEATURES[k,:] = state\n"," for t in range(0, len(self.trend) - 1, self.skip):\n"," \n"," if np.random.rand() < self.EPSILON:\n"," action = np.random.randint(self.OUTPUT_SIZE)\n"," else:\n"," action, last_state = self.sess.run([self.actor.logits,\n"," self.actor.last_state],\n"," feed_dict={self.actor.X:[self.INITIAL_FEATURES],\n"," self.actor.hidden_layer:init_value})\n"," action, init_value = np.argmax(action[0]), last_state\n"," \n"," next_state = self.get_state(t + 1)\n"," \n"," if action == 1 and initial_money >= self.trend[t]:\n"," inventory.append(self.trend[t])\n"," initial_money -= self.trend[t]\n"," states_buy.append(t)\n"," print('day %d: buy 1 unit at price %f, total balance %f'% (t, self.trend[t], initial_money))\n"," \n"," elif action == 2 and len(inventory):\n"," bought_price = inventory.pop(0)\n"," initial_money += self.trend[t]\n"," states_sell.append(t)\n"," try:\n"," invest = ((close[t] - bought_price) / bought_price) * 100\n"," except:\n"," invest = 0\n"," print(\n"," 'day %d, sell 1 unit at price %f, investment %f %%, total balance %f,'\n"," % (t, close[t], invest, initial_money)\n"," )\n"," \n"," new_state = np.append([self.get_state(t + 1)], self.INITIAL_FEATURES[:3, :], axis = 0)\n"," self.INITIAL_FEATURES = new_state\n"," invest = ((initial_money - starting_money) / starting_money) * 100\n"," total_gains = initial_money - starting_money\n"," return states_buy, states_sell, total_gains, invest\n"," \n"," def train(self, iterations, checkpoint, initial_money):\n"," for i in range(iterations):\n"," total_profit = 0\n"," inventory = []\n"," state = self.get_state(0)\n"," starting_money = initial_money\n"," init_value = np.zeros((1, 2 * self.LAYER_SIZE))\n"," for k in range(self.INITIAL_FEATURES.shape[0]):\n"," self.INITIAL_FEATURES[k,:] = state\n"," for t in range(0, len(self.trend) - 1, self.skip):\n"," if (self.T_COPY + 1) % self.COPY == 0:\n"," self._assign('actor-original', 'actor-target')\n"," self._assign('critic-original', 'critic-target')\n"," \n"," if np.random.rand() < self.EPSILON:\n"," action = np.random.randint(self.OUTPUT_SIZE)\n"," else:\n"," action, last_state = self.sess.run([self.actor.logits,\n"," self.actor.last_state],\n"," feed_dict={self.actor.X:[self.INITIAL_FEATURES],\n"," self.actor.hidden_layer:init_value})\n"," action, init_value = np.argmax(action[0]), last_state\n"," \n"," next_state = self.get_state(t + 1)\n"," \n"," if action == 1 and starting_money >= self.trend[t]:\n"," inventory.append(self.trend[t])\n"," starting_money -= self.trend[t]\n"," \n"," elif action == 2 and len(inventory) > 0:\n"," bought_price = inventory.pop(0)\n"," total_profit += self.trend[t] - bought_price\n"," starting_money += self.trend[t]\n"," \n"," invest = ((starting_money - initial_money) / initial_money)\n"," new_state = np.append([self.get_state(t + 1)], self.INITIAL_FEATURES[:3, :], axis = 0)\n"," self._memorize(self.INITIAL_FEATURES, action, invest, new_state, \n"," starting_money < initial_money, init_value[0])\n"," batch_size = min(len(self.MEMORIES), self.BATCH_SIZE)\n"," self.INITIAL_FEATURES = new_state\n"," replay = random.sample(self.MEMORIES, batch_size)\n"," cost = self._construct_memories_and_train(replay)\n"," self.T_COPY += 1\n"," self.EPSILON = self.MIN_EPSILON + (1.0 - self.MIN_EPSILON) * np.exp(-self.DECAY_RATE * i)\n"," if (i+1) % checkpoint == 0:\n"," print('epoch: %d, total rewards: %f.3, cost: %f, total money: %f'%(i + 1, total_profit, cost,\n"," starting_money))"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"mh-LtXHfY6KA","outputId":"617803d3-6246-4625-ceea-9a0c33bc1c3a"},"source":["close = df.Close.values.tolist()\n","initial_money = 10000\n","window_size = 30\n","skip = 1\n","batch_size = 32\n","agent = Agent(state_size = window_size, \n"," window_size = window_size, \n"," trend = close, \n"," skip = skip)\n","agent.train(iterations = 200, checkpoint = 10, initial_money = initial_money)"],"execution_count":null,"outputs":[{"output_type":"stream","text":["WARNING:tensorflow:: Using a concatenated state is slower and will soon be deprecated. Use state_is_tuple=True.\n","WARNING:tensorflow:: Using a concatenated state is slower and will soon be deprecated. Use state_is_tuple=True.\n","WARNING:tensorflow:: Using a concatenated state is slower and will soon be deprecated. Use state_is_tuple=True.\n","WARNING:tensorflow:: Using a concatenated state is slower and will soon be deprecated. Use state_is_tuple=True.\n","epoch: 10, total rewards: 1158.549991.3, cost: 0.046632, total money: 4247.099979\n","epoch: 20, total rewards: 466.185119.3, cost: 0.035100, total money: 5537.135131\n","epoch: 30, total rewards: 477.615173.3, cost: 0.330107, total money: 975.775206\n","epoch: 40, total rewards: 1200.205012.3, cost: 0.215860, total money: 10180.934992\n","epoch: 50, total rewards: 283.615237.3, cost: 0.116108, total money: 3314.845217\n","epoch: 60, total rewards: 324.265078.3, cost: 0.435482, total money: 9334.585085\n","epoch: 70, total rewards: 587.429873.3, cost: 0.749076, total money: 4785.129884\n","epoch: 80, total rewards: 1248.729918.3, cost: 0.167420, total money: 663.739866\n","epoch: 90, total rewards: 520.270204.3, cost: 0.006982, total money: 9503.630189\n","epoch: 100, total rewards: 195.270142.3, cost: 0.153058, total money: 10195.270142\n","epoch: 110, total rewards: 74.399840.3, cost: 0.350105, total money: 10074.399840\n","epoch: 120, total rewards: 2842.805359.3, cost: 0.074852, total money: 7832.085327\n","epoch: 130, total rewards: 509.049985.3, cost: 0.053447, total money: 8518.609983\n","epoch: 140, total rewards: -2.900205.3, cost: 0.015182, total money: 8979.989810\n","epoch: 150, total rewards: 93.080022.3, cost: 0.008775, total money: 10093.080022\n","epoch: 160, total rewards: 89.794983.3, cost: 0.107893, total money: 10089.794983\n","epoch: 170, total rewards: 222.045106.3, cost: 0.189179, total money: 10222.045106\n","epoch: 180, total rewards: -57.619995.3, cost: 0.002425, total money: 8925.739990\n","epoch: 190, total rewards: 21.009889.3, cost: 0.005919, total money: 10021.009889\n","epoch: 200, total rewards: 201.354980.3, cost: 0.002352, total money: 10201.354980\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"FGom_6RdY6KD","outputId":"6f6e776f-2dfe-40bf-fe9e-0ddc49a61a6f"},"source":["states_buy, states_sell, total_gains, invest = agent.buy(initial_money = initial_money)"],"execution_count":null,"outputs":[{"output_type":"stream","text":["day 0: buy 1 unit at price 768.700012, total balance 9231.299988\n","day 1, sell 1 unit at price 762.130005, investment -0.854691 %, total balance 9993.429993,\n","day 3: buy 1 unit at price 782.520020, total balance 9210.909973\n","day 4, sell 1 unit at price 790.510010, investment 1.021059 %, total balance 10001.419983,\n","day 22: buy 1 unit at price 762.520020, total balance 9238.899963\n","day 23: buy 1 unit at price 759.109985, total balance 8479.789978\n","day 24, sell 1 unit at price 771.190002, investment 1.137017 %, total balance 9250.979980,\n","day 26, sell 1 unit at price 789.289978, investment 3.975708 %, total balance 10040.269958,\n","day 31: buy 1 unit at price 790.799988, total balance 9249.469970\n","day 32, sell 1 unit at price 794.200012, investment 0.429947 %, total balance 10043.669982,\n","day 33: buy 1 unit at price 796.419983, total balance 9247.249999\n","day 34, sell 1 unit at price 794.559998, investment -0.233543 %, total balance 10041.809997,\n","day 39: buy 1 unit at price 782.789978, total balance 9259.020019\n","day 40: buy 1 unit at price 771.820007, total balance 8487.200012\n","day 42, sell 1 unit at price 786.900024, investment 0.525051 %, total balance 9274.100036,\n","day 45, sell 1 unit at price 806.650024, investment 4.512712 %, total balance 10080.750060,\n","day 64: buy 1 unit at price 801.340027, total balance 9279.410033\n","day 65, sell 1 unit at price 806.969971, investment 0.702566 %, total balance 10086.380004,\n","day 68: buy 1 unit at price 813.669983, total balance 9272.710021\n","day 70, sell 1 unit at price 820.450012, investment 0.833265 %, total balance 10093.160033,\n","day 103: buy 1 unit at price 838.549988, total balance 9254.610045\n","day 104, sell 1 unit at price 834.570007, investment -0.474627 %, total balance 10089.180052,\n","day 110: buy 1 unit at price 824.320007, total balance 9264.860045\n","day 111, sell 1 unit at price 823.559998, investment -0.092198 %, total balance 10088.420043,\n","day 114: buy 1 unit at price 838.210022, total balance 9250.210021\n","day 115, sell 1 unit at price 841.650024, investment 0.410399 %, total balance 10091.860045,\n","day 128: buy 1 unit at price 932.169983, total balance 9159.690062\n","day 129: buy 1 unit at price 928.780029, total balance 8230.910033\n","day 131, sell 1 unit at price 932.219971, investment 0.005363 %, total balance 9163.130004,\n","day 132, sell 1 unit at price 937.080017, investment 0.893644 %, total balance 10100.210021,\n","day 144: buy 1 unit at price 966.950012, total balance 9133.260009\n","day 145, sell 1 unit at price 975.599976, investment 0.894562 %, total balance 10108.859985,\n","day 148: buy 1 unit at price 980.940002, total balance 9127.919983\n","day 149, sell 1 unit at price 983.409973, investment 0.251796 %, total balance 10111.329956,\n","day 151: buy 1 unit at price 942.900024, total balance 9168.429932\n","day 153, sell 1 unit at price 950.760010, investment 0.833597 %, total balance 10119.189942,\n","day 168: buy 1 unit at price 906.690002, total balance 9212.499940\n","day 169, sell 1 unit at price 918.590027, investment 1.312469 %, total balance 10131.089967,\n","day 171: buy 1 unit at price 930.090027, total balance 9200.999940\n","day 172, sell 1 unit at price 943.830017, investment 1.477275 %, total balance 10144.829957,\n","day 175: buy 1 unit at price 953.419983, total balance 9191.409974\n","day 176, sell 1 unit at price 965.400024, investment 1.256533 %, total balance 10156.809998,\n","day 178: buy 1 unit at price 968.150024, total balance 9188.659974\n","day 179, sell 1 unit at price 972.919983, investment 0.492688 %, total balance 10161.579957,\n","day 192: buy 1 unit at price 922.900024, total balance 9238.679933\n","day 193, sell 1 unit at price 907.239990, investment -1.696829 %, total balance 10145.919923,\n","day 194: buy 1 unit at price 914.390015, total balance 9231.529908\n","day 196: buy 1 unit at price 922.219971, total balance 8309.309937\n","day 197, sell 1 unit at price 926.960022, investment 1.374688 %, total balance 9236.269959,\n","day 198, sell 1 unit at price 910.979980, investment -1.218797 %, total balance 10147.249939,\n","day 207: buy 1 unit at price 929.570007, total balance 9217.679932\n","day 208: buy 1 unit at price 939.330017, total balance 8278.349915\n","day 209, sell 1 unit at price 937.340027, investment 0.835872 %, total balance 9215.689942,\n","day 210, sell 1 unit at price 928.450012, investment -1.158273 %, total balance 10144.139954,\n","day 211: buy 1 unit at price 927.809998, total balance 9216.329956\n","day 212, sell 1 unit at price 935.950012, investment 0.877336 %, total balance 10152.279968,\n","day 214: buy 1 unit at price 929.080017, total balance 9223.199951\n","day 215, sell 1 unit at price 932.070007, investment 0.321823 %, total balance 10155.269958,\n","day 226: buy 1 unit at price 944.489990, total balance 9210.779968\n","day 227, sell 1 unit at price 949.500000, investment 0.530446 %, total balance 10160.279968,\n","day 233: buy 1 unit at price 978.890015, total balance 9181.389953\n","day 234, sell 1 unit at price 977.000000, investment -0.193077 %, total balance 10158.389953,\n","day 243: buy 1 unit at price 988.200012, total balance 9170.189941\n","day 244, sell 1 unit at price 968.450012, investment -1.998583 %, total balance 10138.639953,\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"JMjGsoOgY6KM","outputId":"7420f22f-47ad-4b93-a022-fd7e715a5a3b"},"source":["fig = plt.figure(figsize = (15,5))\n","plt.plot(close, color='r', lw=2.)\n","plt.plot(close, '^', markersize=10, color='m', label = 'buying signal', markevery = states_buy)\n","plt.plot(close, 'v', markersize=10, color='k', label = 'selling signal', markevery = states_sell)\n","plt.title('total gains %f, total investment %f%%'%(total_gains, invest))\n","plt.legend()\n","plt.savefig('output/'+name+'.png')\n","plt.show()"],"execution_count":null,"outputs":[{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["
"]},"metadata":{"tags":[],"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"JZ1MRol_lwFJ"},"source":["## Actor-critic Duel Recurrent agent"]},{"cell_type":"code","metadata":{"id":"s_P3A6sAY6KW"},"source":["from collections import deque\n","import random\n","\n","df= df_full.copy()\n","name = 'Actor-critic Duel Recurrent agent'\n","\n","class Actor:\n"," def __init__(self, name, input_size, output_size, size_layer):\n"," with tf.variable_scope(name):\n"," self.X = tf.placeholder(tf.float32, (None, None, input_size))\n"," self.hidden_layer = tf.placeholder(tf.float32, (None, 2 * size_layer))\n"," cell = tf.nn.rnn_cell.LSTMCell(size_layer, state_is_tuple = False)\n"," self.rnn,self.last_state = tf.nn.dynamic_rnn(inputs=self.X, cell=cell,\n"," dtype=tf.float32,\n"," initial_state=self.hidden_layer)\n"," tensor_action, tensor_validation = tf.split(self.rnn[:,-1],2,1)\n"," feed_action = tf.layers.dense(tensor_action, output_size)\n"," feed_validation = tf.layers.dense(tensor_validation, 1)\n"," self.logits = feed_validation + tf.subtract(feed_action,\n"," tf.reduce_mean(feed_action,axis=1,keep_dims=True))\n","\n","class Critic:\n"," def __init__(self, name, input_size, output_size, size_layer, learning_rate):\n"," with tf.variable_scope(name):\n"," self.X = tf.placeholder(tf.float32, (None, None, input_size))\n"," self.Y = tf.placeholder(tf.float32, (None, output_size))\n"," self.hidden_layer = tf.placeholder(tf.float32, (None, 2 * size_layer))\n"," self.REWARD = tf.placeholder(tf.float32, (None, 1))\n"," feed_critic = tf.layers.dense(self.X, size_layer, activation = tf.nn.relu)\n"," cell = tf.nn.rnn_cell.LSTMCell(size_layer, state_is_tuple = False)\n"," self.rnn,self.last_state = tf.nn.dynamic_rnn(inputs=self.X, cell=cell,\n"," dtype=tf.float32,\n"," initial_state=self.hidden_layer)\n"," tensor_action, tensor_validation = tf.split(self.rnn[:,-1],2,1)\n"," feed_action = tf.layers.dense(tensor_action, output_size)\n"," feed_validation = tf.layers.dense(tensor_validation, 1)\n"," feed_critic = feed_validation + tf.subtract(feed_action,tf.reduce_mean(feed_action,axis=1,keep_dims=True))\n"," feed_critic = tf.nn.relu(feed_critic) + self.Y\n"," feed_critic = tf.layers.dense(feed_critic, size_layer//2, activation = tf.nn.relu)\n"," self.logits = tf.layers.dense(feed_critic, 1)\n"," self.cost = tf.reduce_mean(tf.square(self.REWARD - self.logits))\n"," self.optimizer = tf.train.AdamOptimizer(learning_rate).minimize(self.cost)\n"," \n","class Agent:\n","\n"," LEARNING_RATE = 0.001\n"," BATCH_SIZE = 32\n"," LAYER_SIZE = 256\n"," OUTPUT_SIZE = 3\n"," EPSILON = 0.5\n"," DECAY_RATE = 0.005\n"," MIN_EPSILON = 0.1\n"," GAMMA = 0.99\n"," MEMORIES = deque()\n"," MEMORY_SIZE = 300\n"," COPY = 1000\n"," T_COPY = 0\n","\n"," def __init__(self, state_size, window_size, trend, skip):\n"," self.state_size = state_size\n"," self.window_size = window_size\n"," self.half_window = window_size // 2\n"," self.trend = trend\n"," self.INITIAL_FEATURES = np.zeros((4, self.state_size))\n"," self.skip = skip\n"," tf.reset_default_graph()\n"," self.actor = Actor('actor-original', self.state_size, self.OUTPUT_SIZE, self.LAYER_SIZE)\n"," self.actor_target = Actor('actor-target', self.state_size, self.OUTPUT_SIZE, self.LAYER_SIZE)\n"," self.critic = Critic('critic-original', self.state_size, self.OUTPUT_SIZE, self.LAYER_SIZE, self.LEARNING_RATE)\n"," self.critic_target = Critic('critic-target', self.state_size, self.OUTPUT_SIZE, \n"," self.LAYER_SIZE, self.LEARNING_RATE)\n"," self.grad_critic = tf.gradients(self.critic.logits, self.critic.Y)\n"," self.actor_critic_grad = tf.placeholder(tf.float32, [None, self.OUTPUT_SIZE])\n"," weights_actor = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES, scope='actor')\n"," self.grad_actor = tf.gradients(self.actor.logits, weights_actor, -self.actor_critic_grad)\n"," grads = zip(self.grad_actor, weights_actor)\n"," self.optimizer = tf.train.AdamOptimizer(self.LEARNING_RATE).apply_gradients(grads)\n"," self.sess = tf.InteractiveSession()\n"," self.sess.run(tf.global_variables_initializer())\n"," \n"," def _assign(self, from_name, to_name):\n"," from_w = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES, scope=from_name)\n"," to_w = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES, scope=to_name)\n"," for i in range(len(from_w)):\n"," assign_op = to_w[i].assign(from_w[i])\n"," self.sess.run(assign_op)\n"," \n"," def _memorize(self, state, action, reward, new_state, dead, rnn_state):\n"," self.MEMORIES.append((state, action, reward, new_state, dead, rnn_state))\n"," if len(self.MEMORIES) > self.MEMORY_SIZE:\n"," self.MEMORIES.popleft()\n"," \n"," def _select_action(self, state):\n"," if np.random.rand() < self.EPSILON:\n"," action = np.random.randint(self.OUTPUT_SIZE)\n"," else:\n"," prediction = self.sess.run(self.actor.logits, feed_dict={self.actor.X:[state]})[0]\n"," action = np.argmax(prediction)\n"," return action\n"," \n"," def _construct_memories_and_train(self, replay):\n"," states = np.array([a[0] for a in replay])\n"," new_states = np.array([a[3] for a in replay])\n"," init_values = np.array([a[-1] for a in replay])\n"," Q = self.sess.run(self.actor.logits, feed_dict={self.actor.X: states,\n"," self.actor.hidden_layer: init_values})\n"," Q_target = self.sess.run(self.actor_target.logits, feed_dict={self.actor_target.X: states,\n"," self.actor_target.hidden_layer: init_values})\n"," grads = self.sess.run(self.grad_critic, feed_dict={self.critic.X:states, self.critic.Y:Q,\n"," self.critic.hidden_layer: init_values})[0]\n"," self.sess.run(self.optimizer, feed_dict={self.actor.X:states, self.actor_critic_grad:grads,\n"," self.actor.hidden_layer: init_values})\n"," \n"," rewards = np.array([a[2] for a in replay]).reshape((-1, 1))\n"," rewards_target = self.sess.run(self.critic_target.logits, \n"," feed_dict={self.critic_target.X:new_states,self.critic_target.Y:Q_target,\n"," self.critic_target.hidden_layer: init_values})\n"," for i in range(len(replay)):\n"," if not replay[0][-2]:\n"," rewards[i] += self.GAMMA * rewards_target[i]\n"," cost, _ = self.sess.run([self.critic.cost, self.critic.optimizer], \n"," feed_dict={self.critic.X:states, self.critic.Y:Q, self.critic.REWARD:rewards,\n"," self.critic.hidden_layer: init_values})\n"," return cost\n"," \n"," def get_state(self, t):\n"," window_size = self.window_size + 1\n"," d = t - window_size + 1\n"," block = self.trend[d : t + 1] if d >= 0 else -d * [self.trend[0]] + self.trend[0 : t + 1]\n"," res = []\n"," for i in range(window_size - 1):\n"," res.append(block[i + 1] - block[i])\n"," return np.array(res)\n"," \n"," def buy(self, initial_money):\n"," starting_money = initial_money\n"," states_sell = []\n"," states_buy = []\n"," inventory = []\n"," state = self.get_state(0)\n"," init_value = np.zeros((1, 2 * self.LAYER_SIZE))\n"," for k in range(self.INITIAL_FEATURES.shape[0]):\n"," self.INITIAL_FEATURES[k,:] = state\n"," for t in range(0, len(self.trend) - 1, self.skip):\n"," \n"," if np.random.rand() < self.EPSILON:\n"," action = np.random.randint(self.OUTPUT_SIZE)\n"," else:\n"," action, last_state = self.sess.run([self.actor.logits,\n"," self.actor.last_state],\n"," feed_dict={self.actor.X:[self.INITIAL_FEATURES],\n"," self.actor.hidden_layer:init_value})\n"," action, init_value = np.argmax(action[0]), last_state\n"," \n"," next_state = self.get_state(t + 1)\n"," \n"," if action == 1 and initial_money >= self.trend[t]:\n"," inventory.append(self.trend[t])\n"," initial_money -= self.trend[t]\n"," states_buy.append(t)\n"," print('day %d: buy 1 unit at price %f, total balance %f'% (t, self.trend[t], initial_money))\n"," \n"," elif action == 2 and len(inventory):\n"," bought_price = inventory.pop(0)\n"," initial_money += self.trend[t]\n"," states_sell.append(t)\n"," try:\n"," invest = ((close[t] - bought_price) / bought_price) * 100\n"," except:\n"," invest = 0\n"," print(\n"," 'day %d, sell 1 unit at price %f, investment %f %%, total balance %f,'\n"," % (t, close[t], invest, initial_money)\n"," )\n"," \n"," new_state = np.append([self.get_state(t + 1)], self.INITIAL_FEATURES[:3, :], axis = 0)\n"," self.INITIAL_FEATURES = new_state\n"," invest = ((initial_money - starting_money) / starting_money) * 100\n"," total_gains = initial_money - starting_money\n"," return states_buy, states_sell, total_gains, invest\n"," \n"," def train(self, iterations, checkpoint, initial_money):\n"," for i in range(iterations):\n"," total_profit = 0\n"," inventory = []\n"," state = self.get_state(0)\n"," starting_money = initial_money\n"," init_value = np.zeros((1, 2 * self.LAYER_SIZE))\n"," for k in range(self.INITIAL_FEATURES.shape[0]):\n"," self.INITIAL_FEATURES[k,:] = state\n"," for t in range(0, len(self.trend) - 1, self.skip):\n"," if (self.T_COPY + 1) % self.COPY == 0:\n"," self._assign('actor-original', 'actor-target')\n"," self._assign('critic-original', 'critic-target')\n"," \n"," if np.random.rand() < self.EPSILON:\n"," action = np.random.randint(self.OUTPUT_SIZE)\n"," else:\n"," action, last_state = self.sess.run([self.actor.logits,\n"," self.actor.last_state],\n"," feed_dict={self.actor.X:[self.INITIAL_FEATURES],\n"," self.actor.hidden_layer:init_value})\n"," action, init_value = np.argmax(action[0]), last_state\n"," \n"," next_state = self.get_state(t + 1)\n"," \n"," if action == 1 and starting_money >= self.trend[t]:\n"," inventory.append(self.trend[t])\n"," starting_money -= self.trend[t]\n"," \n"," elif action == 2 and len(inventory) > 0:\n"," bought_price = inventory.pop(0)\n"," total_profit += self.trend[t] - bought_price\n"," starting_money += self.trend[t]\n"," \n"," invest = ((starting_money - initial_money) / initial_money)\n"," new_state = np.append([self.get_state(t + 1)], self.INITIAL_FEATURES[:3, :], axis = 0)\n"," self._memorize(self.INITIAL_FEATURES, action, invest, new_state, \n"," starting_money < initial_money, init_value[0])\n"," batch_size = min(len(self.MEMORIES), self.BATCH_SIZE)\n"," self.INITIAL_FEATURES = new_state\n"," replay = random.sample(self.MEMORIES, batch_size)\n"," cost = self._construct_memories_and_train(replay)\n"," self.T_COPY += 1\n"," self.EPSILON = self.MIN_EPSILON + (1.0 - self.MIN_EPSILON) * np.exp(-self.DECAY_RATE * i)\n"," if (i+1) % checkpoint == 0:\n"," print('epoch: %d, total rewards: %f.3, cost: %f, total money: %f'%(i + 1, total_profit, cost,\n"," starting_money))"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"i7wk6NuQY6Ka","outputId":"c44fb19a-9f2a-45cd-be1e-6cc9c196e717"},"source":["close = df.Close.values.tolist()\n","initial_money = 10000\n","window_size = 30\n","skip = 1\n","batch_size = 32\n","agent = Agent(state_size = window_size, \n"," window_size = window_size, \n"," trend = close, \n"," skip = skip)\n","agent.train(iterations = 200, checkpoint = 10, initial_money = initial_money)"],"execution_count":null,"outputs":[{"output_type":"stream","text":["WARNING:tensorflow:: Using a concatenated state is slower and will soon be deprecated. Use state_is_tuple=True.\n","WARNING:tensorflow:From :17: calling reduce_mean (from tensorflow.python.ops.math_ops) with keep_dims is deprecated and will be removed in a future version.\n","Instructions for updating:\n","keep_dims is deprecated, use keepdims instead\n","WARNING:tensorflow:: Using a concatenated state is slower and will soon be deprecated. Use state_is_tuple=True.\n","WARNING:tensorflow:: Using a concatenated state is slower and will soon be deprecated. Use state_is_tuple=True.\n","WARNING:tensorflow:: Using a concatenated state is slower and will soon be deprecated. Use state_is_tuple=True.\n","epoch: 10, total rewards: 1217.199710.3, cost: 0.428947, total money: 9258.459720\n","epoch: 20, total rewards: 154.669988.3, cost: 0.205311, total money: 8167.020025\n","epoch: 30, total rewards: 225.259892.3, cost: 0.080974, total money: 10225.259892\n","epoch: 40, total rewards: 1857.994754.3, cost: 0.147440, total money: 7906.464724\n","epoch: 50, total rewards: 864.365355.3, cost: 0.133079, total money: 3145.525327\n","epoch: 60, total rewards: 252.179754.3, cost: 0.349886, total money: 10252.179754\n","epoch: 70, total rewards: 2285.265256.3, cost: 0.122869, total money: 841.845272\n","epoch: 80, total rewards: 2273.160095.3, cost: 0.042144, total money: 1779.580078\n","epoch: 90, total rewards: 695.794921.3, cost: 0.652829, total money: 10695.794921\n","epoch: 100, total rewards: -63.870359.3, cost: 0.026901, total money: 9936.129641\n","epoch: 110, total rewards: 1660.049986.3, cost: 0.050525, total money: 236.529905\n","epoch: 120, total rewards: 2137.930355.3, cost: 0.019048, total money: 635.270319\n","epoch: 130, total rewards: 1263.700071.3, cost: 0.105621, total money: 836.610044\n","epoch: 140, total rewards: 2582.234985.3, cost: 0.026973, total money: 1985.844970\n","epoch: 150, total rewards: 1342.129822.3, cost: 0.045669, total money: 1933.479859\n","epoch: 160, total rewards: 171.394838.3, cost: 0.186082, total money: 9198.064821\n","epoch: 170, total rewards: 581.185307.3, cost: 0.243257, total money: 26.655338\n","epoch: 180, total rewards: 109.954956.3, cost: 0.001933, total money: 9092.844971\n","epoch: 190, total rewards: -85.549868.3, cost: 0.004746, total money: 9914.450132\n","epoch: 200, total rewards: 94.994872.3, cost: 0.006849, total money: 10094.994872\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"FqxgWjdCY6Kf","outputId":"05d05ed9-f85d-436c-d73c-03700e235f1f"},"source":["states_buy, states_sell, total_gains, invest = agent.buy(initial_money = initial_money)"],"execution_count":null,"outputs":[{"output_type":"stream","text":["day 0: buy 1 unit at price 768.700012, total balance 9231.299988\n","day 1, sell 1 unit at price 762.130005, investment -0.854691 %, total balance 9993.429993,\n","day 3: buy 1 unit at price 782.520020, total balance 9210.909973\n","day 4, sell 1 unit at price 790.510010, investment 1.021059 %, total balance 10001.419983,\n","day 22: buy 1 unit at price 762.520020, total balance 9238.899963\n","day 23: buy 1 unit at price 759.109985, total balance 8479.789978\n","day 24, sell 1 unit at price 771.190002, investment 1.137017 %, total balance 9250.979980,\n","day 26, sell 1 unit at price 789.289978, investment 3.975708 %, total balance 10040.269958,\n","day 31: buy 1 unit at price 790.799988, total balance 9249.469970\n","day 32, sell 1 unit at price 794.200012, investment 0.429947 %, total balance 10043.669982,\n","day 33: buy 1 unit at price 796.419983, total balance 9247.249999\n","day 34, sell 1 unit at price 794.559998, investment -0.233543 %, total balance 10041.809997,\n","day 39: buy 1 unit at price 782.789978, total balance 9259.020019\n","day 40: buy 1 unit at price 771.820007, total balance 8487.200012\n","day 42, sell 1 unit at price 786.900024, investment 0.525051 %, total balance 9274.100036,\n","day 45, sell 1 unit at price 806.650024, investment 4.512712 %, total balance 10080.750060,\n","day 64: buy 1 unit at price 801.340027, total balance 9279.410033\n","day 65, sell 1 unit at price 806.969971, investment 0.702566 %, total balance 10086.380004,\n","day 68: buy 1 unit at price 813.669983, total balance 9272.710021\n","day 70, sell 1 unit at price 820.450012, investment 0.833265 %, total balance 10093.160033,\n","day 103: buy 1 unit at price 838.549988, total balance 9254.610045\n","day 104, sell 1 unit at price 834.570007, investment -0.474627 %, total balance 10089.180052,\n","day 110: buy 1 unit at price 824.320007, total balance 9264.860045\n","day 111, sell 1 unit at price 823.559998, investment -0.092198 %, total balance 10088.420043,\n","day 114: buy 1 unit at price 838.210022, total balance 9250.210021\n","day 115, sell 1 unit at price 841.650024, investment 0.410399 %, total balance 10091.860045,\n","day 128: buy 1 unit at price 932.169983, total balance 9159.690062\n","day 129: buy 1 unit at price 928.780029, total balance 8230.910033\n","day 131, sell 1 unit at price 932.219971, investment 0.005363 %, total balance 9163.130004,\n","day 132, sell 1 unit at price 937.080017, investment 0.893644 %, total balance 10100.210021,\n","day 144: buy 1 unit at price 966.950012, total balance 9133.260009\n","day 145, sell 1 unit at price 975.599976, investment 0.894562 %, total balance 10108.859985,\n","day 148: buy 1 unit at price 980.940002, total balance 9127.919983\n","day 149, sell 1 unit at price 983.409973, investment 0.251796 %, total balance 10111.329956,\n","day 151: buy 1 unit at price 942.900024, total balance 9168.429932\n","day 153, sell 1 unit at price 950.760010, investment 0.833597 %, total balance 10119.189942,\n","day 168: buy 1 unit at price 906.690002, total balance 9212.499940\n","day 169, sell 1 unit at price 918.590027, investment 1.312469 %, total balance 10131.089967,\n","day 171: buy 1 unit at price 930.090027, total balance 9200.999940\n","day 172, sell 1 unit at price 943.830017, investment 1.477275 %, total balance 10144.829957,\n","day 175: buy 1 unit at price 953.419983, total balance 9191.409974\n","day 176, sell 1 unit at price 965.400024, investment 1.256533 %, total balance 10156.809998,\n","day 178: buy 1 unit at price 968.150024, total balance 9188.659974\n","day 179, sell 1 unit at price 972.919983, investment 0.492688 %, total balance 10161.579957,\n","day 192: buy 1 unit at price 922.900024, total balance 9238.679933\n","day 193, sell 1 unit at price 907.239990, investment -1.696829 %, total balance 10145.919923,\n","day 194: buy 1 unit at price 914.390015, total balance 9231.529908\n","day 196: buy 1 unit at price 922.219971, total balance 8309.309937\n","day 197, sell 1 unit at price 926.960022, investment 1.374688 %, total balance 9236.269959,\n","day 198, sell 1 unit at price 910.979980, investment -1.218797 %, total balance 10147.249939,\n","day 207: buy 1 unit at price 929.570007, total balance 9217.679932\n","day 208: buy 1 unit at price 939.330017, total balance 8278.349915\n","day 209, sell 1 unit at price 937.340027, investment 0.835872 %, total balance 9215.689942,\n","day 210, sell 1 unit at price 928.450012, investment -1.158273 %, total balance 10144.139954,\n","day 211: buy 1 unit at price 927.809998, total balance 9216.329956\n","day 212, sell 1 unit at price 935.950012, investment 0.877336 %, total balance 10152.279968,\n","day 214: buy 1 unit at price 929.080017, total balance 9223.199951\n","day 215, sell 1 unit at price 932.070007, investment 0.321823 %, total balance 10155.269958,\n","day 226: buy 1 unit at price 944.489990, total balance 9210.779968\n","day 227, sell 1 unit at price 949.500000, investment 0.530446 %, total balance 10160.279968,\n","day 233: buy 1 unit at price 978.890015, total balance 9181.389953\n","day 234, sell 1 unit at price 977.000000, investment -0.193077 %, total balance 10158.389953,\n","day 243: buy 1 unit at price 988.200012, total balance 9170.189941\n","day 244, sell 1 unit at price 968.450012, investment -1.998583 %, total balance 10138.639953,\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"WE5_hlSQY6Kj","outputId":"7fb315cc-d25f-4326-da71-f6bf72e19731"},"source":["fig = plt.figure(figsize = (15,5))\n","plt.plot(close, color='r', lw=2.)\n","plt.plot(close, '^', markersize=10, color='m', label = 'buying signal', markevery = states_buy)\n","plt.plot(close, 'v', markersize=10, color='k', label = 'selling signal', markevery = states_sell)\n","plt.title('total gains %f, total investment %f%%'%(total_gains, invest))\n","plt.legend()\n","plt.savefig('output/'+name+'.png')\n","plt.show()"],"execution_count":null,"outputs":[{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["
"]},"metadata":{"tags":[],"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"7bEvRLGpl-gr"},"source":["## Curiosity Q-learning agent"]},{"cell_type":"code","metadata":{"id":"cRhSCa_6Y6K4"},"source":["from collections import deque\n","import random\n","\n","\n","df= df_full.copy()\n","name = 'Curiosity Q-learning agent'\n","\n","class Agent:\n","\n"," LEARNING_RATE = 0.003\n"," BATCH_SIZE = 32\n"," LAYER_SIZE = 500\n"," OUTPUT_SIZE = 3\n"," EPSILON = 0.5\n"," DECAY_RATE = 0.005\n"," MIN_EPSILON = 0.1\n"," GAMMA = 0.99\n"," MEMORIES = deque()\n"," COPY = 1000\n"," T_COPY = 0\n"," MEMORY_SIZE = 300\n"," \n"," def __init__(self, state_size, window_size, trend, skip):\n"," self.state_size = state_size\n"," self.window_size = window_size\n"," self.half_window = window_size // 2\n"," self.trend = trend\n"," self.skip = skip\n"," tf.reset_default_graph()\n"," self.X = tf.placeholder(tf.float32, (None, self.state_size))\n"," self.Y = tf.placeholder(tf.float32, (None, self.state_size))\n"," self.ACTION = tf.placeholder(tf.float32, (None))\n"," self.REWARD = tf.placeholder(tf.float32, (None))\n"," self.batch_size = tf.shape(self.ACTION)[0]\n"," \n"," with tf.variable_scope('curiosity_model'):\n"," action = tf.reshape(self.ACTION, (-1,1))\n"," state_action = tf.concat([self.X, action], axis=1)\n"," save_state = tf.identity(self.Y)\n"," \n"," feed = tf.layers.dense(state_action, 32, activation=tf.nn.relu)\n"," self.curiosity_logits = tf.layers.dense(feed, self.state_size)\n"," self.curiosity_cost = tf.reduce_sum(tf.square(save_state - self.curiosity_logits), axis=1)\n"," \n"," self.curiosity_optimizer = tf.train.RMSPropOptimizer(self.LEARNING_RATE)\\\n"," .minimize(tf.reduce_mean(self.curiosity_cost))\n"," \n"," total_reward = tf.add(self.curiosity_cost, self.REWARD)\n"," \n"," with tf.variable_scope(\"q_model\"):\n"," with tf.variable_scope(\"eval_net\"):\n"," x_action = tf.layers.dense(self.X, 128, tf.nn.relu)\n"," self.logits = tf.layers.dense(x_action, self.OUTPUT_SIZE)\n"," \n"," with tf.variable_scope(\"target_net\"):\n"," y_action = tf.layers.dense(self.Y, 128, tf.nn.relu)\n"," y_q = tf.layers.dense(y_action, self.OUTPUT_SIZE)\n"," \n"," q_target = total_reward + self.GAMMA * tf.reduce_max(y_q, axis=1)\n"," action = tf.cast(self.ACTION, tf.int32)\n"," action_indices = tf.stack([tf.range(self.batch_size, dtype=tf.int32), action], axis=1)\n"," q = tf.gather_nd(params=self.logits, indices=action_indices)\n"," self.cost = tf.losses.mean_squared_error(labels=q_target, predictions=q)\n"," self.optimizer = tf.train.RMSPropOptimizer(self.LEARNING_RATE).minimize(\n"," self.cost, var_list=tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES, \"q_model/eval_net\"))\n"," \n"," t_params = tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES, scope='q_model/target_net')\n"," e_params = tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES, scope='q_model/eval_net')\n"," self.target_replace_op = [tf.assign(t, e) for t, e in zip(t_params, e_params)]\n"," \n"," self.sess = tf.InteractiveSession()\n"," self.sess.run(tf.global_variables_initializer())\n"," \n"," def _memorize(self, state, action, reward, new_state, done):\n"," self.MEMORIES.append((state, action, reward, new_state, done))\n"," if len(self.MEMORIES) > self.MEMORY_SIZE:\n"," self.MEMORIES.popleft()\n"," \n"," def get_state(self, t):\n"," window_size = self.window_size + 1\n"," d = t - window_size + 1\n"," block = self.trend[d : t + 1] if d >= 0 else -d * [self.trend[0]] + self.trend[0 : t + 1]\n"," res = []\n"," for i in range(window_size - 1):\n"," res.append(block[i + 1] - block[i])\n"," return np.array(res)\n"," \n"," def predict(self, inputs):\n"," return self.sess.run(self.logits, feed_dict={self.X:inputs})\n"," \n"," def get_predicted_action(self, sequence):\n"," prediction = self.predict(np.array(sequence))[0]\n"," return np.argmax(prediction)\n"," \n"," def _select_action(self, state):\n"," if np.random.rand() < self.EPSILON:\n"," action = np.random.randint(self.OUTPUT_SIZE)\n"," else:\n"," action = self.get_predicted_action([state])\n"," return action\n"," \n"," def _construct_memories(self, replay):\n"," states = np.array([a[0] for a in replay])\n"," actions = np.array([a[1] for a in replay])\n"," rewards = np.array([a[2] for a in replay])\n"," new_states = np.array([a[3] for a in replay])\n"," if (self.T_COPY + 1) % self.COPY == 0:\n"," self.sess.run(self.target_replace_op)\n"," \n"," cost, _ = self.sess.run([self.cost, self.optimizer], feed_dict = {\n"," self.X: states, self.Y: new_states, self.ACTION: actions, self.REWARD: rewards\n"," })\n"," \n"," if (self.T_COPY + 1) % self.COPY == 0:\n"," self.sess.run(self.curiosity_optimizer, feed_dict = {\n"," self.X: states, self.Y: new_states, self.ACTION: actions, self.REWARD: rewards\n"," })\n"," return cost\n"," \n"," def buy(self, initial_money):\n"," starting_money = initial_money\n"," states_sell = []\n"," states_buy = []\n"," inventory = []\n"," state = self.get_state(0)\n"," for t in range(0, len(self.trend) - 1, self.skip):\n"," action = self._select_action(state)\n"," next_state = self.get_state(t + 1)\n"," \n"," if action == 1 and initial_money >= self.trend[t]:\n"," inventory.append(self.trend[t])\n"," initial_money -= self.trend[t]\n"," states_buy.append(t)\n"," print('day %d: buy 1 unit at price %f, total balance %f'% (t, self.trend[t], initial_money))\n"," \n"," elif action == 2 and len(inventory):\n"," bought_price = inventory.pop(0)\n"," initial_money += self.trend[t]\n"," states_sell.append(t)\n"," try:\n"," invest = ((close[t] - bought_price) / bought_price) * 100\n"," except:\n"," invest = 0\n"," print(\n"," 'day %d, sell 1 unit at price %f, investment %f %%, total balance %f,'\n"," % (t, close[t], invest, initial_money)\n"," )\n"," \n"," state = next_state\n"," invest = ((initial_money - starting_money) / starting_money) * 100\n"," total_gains = initial_money - starting_money\n"," return states_buy, states_sell, total_gains, invest\n"," \n"," def train(self, iterations, checkpoint, initial_money):\n"," for i in range(iterations):\n"," total_profit = 0\n"," inventory = []\n"," state = self.get_state(0)\n"," starting_money = initial_money\n"," for t in range(0, len(self.trend) - 1, self.skip):\n"," \n"," action = self._select_action(state)\n"," next_state = self.get_state(t + 1)\n"," \n"," if action == 1 and starting_money >= self.trend[t]:\n"," inventory.append(self.trend[t])\n"," starting_money -= self.trend[t]\n"," \n"," elif action == 2 and len(inventory) > 0:\n"," bought_price = inventory.pop(0)\n"," total_profit += self.trend[t] - bought_price\n"," starting_money += self.trend[t]\n"," \n"," invest = ((starting_money - initial_money) / initial_money)\n"," \n"," self._memorize(state, action, invest, next_state, starting_money < initial_money)\n"," batch_size = min(len(self.MEMORIES), self.BATCH_SIZE)\n"," state = next_state\n"," replay = random.sample(self.MEMORIES, batch_size)\n"," cost = self._construct_memories(replay)\n"," self.T_COPY += 1\n"," self.EPSILON = self.MIN_EPSILON + (1.0 - self.MIN_EPSILON) * np.exp(-self.DECAY_RATE * i)\n"," if (i+1) % checkpoint == 0:\n"," print('epoch: %d, total rewards: %f.3, cost: %f, total money: %f'%(i + 1, total_profit, cost,\n"," starting_money))"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"9PRT-_YZY6K-","outputId":"163dd14f-fb9a-4f90-dd5f-5d04b9973c7c"},"source":["close = df.Close.values.tolist()\n","initial_money = 10000\n","window_size = 30\n","skip = 1\n","batch_size = 32\n","agent = Agent(state_size = window_size, \n"," window_size = window_size, \n"," trend = close, \n"," skip = skip)\n","agent.train(iterations = 200, checkpoint = 10, initial_money = initial_money)"],"execution_count":null,"outputs":[{"output_type":"stream","text":["epoch: 10, total rewards: 2349.819823.3, cost: 69092.625000, total money: 12349.819823\n","epoch: 20, total rewards: 648.444882.3, cost: 4775652.000000, total money: 6742.654903\n","epoch: 30, total rewards: 1543.784977.3, cost: 26533.583984, total money: 7642.034916\n","epoch: 40, total rewards: 1360.930418.3, cost: 871420.750000, total money: 695.580380\n","epoch: 50, total rewards: 2233.069826.3, cost: 228718.296875, total money: 6354.209779\n","epoch: 60, total rewards: 1573.414983.3, cost: 407432.843750, total money: 8625.614995\n","epoch: 70, total rewards: -7.114931.3, cost: 32132.660156, total money: 5021.405088\n","epoch: 80, total rewards: 798.045042.3, cost: 435778.562500, total money: 9780.935057\n","epoch: 90, total rewards: 575.719967.3, cost: 72847.468750, total money: 9559.079952\n","epoch: 100, total rewards: 338.655157.3, cost: 379671.968750, total money: 820.245184\n","epoch: 110, total rewards: 277.220155.3, cost: 391019.375000, total money: 3452.330140\n","epoch: 120, total rewards: 370.379826.3, cost: 429969.843750, total money: 7361.909793\n","epoch: 130, total rewards: 441.860107.3, cost: 2082513.625000, total money: 2538.970093\n","epoch: 140, total rewards: 709.099850.3, cost: 558315.562500, total money: 130.919796\n","epoch: 150, total rewards: 159.675106.3, cost: 2904243.000000, total money: 481.725093\n","epoch: 160, total rewards: 581.489981.3, cost: 1408646.250000, total money: 5631.309988\n","epoch: 170, total rewards: 1768.579776.3, cost: 1693698.250000, total money: 15.189760\n","epoch: 180, total rewards: 952.280210.3, cost: 1472623.250000, total money: 8990.750181\n","epoch: 190, total rewards: 1418.655145.3, cost: 25627934.000000, total money: 3706.275139\n","epoch: 200, total rewards: 272.595214.3, cost: 922414.500000, total money: 9255.485229\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"b2V7eseGY6LB","outputId":"32af769c-cf7e-40b4-aa2c-573f5ba3a4e3"},"source":["states_buy, states_sell, total_gains, invest = agent.buy(initial_money = initial_money)"],"execution_count":null,"outputs":[{"output_type":"stream","text":["day 7: buy 1 unit at price 754.020020, total balance 9245.979980\n","day 8: buy 1 unit at price 736.080017, total balance 8509.899963\n","day 9: buy 1 unit at price 758.489990, total balance 7751.409973\n","day 10: buy 1 unit at price 764.479980, total balance 6986.929993\n","day 11: buy 1 unit at price 771.229980, total balance 6215.700013\n","day 15, sell 1 unit at price 760.989990, investment 0.924375 %, total balance 6976.690003,\n","day 18: buy 1 unit at price 770.840027, total balance 6205.849976\n","day 19: buy 1 unit at price 758.039978, total balance 5447.809998\n","day 22: buy 1 unit at price 762.520020, total balance 4685.289978\n","day 23: buy 1 unit at price 759.109985, total balance 3926.179993\n","day 24, sell 1 unit at price 771.190002, investment 4.769860 %, total balance 4697.369995,\n","day 27: buy 1 unit at price 789.270020, total balance 3908.099975\n","day 28, sell 1 unit at price 796.099976, investment 4.958534 %, total balance 4704.199951,\n","day 29: buy 1 unit at price 797.070007, total balance 3907.129944\n","day 30, sell 1 unit at price 797.849976, investment 4.365058 %, total balance 4704.979920,\n","day 31: buy 1 unit at price 790.799988, total balance 3914.179932\n","day 32, sell 1 unit at price 794.200012, investment 2.978363 %, total balance 4708.379944,\n","day 33: buy 1 unit at price 796.419983, total balance 3911.959961\n","day 35: buy 1 unit at price 791.260010, total balance 3120.699951\n","day 36, sell 1 unit at price 789.909973, investment 2.473917 %, total balance 3910.609924,\n","day 37: buy 1 unit at price 791.549988, total balance 3119.059936\n","day 40, sell 1 unit at price 771.820007, investment 1.817850 %, total balance 3890.879943,\n","day 41, sell 1 unit at price 786.140015, investment 3.097623 %, total balance 4677.019958,\n","day 42, sell 1 unit at price 786.900024, investment 3.660871 %, total balance 5463.919982,\n","day 43, sell 1 unit at price 794.020020, investment 0.601822 %, total balance 6257.940002,\n","day 44: buy 1 unit at price 806.150024, total balance 5451.789978\n","day 45: buy 1 unit at price 806.650024, total balance 4645.139954\n","day 47: buy 1 unit at price 807.909973, total balance 3837.229981\n","day 48, sell 1 unit at price 806.359985, investment 1.165516 %, total balance 4643.589966,\n","day 50, sell 1 unit at price 804.609985, investment 1.746332 %, total balance 5448.199951,\n","day 51: buy 1 unit at price 806.070007, total balance 4642.129944\n","day 52: buy 1 unit at price 802.174988, total balance 3839.954956\n","day 54: buy 1 unit at price 819.309998, total balance 3020.644958\n","day 55, sell 1 unit at price 823.869995, investment 3.446675 %, total balance 3844.514953,\n","day 56: buy 1 unit at price 835.669983, total balance 3008.844970\n","day 57: buy 1 unit at price 832.150024, total balance 2176.694946\n","day 58: buy 1 unit at price 823.309998, total balance 1353.384948\n","day 60, sell 1 unit at price 796.789978, investment 0.698881 %, total balance 2150.174926,\n","day 61: buy 1 unit at price 795.695007, total balance 1354.479919\n","day 62: buy 1 unit at price 798.530029, total balance 555.949890\n","day 63, sell 1 unit at price 801.489990, investment 1.255764 %, total balance 1357.439880,\n","day 64, sell 1 unit at price 801.340027, investment -0.596663 %, total balance 2158.779907,\n","day 65, sell 1 unit at price 806.969971, investment 0.039664 %, total balance 2965.749878,\n","day 66, sell 1 unit at price 808.380005, investment 0.058179 %, total balance 3774.129883,\n","day 67: buy 1 unit at price 809.559998, total balance 2964.569885\n","day 68, sell 1 unit at price 813.669983, investment 0.942843 %, total balance 3778.239868,\n","day 69, sell 1 unit at price 819.239990, investment 2.127342 %, total balance 4597.479858,\n","day 70, sell 1 unit at price 820.450012, investment 0.139143 %, total balance 5417.929870,\n","day 73: buy 1 unit at price 828.070007, total balance 4589.859863\n","day 75: buy 1 unit at price 830.760010, total balance 3759.099853\n","day 76, sell 1 unit at price 831.330017, investment -0.519340 %, total balance 4590.429870,\n","day 81, sell 1 unit at price 830.630005, investment -0.182662 %, total balance 5421.059875,\n","day 82, sell 1 unit at price 829.080017, investment 0.700832 %, total balance 6250.139892,\n","day 83, sell 1 unit at price 827.780029, investment 4.032327 %, total balance 7077.919921,\n","day 84: buy 1 unit at price 831.909973, total balance 6246.009948\n","day 87: buy 1 unit at price 843.250000, total balance 5402.759948\n","day 88: buy 1 unit at price 845.539978, total balance 4557.219970\n","day 89, sell 1 unit at price 845.619995, investment 5.897081 %, total balance 5402.839965,\n","day 92, sell 1 unit at price 852.119995, investment 5.257176 %, total balance 6254.959960,\n","day 93: buy 1 unit at price 848.400024, total balance 5406.559936\n","day 94: buy 1 unit at price 830.460022, total balance 4576.099914\n","day 95, sell 1 unit at price 829.590027, investment 0.183562 %, total balance 5405.689941,\n","day 99, sell 1 unit at price 820.919983, investment -1.184461 %, total balance 6226.609924,\n","day 101, sell 1 unit at price 831.500000, investment -0.049281 %, total balance 7058.109924,\n","day 103, sell 1 unit at price 838.549988, investment -0.557369 %, total balance 7896.659912,\n","day 104: buy 1 unit at price 834.570007, total balance 7062.089905\n","day 107, sell 1 unit at price 824.669983, investment -2.468245 %, total balance 7886.759888,\n","day 109, sell 1 unit at price 823.349976, investment -2.952622 %, total balance 8710.109864,\n","day 110, sell 1 unit at price 824.320007, investment -0.739351 %, total balance 9534.429871,\n","day 111: buy 1 unit at price 823.559998, total balance 8710.869873\n","day 112, sell 1 unit at price 837.169983, investment 0.311535 %, total balance 9548.039856,\n","day 113, sell 1 unit at price 836.820007, investment 1.610084 %, total balance 10384.859863,\n","day 122: buy 1 unit at price 912.570007, total balance 9472.289856\n","day 123, sell 1 unit at price 916.440002, investment 0.424077 %, total balance 10388.729858,\n","day 128: buy 1 unit at price 932.169983, total balance 9456.559875\n","day 129, sell 1 unit at price 928.780029, investment -0.363663 %, total balance 10385.339904,\n","day 130: buy 1 unit at price 930.599976, total balance 9454.739928\n","day 132: buy 1 unit at price 937.080017, total balance 8517.659911\n","day 133, sell 1 unit at price 943.000000, investment 1.332476 %, total balance 9460.659911,\n","day 134, sell 1 unit at price 919.619995, investment -1.863237 %, total balance 10380.279906,\n","day 140: buy 1 unit at price 969.539978, total balance 9410.739928\n","day 141, sell 1 unit at price 971.469971, investment 0.199063 %, total balance 10382.209899,\n","day 145: buy 1 unit at price 975.599976, total balance 9406.609923\n","day 146: buy 1 unit at price 983.679993, total balance 8422.929930\n","day 149, sell 1 unit at price 983.409973, investment 0.800533 %, total balance 9406.339903,\n","day 150: buy 1 unit at price 949.830017, total balance 8456.509886\n","day 151, sell 1 unit at price 942.900024, investment -4.145654 %, total balance 9399.409910,\n","day 152, sell 1 unit at price 953.400024, investment 0.375857 %, total balance 10352.809934,\n","day 159: buy 1 unit at price 957.090027, total balance 9395.719907\n","day 160: buy 1 unit at price 965.590027, total balance 8430.129880\n","day 161: buy 1 unit at price 952.270020, total balance 7477.859860\n","day 164: buy 1 unit at price 917.789978, total balance 6560.069882\n","day 167: buy 1 unit at price 911.710022, total balance 5648.359860\n","day 170: buy 1 unit at price 928.799988, total balance 4719.559872\n","day 171, sell 1 unit at price 930.090027, investment -2.821051 %, total balance 5649.649899,\n","day 173: buy 1 unit at price 947.159973, total balance 4702.489926\n","day 174: buy 1 unit at price 955.989990, total balance 3746.499936\n","day 175: buy 1 unit at price 953.419983, total balance 2793.079953\n","day 176, sell 1 unit at price 965.400024, investment -0.019677 %, total balance 3758.479977,\n","day 177: buy 1 unit at price 970.890015, total balance 2787.589962\n","day 178, sell 1 unit at price 968.150024, investment 1.667595 %, total balance 3755.739986,\n","day 179: buy 1 unit at price 972.919983, total balance 2782.820003\n","day 180: buy 1 unit at price 980.340027, total balance 1802.479976\n","day 181: buy 1 unit at price 950.700012, total balance 851.779964\n","day 183, sell 1 unit at price 934.090027, investment 1.776011 %, total balance 1785.869991,\n","day 184, sell 1 unit at price 941.530029, investment 3.270778 %, total balance 2727.400020,\n","day 185, sell 1 unit at price 930.500000, investment 0.183033 %, total balance 3657.900020,\n","day 186: buy 1 unit at price 930.830017, total balance 2727.070003\n","day 190: buy 1 unit at price 929.359985, total balance 1797.710018\n","day 191: buy 1 unit at price 926.789978, total balance 870.920040\n","day 192, sell 1 unit at price 922.900024, investment -2.561336 %, total balance 1793.820064,\n","day 193, sell 1 unit at price 907.239990, investment -5.099426 %, total balance 2701.060054,\n","day 194, sell 1 unit at price 914.390015, investment -4.093681 %, total balance 3615.450069,\n","day 195: buy 1 unit at price 922.669983, total balance 2692.780086\n","day 196, sell 1 unit at price 922.219971, investment -5.012931 %, total balance 3615.000057,\n","day 197: buy 1 unit at price 926.960022, total balance 2688.040035\n","day 198: buy 1 unit at price 910.979980, total balance 1777.060055\n","day 199: buy 1 unit at price 910.669983, total balance 866.390072\n","day 200, sell 1 unit at price 906.659973, investment -6.810427 %, total balance 1773.050045,\n","day 201, sell 1 unit at price 924.690002, investment -5.676604 %, total balance 2697.740047,\n","day 202: buy 1 unit at price 927.000000, total balance 1770.740047\n","day 204, sell 1 unit at price 915.890015, investment -3.661512 %, total balance 2686.630062,\n","day 210, sell 1 unit at price 928.450012, investment -0.255686 %, total balance 3615.080074,\n","day 214: buy 1 unit at price 929.080017, total balance 2686.000057\n","day 215: buy 1 unit at price 932.070007, total balance 1753.930050\n","day 216: buy 1 unit at price 935.090027, total balance 818.840023\n","day 220, sell 1 unit at price 921.809998, investment -0.812386 %, total balance 1740.650021,\n","day 221, sell 1 unit at price 931.580017, investment 0.516842 %, total balance 2672.230038,\n","day 222, sell 1 unit at price 932.450012, investment 1.059970 %, total balance 3604.680050,\n","day 224, sell 1 unit at price 920.969971, investment -0.646204 %, total balance 4525.650021,\n","day 226, sell 1 unit at price 944.489990, investment 3.678457 %, total balance 5470.140011,\n","day 227, sell 1 unit at price 949.500000, investment 4.263896 %, total balance 6419.640011,\n","day 228, sell 1 unit at price 959.109985, investment 3.463860 %, total balance 7378.749996,\n","day 229, sell 1 unit at price 953.270020, investment 2.603651 %, total balance 8332.020016,\n","day 230, sell 1 unit at price 957.789978, investment 2.759446 %, total balance 9289.809994,\n","day 232, sell 1 unit at price 969.960022, investment 3.729052 %, total balance 10259.770016,\n","day 235: buy 1 unit at price 972.599976, total balance 9287.170040\n","day 236, sell 1 unit at price 989.250000, investment 1.711909 %, total balance 10276.420040,\n","day 237: buy 1 unit at price 987.830017, total balance 9288.590023\n","day 238, sell 1 unit at price 989.679993, investment 0.187277 %, total balance 10278.270016,\n","day 241: buy 1 unit at price 992.809998, total balance 9285.460018\n","day 242, sell 1 unit at price 984.450012, investment -0.842053 %, total balance 10269.910030,\n","day 245: buy 1 unit at price 970.539978, total balance 9299.370052\n","day 246: buy 1 unit at price 973.330017, total balance 8326.040035\n","day 247, sell 1 unit at price 972.559998, investment 0.208134 %, total balance 9298.600033,\n","day 249: buy 1 unit at price 1017.109985, total balance 8281.490048\n","day 250, sell 1 unit at price 1016.640015, investment 4.449672 %, total balance 9298.130063,\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"B970oAxOY6LF","outputId":"d1f5d988-9697-40c2-f4c6-d12987ec6feb"},"source":["fig = plt.figure(figsize = (15,5))\n","plt.plot(close, color='r', lw=2.)\n","plt.plot(close, '^', markersize=10, color='m', label = 'buying signal', markevery = states_buy)\n","plt.plot(close, 'v', markersize=10, color='k', label = 'selling signal', markevery = states_sell)\n","plt.title('total gains %f, total investment %f%%'%(total_gains, invest))\n","plt.legend()\n","plt.savefig('output/'+name+'.png')\n","plt.show()"],"execution_count":null,"outputs":[{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["
"]},"metadata":{"tags":[],"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"oHhTVooXmJNz"},"source":["## Recurrent Curiosity Q-learning agent"]},{"cell_type":"code","metadata":{"id":"QnhuWrgbY6Lh"},"source":["from collections import deque\n","import random\n","\n","df= df_full.copy()\n","name = 'Recurrent Curiosity Q-learning agent'\n","\n","class Agent:\n","\n"," LEARNING_RATE = 0.003\n"," BATCH_SIZE = 32\n"," LAYER_SIZE = 128\n"," OUTPUT_SIZE = 3\n"," EPSILON = 0.5\n"," DECAY_RATE = 0.005\n"," MIN_EPSILON = 0.1\n"," GAMMA = 0.99\n"," MEMORIES = deque()\n"," COPY = 1000\n"," T_COPY = 0\n"," MEMORY_SIZE = 300\n"," \n"," def __init__(self, state_size, window_size, trend, skip):\n"," self.state_size = state_size\n"," self.window_size = window_size\n"," self.half_window = window_size // 2\n"," self.trend = trend\n"," self.skip = skip\n"," tf.reset_default_graph()\n"," self.INITIAL_FEATURES = np.zeros((4, self.state_size))\n"," self.X = tf.placeholder(tf.float32, (None, None, self.state_size))\n"," self.Y = tf.placeholder(tf.float32, (None, None, self.state_size))\n"," self.hidden_layer = tf.placeholder(tf.float32, (None, 2 * self.LAYER_SIZE))\n"," self.ACTION = tf.placeholder(tf.float32, (None))\n"," self.REWARD = tf.placeholder(tf.float32, (None))\n"," self.batch_size = tf.shape(self.ACTION)[0]\n"," self.seq_len = tf.shape(self.X)[1]\n"," \n"," with tf.variable_scope('curiosity_model'):\n"," action = tf.reshape(self.ACTION, (-1,1,1))\n"," repeat_action = tf.tile(action, [1,self.seq_len,1])\n"," state_action = tf.concat([self.X, repeat_action], axis=-1)\n"," save_state = tf.identity(self.Y)\n"," cell = tf.nn.rnn_cell.LSTMCell(self.LAYER_SIZE, state_is_tuple = False)\n"," self.rnn,last_state = tf.nn.dynamic_rnn(inputs=state_action,cell=cell,\n"," dtype=tf.float32,\n"," initial_state=self.hidden_layer)\n"," self.curiosity_logits = tf.layers.dense(self.rnn[:,-1], self.state_size)\n"," self.curiosity_cost = tf.reduce_sum(tf.square(save_state[:,-1] - self.curiosity_logits), axis=1)\n"," \n"," self.curiosity_optimizer = tf.train.RMSPropOptimizer(self.LEARNING_RATE)\\\n"," .minimize(tf.reduce_mean(self.curiosity_cost))\n"," \n"," total_reward = tf.add(self.curiosity_cost, self.REWARD)\n"," \n"," with tf.variable_scope(\"q_model\"):\n"," with tf.variable_scope(\"eval_net\"):\n"," cell = tf.nn.rnn_cell.LSTMCell(self.LAYER_SIZE, state_is_tuple = False)\n"," rnn,self.last_state = tf.nn.dynamic_rnn(inputs=self.X,cell=cell,\n"," dtype=tf.float32,\n"," initial_state=self.hidden_layer)\n"," self.logits = tf.layers.dense(rnn[:,-1], self.OUTPUT_SIZE)\n"," \n"," with tf.variable_scope(\"target_net\"):\n"," cell = tf.nn.rnn_cell.LSTMCell(self.LAYER_SIZE, state_is_tuple = False)\n"," rnn,last_state = tf.nn.dynamic_rnn(inputs=self.Y,cell=cell,\n"," dtype=tf.float32,\n"," initial_state=self.hidden_layer)\n"," y_q = tf.layers.dense(rnn[:,-1], self.OUTPUT_SIZE)\n"," \n"," q_target = total_reward + self.GAMMA * tf.reduce_max(y_q, axis=1)\n"," action = tf.cast(self.ACTION, tf.int32)\n"," action_indices = tf.stack([tf.range(self.batch_size, dtype=tf.int32), action], axis=1)\n"," q = tf.gather_nd(params=self.logits, indices=action_indices)\n"," self.cost = tf.losses.mean_squared_error(labels=q_target, predictions=q)\n"," self.optimizer = tf.train.RMSPropOptimizer(self.LEARNING_RATE).minimize(\n"," self.cost, var_list=tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES, \"q_model/eval_net\"))\n"," \n"," t_params = tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES, scope='q_model/target_net')\n"," e_params = tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES, scope='q_model/eval_net')\n"," self.target_replace_op = [tf.assign(t, e) for t, e in zip(t_params, e_params)]\n"," \n"," self.sess = tf.InteractiveSession()\n"," self.sess.run(tf.global_variables_initializer())\n"," \n"," def _memorize(self, state, action, reward, new_state, done, rnn_state):\n"," self.MEMORIES.append((state, action, reward, new_state, done, rnn_state))\n"," if len(self.MEMORIES) > self.MEMORY_SIZE:\n"," self.MEMORIES.popleft()\n"," \n"," def get_state(self, t):\n"," window_size = self.window_size + 1\n"," d = t - window_size + 1\n"," block = self.trend[d : t + 1] if d >= 0 else -d * [self.trend[0]] + self.trend[0 : t + 1]\n"," res = []\n"," for i in range(window_size - 1):\n"," res.append(block[i + 1] - block[i])\n"," return np.array(res)\n"," \n"," def _construct_memories(self, replay):\n"," states = np.array([a[0] for a in replay])\n"," actions = np.array([a[1] for a in replay])\n"," rewards = np.array([a[2] for a in replay])\n"," new_states = np.array([a[3] for a in replay])\n"," init_values = np.array([a[-1] for a in replay])\n"," if (self.T_COPY + 1) % self.COPY == 0:\n"," self.sess.run(self.target_replace_op)\n"," \n"," cost, _ = self.sess.run([self.cost, self.optimizer], feed_dict = {\n"," self.X: states, self.Y: new_states, self.ACTION: actions, self.REWARD: rewards,\n"," self.hidden_layer: init_values\n"," })\n"," \n"," if (self.T_COPY + 1) % self.COPY == 0:\n"," self.sess.run(self.curiosity_optimizer, feed_dict = {\n"," self.X: states, self.Y: new_states, self.ACTION: actions, self.REWARD: rewards,\n"," self.hidden_layer: init_values\n"," })\n"," return cost\n"," \n"," def buy(self, initial_money):\n"," starting_money = initial_money\n"," states_sell = []\n"," states_buy = []\n"," inventory = []\n"," state = self.get_state(0)\n"," init_value = np.zeros((1, 2 * self.LAYER_SIZE))\n"," for k in range(self.INITIAL_FEATURES.shape[0]):\n"," self.INITIAL_FEATURES[k,:] = state\n"," for t in range(0, len(self.trend) - 1, self.skip):\n"," \n"," if np.random.rand() < self.EPSILON:\n"," action = np.random.randint(self.OUTPUT_SIZE)\n"," else:\n"," action, last_state = self.sess.run([self.logits,\n"," self.last_state],\n"," feed_dict={self.X:[self.INITIAL_FEATURES],\n"," self.hidden_layer:init_value})\n"," action, init_value = np.argmax(action[0]), last_state\n"," \n"," next_state = self.get_state(t + 1)\n"," \n"," if action == 1 and initial_money >= self.trend[t]:\n"," inventory.append(self.trend[t])\n"," initial_money -= self.trend[t]\n"," states_buy.append(t)\n"," print('day %d: buy 1 unit at price %f, total balance %f'% (t, self.trend[t], initial_money))\n"," \n"," elif action == 2 and len(inventory):\n"," bought_price = inventory.pop(0)\n"," initial_money += self.trend[t]\n"," states_sell.append(t)\n"," try:\n"," invest = ((close[t] - bought_price) / bought_price) * 100\n"," except:\n"," invest = 0\n"," print(\n"," 'day %d, sell 1 unit at price %f, investment %f %%, total balance %f,'\n"," % (t, close[t], invest, initial_money)\n"," )\n"," \n"," new_state = np.append([self.get_state(t + 1)], self.INITIAL_FEATURES[:3, :], axis = 0)\n"," self.INITIAL_FEATURES = new_state\n"," invest = ((initial_money - starting_money) / starting_money) * 100\n"," total_gains = initial_money - starting_money\n"," return states_buy, states_sell, total_gains, invest\n"," \n"," def train(self, iterations, checkpoint, initial_money):\n"," for i in range(iterations):\n"," total_profit = 0\n"," inventory = []\n"," state = self.get_state(0)\n"," starting_money = initial_money\n"," init_value = np.zeros((1, 2 * self.LAYER_SIZE))\n"," for k in range(self.INITIAL_FEATURES.shape[0]):\n"," self.INITIAL_FEATURES[k,:] = state\n"," for t in range(0, len(self.trend) - 1, self.skip):\n"," if np.random.rand() < self.EPSILON:\n"," action = np.random.randint(self.OUTPUT_SIZE)\n"," else:\n"," action, last_state = self.sess.run([self.logits,\n"," self.last_state],\n"," feed_dict={self.X:[self.INITIAL_FEATURES],\n"," self.hidden_layer:init_value})\n"," action, init_value = np.argmax(action[0]), last_state\n"," \n"," next_state = self.get_state(t + 1)\n"," \n"," if action == 1 and starting_money >= self.trend[t]:\n"," inventory.append(self.trend[t])\n"," starting_money -= self.trend[t]\n"," \n"," elif action == 2 and len(inventory) > 0:\n"," bought_price = inventory.pop(0)\n"," total_profit += self.trend[t] - bought_price\n"," starting_money += self.trend[t]\n"," \n"," invest = ((starting_money - initial_money) / initial_money)\n"," new_state = np.append([self.get_state(t + 1)], self.INITIAL_FEATURES[:3, :], axis = 0)\n"," self._memorize(self.INITIAL_FEATURES, action, invest, new_state, \n"," starting_money < initial_money, init_value[0])\n"," self.INITIAL_FEATURES = new_state\n"," batch_size = min(len(self.MEMORIES), self.BATCH_SIZE)\n"," replay = random.sample(self.MEMORIES, batch_size)\n"," cost = self._construct_memories(replay)\n"," self.T_COPY += 1\n"," self.EPSILON = self.MIN_EPSILON + (1.0 - self.MIN_EPSILON) * np.exp(-self.DECAY_RATE * i)\n"," if (i+1) % checkpoint == 0:\n"," print('epoch: %d, total rewards: %f.3, cost: %f, total money: %f'%(i + 1, total_profit, cost,\n"," starting_money))"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"QOksmdGVY6Lj","outputId":"2fa91119-0cf3-46ca-8d93-fe03c9c54b06"},"source":["close = df.Close.values.tolist()\n","initial_money = 10000\n","window_size = 30\n","skip = 1\n","batch_size = 32\n","agent = Agent(state_size = window_size, \n"," window_size = window_size, \n"," trend = close, \n"," skip = skip)\n","agent.train(iterations = 200, checkpoint = 10, initial_money = initial_money)"],"execution_count":null,"outputs":[{"output_type":"stream","text":["WARNING:tensorflow:: Using a concatenated state is slower and will soon be deprecated. Use state_is_tuple=True.\n","WARNING:tensorflow:: Using a concatenated state is slower and will soon be deprecated. Use state_is_tuple=True.\n","WARNING:tensorflow:: Using a concatenated state is slower and will soon be deprecated. Use state_is_tuple=True.\n","epoch: 10, total rewards: 685.860168.3, cost: 4139534.500000, total money: 977.580137\n","epoch: 20, total rewards: 1724.255003.3, cost: 5132677.500000, total money: 5851.904966\n","epoch: 30, total rewards: 493.970035.3, cost: 3979546.750000, total money: 8528.600039\n","epoch: 40, total rewards: 1580.255128.3, cost: 5099559.000000, total money: 4018.855103\n","epoch: 50, total rewards: 1467.990231.3, cost: 4410721.500000, total money: 8490.720211\n","epoch: 60, total rewards: 1285.420161.3, cost: 3993190.000000, total money: 2688.440118\n","epoch: 70, total rewards: 391.130068.3, cost: 3420379.000000, total money: 6491.710085\n","epoch: 80, total rewards: 1276.110108.3, cost: 3443612.750000, total money: 3698.110047\n","epoch: 90, total rewards: 672.475340.3, cost: 2882908.000000, total money: 208.605285\n","epoch: 100, total rewards: 706.604982.3, cost: 3108476.500000, total money: 1169.724916\n","epoch: 110, total rewards: 979.940367.3, cost: 2024909.750000, total money: 3200.720335\n","epoch: 120, total rewards: 853.199893.3, cost: 4572564.500000, total money: 6070.309879\n","epoch: 130, total rewards: 1339.975223.3, cost: 3904469.500000, total money: 7475.465274\n","epoch: 140, total rewards: 1136.924864.3, cost: 4352429.000000, total money: 4448.164854\n","epoch: 150, total rewards: 1499.745116.3, cost: 2398584.500000, total money: 3999.355042\n","epoch: 160, total rewards: 481.755190.3, cost: 3168836.250000, total money: 7573.215212\n","epoch: 170, total rewards: 1733.610290.3, cost: 1907320.875000, total money: 6940.950254\n","epoch: 180, total rewards: 390.074828.3, cost: 2862924.000000, total money: 5516.364805\n","epoch: 190, total rewards: 714.815121.3, cost: 2666878.750000, total money: 9726.615109\n","epoch: 200, total rewards: 1474.129822.3, cost: 3016419.000000, total money: 1901.589906\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"iy_y_wWZY6Lo","outputId":"4bd88541-1423-44f9-a928-ecdb34267f78"},"source":["states_buy, states_sell, total_gains, invest = agent.buy(initial_money = initial_money)"],"execution_count":null,"outputs":[{"output_type":"stream","text":["day 0: buy 1 unit at price 768.700012, total balance 9231.299988\n","day 1, sell 1 unit at price 762.130005, investment -0.854691 %, total balance 9993.429993,\n","day 4: buy 1 unit at price 790.510010, total balance 9202.919983\n","day 5: buy 1 unit at price 785.309998, total balance 8417.609985\n","day 8: buy 1 unit at price 736.080017, total balance 7681.529968\n","day 9: buy 1 unit at price 758.489990, total balance 6923.039978\n","day 11, sell 1 unit at price 771.229980, investment -2.438936 %, total balance 7694.269958,\n","day 13: buy 1 unit at price 769.200012, total balance 6925.069946\n","day 17: buy 1 unit at price 768.239990, total balance 6156.829956\n","day 19, sell 1 unit at price 758.039978, investment -3.472517 %, total balance 6914.869934,\n","day 25, sell 1 unit at price 776.419983, investment 5.480378 %, total balance 7691.289917,\n","day 26: buy 1 unit at price 789.289978, total balance 6901.999939\n","day 28: buy 1 unit at price 796.099976, total balance 6105.899963\n","day 31: buy 1 unit at price 790.799988, total balance 5315.099975\n","day 40, sell 1 unit at price 771.820007, investment 1.757441 %, total balance 6086.919982,\n","day 46, sell 1 unit at price 804.789978, investment 4.626881 %, total balance 6891.709960,\n","day 47, sell 1 unit at price 807.909973, investment 5.163749 %, total balance 7699.619933,\n","day 50: buy 1 unit at price 804.609985, total balance 6895.009948\n","day 57: buy 1 unit at price 832.150024, total balance 6062.859924\n","day 58, sell 1 unit at price 823.309998, investment 4.310205 %, total balance 6886.169922,\n","day 61: buy 1 unit at price 795.695007, total balance 6090.474915\n","day 62: buy 1 unit at price 798.530029, total balance 5291.944886\n","day 70: buy 1 unit at price 820.450012, total balance 4471.494874\n","day 73: buy 1 unit at price 828.070007, total balance 3643.424867\n","day 76: buy 1 unit at price 831.330017, total balance 2812.094850\n","day 85: buy 1 unit at price 835.369995, total balance 1976.724855\n","day 89, sell 1 unit at price 845.619995, investment 6.220327 %, total balance 2822.344850,\n","day 91: buy 1 unit at price 848.780029, total balance 1973.564821\n","day 98: buy 1 unit at price 819.510010, total balance 1154.054811\n","day 100: buy 1 unit at price 831.409973, total balance 322.644838\n","day 102, sell 1 unit at price 829.559998, investment 4.901367 %, total balance 1152.204836,\n","day 111, sell 1 unit at price 823.559998, investment 2.355180 %, total balance 1975.764834,\n","day 113: buy 1 unit at price 836.820007, total balance 1138.944827\n","day 114, sell 1 unit at price 838.210022, investment 0.728234 %, total balance 1977.154849,\n","day 117: buy 1 unit at price 862.760010, total balance 1114.394839\n","day 118: buy 1 unit at price 872.299988, total balance 242.094851\n","day 132, sell 1 unit at price 937.080017, investment 17.768744 %, total balance 1179.174868,\n","day 138: buy 1 unit at price 948.820007, total balance 230.354861\n","day 139, sell 1 unit at price 954.960022, investment 19.589745 %, total balance 1185.314883,\n","day 140: buy 1 unit at price 969.539978, total balance 215.774905\n","day 154, sell 1 unit at price 942.309998, investment 14.852823 %, total balance 1158.084903,\n","day 158, sell 1 unit at price 959.450012, investment 15.865809 %, total balance 2117.534915,\n","day 160: buy 1 unit at price 965.590027, total balance 1151.944888\n","day 168: buy 1 unit at price 906.690002, total balance 245.254886\n","day 169, sell 1 unit at price 918.590027, investment 10.496434 %, total balance 1163.844913,\n","day 176: buy 1 unit at price 965.400024, total balance 198.444889\n","day 189, sell 1 unit at price 927.960022, investment 11.083715 %, total balance 1126.404911,\n","day 191: buy 1 unit at price 926.789978, total balance 199.614933\n","day 195, sell 1 unit at price 922.669983, investment 8.705430 %, total balance 1122.284916,\n","day 200, sell 1 unit at price 906.659973, investment 10.634399 %, total balance 2028.944889,\n","day 201: buy 1 unit at price 924.690002, total balance 1104.254887\n","day 202, sell 1 unit at price 927.000000, investment 11.497339 %, total balance 2031.254887,\n","day 206: buy 1 unit at price 921.289978, total balance 1109.964909\n","day 211: buy 1 unit at price 927.809998, total balance 182.154911\n","day 220, sell 1 unit at price 921.809998, investment 10.156305 %, total balance 1103.964909,\n","day 226, sell 1 unit at price 944.489990, investment 9.473084 %, total balance 2048.454899,\n","day 228, sell 1 unit at price 959.109985, investment 9.951851 %, total balance 3007.564884,\n","day 230: buy 1 unit at price 957.789978, total balance 2049.774906\n","day 231, sell 1 unit at price 951.679993, investment 0.301426 %, total balance 3001.454899,\n","day 234: buy 1 unit at price 977.000000, total balance 2024.454899\n","day 237: buy 1 unit at price 987.830017, total balance 1036.624882\n","day 238, sell 1 unit at price 989.679993, investment 2.077275 %, total balance 2026.304875,\n","day 240: buy 1 unit at price 992.179993, total balance 1034.124882\n","day 241: buy 1 unit at price 992.809998, total balance 41.314884\n","day 242, sell 1 unit at price 984.450012, investment 1.953208 %, total balance 1025.764896,\n","day 248, sell 1 unit at price 1019.270020, investment 12.416594 %, total balance 2045.034916,\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"8S5Avw4iY6Lx","outputId":"f37c253e-6606-4ac9-b189-1101ea11a841"},"source":["fig = plt.figure(figsize = (15,5))\n","plt.plot(close, color='r', lw=2.)\n","plt.plot(close, '^', markersize=10, color='m', label = 'buying signal', markevery = states_buy)\n","plt.plot(close, 'v', markersize=10, color='k', label = 'selling signal', markevery = states_sell)\n","plt.title('total gains %f, total investment %f%%'%(total_gains, invest))\n","plt.legend()\n","plt.savefig('output/'+name+'.png')\n","plt.show()"],"execution_count":null,"outputs":[{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["
"]},"metadata":{"tags":[],"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"WDTXyW8cmS9M"},"source":["## Duel Curiosity Q-learning agent"]},{"cell_type":"code","metadata":{"id":"xNfynT0bY6L9"},"source":["from collections import deque\n","import random\n","\n","df= df_full.copy()\n","name = 'Duel Curiosity Q-learning agent'\n","\n","class Agent:\n","\n"," LEARNING_RATE = 0.003\n"," BATCH_SIZE = 32\n"," LAYER_SIZE = 500\n"," OUTPUT_SIZE = 3\n"," EPSILON = 0.5\n"," DECAY_RATE = 0.005\n"," MIN_EPSILON = 0.1\n"," GAMMA = 0.99\n"," MEMORIES = deque()\n"," COPY = 1000\n"," T_COPY = 0\n"," MEMORY_SIZE = 300\n"," \n"," def __init__(self, state_size, window_size, trend, skip):\n"," self.state_size = state_size\n"," self.window_size = window_size\n"," self.half_window = window_size // 2\n"," self.trend = trend\n"," self.skip = skip\n"," tf.reset_default_graph()\n"," self.X = tf.placeholder(tf.float32, (None, self.state_size))\n"," self.Y = tf.placeholder(tf.float32, (None, self.state_size))\n"," self.ACTION = tf.placeholder(tf.float32, (None))\n"," self.REWARD = tf.placeholder(tf.float32, (None))\n"," self.batch_size = tf.shape(self.ACTION)[0]\n"," \n"," with tf.variable_scope('curiosity_model'):\n"," action = tf.reshape(self.ACTION, (-1,1))\n"," state_action = tf.concat([self.X, action], axis=1)\n"," save_state = tf.identity(self.Y)\n"," \n"," feed = tf.layers.dense(state_action, 32, activation=tf.nn.relu)\n"," self.curiosity_logits = tf.layers.dense(feed, self.state_size)\n"," self.curiosity_cost = tf.reduce_sum(tf.square(save_state - self.curiosity_logits), axis=1)\n"," \n"," self.curiosity_optimizer = tf.train.RMSPropOptimizer(self.LEARNING_RATE)\\\n"," .minimize(tf.reduce_mean(self.curiosity_cost))\n"," \n"," total_reward = tf.add(self.curiosity_cost, self.REWARD)\n"," \n"," with tf.variable_scope(\"q_model\"):\n"," with tf.variable_scope(\"eval_net\"):\n"," x_action = tf.layers.dense(self.X, 128, tf.nn.relu)\n"," tensor_action, tensor_validation = tf.split(x_action,2,1)\n"," feed_action = tf.layers.dense(tensor_action, self.OUTPUT_SIZE)\n"," feed_validation = tf.layers.dense(tensor_validation, 1)\n"," self.logits = feed_validation + \\\n"," tf.subtract(feed_action,tf.reduce_mean(feed_action,axis=1,keep_dims=True))\n"," \n"," with tf.variable_scope(\"target_net\"):\n"," y_action = tf.layers.dense(self.Y, 128, tf.nn.relu)\n"," tensor_action, tensor_validation = tf.split(y_action,2,1)\n"," feed_action = tf.layers.dense(tensor_action, self.OUTPUT_SIZE)\n"," feed_validation = tf.layers.dense(tensor_validation, 1)\n"," y_q = feed_validation + \\\n"," tf.subtract(feed_action,tf.reduce_mean(feed_action,axis=1,keep_dims=True))\n"," \n"," q_target = total_reward + self.GAMMA * tf.reduce_max(y_q, axis=1)\n"," action = tf.cast(self.ACTION, tf.int32)\n"," action_indices = tf.stack([tf.range(self.batch_size, dtype=tf.int32), action], axis=1)\n"," q = tf.gather_nd(params=self.logits, indices=action_indices)\n"," self.cost = tf.losses.mean_squared_error(labels=q_target, predictions=q)\n"," self.optimizer = tf.train.RMSPropOptimizer(self.LEARNING_RATE).minimize(\n"," self.cost, var_list=tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES, \"q_model/eval_net\"))\n"," \n"," t_params = tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES, scope='q_model/target_net')\n"," e_params = tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES, scope='q_model/eval_net')\n"," self.target_replace_op = [tf.assign(t, e) for t, e in zip(t_params, e_params)]\n"," \n"," self.sess = tf.InteractiveSession()\n"," self.sess.run(tf.global_variables_initializer())\n"," \n"," def _memorize(self, state, action, reward, new_state, done):\n"," self.MEMORIES.append((state, action, reward, new_state, done))\n"," if len(self.MEMORIES) > self.MEMORY_SIZE:\n"," self.MEMORIES.popleft()\n"," \n"," def get_state(self, t):\n"," window_size = self.window_size + 1\n"," d = t - window_size + 1\n"," block = self.trend[d : t + 1] if d >= 0 else -d * [self.trend[0]] + self.trend[0 : t + 1]\n"," res = []\n"," for i in range(window_size - 1):\n"," res.append(block[i + 1] - block[i])\n"," return np.array(res)\n"," \n"," def predict(self, inputs):\n"," return self.sess.run(self.logits, feed_dict={self.X:inputs})\n"," \n"," def get_predicted_action(self, sequence):\n"," prediction = self.predict(np.array(sequence))[0]\n"," return np.argmax(prediction)\n"," \n"," def _select_action(self, state):\n"," if np.random.rand() < self.EPSILON:\n"," action = np.random.randint(self.OUTPUT_SIZE)\n"," else:\n"," action = self.get_predicted_action([state])\n"," return action\n"," \n"," def _construct_memories(self, replay):\n"," states = np.array([a[0] for a in replay])\n"," actions = np.array([a[1] for a in replay])\n"," rewards = np.array([a[2] for a in replay])\n"," new_states = np.array([a[3] for a in replay])\n"," if (self.T_COPY + 1) % self.COPY == 0:\n"," self.sess.run(self.target_replace_op)\n"," \n"," cost, _ = self.sess.run([self.cost, self.optimizer], feed_dict = {\n"," self.X: states, self.Y: new_states, self.ACTION: actions, self.REWARD: rewards\n"," })\n"," \n"," if (self.T_COPY + 1) % self.COPY == 0:\n"," self.sess.run(self.curiosity_optimizer, feed_dict = {\n"," self.X: states, self.Y: new_states, self.ACTION: actions, self.REWARD: rewards\n"," })\n"," return cost\n"," \n"," def buy(self, initial_money):\n"," starting_money = initial_money\n"," states_sell = []\n"," states_buy = []\n"," inventory = []\n"," state = self.get_state(0)\n"," for t in range(0, len(self.trend) - 1, self.skip):\n"," action = self._select_action(state)\n"," next_state = self.get_state(t + 1)\n"," \n"," if action == 1 and initial_money >= self.trend[t]:\n"," inventory.append(self.trend[t])\n"," initial_money -= self.trend[t]\n"," states_buy.append(t)\n"," print('day %d: buy 1 unit at price %f, total balance %f'% (t, self.trend[t], initial_money))\n"," \n"," elif action == 2 and len(inventory):\n"," bought_price = inventory.pop(0)\n"," initial_money += self.trend[t]\n"," states_sell.append(t)\n"," try:\n"," invest = ((close[t] - bought_price) / bought_price) * 100\n"," except:\n"," invest = 0\n"," print(\n"," 'day %d, sell 1 unit at price %f, investment %f %%, total balance %f,'\n"," % (t, close[t], invest, initial_money)\n"," )\n"," \n"," state = next_state\n"," invest = ((initial_money - starting_money) / starting_money) * 100\n"," total_gains = initial_money - starting_money\n"," return states_buy, states_sell, total_gains, invest\n"," \n"," def train(self, iterations, checkpoint, initial_money):\n"," for i in range(iterations):\n"," total_profit = 0\n"," inventory = []\n"," state = self.get_state(0)\n"," starting_money = initial_money\n"," for t in range(0, len(self.trend) - 1, self.skip):\n"," \n"," action = self._select_action(state)\n"," next_state = self.get_state(t + 1)\n"," \n"," if action == 1 and starting_money >= self.trend[t]:\n"," inventory.append(self.trend[t])\n"," starting_money -= self.trend[t]\n"," \n"," elif action == 2 and len(inventory) > 0:\n"," bought_price = inventory.pop(0)\n"," total_profit += self.trend[t] - bought_price\n"," starting_money += self.trend[t]\n"," \n"," invest = ((starting_money - initial_money) / initial_money)\n"," \n"," self._memorize(state, action, invest, next_state, starting_money < initial_money)\n"," batch_size = min(len(self.MEMORIES), self.BATCH_SIZE)\n"," state = next_state\n"," replay = random.sample(self.MEMORIES, batch_size)\n"," cost = self._construct_memories(replay)\n"," self.T_COPY += 1\n"," self.EPSILON = self.MIN_EPSILON + (1.0 - self.MIN_EPSILON) * np.exp(-self.DECAY_RATE * i)\n"," if (i+1) % checkpoint == 0:\n"," print('epoch: %d, total rewards: %f.3, cost: %f, total money: %f'%(i + 1, total_profit, cost,\n"," starting_money))"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"keRxraIrY6L_","outputId":"696caac7-d7dc-4379-9764-167df2b2518d"},"source":["close = df.Close.values.tolist()\n","initial_money = 10000\n","window_size = 30\n","skip = 1\n","batch_size = 32\n","agent = Agent(state_size = window_size, \n"," window_size = window_size, \n"," trend = close, \n"," skip = skip)\n","agent.train(iterations = 200, checkpoint = 10, initial_money = initial_money)"],"execution_count":null,"outputs":[{"output_type":"stream","text":["WARNING:tensorflow:From :53: calling reduce_mean (from tensorflow.python.ops.math_ops) with keep_dims is deprecated and will be removed in a future version.\n","Instructions for updating:\n","keep_dims is deprecated, use keepdims instead\n","epoch: 10, total rewards: 698.460085.3, cost: 596251.000000, total money: 10698.460085\n","epoch: 20, total rewards: 1683.164917.3, cost: 5890915.500000, total money: 6720.204895\n","epoch: 30, total rewards: 1686.875004.3, cost: 75077.554688, total money: 6721.424992\n","epoch: 40, total rewards: 541.999876.3, cost: 2707843.750000, total money: 9525.359861\n","epoch: 50, total rewards: 1668.824950.3, cost: 32719.388672, total money: 7666.774900\n","epoch: 60, total rewards: 751.654909.3, cost: 1165742.750000, total money: 8743.134889\n","epoch: 70, total rewards: 1637.889772.3, cost: 325201.937500, total money: 6669.909730\n","epoch: 80, total rewards: 587.055053.3, cost: 1527037.250000, total money: 892.705077\n","epoch: 90, total rewards: 2170.969727.3, cost: 122936.546875, total money: 8204.549683\n","epoch: 100, total rewards: 1565.850155.3, cost: 844705.187500, total money: 19.270138\n","epoch: 110, total rewards: 1733.244930.3, cost: 557043.125000, total money: 6744.174861\n","epoch: 120, total rewards: 1282.489866.3, cost: 3785043.750000, total money: 8328.149839\n","epoch: 130, total rewards: 1260.559873.3, cost: 596946.312500, total money: 6319.639890\n","epoch: 140, total rewards: 1346.769778.3, cost: 26543662.000000, total money: 10330.129763\n","epoch: 150, total rewards: 2415.594848.3, cost: 851761.625000, total money: 9467.174865\n","epoch: 160, total rewards: 1033.800112.3, cost: 3596937.500000, total money: 9044.600099\n","epoch: 170, total rewards: 1597.439823.3, cost: 511038.375000, total money: 93.789859\n","epoch: 180, total rewards: 1736.860354.3, cost: 3795484.000000, total money: 1011.990359\n","epoch: 190, total rewards: 1682.540215.3, cost: 657330.250000, total money: 8675.460198\n","epoch: 200, total rewards: 875.094668.3, cost: 30907612.000000, total money: 10875.094668\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"NYeD1rqjY6MH","outputId":"9ddeed7c-f912-4fca-ec7b-adc0030edfab"},"source":["states_buy, states_sell, total_gains, invest = agent.buy(initial_money = initial_money)"],"execution_count":null,"outputs":[{"output_type":"stream","text":["day 3: buy 1 unit at price 782.520020, total balance 9217.479980\n","day 4: buy 1 unit at price 790.510010, total balance 8426.969970\n","day 5: buy 1 unit at price 785.309998, total balance 7641.659972\n","day 6: buy 1 unit at price 762.559998, total balance 6879.099974\n","day 7: buy 1 unit at price 754.020020, total balance 6125.079954\n","day 9: buy 1 unit at price 758.489990, total balance 5366.589964\n","day 10, sell 1 unit at price 764.479980, investment -2.305377 %, total balance 6131.069944,\n","day 11: buy 1 unit at price 771.229980, total balance 5359.839964\n","day 13: buy 1 unit at price 769.200012, total balance 4590.639952\n","day 15: buy 1 unit at price 760.989990, total balance 3829.649962\n","day 16: buy 1 unit at price 761.679993, total balance 3067.969969\n","day 17: buy 1 unit at price 768.239990, total balance 2299.729979\n","day 19: buy 1 unit at price 758.039978, total balance 1541.690001\n","day 21: buy 1 unit at price 750.500000, total balance 791.190001\n","day 22, sell 1 unit at price 762.520020, investment -3.540751 %, total balance 1553.710021,\n","day 23, sell 1 unit at price 759.109985, investment -3.336264 %, total balance 2312.820006,\n","day 24: buy 1 unit at price 771.190002, total balance 1541.630004\n","day 25, sell 1 unit at price 776.419983, investment 1.817560 %, total balance 2318.049987,\n","day 27, sell 1 unit at price 789.270020, investment 4.674942 %, total balance 3107.320007,\n","day 29, sell 1 unit at price 797.070007, investment 5.086424 %, total balance 3904.390014,\n","day 30, sell 1 unit at price 797.849976, investment 3.451629 %, total balance 4702.239990,\n","day 32: buy 1 unit at price 794.200012, total balance 3908.039978\n","day 33, sell 1 unit at price 796.419983, investment 3.538738 %, total balance 4704.459961,\n","day 34, sell 1 unit at price 794.559998, investment 4.411360 %, total balance 5499.019959,\n","day 38: buy 1 unit at price 785.049988, total balance 4713.969971\n","day 39, sell 1 unit at price 782.789978, investment 2.771503 %, total balance 5496.759949,\n","day 40, sell 1 unit at price 771.820007, investment 0.466002 %, total balance 6268.579956,\n","day 41: buy 1 unit at price 786.140015, total balance 5482.439941\n","day 45: buy 1 unit at price 806.650024, total balance 4675.789917\n","day 47, sell 1 unit at price 807.909973, investment 6.578808 %, total balance 5483.699890,\n","day 50: buy 1 unit at price 804.609985, total balance 4679.089905\n","day 51, sell 1 unit at price 806.070007, investment 7.404398 %, total balance 5485.159912,\n","day 52, sell 1 unit at price 802.174988, investment 4.017815 %, total balance 6287.334900,\n","day 53: buy 1 unit at price 805.020020, total balance 5482.314880\n","day 54, sell 1 unit at price 819.309998, investment 3.161670 %, total balance 6301.624878,\n","day 56: buy 1 unit at price 835.669983, total balance 5465.954895\n","day 58, sell 1 unit at price 823.309998, investment 4.873576 %, total balance 6289.264893,\n","day 59, sell 1 unit at price 802.320007, investment 2.058157 %, total balance 7091.584900,\n","day 60: buy 1 unit at price 796.789978, total balance 6294.794922\n","day 61, sell 1 unit at price 795.695007, investment -1.358088 %, total balance 7090.489929,\n","day 62, sell 1 unit at price 798.530029, investment -0.755640 %, total balance 7889.019958,\n","day 63, sell 1 unit at price 801.489990, investment -0.438502 %, total balance 8690.509948,\n","day 66: buy 1 unit at price 808.380005, total balance 7882.129943\n","day 67, sell 1 unit at price 809.559998, investment -3.124437 %, total balance 8691.689941,\n","day 68: buy 1 unit at price 813.669983, total balance 7878.019958\n","day 69, sell 1 unit at price 819.239990, investment 2.817557 %, total balance 8697.259948,\n","day 70, sell 1 unit at price 820.450012, investment 1.493111 %, total balance 9517.709960,\n","day 72, sell 1 unit at price 824.159973, investment 1.289219 %, total balance 10341.869933,\n","day 73: buy 1 unit at price 828.070007, total balance 9513.799926\n","day 74, sell 1 unit at price 831.659973, investment 0.433534 %, total balance 10345.459899,\n","day 75: buy 1 unit at price 830.760010, total balance 9514.699889\n","day 76: buy 1 unit at price 831.330017, total balance 8683.369872\n","day 78: buy 1 unit at price 829.280029, total balance 7854.089843\n","day 79: buy 1 unit at price 823.210022, total balance 7030.879821\n","day 80: buy 1 unit at price 835.239990, total balance 6195.639831\n","day 81, sell 1 unit at price 830.630005, investment -0.015649 %, total balance 7026.269836,\n","day 82, sell 1 unit at price 829.080017, investment -0.270651 %, total balance 7855.349853,\n","day 84, sell 1 unit at price 831.909973, investment 0.317136 %, total balance 8687.259826,\n","day 85: buy 1 unit at price 835.369995, total balance 7851.889831\n","day 86: buy 1 unit at price 838.679993, total balance 7013.209838\n","day 88: buy 1 unit at price 845.539978, total balance 6167.669860\n","day 89: buy 1 unit at price 845.619995, total balance 5322.049865\n","day 90, sell 1 unit at price 847.200012, investment 2.914200 %, total balance 6169.249877,\n","day 91: buy 1 unit at price 848.780029, total balance 5320.469848\n","day 92: buy 1 unit at price 852.119995, total balance 4468.349853\n","day 93, sell 1 unit at price 848.400024, investment 1.575599 %, total balance 5316.749877,\n","day 94: buy 1 unit at price 830.460022, total balance 4486.289855\n","day 95: buy 1 unit at price 829.590027, total balance 3656.699828\n","day 96, sell 1 unit at price 817.580017, investment -2.129593 %, total balance 4474.279845,\n","day 97: buy 1 unit at price 814.429993, total balance 3659.849852\n","day 98, sell 1 unit at price 819.510010, investment -2.285733 %, total balance 4479.359862,\n","day 100: buy 1 unit at price 831.409973, total balance 3647.949889\n","day 101, sell 1 unit at price 831.500000, investment -1.660475 %, total balance 4479.449889,\n","day 103: buy 1 unit at price 838.549988, total balance 3640.899901\n","day 104: buy 1 unit at price 834.570007, total balance 2806.329894\n","day 105, sell 1 unit at price 831.409973, investment -1.680426 %, total balance 3637.739867,\n","day 106: buy 1 unit at price 827.880005, total balance 2809.859862\n","day 108: buy 1 unit at price 824.729980, total balance 1985.129882\n","day 109: buy 1 unit at price 823.349976, total balance 1161.779906\n","day 110: buy 1 unit at price 824.320007, total balance 337.459899\n","day 112, sell 1 unit at price 837.169983, investment -1.367851 %, total balance 1174.629882,\n","day 113: buy 1 unit at price 836.820007, total balance 337.809875\n","day 115, sell 1 unit at price 841.650024, investment -1.228697 %, total balance 1179.459899,\n","day 116, sell 1 unit at price 843.190002, investment 1.532883 %, total balance 2022.649901,\n","day 117, sell 1 unit at price 862.760010, investment 3.998358 %, total balance 2885.409911,\n","day 118: buy 1 unit at price 872.299988, total balance 2013.109923\n","day 119, sell 1 unit at price 871.729980, investment 7.035594 %, total balance 2884.839903,\n","day 120, sell 1 unit at price 874.250000, investment 5.152696 %, total balance 3759.089903,\n","day 123, sell 1 unit at price 916.440002, investment 9.288655 %, total balance 4675.529905,\n","day 124: buy 1 unit at price 927.039978, total balance 3748.489927\n","day 126, sell 1 unit at price 927.130005, investment 11.090741 %, total balance 4675.619932,\n","day 127, sell 1 unit at price 934.299988, investment 12.854518 %, total balance 5609.919920,\n","day 128, sell 1 unit at price 932.169983, investment 13.027294 %, total balance 6542.089903,\n","day 129: buy 1 unit at price 928.780029, total balance 5613.309874\n","day 133, sell 1 unit at price 943.000000, investment 14.532098 %, total balance 6556.309874,\n","day 137, sell 1 unit at price 941.859985, investment 14.259023 %, total balance 7498.169859,\n","day 140, sell 1 unit at price 969.539978, investment 15.860038 %, total balance 8467.709837,\n","day 141: buy 1 unit at price 971.469971, total balance 7496.239866\n","day 142, sell 1 unit at price 975.880005, investment 11.874357 %, total balance 8472.119871,\n","day 143, sell 1 unit at price 964.859985, investment 4.079652 %, total balance 9436.979856,\n","day 144, sell 1 unit at price 966.950012, investment 4.109690 %, total balance 10403.929868,\n","day 145, sell 1 unit at price 975.599976, investment 0.425129 %, total balance 11379.529844,\n","day 147: buy 1 unit at price 976.570007, total balance 10402.959837\n","day 148: buy 1 unit at price 980.940002, total balance 9422.019835\n","day 149, sell 1 unit at price 983.409973, investment 0.700407 %, total balance 10405.429808,\n","day 150: buy 1 unit at price 949.830017, total balance 9455.599791\n","day 151, sell 1 unit at price 942.900024, investment -3.877911 %, total balance 10398.499815,\n","day 152, sell 1 unit at price 953.400024, investment 0.375857 %, total balance 11351.899839,\n","day 153: buy 1 unit at price 950.760010, total balance 10401.139829\n","day 155, sell 1 unit at price 939.780029, investment -1.154864 %, total balance 11340.919858,\n","day 156: buy 1 unit at price 957.369995, total balance 10383.549863\n","day 157: buy 1 unit at price 950.630005, total balance 9432.919858\n","day 158: buy 1 unit at price 959.450012, total balance 8473.469846\n","day 159, sell 1 unit at price 957.090027, investment -0.029243 %, total balance 9430.559873,\n","day 160: buy 1 unit at price 965.590027, total balance 8464.969846\n","day 162, sell 1 unit at price 927.330017, investment -2.451005 %, total balance 9392.299863,\n","day 163: buy 1 unit at price 940.489990, total balance 8451.809873\n","day 164: buy 1 unit at price 917.789978, total balance 7534.019895\n","day 165: buy 1 unit at price 908.729980, total balance 6625.289915\n","day 166, sell 1 unit at price 898.700012, investment -6.331752 %, total balance 7523.989927,\n","day 167, sell 1 unit at price 911.710022, investment -5.580008 %, total balance 8435.699949,\n","day 169: buy 1 unit at price 918.590027, total balance 7517.109922\n","day 170: buy 1 unit at price 928.799988, total balance 6588.309934\n","day 171: buy 1 unit at price 930.090027, total balance 5658.219907\n","day 172: buy 1 unit at price 943.830017, total balance 4714.389890\n","day 173: buy 1 unit at price 947.159973, total balance 3767.229917\n","day 175: buy 1 unit at price 953.419983, total balance 2813.809934\n","day 177: buy 1 unit at price 970.890015, total balance 1842.919919\n","day 178, sell 1 unit at price 968.150024, investment 2.941024 %, total balance 2811.069943,\n","day 179: buy 1 unit at price 972.919983, total balance 1838.149960\n","day 180: buy 1 unit at price 980.340027, total balance 857.809933\n","day 187, sell 1 unit at price 930.390015, investment 1.372867 %, total balance 1788.199948,\n","day 189, sell 1 unit at price 927.960022, investment 2.116145 %, total balance 2716.159970,\n","day 190, sell 1 unit at price 929.359985, investment 1.172444 %, total balance 3645.519955,\n","day 191, sell 1 unit at price 926.789978, investment -0.216409 %, total balance 4572.309933,\n","day 192, sell 1 unit at price 922.900024, investment -0.773044 %, total balance 5495.209957,\n","day 193: buy 1 unit at price 907.239990, total balance 4587.969967\n","day 196, sell 1 unit at price 922.219971, investment -2.289612 %, total balance 5510.189938,\n","day 197, sell 1 unit at price 926.960022, investment -2.132686 %, total balance 6437.149960,\n","day 198, sell 1 unit at price 910.979980, investment -4.451344 %, total balance 7348.129940,\n","day 200, sell 1 unit at price 906.659973, investment -6.615584 %, total balance 8254.789913,\n","day 201: buy 1 unit at price 924.690002, total balance 7330.099911\n","day 202: buy 1 unit at price 927.000000, total balance 6403.099911\n","day 204: buy 1 unit at price 915.890015, total balance 5487.209896\n","day 205: buy 1 unit at price 913.809998, total balance 4573.399898\n","day 206: buy 1 unit at price 921.289978, total balance 3652.109920\n","day 207: buy 1 unit at price 929.570007, total balance 2722.539913\n","day 208: buy 1 unit at price 939.330017, total balance 1783.209896\n","day 209: buy 1 unit at price 937.340027, total balance 845.869869\n","day 210, sell 1 unit at price 928.450012, investment -4.570774 %, total balance 1774.319881,\n","day 211: buy 1 unit at price 927.809998, total balance 846.509883\n","day 215, sell 1 unit at price 932.070007, investment -4.923804 %, total balance 1778.579890,\n","day 218: buy 1 unit at price 920.289978, total balance 858.289912\n","day 219, sell 1 unit at price 915.000000, investment 0.855343 %, total balance 1773.289912,\n","day 220, sell 1 unit at price 921.809998, investment -0.311456 %, total balance 2695.099910,\n","day 221, sell 1 unit at price 931.580017, investment 0.494069 %, total balance 3626.679927,\n","day 223: buy 1 unit at price 928.530029, total balance 2698.149898\n","day 225, sell 1 unit at price 924.859985, investment 0.979372 %, total balance 3623.009883,\n","day 228: buy 1 unit at price 959.109985, total balance 2663.899898\n","day 230, sell 1 unit at price 957.789978, investment 4.812814 %, total balance 3621.689876,\n","day 231, sell 1 unit at price 951.679993, investment 3.298637 %, total balance 4573.369869,\n","day 232, sell 1 unit at price 969.960022, investment 4.345021 %, total balance 5543.329891,\n","day 233, sell 1 unit at price 978.890015, investment 4.211512 %, total balance 6522.219906,\n","day 234, sell 1 unit at price 977.000000, investment 4.231119 %, total balance 7499.219906,\n","day 235, sell 1 unit at price 972.599976, investment 4.827495 %, total balance 8471.819882,\n","day 236, sell 1 unit at price 989.250000, investment 7.493293 %, total balance 9461.069882,\n","day 239: buy 1 unit at price 992.000000, total balance 8469.069882\n","day 240, sell 1 unit at price 992.179993, investment 6.854917 %, total balance 9461.249875,\n","day 242, sell 1 unit at price 984.450012, investment 2.642036 %, total balance 10445.699887,\n","day 243: buy 1 unit at price 988.200012, total balance 9457.499875\n","day 245, sell 1 unit at price 970.539978, investment -2.163309 %, total balance 10428.039853,\n","day 246, sell 1 unit at price 973.330017, investment -1.504756 %, total balance 11401.369870,\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"OVy603RmY6MN","outputId":"11f6fb7f-d1a8-4fc1-e955-a4a3f0799c6d"},"source":["fig = plt.figure(figsize = (15,5))\n","plt.plot(close, color='r', lw=2.)\n","plt.plot(close, '^', markersize=10, color='m', label = 'buying signal', markevery = states_buy)\n","plt.plot(close, 'v', markersize=10, color='k', label = 'selling signal', markevery = states_sell)\n","plt.title('total gains %f, total investment %f%%'%(total_gains, invest))\n","plt.legend()\n","plt.savefig('output/'+name+'.png')\n","plt.show()"],"execution_count":null,"outputs":[{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["
"]},"metadata":{"tags":[],"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"BBq6lbZLmlxa"},"source":["## Neuro-evolution agent"]},{"cell_type":"code","metadata":{"id":"F7HdJ5ThY6Ms"},"source":["df= df_full.copy()\n","name = 'Neuro-evolution agent'\n","\n","close = df.Close.values.tolist()\n","initial_money = 10000\n","window_size = 30\n","skip = 1"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"_I6zR61AY6Mu"},"source":["class neuralnetwork:\n"," def __init__(self, id_, hidden_size = 128):\n"," self.W1 = np.random.randn(window_size, hidden_size) / np.sqrt(window_size)\n"," self.W2 = np.random.randn(hidden_size, 3) / np.sqrt(hidden_size)\n"," self.fitness = 0\n"," self.id = id_\n","\n","def relu(X):\n"," return np.maximum(X, 0)\n"," \n","def softmax(X):\n"," e_x = np.exp(X - np.max(X, axis=-1, keepdims=True))\n"," return e_x / np.sum(e_x, axis=-1, keepdims=True)\n","\n","def feed_forward(X, nets):\n"," a1 = np.dot(X, nets.W1)\n"," z1 = relu(a1)\n"," a2 = np.dot(z1, nets.W2)\n"," return softmax(a2)"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"DDgsg4tYY6Mw"},"source":["class NeuroEvolution:\n"," def __init__(self, population_size, mutation_rate, model_generator,\n"," state_size, window_size, trend, skip, initial_money):\n"," self.population_size = population_size\n"," self.mutation_rate = mutation_rate\n"," self.model_generator = model_generator\n"," self.state_size = state_size\n"," self.window_size = window_size\n"," self.half_window = window_size // 2\n"," self.trend = trend\n"," self.skip = skip\n"," self.initial_money = initial_money\n"," \n"," def _initialize_population(self):\n"," self.population = []\n"," for i in range(self.population_size):\n"," self.population.append(self.model_generator(i))\n"," \n"," def mutate(self, individual, scale=1.0):\n"," mutation_mask = np.random.binomial(1, p=self.mutation_rate, size=individual.W1.shape)\n"," individual.W1 += np.random.normal(loc=0, scale=scale, size=individual.W1.shape) * mutation_mask\n"," mutation_mask = np.random.binomial(1, p=self.mutation_rate, size=individual.W2.shape)\n"," individual.W2 += np.random.normal(loc=0, scale=scale, size=individual.W2.shape) * mutation_mask\n"," return individual\n"," \n"," def inherit_weights(self, parent, child):\n"," child.W1 = parent.W1.copy()\n"," child.W2 = parent.W2.copy()\n"," return child\n"," \n"," def crossover(self, parent1, parent2):\n"," child1 = self.model_generator((parent1.id+1)*10)\n"," child1 = self.inherit_weights(parent1, child1)\n"," child2 = self.model_generator((parent2.id+1)*10)\n"," child2 = self.inherit_weights(parent2, child2)\n"," # first W\n"," n_neurons = child1.W1.shape[1]\n"," cutoff = np.random.randint(0, n_neurons)\n"," child1.W1[:, cutoff:] = parent2.W1[:, cutoff:].copy()\n"," child2.W1[:, cutoff:] = parent1.W1[:, cutoff:].copy()\n"," # second W\n"," n_neurons = child1.W2.shape[1]\n"," cutoff = np.random.randint(0, n_neurons)\n"," child1.W2[:, cutoff:] = parent2.W2[:, cutoff:].copy()\n"," child2.W2[:, cutoff:] = parent1.W2[:, cutoff:].copy()\n"," return child1, child2\n"," \n"," def get_state(self, t):\n"," window_size = self.window_size + 1\n"," d = t - window_size + 1\n"," block = self.trend[d : t + 1] if d >= 0 else -d * [self.trend[0]] + self.trend[0 : t + 1]\n"," res = []\n"," for i in range(window_size - 1):\n"," res.append(block[i + 1] - block[i])\n"," return np.array([res])\n"," \n"," def act(self, p, state):\n"," logits = feed_forward(state, p)\n"," return np.argmax(logits, 1)[0]\n"," \n"," def buy(self, individual):\n"," initial_money = self.initial_money\n"," starting_money = initial_money\n"," state = self.get_state(0)\n"," inventory = []\n"," states_sell = []\n"," states_buy = []\n"," \n"," for t in range(0, len(self.trend) - 1, self.skip):\n"," action = self.act(individual, state)\n"," next_state = self.get_state(t + 1)\n"," \n"," if action == 1 and starting_money >= self.trend[t]:\n"," inventory.append(self.trend[t])\n"," initial_money -= self.trend[t]\n"," states_buy.append(t)\n"," print('day %d: buy 1 unit at price %f, total balance %f'% (t, self.trend[t], initial_money))\n"," \n"," elif action == 2 and len(inventory):\n"," bought_price = inventory.pop(0)\n"," initial_money += self.trend[t]\n"," states_sell.append(t)\n"," try:\n"," invest = ((self.trend[t] - bought_price) / bought_price) * 100\n"," except:\n"," invest = 0\n"," print(\n"," 'day %d, sell 1 unit at price %f, investment %f %%, total balance %f,'\n"," % (t, self.trend[t], invest, initial_money)\n"," )\n"," state = next_state\n"," \n"," invest = ((initial_money - starting_money) / starting_money) * 100\n"," total_gains = initial_money - starting_money\n"," return states_buy, states_sell, total_gains, invest\n"," \n"," def calculate_fitness(self):\n"," for i in range(self.population_size):\n"," initial_money = self.initial_money\n"," starting_money = initial_money\n"," state = self.get_state(0)\n"," inventory = []\n"," \n"," for t in range(0, len(self.trend) - 1, self.skip):\n"," action = self.act(self.population[i], state)\n"," next_state = self.get_state(t + 1)\n"," \n"," if action == 1 and starting_money >= self.trend[t]:\n"," inventory.append(self.trend[t])\n"," starting_money -= self.trend[t]\n","\n"," elif action == 2 and len(inventory):\n"," bought_price = inventory.pop(0)\n"," starting_money += self.trend[t]\n","\n"," state = next_state\n"," invest = ((starting_money - initial_money) / initial_money) * 100\n"," self.population[i].fitness = invest\n"," \n"," def evolve(self, generations=20, checkpoint= 5):\n"," self._initialize_population()\n"," n_winners = int(self.population_size * 0.4)\n"," n_parents = self.population_size - n_winners\n"," for epoch in range(generations):\n"," self.calculate_fitness()\n"," fitnesses = [i.fitness for i in self.population]\n"," sort_fitness = np.argsort(fitnesses)[::-1]\n"," self.population = [self.population[i] for i in sort_fitness]\n"," fittest_individual = self.population[0]\n"," if (epoch+1) % checkpoint == 0:\n"," print('epoch %d, fittest individual %d with accuracy %f'%(epoch+1, sort_fitness[0], \n"," fittest_individual.fitness))\n"," next_population = [self.population[i] for i in range(n_winners)]\n"," total_fitness = np.sum([np.abs(i.fitness) for i in self.population])\n"," parent_probabilities = [np.abs(i.fitness / total_fitness) for i in self.population]\n"," parents = np.random.choice(self.population, size=n_parents, p=parent_probabilities, replace=False)\n"," for i in np.arange(0, len(parents), 2):\n"," child1, child2 = self.crossover(parents[i], parents[i+1])\n"," next_population += [self.mutate(child1), self.mutate(child2)]\n"," self.population = next_population\n"," return fittest_individual"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"ubjahpzNY6My"},"source":["population_size = 100\n","generations = 100\n","mutation_rate = 0.1\n","neural_evolve = NeuroEvolution(population_size, mutation_rate, neuralnetwork,\n"," window_size, window_size, close, skip, initial_money)"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"1jVUEsy7Y6M0","outputId":"c257c180-6cc8-452c-80f2-fc43a71a774b"},"source":["fittest_nets = neural_evolve.evolve(50)"],"execution_count":null,"outputs":[{"output_type":"stream","text":["epoch 5, fittest individual 0 with accuracy 10.849749\n","epoch 10, fittest individual 0 with accuracy 11.095000\n","epoch 15, fittest individual 0 with accuracy 11.095000\n","epoch 20, fittest individual 93 with accuracy 13.756802\n","epoch 25, fittest individual 95 with accuracy 23.728605\n","epoch 30, fittest individual 0 with accuracy 23.728605\n","epoch 35, fittest individual 0 with accuracy 23.728605\n","epoch 40, fittest individual 0 with accuracy 23.728605\n","epoch 45, fittest individual 0 with accuracy 23.728605\n","epoch 50, fittest individual 0 with accuracy 23.728605\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"h8ttTs-LY6M_","outputId":"fbc4b6a8-0df3-47a0-e572-4bbb7f4c2c92"},"source":["states_buy, states_sell, total_gains, invest = neural_evolve.buy(fittest_nets)"],"execution_count":null,"outputs":[{"output_type":"stream","text":["day 1: buy 1 unit at price 762.130005, total balance 9237.869995\n","day 2: buy 1 unit at price 762.020020, total balance 8475.849975\n","day 3, sell 1 unit at price 782.520020, investment 2.675399 %, total balance 9258.369995,\n","day 5, sell 1 unit at price 785.309998, investment 3.056347 %, total balance 10043.679993,\n","day 6: buy 1 unit at price 762.559998, total balance 9281.119995\n","day 7: buy 1 unit at price 754.020020, total balance 8527.099975\n","day 8: buy 1 unit at price 736.080017, total balance 7791.019958\n","day 9: buy 1 unit at price 758.489990, total balance 7032.529968\n","day 10, sell 1 unit at price 764.479980, investment 0.251781 %, total balance 7797.009948,\n","day 12: buy 1 unit at price 760.539978, total balance 7036.469970\n","day 14: buy 1 unit at price 768.270020, total balance 6268.199950\n","day 15: buy 1 unit at price 760.989990, total balance 5507.209960\n","day 16: buy 1 unit at price 761.679993, total balance 4745.529967\n","day 17, sell 1 unit at price 768.239990, investment 1.885888 %, total balance 5513.769957,\n","day 18, sell 1 unit at price 770.840027, investment 4.722314 %, total balance 6284.609984,\n","day 20: buy 1 unit at price 747.919983, total balance 5536.690001\n","day 21: buy 1 unit at price 750.500000, total balance 4786.190001\n","day 22: buy 1 unit at price 762.520020, total balance 4023.669981\n","day 24, sell 1 unit at price 771.190002, investment 1.674381 %, total balance 4794.859983,\n","day 25, sell 1 unit at price 776.419983, investment 2.087991 %, total balance 5571.279966,\n","day 26, sell 1 unit at price 789.289978, investment 2.736012 %, total balance 6360.569944,\n","day 27: buy 1 unit at price 789.270020, total balance 5571.299924\n","day 28: buy 1 unit at price 796.099976, total balance 4775.199948\n","day 29: buy 1 unit at price 797.070007, total balance 3978.129941\n","day 31: buy 1 unit at price 790.799988, total balance 3187.329953\n","day 32, sell 1 unit at price 794.200012, investment 4.364055 %, total balance 3981.529965,\n","day 33: buy 1 unit at price 796.419983, total balance 3185.109982\n","day 34, sell 1 unit at price 794.559998, investment 4.316774 %, total balance 3979.669980,\n","day 35, sell 1 unit at price 791.260010, investment 5.794741 %, total balance 4770.929990,\n","day 37: buy 1 unit at price 791.549988, total balance 3979.380002\n","day 38, sell 1 unit at price 785.049988, investment 4.603596 %, total balance 4764.429990,\n","day 39: buy 1 unit at price 782.789978, total balance 3981.640012\n","day 40: buy 1 unit at price 771.820007, total balance 3209.820005\n","day 41: buy 1 unit at price 786.140015, total balance 2423.679990\n","day 42, sell 1 unit at price 786.900024, investment 3.197294 %, total balance 3210.580014,\n","day 43: buy 1 unit at price 794.020020, total balance 2416.559994\n","day 44: buy 1 unit at price 806.150024, total balance 1610.409970\n","day 46, sell 1 unit at price 804.789978, investment 1.966369 %, total balance 2415.199948,\n","day 47, sell 1 unit at price 807.909973, investment 1.483482 %, total balance 3223.109921,\n","day 48: buy 1 unit at price 806.359985, total balance 2416.749936\n","day 49, sell 1 unit at price 807.880005, investment 1.356217 %, total balance 3224.629941,\n","day 50, sell 1 unit at price 804.609985, investment 1.746332 %, total balance 4029.239926,\n","day 51, sell 1 unit at price 806.070007, investment 1.211675 %, total balance 4835.309933,\n","day 52: buy 1 unit at price 802.174988, total balance 4033.134945\n","day 53: buy 1 unit at price 805.020020, total balance 3228.114925\n","day 54, sell 1 unit at price 819.309998, investment 3.507044 %, total balance 4047.424923,\n","day 55, sell 1 unit at price 823.869995, investment 5.247898 %, total balance 4871.294918,\n","day 56, sell 1 unit at price 835.669983, investment 8.272651 %, total balance 5706.964901,\n","day 57, sell 1 unit at price 832.150024, investment 5.852648 %, total balance 6539.114925,\n","day 58: buy 1 unit at price 823.309998, total balance 5715.804927\n","day 59: buy 1 unit at price 802.320007, total balance 4913.484920\n","day 60: buy 1 unit at price 796.789978, total balance 4116.694942\n","day 61: buy 1 unit at price 795.695007, total balance 3320.999935\n","day 63: buy 1 unit at price 801.489990, total balance 2519.509945\n","day 65: buy 1 unit at price 806.969971, total balance 1712.539974\n","day 66, sell 1 unit at price 808.380005, investment 1.808517 %, total balance 2520.919979,\n","day 67: buy 1 unit at price 809.559998, total balance 1711.359981\n","day 68, sell 1 unit at price 813.669983, investment 0.932824 %, total balance 2525.029964,\n","day 69, sell 1 unit at price 819.239990, investment 1.597302 %, total balance 3344.269954,\n","day 70, sell 1 unit at price 820.450012, investment 2.278184 %, total balance 4164.719966,\n","day 71: buy 1 unit at price 818.979980, total balance 3345.739986\n","day 72: buy 1 unit at price 824.159973, total balance 2521.580013\n","day 73: buy 1 unit at price 828.070007, total balance 1693.510006\n","day 75, sell 1 unit at price 830.760010, investment 3.197435 %, total balance 2524.270016,\n","day 76, sell 1 unit at price 831.330017, investment 0.974119 %, total balance 3355.600033,\n","day 77, sell 1 unit at price 828.640015, investment 3.280488 %, total balance 4184.240048,\n","day 78, sell 1 unit at price 829.280029, investment 4.077618 %, total balance 5013.520077,\n","day 79, sell 1 unit at price 823.210022, investment 3.457985 %, total balance 5836.730099,\n","day 80: buy 1 unit at price 835.239990, total balance 5001.490109\n","day 81, sell 1 unit at price 830.630005, investment 3.635730 %, total balance 5832.120114,\n","day 83: buy 1 unit at price 827.780029, total balance 5004.340085\n","day 84: buy 1 unit at price 831.909973, total balance 4172.430112\n","day 85: buy 1 unit at price 835.369995, total balance 3337.060117\n","day 86, sell 1 unit at price 838.679993, investment 3.929517 %, total balance 4175.740110,\n","day 87, sell 1 unit at price 843.250000, investment 4.161520 %, total balance 5018.990110,\n","day 88, sell 1 unit at price 845.539978, investment 3.243058 %, total balance 5864.530088,\n","day 89: buy 1 unit at price 845.619995, total balance 5018.910093\n","day 90, sell 1 unit at price 847.200012, investment 2.795578 %, total balance 5866.110105,\n","day 91: buy 1 unit at price 848.780029, total balance 5017.330076\n","day 92: buy 1 unit at price 852.119995, total balance 4165.210081\n","day 93, sell 1 unit at price 848.400024, investment 2.455108 %, total balance 5013.610105,\n","day 95: buy 1 unit at price 829.590027, total balance 4184.020078\n","day 97: buy 1 unit at price 814.429993, total balance 3369.590085\n","day 98, sell 1 unit at price 819.510010, investment -1.883289 %, total balance 4189.100095,\n","day 100: buy 1 unit at price 831.409973, total balance 3357.690122\n","day 101, sell 1 unit at price 831.500000, investment 0.449391 %, total balance 4189.190122,\n","day 102: buy 1 unit at price 829.559998, total balance 3359.630124\n","day 103: buy 1 unit at price 838.549988, total balance 2521.080136\n","day 104: buy 1 unit at price 834.570007, total balance 1686.510129\n","day 105, sell 1 unit at price 831.409973, investment -0.060103 %, total balance 2517.920102,\n","day 106: buy 1 unit at price 827.880005, total balance 1690.040097\n","day 108: buy 1 unit at price 824.729980, total balance 865.310117\n","day 109: buy 1 unit at price 823.349976, total balance 41.960141\n","day 110: buy 1 unit at price 824.320007, total balance -782.359866\n","day 112, sell 1 unit at price 837.169983, investment 0.215472 %, total balance 54.810117,\n","day 113, sell 1 unit at price 836.820007, investment -1.040655 %, total balance 891.630124,\n","day 114, sell 1 unit at price 838.210022, investment -1.245318 %, total balance 1729.840146,\n","day 115: buy 1 unit at price 841.650024, total balance 888.190122\n","day 117: buy 1 unit at price 862.760010, total balance 25.430112\n","day 118, sell 1 unit at price 872.299988, investment 2.368210 %, total balance 897.730100,\n","day 119: buy 1 unit at price 871.729980, total balance 26.000120\n","day 120, sell 1 unit at price 874.250000, investment 5.383379 %, total balance 900.250120,\n","day 121, sell 1 unit at price 905.960022, investment 11.238539 %, total balance 1806.210142,\n","day 122, sell 1 unit at price 912.570007, investment 9.761734 %, total balance 2718.780149,\n","day 123, sell 1 unit at price 916.440002, investment 10.473022 %, total balance 3635.220151,\n","day 124, sell 1 unit at price 927.039978, investment 10.552739 %, total balance 4562.260129,\n","day 125, sell 1 unit at price 931.659973, investment 11.633532 %, total balance 5493.920102,\n","day 126, sell 1 unit at price 927.130005, investment 11.988452 %, total balance 6421.050107,\n","day 127, sell 1 unit at price 934.299988, investment 13.285561 %, total balance 7355.350095,\n","day 128, sell 1 unit at price 932.169983, investment 13.216738 %, total balance 8287.520078,\n","day 129: buy 1 unit at price 928.780029, total balance 7358.740049\n","day 130, sell 1 unit at price 930.599976, investment 12.893047 %, total balance 8289.340025,\n","day 132: buy 1 unit at price 937.080017, total balance 7352.260008\n","day 133, sell 1 unit at price 943.000000, investment 12.041819 %, total balance 8295.260008,\n","day 134: buy 1 unit at price 919.619995, total balance 7375.640013\n","day 135: buy 1 unit at price 930.239990, total balance 6445.400023\n","day 136: buy 1 unit at price 934.010010, total balance 5511.390013\n","day 138: buy 1 unit at price 948.820007, total balance 4562.570006\n","day 140: buy 1 unit at price 969.539978, total balance 3593.030028\n","day 142, sell 1 unit at price 975.880005, investment 13.111409 %, total balance 4568.910033,\n","day 143, sell 1 unit at price 964.859985, investment 10.683355 %, total balance 5533.770018,\n","day 144, sell 1 unit at price 966.950012, investment 4.109690 %, total balance 6500.720030,\n","day 146, sell 1 unit at price 983.679993, investment 4.972892 %, total balance 7484.400023,\n","day 147: buy 1 unit at price 976.570007, total balance 6507.830016\n","day 148, sell 1 unit at price 980.940002, investment 6.667972 %, total balance 7488.770018,\n","day 149: buy 1 unit at price 983.409973, total balance 6505.360045\n","day 150, sell 1 unit at price 949.830017, investment 2.105911 %, total balance 7455.190062,\n","day 151: buy 1 unit at price 942.900024, total balance 6512.290038\n","day 152, sell 1 unit at price 953.400024, investment 2.075996 %, total balance 7465.690062,\n","day 154: buy 1 unit at price 942.309998, total balance 6523.380064\n","day 155: buy 1 unit at price 939.780029, total balance 5583.600035\n","day 157: buy 1 unit at price 950.630005, total balance 4632.970030\n","day 158, sell 1 unit at price 959.450012, investment 1.120339 %, total balance 5592.420042,\n","day 159: buy 1 unit at price 957.090027, total balance 4635.330015\n","day 160, sell 1 unit at price 965.590027, investment -0.407405 %, total balance 5600.920042,\n","day 161, sell 1 unit at price 952.270020, investment -2.488300 %, total balance 6553.190062,\n","day 163: buy 1 unit at price 940.489990, total balance 5612.700072\n","day 165: buy 1 unit at price 908.729980, total balance 4703.970092\n","day 166, sell 1 unit at price 898.700012, investment -8.613901 %, total balance 5602.670104,\n","day 169, sell 1 unit at price 918.590027, investment -2.578216 %, total balance 6521.260131,\n","day 170: buy 1 unit at price 928.799988, total balance 5592.460143\n","day 171, sell 1 unit at price 930.090027, investment -1.296810 %, total balance 6522.550170,\n","day 172: buy 1 unit at price 943.830017, total balance 5578.720153\n","day 173, sell 1 unit at price 947.159973, investment 0.785284 %, total balance 6525.880126,\n","day 174: buy 1 unit at price 955.989990, total balance 5569.890136\n","day 175: buy 1 unit at price 953.419983, total balance 4616.470153\n","day 177, sell 1 unit at price 970.890015, investment 2.131219 %, total balance 5587.360168,\n","day 178, sell 1 unit at price 968.150024, investment 1.155586 %, total balance 6555.510192,\n","day 180, sell 1 unit at price 980.340027, investment 4.237157 %, total balance 7535.850219,\n","day 181, sell 1 unit at price 950.700012, investment 4.618537 %, total balance 8486.550231,\n","day 182: buy 1 unit at price 947.799988, total balance 7538.750243\n","day 183, sell 1 unit at price 934.090027, investment 0.569556 %, total balance 8472.840270,\n","day 185, sell 1 unit at price 930.500000, investment -1.412332 %, total balance 9403.340270,\n","day 186: buy 1 unit at price 930.830017, total balance 8472.510253\n","day 187: buy 1 unit at price 930.390015, total balance 7542.120238\n","day 188, sell 1 unit at price 923.650024, investment -3.382877 %, total balance 8465.770262,\n","day 189: buy 1 unit at price 927.960022, total balance 7537.810240\n","day 191: buy 1 unit at price 926.789978, total balance 6611.020262\n","day 192, sell 1 unit at price 922.900024, investment -3.201103 %, total balance 7533.920286,\n","day 193: buy 1 unit at price 907.239990, total balance 6626.680296\n","day 195: buy 1 unit at price 922.669983, total balance 5704.010313\n","day 197, sell 1 unit at price 926.960022, investment -2.198773 %, total balance 6630.970335,\n","day 199, sell 1 unit at price 910.669983, investment -2.165813 %, total balance 7541.640318,\n","day 201, sell 1 unit at price 924.690002, investment -0.612648 %, total balance 8466.330320,\n","day 202: buy 1 unit at price 927.000000, total balance 7539.330320\n","day 204, sell 1 unit at price 915.890015, investment -1.300703 %, total balance 8455.220335,\n","day 205, sell 1 unit at price 913.809998, investment -1.400531 %, total balance 9369.030333,\n","day 206: buy 1 unit at price 921.289978, total balance 8447.740355\n","day 207, sell 1 unit at price 929.570007, investment 2.461313 %, total balance 9377.310362,\n","day 208: buy 1 unit at price 939.330017, total balance 8437.980345\n","day 209, sell 1 unit at price 937.340027, investment 1.589956 %, total balance 9375.320372,\n","day 211, sell 1 unit at price 927.809998, investment 0.087378 %, total balance 10303.130370,\n","day 212: buy 1 unit at price 935.950012, total balance 9367.180358\n","day 213: buy 1 unit at price 926.500000, total balance 8440.680358\n","day 214, sell 1 unit at price 929.080017, investment 0.845558 %, total balance 9369.760375,\n","day 215, sell 1 unit at price 932.070007, investment -0.772892 %, total balance 10301.830382,\n","day 217: buy 1 unit at price 925.109985, total balance 9376.720397\n","day 218: buy 1 unit at price 920.289978, total balance 8456.430419\n","day 219: buy 1 unit at price 915.000000, total balance 7541.430419\n","day 220, sell 1 unit at price 921.809998, investment -1.510766 %, total balance 8463.240417,\n","day 223: buy 1 unit at price 928.530029, total balance 7534.710388\n","day 224: buy 1 unit at price 920.969971, total balance 6613.740417\n","day 225: buy 1 unit at price 924.859985, total balance 5688.880432\n","day 226, sell 1 unit at price 944.489990, investment 1.941715 %, total balance 6633.370422,\n","day 227, sell 1 unit at price 949.500000, investment 2.636445 %, total balance 7582.870422,\n","day 229, sell 1 unit at price 953.270020, investment 3.583658 %, total balance 8536.140442,\n","day 230, sell 1 unit at price 957.789978, investment 4.676500 %, total balance 9493.930420,\n","day 231: buy 1 unit at price 951.679993, total balance 8542.250427\n","day 232, sell 1 unit at price 969.960022, investment 4.461890 %, total balance 9512.210449,\n","day 233, sell 1 unit at price 978.890015, investment 6.289026 %, total balance 10491.100464,\n","day 235, sell 1 unit at price 972.599976, investment 5.161861 %, total balance 11463.700440,\n","day 236, sell 1 unit at price 989.250000, investment 3.947756 %, total balance 12452.950440,\n","day 238: buy 1 unit at price 989.679993, total balance 11463.270447\n","day 239, sell 1 unit at price 992.000000, investment 0.234420 %, total balance 12455.270447,\n","day 243: buy 1 unit at price 988.200012, total balance 11467.070435\n","day 244: buy 1 unit at price 968.450012, total balance 10498.620423\n","day 245: buy 1 unit at price 970.539978, total balance 9528.080445\n","day 246, sell 1 unit at price 973.330017, investment -1.504756 %, total balance 10501.410462,\n","day 248, sell 1 unit at price 1019.270020, investment 5.247561 %, total balance 11520.680482,\n","day 249, sell 1 unit at price 1017.109985, investment 4.798361 %, total balance 12537.790467,\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"nSDO42dEY6NE","outputId":"3e8abd2e-b6c8-401c-9f06-8b41bb6d2209"},"source":["fig = plt.figure(figsize = (15,5))\n","plt.plot(close, color='r', lw=2.)\n","plt.plot(close, '^', markersize=10, color='m', label = 'buying signal', markevery = states_buy)\n","plt.plot(close, 'v', markersize=10, color='k', label = 'selling signal', markevery = states_sell)\n","plt.title('total gains %f, total investment %f%%'%(total_gains, invest))\n","plt.legend()\n","plt.savefig('output/'+name+'.png')\n","plt.show()"],"execution_count":null,"outputs":[{"output_type":"display_data","data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAA34AAAFBCAYAAAAomn1FAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzs3Xl4VNX5wPHvvTMTshIgC/umwAHCvhRBUdwXkEUQ1IpLq2mLFq1aa62tWqlVW1t/tnWrWqu4gIKKRXGjVsUVUEGFwx62BMKeBZLM8vvj3hkmk5nJZJms7+d5eGrueu7kTnrf+57zHsPn8yGEEEIIIYQQouUyG7sBQgghhBBCCCHiSwI/IYQQQgghhGjhJPATQgghhBBCiBZOAj8hhBBCCCGEaOEk8BNCCCGEEEKIFk4CPyGEEEIIIYRo4STwE0K0akqpZ5RS8+Jw3PFKKV3fxxXNl1LqLqXU/Ajr5H4RQggRV87GboAQQkSjlNoGXKO1fi8e28eL1vojQNXnMZVS2cD/AacBKcC3wE1a68/t9ROA5UBp0G7Xaa3/ba+fD5xp71sAPKC1ftJe90Pg8aD9TCAJGKW1XhWmLcUhi5KAR7TWP7fXXwPcBnQCPgZ+pLXeba8zgPuAa+x9nwRu01pXmlhWKXUF8G/gWn877eUjgIeAEUAJcK/W+v+UUj2A70PalQLcorV+MPQawlzTB8D84HPV5/bRxON+qQml1FVY35tTGun824jyvVVKnQTcA4wEPMAHwFytdb69/i7gN0BZ0G5DtNZbwhzrdOBhoLt9rA+B67XWu+z13wE9g3ZJBN7SWl+olBoPvBVyyBRghtZ6kVKqDda9PQvrO/EicIPWusI+dgfgKeAcYB/wa631C/a6CUT//j4EXAmsBy7WWu+0l18GnKS1nhvusxNCCD8J/IQQovlIBb4EbgL2Aj8Gliqlemmt/YHYbq11twj7/xH4sda6TCnVH/hAKfWV1nqV1vp54Hn/hnYg8FtgdbgDaa1Tg7ZNxQokX7Z/ngDcC5wObMQKVl/EClgBcoGpwFDAB7wLbAUeCzpme+B24Lvg8yqlMoFlwC+AV4AEoJvdpu32Z+TftjewCVgU4fMQzUd74AngbcAN/B34F3Be0DYLtNaXx3Cs74Fztda77UDtHuBRYDKA1jrHv6H9kmIL9r1tB+jB99gE4A2sexKslx2jgEGAw153B3Cnvf4fQDnQERiG9f39Rmvtv8/Dfn+VUj/ACno7AfPs81yvlEoHfsnx75YQQkQkgZ8QoslSSj0H9ADeUEp5gN9rrR9QSk3GCmK6Al8DP9Nar4uy/cvAeKw38N/Y238X7pwh53cAD2C9ZS8CHgT+Bri01m6l1NXArViBRyFwv9b6cXvfCVjZoG72z9uwHlavwMomLAOu1Fofs4OZZ4BTAC9WsHOa1tob3B47e/GXoEVPKKX+jJUpqpKVCxVyzT7734kR9r0SeDY0CxfBdKxA9CP750nAy/7zKaXuAXYppU7UWm+2j/1gUMbiQeBaggI/rN/vw8DMkHPdBLxtB6pgZXjWRWjXFcCHWutt1V2AUuoPWPfISXZm5Rmt9fVKqXFYgWs/YANW9uaTKNv/H3ARkI4V9N5oBwvVnX8Csd8v64Bfaq3/Y2/rBPKxgpnVdnbsL8BAIM9u8wf2tlcBvwOysDJOd2AF948BLjuT69Zat1NKPYOVfeptX+s3WL/r27B+h3uAS7XWX9nH7oL1/TgVKAb+qrV+2F53l92eY8A0YLt9PSsjfW+DPx+tdaUsm1Lq78D/qvtcw9Fa7wlZ5AH6RNj8VCCTyC8PrgRe0VqX2D9fiPV34IDdzoeB+4E7lVIpWJ/fIPtFzcdKqSXAbKzPNJrewMf2S5v3AX927w/An7TWR6rZXwghZIyfEKLp0lrPxnpAvFBrnWoHcf2wskc3Yj28von1wJgQbnv7UG8BfYFsrIfc50PPFcG1wPlYb+ZHYGWpgu3FCnLaAlcDf7W7IUYyEytD0RsYAlxlL78Z2GlfT0esTFe1AZdSahhWxmtT0OJspdQepdRWpdRf7YfN4H0eUUqVYnUXy8f6/EKP2xPrgffZ6tpgCxckGmH+e5D9vzlYQYTfN/Yy//l/gJU1CQ4E/U4CDiilPlFK7VVKvWF38Qy9BgMraPp3LBegtf4NVuB6vX3vXG93y1uKFYBmYAVTS5VSGeG2tw/1Jdb90gF4AXhZKZUYSxvCiHS/vAhcGrTducA+O+jrard5nt2GW4BFSqks+154GDhfa50GjAO+1lqvA34KfGpfS7uQNtyBFfyUAZ9ifYcysTKufwFQSplY2a1vsF7InAncqJQ6N+hYk4GXgHbAEqzANuz3PIbP5lRCssHAhUqpA0qp75RSP4u2s1Kqh1LqEHDU/owinfNKYFFQYBd8jBRgBlXvsdB7v5udmeuHFVRvCFpf6d4n8vf3O2C8UioJ67P9Tik1ClD+rqJCCFEdCfyEEM3NLGCp1vpde9zMn7EyeeMi7aC1flprXaS1LgPuAobaD2LVmQn8n9Z6p9b6INbYneDjLtVab9Za+7TW/wPewcqMRPKw1nq3nQ14AytAAKgAOgM9tdYVWuuPqsu0KaXaAs8Bd2utD9uL19vH7AycgdU1LDhDiNZ6DpBmt3MxlcdE+V0BfKS13hqtDXY7emJ1Mwt++F0GzFRKDbEfVH+HFcgm2+tTgcNB2x8GUpVShp1lfQQroKqU8bR1w3oYvwErS7QVKxAKdQpWEP1KddcQxURgo9b6Oa21W2v9ItZnfGGkHbTW87XW++3tHwTaUPuxe5HulxeAyUop/+d5Gcc/g8uBN7XWb2qtvVrrd4GVwAX2ei8wSCmVpLXOjyHz/ardFfgY8CpwTGv9rNbaAywAhtvbjQaytNa/11qX29npfwKXBB3rY7tdHqx7d2jNPxJQSg3Buqd+GbR4ITAA6+XJtcDvlFKXhtkdsLoF2wFuJlZguz7MeZKxArtnIhzmIqysaXDmcRlwgx1od+J4Zi4Z674Pzcwdxvo+QpTvr9b6W6ys42dY9/0DWEH8XKXUXKXUh0qp55VS7RBCiAikq6cQornpgtV9DQCttVcptQMry1CFHUj8AbgY66HQH0xkUjn4iHSuHUE/B/83Sqnzscbu9MN6kZYMrI1yvIKg/y61jw/wJ6yA9B2lFMATWuv7iMAOpt4APtNa/9G/XGtdEHSOrUqpW4H/AD8J3t9+8P5YKXU58DOsB8hgV2CN0YvFbKwH+kCQqLV+Tyl1J9aDalusQixFWFlNsLoBtg06RlugWGvtU0rNAdZorT+LcL6jWMHIlwBKqbuBfUqp9KAAGI5nakKL0NREpXvNlkeEe81uzy1YYy+7YAW7bbHutdoIe79orTfZ3T0vVEq9gZVJ8wdgPYGLlVLBwakL+K/WukQpNQsrw/WUUmoFcLPWukrQEyS4W+TRMD/7x7v1BLrYWTQ/B8e7/4a7nkSllFNr7Y5y/kqUUn2wMvg3BHeh1VoHF/X5xO5yO4PwLwUCtNYHlFL/Br5RSnUNactFwAEidykNl+n+A1ZG82uslyr/xPrd7MEan9c25Bhtsb4b1X5/tdZ/Bf5qfw7XYRWlMbHGzA4HfoXVZbS6bqNCiFZKAj8hRFMXmvnaDQz2/2B36esO7Iqw/WXAFOAsYBvW2KuDVO6OFUk+duEQW/eg87bBCmyuAF7XWlcopV6L8biVaK2LsLp73qyUGgQsV0p9qbV+P3Rb+7yvYQVRPwldH8JH9J4dTqwxfsHHPxkrwIg1U3YFIZlQAK31P7AKWWB3z70DqwopWN3WhgJf2D8P5Xi3vTOB05RS/gxVB2C4UmqY3Z1yDZV/x1Uyo3ZgfDHWWLKaCHev9QxZ1oPjhTxCq5COxxrzeSbwnf1SItZ7rab83T1N4Huttb+77w7gOa31teF20lq/Dbxtf0bzsAKT8aHXUgs7gK1a67613D+Wrs09gfeAe7TWz8VwvFg/dydWN/C2WIGeX8Rxrkqp7sAEqr5UOQpcb/9DKZULrLLvhQ2AUynVV2u90d4l+N4Pdw1Vvr9KqY5Ywd5YrOzzGvvvz5dYmXAhhAhLAj8hRFO3Bzgh6OeFwG1KqTOx3njfgPVm/ZMI26fZ6/djZeRizWT5z3WDUmop1rQBvwpal4DVja8QcNvZv3M4HtzETCk1Caub12asLKSH45nJ4O1cWAHZUazCGN6Q9adjVSDcjhWw3ge8bq/Lxuo+9h97/7OwAofQ7nD+TFlRDO0eh5X9ejlkeSJWsYzvsILlJ7C6zB60N3kWuEkp9SbWw+3NWEVBwBrHFjwmbrF9zU/ZP/8La8zaw/bxf4uVcQzO9k3DCu7/G9KuXlhdQ3vr8AVfQu+dN4G/Katc/kKswhwDsT7DcNunYVWcLMR6wL+Nqhme+vISVnbJP5bQbz7wpT227j2sbN9JWONAK+z/fg/rHijm+H22B2ssWoLWurwW7fkCKFJK/Qorg1yO1fUyyZ+drUboZ1mJPXZxOfB3rXWVsZ9KqSlYfw8OYXU7nYs1VjbcsS7Cunc2cnzs5lf+giz2Nt2wqtL+NEKTZgOfaKtYUWg7fVgvjcZg3Z8/BrAzrouB3ytrupNhWC+lxtn7Rvz+hvgLcJfWulQptRUYrazKuhPs/YUQIiwZ4yeEaOr+CNyhlDqklLpFa62xxjH9DWt8zYVYRSHKw22PFWTkYWUEv8caIxOrf2KN21sDfIUVCLgBjx0YzcUKCA5iZRaX1PIa+2I9jBdjFc94RGv93zDbjcMqJnMOcEgpVWz/848rHI4VAJfY/7uW42OMfFjdOnfa7f0zVsXJQJvtgG0mYQqiKKVuV0qFzl92JbA4TJCYiBWMFGMFBJ9iPQD7PY7VVXUtVqC81F6G1vqQ1rrA/w8rgDjiD+y01suxHuiXYhXX6YP12Ye267kwmZruHL8Xwvk/YIZS6qBS6mGt9X6sz/tmrBcHtwKTtNb7wm2PNdXAMqzqn3lYFSx3hJ6kPmhr/rpPse6JBUHLd2AFE7djBaA7sMbCmfa/m7AymQewxmb6i6AsxwqGCpRS/uurSXs8WJ/VMKzgeh/W/IyxjKWFqt/bUNdgBYZ3Bd33wd14L8EKbouwvvP3a3v+O7DmnQz6nnTF+j0VYd2DXqpmh2djFbvZTHiRCgedyPHv4L+x5qd8J2j9HKwxyXuxsrbBFYajfX/913EG0E5r/SqA1voLrO/CDqxANWIXcSGEMHy+uvbuEEKI1sHO6j2mtQ7t/ieaAaXUHUChtqfcEEIIIVoTCfyEECICexzU6VhZv47YVfW01jc2asOEEEIIIWpIunoKIURkBnA3VtfIr7AmCv9do7ZICCGEEKIWJOMnhBBCCCGEEC2cZPyEEEIIIYQQooVrjtM5tMEq1ZyPVfJcCCGEEEIIIVoTB9AZ+BJr2qpqNcfAbzTwUWM3QgghhBBCCCEa2Xjg41g2bI6BXz7AwYMleL1Na3xiRkYq+/cXV7+hEDUk95aIJ7m/RLzIvSXiSe4vEU9N/f4yTYP27VPAjo1i0RwDPw+A1+trcoEf0CTbJFoGubdEPMn9JeJF7i0RT3J/iXhqJvdXzEPfpLiLEEIIIYQQQrRwEvgJIYQQQgghRAvXHLt6huXxuDl4sBC3u7zR2rB3r4nX62208zdnpukgKSmV1NR0DMNo7OYIIYQQQgjRorSYwO/gwUISE5NJSenUaIGD02nidkvgV1M+nw+Px01R0SEOHiykQ4fsxm6SEEIIIYQQLUqL6erpdpeTktJWskXNkGEYOJ0u2rXLoLz8WGM3RwghhBBCiBanxQR+gAR9zZxhmECzqJ4khBBCCCFEs9KiAr/aKiku47Xnv6a0uPHGBwohhBBCCCFEvEjgB6xakUf+jsOsXJFXb8c85ZRRlJaW1tvxnnzyMd5//516O14k69d/z9133xG347/55hvcccetcTu+EEIIIYQQ9cVz9Ci+FlK8sdUHfiXFZaxfuweA9WsLmmzW75prfsqZZ54T9/P07z+QO++cF/fzCCGEEEII0ZQd3biBzTdcx8FlbzZ2U+pFi6nqWVurVuTh81njynw+HytX5HHquX3r5dgvvvgcH330P8rKjvGTn1zHhAlnkp+/m2uumc3Spe8DVPr5wQfvp3Pnzlx22RUAbNiwnjvvvJ0XXljEvffeTf/+A5g+fRZPPfU427fnUVJSzO7du+jatRv33HM/iYmJFBcX88c/3s3WrVvIysomMzOL9u07cP31N1Zq27Fjx5g37062bduCw+GkR4+e3HPPfaxevZJ//OP/eOqp5wBYtGgBL7/8EqmpaYwdezKLFy9k6dL3A+2ePPkiPvtsBceOHeO2237H0KHDcLvd3HrrjRw+fJiysjIGDszhl7+8HZfLVS+fqxBCCCGEEDU1a9ZUtF5f7XZK9Wf58vc58M4y8HrBaBm5spZxFbXkz/Z5PVbg5/X46jXrZ5omzzzzAvff/xceeOBeDh48EHX76dNn8vrriwOB6KJFC5k27eKwRWu0Xsedd/6B559/BbfbzTvvvAXAv/71T9LS2vLCC4u45577WLPm67Dn+vzzTyktLWH+/Jf5979f5Je/vL3KNps2beS5557h0Uef5sknn6WoqKjS+sOHDzNo0BD+9a8XuPrqa3nssYcBcDgc3HnnPJ566jmee24BHo+HpUtfr/4DE0IIIYQQIk6GDBlWbSLC5XIxdOhwyvYfoOSbr8HhoO24cQ3Uwvhq1YFfcLbPz5/1qw+TJk0BoEePXvTrp/juu7VRt+/VqzddunTls88+4ciRI6xY8SEXXHBh2G1/8IOTSEtLwzAMBg4cxK5dOwH46quVgX3atk1n/PjTwu7fp09ftm3byoMP3s/y5e+RkJBQZZuvvlrF2LEn0759ewAmTpxcaX1SUjInnzwegJycwezatQsAr9fLiy/O56qrLuPKKy9h9eqVbNy4Ieq1CyGEEEIIEU+5uXMwzejhT0VFBQsXvsgJQwYz84tPuG2TxpneroFaGF+tNvALzfb51XfWL5TD4cDrPX7O8vLK55kx4xJeffUVli5dwqmnnk5qamrY4yQktAn8t2maeDyeGrWja9duzJ+/kNGjx7By5edcddWllJWV1egYCQnH35hYbXAD8O67y1iz5mseeeSfPPvsAqZNm1HlOoUQQgghhGhIWVnZTJ48LebhR07DYOjwkXFuVcNptYFfuGyfX31l/ZYuXQLAjh3b2bhRk5MzmA4dMnC73ezcuQOwgqRgY8eezPbteSxY8DwXXTSzxuccPnwky5YtBaCoqIiPPvow7HZ79+7BNB2ceuoE5s69mUOHDlJUdKTSNsOGjeCzzz7h0KFDACxb9p+Y2lBcXER6ejuSk1MoLi6uco1CCCGEEEI0hliyfn6mYTDn1qrDoZqrVlncJVK2z8+f9Rt1ck+SU6t2gYyVx+Ph6qsv49ixY/zyl7fTvn0HAG644WZ+8YvraNeuHWPHnlJpH9M0Of/8iXz22Sf06VPzIjNXXXUt9957N5ddNp2MjEz69x8QNmu4efMmHnvs7wB4vR4uv/wqMjOz2L79eMDbt28/LrvsCn7606tJTk5h1KjRpKSEz0AGO++8SXz00Ydcdtl02rfvYPWTrmE2UQghhBBCiPrmz/q9uvhl3FF6zDkNg/NHn0RWdscGbF18GZGyXk1YL2Dr/v3FlbpMFhTk0alTz5gO8OHbG1i3piBi4AdgOgwGDOlcowqfTqeJ2133eT5uvHEOkydfxBlnnFXjfd1uNx6PhzZt2lBSUsycOddw/fW/YPToMbVqS2lpCcnJKQA89dTj7Nq1k9/97p5aHSsWNfk9tiZZWWkUFhZVv6EQtSD3l4gXubdEPMn9JWqrsHAvE88/g3K3O+I2CYbJkkX/odMJJzRgy2JnmgYZGakAvYFtsezTKjN+BbuORA36wMr6Few63EAtsqxf/z2/+92v6ddPMWHCGbU6RlHREW6+eS5er5fy8jLOPvu8Wgd9AI8++nfWrv0Gt7uCLl26cuutv6n1sYQQQgghhGhsWVnZnD0gh7e/XYM7TBLMaRicP3hwkw36aqtVZvzipb4yfq1ZU/g9NkXyVlPEk9xfIl7k3hLxJPeXqIu1983jRwuepyJMLNTG5eKj95eT0DarEVoWm9pk/FptcRchhBBCCCFE65Tug9MzszAMgxNP7BOo9OlyuZgybQZdT2xZ2T6QwE8IIYQQQgjRyniKi5jeuRvDcgZz771/ClT6NE2T3Nw5jdy6+JDATwghhBBCCNGqeIqLaZ+QwD8ffRKlBjB58jQMw2DKlIvIzGy6XTzrolUWd5k1aypar692O6X6s2DBaw3QIiGEEEIIIURD8Hm9eEtLwTBw2NXrc3PnsHnzphab7YNWmvEbMmRYoB9vJC6Xi6FDhzdQi4QQQgghhBANwVtSAj4fZlIyhsMBWJU+n356fovN9kErDfxyc+cE+vFG0tD9e9988w3uuONWAFavXsmPfzwbgH37Cvn5z3/SIG247757+Oabr+J2/BkzLmTLlk1xO74QQgghhBDV8RRb1WAdaamN3JKG1SoDv6ysbCZPnhYx6+dyuZpM/97MzCz+9rfHG+Rct932W8lyCiGEEEKIFs1TXAKAI6V1BX6tcowfWFm/JUteDbuurtm+Y8eOMW/enWzbtgWHw0mPHj255577AHjrrf+wePHLeDweUlNTueWW2+jRo1fEY+Xn7+aaa2azdOn7AJxyyihyc+fw4YcfcPjwYa67bi4TJpwJwAcfvM8TTzxCmzZtOP30s3jiiUd4550PSU5OrnTMjz76gH/+81FM04HH4+YXv7iVESNGcf31uVx66WxOPnk8hYV7mTfvTvbv30/Xrl3x+WDMmJOYPn0Wf/jDXSQkJLBjx3b27t1DTs5g7rjjbgzD4J13lvHyyy/idlcAcN11NzJq1A9q/VkKIYQQQghRnwIZv1QJ/FoFf9bvtdcWUVFREVheH9m+zz//lNLSEubPfxmAI0eOAPDNN1+xfPm7/OMf/yQhIYFPP13BH//4ex599OkaHT8lJYUnn3yWNWu+5ne/+zUTJpzJgQP7eeCBe3n88X/RvXsPFix4PuL+Tz75OLfe+hsGDRqCx+Ph2LGjVbZ56KE/MXz4SK666hoKCvK54opLGDPmpMD6LVs289BDj2CaJldf/UNWrvyc0aNPYsyYkzj77HMxDIPt27dxww1zePXVN2t0fUIIIYQQQsSLp6QYkMCvCqXUn4HpQC9gsNb6W3t5P+DfQAawH7hCa72xLusaWrisX32M7evTpy/btm3lwQfvZ/jwkYwbdwoAK1Z8yKZNG8nNvQoAn89HUdGRGh//zDPPBSAnZzD79hVSVlbG999/S79+iu7dewAwceIU/va3v4bdf+TIUTz88F+YMOEMTjppHCec0KfKNqtXr+LGG38JQKdOnRk5cnSl9ePHT6BNmzYAKKXYtWsno0fDrl07ueuu31BYWIjT6eTAgf3s37+PjIzMGl+nEEIIIYQQ9c1TZAd+rayrZyxj/F4DTgXyQpY/BvxDa90P+AfweD2sa1ChY/3qa2xf167dmD9/IaNHj2Hlys+56qpLKSsrw+eDiRMn88wzL/DMMy/w73+/yOLFS2t8/ISEBAAcdhUij8dTo/3nzr2ZX/3qDpxOF7/97W0Ru7xG06ZNQuC/rS6jVhvuuus3TJt2MfPnL+Tpp+fjcDgoLy+v8fGFEEIIIYSIh0DGLy2tkVvSsKoN/LTWH2utdwQvU0plAyOAF+1FLwIjlFJZtV1X90upneAKn/VVyXPv3j2YpoNTT53A3Lk3c+jQQYqKjnDyyeNZtmwpe/fuAayAbf36dXU+H8DAgYPYsEGza9dOwBpLGMn27ds48cQ+zJx5Keeccz7r1n1fZZvhw0cGjrFnTwGrV38ZUzuKi4vp3LkLAEuXLpGgTwghhBBCNCn+MX5mK8v41XaMX3dgl9baA6C19iildtvLjVquK6zbpdSOP+v3yisL6q2S5+bNm3jssb8D4PV6uPzyq8jMzCIzM4vc3DncdttNeDxe3O4KTj/9LPr3H1Dnc3bokMEtt/yaW26ZS2JiIuPGjcfpdJKYmFhl20cf/Ts7d27H4XCSmprKr3/9uyrb3HDDzcybdyfvvLOMLl26MGBADikxfDnmzr2J22+/hbS0NMaMGUd6enqdr00IIYQQQoj64ilunWP8DJ/PF9OGSqltwCSt9bdKqZHAs1rrnKD13wOXYwV3NV6ntV4dY5t7AVtDF3733fd06dIzxkNUVli4l1tu+QUPPvhQk5jCobZKSkpISUkB4D//eZ0lS17niSdqVjjG79ixYzidTpxOJ/v2FXL11bP5+98fo2fPXvXY4qp2784jJ2dgXM8hhBBCCCFarzW3/YaidesZ9Iffkz4op/odmrbewLZYNqxtxm8H0FUp5bCzdg6gi73cqOW6Gtm/vxiv93jQ6vV6cbu9tbqY9u0zeeqp5wBqfQwAp9Os0/519dJLL/Df/76Px+Ombdt0br31N7Vuz7Ztecybdyc+nw+Px83VV19L16494n59Xq+XwsKiuJ6jOcrKSpPPRcSN3F8iXuTeEvEk91fzN2vWVLReX+12SvVnwYLX6u28ZQcPA1DkdlAe4R5q6veXaRpkZNQsY1mrwE9rvVcp9TVwKTDf/t+vtNaFALVdJ+rmyit/zJVX/rhejtWnT1+eeeaFejmWEEIIIYQQoYYMGcaWLZsrTa0WyuVyMXTo8Ho97/HpHFLq9bhNXbXFXZRSDyuldgLdgPeUUt/Zq34K/FwptQH4uf0zdVxXJ7F2WxVNk8/nxUoKCyGEEEKIli43dw6GET0cqa/ii34+r/f4GD8p7lKZ1nouMDfM8vXAmAj71GpdXTidCZSUHCElpS2GIcFDc+LvTlpUdJCEhKrFaIQQQgghRPMSazfOlOQ03G43Xm/V6cn8U62lmw7KC/JJ6NS5zu3yHj0KPh9mUhKGs7aj3pqnFnO17dtncfBgIcXFhxqtDaZp4vU23hi/5sw0HSQlpZKaKlVAhRBCCCGau1i7cXbtNIjNeSuBqoGf4fVy9vYdbL31JgC6zP0FqUOGBtaXFJfx7uvrOGfKQJJTE6rsH47f+8lGAAAgAElEQVR/KofWlu2DFhT4ORxOMjPr/hagLpr6IFAhhBBCCCEaQm7uHJYsebWarQzGDrsIp+li/ZYVlbJ+TsNgQodM0t1uDJcLX0UFB99ZVinwW7Uij/wdh1m5Io9Tz+0bU7v83TzNVjaVA8Qwxk8IIYQQQgghasI/V7bL5Qq73uVy0a/3OBIT2jIiZ1KVsX4Op5Pr75pH7z/9lRMefAijTRuOrl9H2a5dgJXtW792DwDr1xZQWlweU7ta6xx+IIGfEEIIIYQQIg5yc+dgmhHCDR+M7H8eAClJ6ajeYzFNB2CP7Zs2gx4nj8fVvj2O5BTanjQOgEPL3wOsbJ+/sKPP52PliryY2tSaA78W09VTCCGEEPWnNvNr1Wa8jRCi5fJn/V57bVGlsX5Ow6Bfz5NISm4fWDYiZxJ666eAJ2wlz3ZnnMXh//2XI5+uIPm8yaxfU4DXYwV+Xo+P9WsLGHVyz2r/9gTG+LXCwE8yfkIIIYSoYsiQYRG7aPmFzq8VPN5GCCHAP2VDSMV908HInAsqLfJn/cBg9PAzyczMqrS+TdeuJPUfgK+8nE9fW4XXU7kYTKxZP29JCQCO1LSaX0wzJxk/IYQQQlQRS2GGiooKFi58kYULX6y84iXo+6Tigw+Wx7GFrVdtsrFCNJasrGzOG/UD3vx0BW6fzx7bdzJJyR2qbDsiZxIHD+fTp+sZlBaXV8netTvjLA5t3MbWQgNfSBfSWLN+rbmqp2T8hBBCCFFFdYUZojFNBx0zToxDqwTULhsrRGOa1X8gx3N+BqMGTQy7XUpSOpPPvIWkxLZhs3epQ4eR13kMvgjniSXrFxjjl9b6Aj/J+AkhhBAirNjKsVdlGCZ9up5B8ZFjcWiViOX3Em6MlBD1paZZ5+Q9ezk9M4t39xUyuP94EhPaRt3P6/FRsOtwleWlR93sTu6NL8K02bFk/QKBXyvM+EngJ4QQQoiwAoUZXn2FCrc7sNwwDAzDwOut+vRlmg5U73EkJbblw3c3MvrUXg3Y4tYhUsEMP5fLxZQpF1UZIyVEfYl1cvahQ4fjKSmhYk8BM7r3Yl+37jzwp7tqfW+uWpGHzzAgYs7veNYv0rx+UtVTCCGEEC1abceF5ebO4fXFr1Taxmk68GIAVQM/wzAZmTMRr8fH11/uIGdEF6nwGQfRsn6S7RPxVpOs87FtWwHo1KcvT9/+2zqdt2DXkUAlz0giZQv9/GP8TCnuIoQQQoiWqCZv6IN1SExiQmYWy/cW4Pb5cBoGw7sPptiZht66Ak9QZT1/ti85KR0Anzf6m3dRe5GyfpLtEw2hJlnn/Z99CkDiCSfU+bwzfzSqyrLDH/6PPc/+i7QxY+l87U+i7u/z+fAEqnqm1Lk9zY0EfkIIIUQrUNtxYYf+91+md+zMB/v2gseDaZgMGHwxHtOJ3mLNueXnz/b5eWowt5aoudzcObz++uJKyyTbJxpKrFnnY1s2A5DYu+6BXzgJ3boDULZzB1CD3g2Xz2x1VW+lqqcQQgjRClRXpTNcpsjndnPov8tpn5DAxNPPwjAMRg05laSk9MCcW6bpAKpm+wLHiHFuLVFzWVnZnHVCH5z2HGlO05Rsn2gwgb8pjqp5pLKyMs46azzDhvVn4tOPM3PlZ5z6k6sZNqw/w4b1Z9asqfXWjjZdu4JhUF6Qj8/tjqnqrdMwWmXVW8n4CSGEEK1ETceFFX35BZ7Dh0jo2o2fXfdzthbuo9+JE/GZ1uPDiEGT0NusrF9ots+vuvE2orKajMV89s9/Y0pCIu/ay0zDkGyfaFDWGOCXa7RPfU81YrZpgys7m4o9eyjPz4+td4PROjPjEvgJIYQQrURgXM7iV6jwHK/SGWlc2KHl7wHQ/qyzSc/uyI8uu5N1awoCxRVSktLpf8I4vt/0IdOnz+Dm2yez9de3UlG4l17z/kjXwf0oLCxquAtsAWoyFvPAW0tpn5DA2QNyeOv7bzm9Y2fJ9om4ifWlRHXi0R25TbfuVOzZQ9nOHWSNHccF509myRuv4gn6O+fnNAzO6tu3VX5XpKunEEII0YKVFJfx2vNfU1pcDsDVU6cTOglWuAexY9u2cWzrFszkFNLGjKWkuIz1a/dUqag3fOBEOmX1YfYPrwXA2b49AO6DB+N1SS1abu4cTDP645lpmlw17WKKvvwcHA5+ftc8+qe1ZXpWNt6ysgZqqWhtYulCCdCzZy9cDkfYdfEqPtQmZJzfiJyJEDRlfDAT+OHY8fV6/uZCAj8hhBCiBVu1Io/8HYdZuSIPT2kpZS88z+kZmTjt4MJpGEyeNKVqtu+D5QC0PfkUzIQEa/4sX9Uy6ilJ6Uw9+5dsXW9VynO2k8CvLqobiwnW+KkLLr2ImV9+yszPV3Djb2/j3lNOo50rAffBAw3YWtGaxPpS4oEH/orpDN+pMF7Fh9p060aZI4nlW5LZt6eY/LyKSmOQ/ZyGwYTMbLKys+u9Dc2BBH5CCCFEC+XP0gGs/2Y3m//8Vyr2FHDJiNE47MDC7fPx8qKFgaIL/n/nPfQAM1d+xjl/vJthw/rz+/uuizh/lteu3llaXI6zfTvruIck8KutWB6w/VxOq9uns0MGABX798ezaaIVq+6lhGEYTJw4GaUGhN0unlONJHTrztYOQzngTeO9Jevw+XyMyJmEERLqmIbBjB69SB6QU+9taA4k8BNCCCFaqFUr8vB5rW6dXreb9aUZONu3Z9Atv2Ly5GkYhkG3xKRA9i8Sh8NJx8zopdj91Tv9Gb+KBsz4zZo1tUrgGu5ffVYSjCf/A7YzQtYkmOmwMiiuDH/gty/ezROtWLSXEgkJCdxww80Rt4vnVCPlbdqSn9YXDIOD+0vxenxW5eETjmf9XC4XU2fMYvSTz5A6fERc2tHUSeAnhBBCtECBMXn2cD6f6aSgfX+yb7ub2dfn8vLLL+Hz+dh57ChurzfqsQwMRgysWrEzmL96p7N9B6BhM36xjD2q70qC8ZabO6fah7TgDIozIxMA9wHJ+In4iZT1C83mhW4Xz2wfwOpPt+Mz7G9MUJf0ETmTMOzl/sDTMMKP/WsNpKqnEEII0QIFZ/v8fKbJ6pV7Yqoc6edyuZg2zarYGYujmzcBDTvGr7aT0zdlaaWlTOiQwft79+CJsE3wNbk6WAG3dPUU8ZabO4fXX19caVm471fw9zKe3z//S65A4BcU2PnnG/1+00dMvGBqq6zkGUwyfkIIIUQLE5rt8/OPxZv9w2tjHkNW0we2QHGXBsz41WZy+qbM53az55mnmd6pK44I3T1DrymQ8ZPAT8RZVlY2540+CacdYEX6fvm/l4ZhxPX7F6nwlN+InEl0zu5jV/ps3STwE0IIIVqYaA9CPp+Pbbq02sqRULuAyZmeDoaB5/BhfJ5Iuar6F23sUXPL9h187x3Kdmwnq0sXpkyeBlClOmHoNQXG+ElXT9EALhk0JDBZQrTvV27uHIYPHxn3bF+kwlNgZf0mn3ELu7eVBaa1aa2kq6cQQgjRglT3IBSc9YtH90jD6cSRlobnyBHKDx0CEmq0fzS1mUC62WX7fD4O/+8DALIvvZzcLl3YvG0rXbt2Y9mypVRUVIS9Jqfd1dN98CA+rxcjxoyuELWReuAAp2dm8e6+wqjfr6ysbJ5+en7c2lFdti+YvwDVqef2jVt7mjr5qyCEEEK0ILE8CMWS9atLwOTv7lm+v37nlIt1AulgzS3bV7GngIrCvZgpKaQMGhx4cJ4796ZARjPcNZmuBBxt24LHI1NpiLjyud2U7djO9M7dGD50eKN9v2LJ9gXzF6BqzSTjJ4QQQrQgBbuOVPsg5H8AilYUpS4Bk7N9e8q251mBX/tOtTpGOLEUcTEAEwMPPpwOR7PK9gGUrPkGgJRBQzAcx7t3+sdLvfLKgojX5MrIxHPkCO79B3DZ8/oJUVOxZtZ7p7Xl1Y++aIAWhRfLSy7TYTBgSOdWneULJoGfEEII0YLM/NEoAAoXvsTBd5bRYdKFZE6dHnH7yZOn8dpriwJdCHv06MmWLZvrFDAFMn4H9tfrg4Y/+PG3N5RpOhjcqR/r9mzA4/FgQpPO9pUUl/Hu6+s4Z8pAklOtLrHF/sBv6NAq2+fmzmHz5k0Rr8mZkQFbt1BxYB9JyIOuqJ1Yqv46DYOB3Xs0YKuqqslLLmGRwE8IIYRogUo3aACS+qqo24WWXL/33j9x//1/qFPA5GxvBX5l+w/U+4NGtKyfYZgMGzmbXu7PWPLWEiZkZNEhNa2eW1B/Vq3II3/H4cC4I09pCUc3bgDTJCVncJXtqxsv5c/ySWVPURul677HTEyMbXoU4Cq78FBj8b/kErGTwE8IIYRoYbzHjlKWtw0cDpL6RM/8hHYhVGpAnYsxBI/xSyH2rmNK9WfBgtdiau+ri1/GHVQ11DQdqN7jSE7pQJ8Tp7Ppy0+Z0bkLRzduIGXwkDpdTzz4xycBrF9bwMBhnfnfq6vpRwLt+vTAkZJS42M6/ZU9JfATNVRRWMjOv/wJw+Wi1+//EDWz7jRNJmRk0WVQ1ZcTommTwE8IIYRoYY5u2gQ+H4k9e2K2aVPt9tV1Iawpf8av/IBV3CWWrmMul4uhQ4dXWV6+dy87//IAHc45j3ZnnAXAtdf8jNcXLay0nWGYjMyZyMJl89h/aKd1XfsKYfbMsOeLJciMp+DxST6fj/eWrOPgIS+u9kM5ZUjtutC57Ln8JPATNXXJ7JlsLsi3fjhrfNRtTWBGl6606d4z/g0T9UqqegohhBAtzNEYu3n6+bsQ1lcRFH/Gr2yfFYBEm2PPL1IxmeJVK3Hv20fhKwtxH7bG6qTs38eEjMzABNKBbF9SOh0zT6gy512oSEFmQwmtRuj1+Di4vxQwyG/bF6PvoFodNzClw4F99dVU0Qr4fD76uhIC36doDMMgp8dIUrO7W3N2imZFMn5CCCFEC1O6/nsAklRsgV99iNidc8niaveNNnXEsbxtAPjKyzmw9A1SJl/M0qXbuLBbHz44eADc7kC2D2BEziT01k+ByJPHN/YUD+GrEfoAA59hsHbTMU49MbZjxfq5N3aGUzRdxzZtZFr7DJbv2gHVVMl0mA4GDZlBXloFAxuofaL+SOAnhBBCtAD+CpGnKINjW7ZgJibGnPGrD7F054wkWiBWlrc18N+H/vdfvnX1Z787hcROYxjtTGXFl+8Gsn0AKUnpqN5jWb9lBV5v1eCvsSd0jzz3mJVt8RkO1q/dw6iTewUqfUZTl260ovWJdbxtOAageo0lObkdO7w+SovLY7pHRdNR566eSqmJSqnVSqm1Sqn/KaV628u3KaXWK6W+tv+dG7TPSUqpb5RSG5RS7yilsuvaDiGEEKI181eI/PytNQB0mDQZR1JSg50/1u6czpBumNECMU9xMRWFhRguF2mjf0AZCWzcdBgMg93p/ejT/Sw6Z/UJZPv8RuRMwjDCt6VpZvsq8/l8rFyRF9Px6tKNVrQ+Q4YMw+Vy1Wpfh+lg5MDzAfBhxHyPiqajThk/pVR74N/AOK31BqXU5cCjwHn2JjO01t+G7GMC84GrtNYfK6XuAO4DflSXtgghhBCtVXCFyJ2OLpzYsTvtzjy7QdtQ3Rx7LpeL8869gLfffKPScsPr45qrrgl7zGPbrQfLNt17kDFtBl/mOayeaAb4MElsk87kM2+psl+krF9jZPtizbBktOvGjPN+C1hj/tavLWDUyT2rzajEMrfh6OFnNqtJ7EX8xDJVQyjDMPD5fKgTTyEpxaoc6/UR8z0qmo66Zvz6AHu01hvsn98EzlVKZUbZZyRwTGv9sf3zY0D4kltCCCGEqNaqFXn4vHaFSGDXwPMxa/lWvy6iZZ9M0+Qnk6dXKsriNAwmdMiAD/4bdp+ybVY3z8RevahITie/bT98ZtA76yiJs3BZv8bIfMWSYTFNBx0zKw/qq6+sn2GY9Ol6BqXF5bE1WLRo/hcFke5Jp9NZpTiSy+WiVw/FqMGTKi2vyT0qmoa6jvHbAHRSSo3WWn8J/NBe7q9D/LxSygA+Bm7XWh+y1wXuEq31PqWUqZTqoLU+EOuJMzJS69j0+MjKaroTxYrmTe4tEU9yfzVfRUeOodfuwesP/EwnWwo8TGrjIrVtYoO2JSsrjVmzZvHSSy9RXn480EhISOCSSy4hfdc2pnfuFijK4nAlMKNLV4588jHq2itxJidXOt7+fGtahqzBA/hydT6GwwFBY+McDoPhY3pwwfTw84mZ6d/ywnPP4fb5cLlcXHLJJQwYcEIcrjyyX//61mozLMHFafy8Hh/62wLOnTyw2t9jpM89UO00sS3frd4d8XNqzuRvV/XOOeccvvvuu5i2dTqdXHjhhbz++uuUl5eTkJDA9OkX08ExAbfbW2nbmtyjzVVLu7/qFPhprQ8rpWYBf1VKJQJvAYcANzBea71DKdUGeAj4O3B5XRvst39/ceD/5JqKrKw0CguLGrsZogWSe0vEk9xfjac+Jjb/8O0NeL0hD2ReH28v+Z5Tz40+eXs8zJ59DQsWLKi0zMDgoqmzWfrcZ+QkpTPprHN49e23mDL1Ijo7Ezi6QbPljbdpb8/T53d44yYADiVm8vUXO/CEFETxeHx89cUOckZ0CdvdbPbsa3jp+efB48E0DGbPvqbB73XTTOaC8yez5I1X8XjcYdY7KhWnCVaT32PYz90OKKv7nJor+dsVm4EDB7Nhw4ZqCy+ZpsnkydO49tqfsWTJEsCevuHEc9i1tSzsPo35tybemvr9ZZpGjRNhdS7uorV+T2t9itZ6FFZwlwRs1lrvsNeXAY8AJ9u7bAcCMz7a3UK9Ncn2CSGEEC1BLN0Ao1VkDFSIrBz3BcaINUb3vtCuZE7D4Kx+is1f7OagK5O8Lifx05t+xfDhI8nNnROYlP3w8vcpLjrGa89/TWlxOZ6iItz79mEkJLBmc1nEgijRuptlZWVz9sDBGMB5o8c02ji3ETkT8VftDBUu2+fn9fgo2HU4pnOEfu6hAaV0y2u9YikABOB0usjNnRO4lwzD4IILprB7W3mYKrSWxvxbI2quPqp6drL/1wTuxRqzh1Iq3f5fA7gE+NreZRWQpJQ6xf75p8DLdW2HEEII0dzUtSKjNbbPG3ZdYz7oB1+XicF5CWls3FpiVeNM7ElqcvvAhPGpw4bjaNeO8oJ8vlj6Dfk7DrNyRd7x+ft69EF/u7fWD55XTZpC/9Q0Lh0+utLykuKyQJAZTyXFZeTnVaB6jw07dmr69BncfPdkfnbbaWH/zfzRqJjPlZs7JzCuMTSglAf01qu6cX1g/Z2ZOvV44aPc3DkMHz6SkTkT67UKrWhcdQ78gHlKqXXARqAcuA3oCHyglFoDfAv0A+YAaK29wGzgUaXURuA0ex8hhBCiVanugSxaFcpI2T6/ppD1MwyDc4YO42DH0YEA1WdULgNvOJ20O+10yhxJbNxWCljVAvPXb2dV1/PZmJJTpwfPTn36cHf/HNJKSyot909/Ee8HVn9wPiJnEgbxLTaTlZXN6BFnAEbY7qPygB67hnox0FCqe8nkz/b5ZWVl8/TT8yk94oj40sWvJplp0bjqPIG71jpcDeYtQMSZQrXWnwAtb4SxEEIIUUPRyqvXNtvn53/Qb4zxN7m5c9ixYxs/uu5XvPvG7kA1Tq+3ahn49FNPY8WnBVZlUtNq96ebHRQnduRomVGnB8+E7E4AVOzdG1gWPP1FPEvSBwfnKUnpqBOOTzERj6klSorL6NPlDLZkbQrbfbQm00S0dsEvBlrC+LXAtB+vvkKF+/hYU/9UDcHZvmA1yTiLpq/OgZ8QQgghai85KZ3BA07l67XLcXtin3OuYNeRiNk+v8Z8E5+Vlc2iRYtYNH8VhHRxDA1IyxxJ1lQNdkbM6/FR7EsEw8DtM7jy+pNqHai4srMBqNhXiM/rxTDNSpOoxzM4Dg3OR+RMQm/9FPDEZWqJVSvySE4KP7ehn8/n48uPtjC83X5Sh4/ATEyq1za0BBdfPIWNG7X1w0vAr8JvF63oUlOUmzuH119dVGmZy+VCqQENPs2JaBwS+AkhhBCNaNWKPPr3PJuv11Sey666wGDqBV3ZdsevMZxOet/3J5zt2se7qTVWdOSYlfEKKWwSmnlatSIPTBPCBLI+qFNgZrZpg6NdOzyHDuE+sJ/yxLZWm+wsYryyYOG64vonlv9+00dMvGBqvRebKdh1JKbs6K51O+n8/XzanXk22Zf+MOr2rVF2xgls3rwJr9cTcZvQokslxWW8+/o6zpkysMlmU7OysjlnYA7L1n4TmOJk6tTp3H77nY3dNNFAJPATQgghGok/OPAHBHrLx9YDmdNZbTfAg++8DUDbcac0yaAP4MN3N1ZbjXPkyT3Cj1W0J3mvj8AsIbsjRw8donzPHlbtPFili2w8sn7BWcVgI3ImcfBIvl3ps36F65bn83rZctMNeIqL6DXvPhypqWz51c34gKKVX5I161KMGCo+thb+7rKfGe8BkQO/0BczzaVr6IyevXl77TdA/Y8xFU2fBH5CCCFEDdXH/HtQuSvgiIEXoLd9Ch43pmFEfCArKS7jnUVr6fvFShKA9uecW6triLeS4jK++WJHtdU43RWemIu31PaB2pXdkaMbNEd27mX9WlfE6S/qK+sXyPaFufaUpHQmn3ELu7eVUVpcHtfsUJX79LwJVTcasazZdVmMJ393WdX7+HjMUKHdsBtqzGhd+bxeUvbv5/TMLN7dV1jvY0xF0yeveIQQQogaquv8e1C1K2BySgdU73EYwNkDB0d8IFu1Io+C/GK2pA0iZegwEjp1ru1lxFWkjFcwr9fLhu/CB0iVtqtjhdIEe5zfN5uO1mo+wJqK5dobosJmLPep0+GIep+2JsEB+4icSYGpMUKFy/aFjhltiioK9+IrL2fmgJzAPJqidZGMnxBCCBFBrJm9cCoqKli48EUWLnwRqJr9W7UiD5/HQ/DE3iMHTaJ4/2Zm9gmf2SopLmP9mgLAIL9tXxJPa5pBH1jjzTzVBHS+aorTVNq2Dlk/V3ZHyhxJ5BUl4yV6BrI+sjWxjrWLd+GdaBVj/Uyfj2uv/Vlc29FcBAdwKRGyfpGyfZHGjNZX74D6ULZzBwCdTujL0zfeFNdziaZJAj8hhBAigiFDhrFly2YqKirqfCyt1zNsWP8qyzPadWPGeb8FICkxnQvOvh3XoXcrbeMvHNE2PdHuGmrgM0y+y3dy6pA6Ny0uZv5oFFlZaRQWFkXcZuHTK9m/tyTi+mB1CcwSOnZka4eh1kO9EXm7ugSXTekB3y9Qwv+1RRHv4XKvl7PPPjXsur59FT+ceneTLlhSX8J1zw2uwuoXLdvnF3wfxfI3pLreAfWlbOdOANp07x73c4mmSQI/IYQQIoJYMiZ1YZoOOmaeWGmZzzDYaPZCHTuGmZgIHC8cUbDzMD6fYW9nsn7tHkad3KvZPpQHFyP58O0NrFtTEDVTVtvAzJWVzeE22fgMR9Tt6pKFa0oP+MFqew87HE46ZpzQLAqW1FZNM/qm6WBk/5MiZvsAXll2D/sP7YTniTgNRNXjNkyRlbId2wFo000Cv9ZKAj8hhBAiguoyJoZhgM8XofNg9QzDrDLRts9wkN+2L4e27aJD/xMrFY7weX2BapfQuBO017d4do80ExMZV/Qhnp2HcKS3w3P4EJnTL2bfopdJ6NSZXvP+WNtmB+TmzuG1VxdHb0cjVFGMNHF39Qz6dDkDqFqwpDlMXRCLWIJ1/zg/n8+L1+vhk2/+FzZzX1tOw2DSOefXuMiKz+ulbOcOjm7QHNu6hdQRo0gbOSrq76bcn/GTwK/VksBPCCGECFKTLEB1BTyiMU0Hqvc4kpPSqx4XWP3Fbs7qfyKrVuTh9VeAMaLPh9echZuKoD4lZGdz9PAhPIcPYTidpI8/jX2LX6G8cC8+txvDWbdHouSkdPr1Hsu6zR/HVAmyIQWyfkGBn2mamKaJO0ww6L832yS0Baq+YIg0dUFtA8L67CZbkzbEkg1NSHBxzjnn85//vE63xCTyjx3FHeV7HxwoxsIELhkwKKZt/SoKC9l+3zw8h4+/BCn68guM6+eyOj857O/Gc/QoFfsKMZxOEjp2rNH5RMshVT2FEEKIILFUQoyVYZgRKwOGy/b5+UwnhfvLA9m+aM+QTbmKYFPiCnrYTezTF0dqKs6MDPB4qCjcW+fjr1qRx8jBE2OuBNmQ/Fk//33tcrmYOHEyDkf4rq+h92ZwVdXQqQtKDpcGXoAEB4Q1UR9Vcv1q0obQzyXcOadMuYi5c29i+PCR/Hr6rGhDRAEraO7b8weYZvRuxQAup5MJmdk4v/+2Ri+RDn34AZ7Dh3Gkp9N27Mm0HXsyeL1se+Jp1n+TD1ClCq4/25fQpWudX3KI5kt+80IIIUSQ+hzXZ5oOTuw+kk3bv6xSGXDatBncfPvkKvscXvERe/71FGk/GMOqFd3xeqJnDlpS1i+eErKPB34pA3OsZZ064963j/KCfBI6d6n1sf3BUFJCbJUgG0PwfW2aJjfccDOJiYlVuoBGykQff8HgCwQpXreb9+9/jhEZR2h7yZW1nssupuqjQYFzTBnCl6Dvk4qXX3691uf2nzMzM4unn57PsW3bOP3tpSzfVxg26+f/7EbkTGTzjlVEmwAewHQ4mNlXUVFQwMH1m/lwdXG1mUqf10vR558C0Pknc0jup6zfh8PkC12B1+MBw1ElS3toyw5WdT2fsZ1jK6YkWiYJ/IQQQoggsVRCjKRt27YcPXqUioqKqA+B0bI//nn5jhQcYP2RPcSSCGhJY/3ixRUU+CUPtLrWJXTqTOm3aynPz4c61FwJruwYSyXIxuC/r195ZUEgCA3XBdSf7QsUKQn2fNXjZrTrxkOqL9dcOp2CI4WB5Y/MD9+OcN01q/vOhQbOsYzNM00HHTNOjLi+yrlDAuBwwXpir15cOuok/rvsjbDHcrmczDh7Cnv3twn7AsAwDOHceYAAACAASURBVAzDwOv1Bo7fo9eJHFr+Hl8s1+QXpVb7PT66QeM+cABnRgZJ9rQvhmGQOu0y8h/9DJ/dmS/0hdA3G0o4lNiRjYaHXtV+KqKlkq6eQgghRIjc3DmYZs3+L9IwDP70p4cCXf38D9D++cD8Xb+qy/4kdOwEgC7Ljrn7V0PMCdfcJXSyPlczNZU2PXpYyzpbQXZ5QX6tjxta2bGmv++GlJs7p9LE3f6gx+Gw8gDB2b6OmSdU213RNB10yjqRrSecSUZW/2q3D+2uWVJcxmvPf01pcXnU71xo4BzL99MwTPp0PaNSd8dIcnPnVOnCGSlY7/+jazjrxH44Q8bbulwuLrhgCvuOpOEznWEngHe5XDid/s/aOn7aSWOtOSaPJAGVu2jOmjWVYcP6V/o37pJpzFz5GRe9vZThIwYybFh/Zs2ayurPdkBI113/C6GS4jLyilPAMNh6wBnTZyJaJgn8hBBCiBD+B2JnyIOUYT/smWEe6C6++BLGjBnH6BFnAEal7nKVHwKNqNkfR2oqFW0zyU85IWqVS4fT5Mrrx/Kz207jZ7edFvfiKM1dQtduZM6YSacfXYthBw3+7GpdAr9w87jV5PfdkLKysnn66fmVgtDLf3gN/skNg8f2hQtcQhmGyYiBE9lFFiMGVb99uDnw/OPxAt85s+p3KzRw9m+bkBC+S6Q/gE1KbFvtWL+S4jI+XraT8VmdA8FctGA9qW8/bnr0nzhCzm2a1mfnr/Eb7gXA1KnTmTLlIgzDCBw/sfcJ5HU5KXAPBY/ZjXXs48CBQ6pMKwHWC6HvvtrNx+9uDFQe9mHImOBWTAI/IYQQIoxrf/wTjJAHepfLRf/+A3G6Ko+U8D/QlhSX0afLGXTO6lOpOIb/IRAM+vUeR3Ji1UqewbZljcRXTRkJKepSM4Zh0OG8C0gdMjSwzD+urzw/v1YVWsPN4wY1/303pjxdSv8TxhH6siI0cAlVaSygD5KT2kXdPjSYCi0SU1pczqz+A6t85yJl3nJz5wRexITyB7DBRWkiWbUij4JdRxihzgtkEavrmhuuWM4FF0xh97byKhPA+4Nh/zFDs66lJeXsSuyJz7T+png9PtatyWfxs6uZ/cNrq81sBgLOKPfvFr0/MIel11v9ZyJaLgn8hBBCiDBS9u/n9IxMnPaDm/+N/UsvLWbKlIsqPfT5H2hXrcgjOSmdyWfeUqU4xoicSXTO6sOoQROrDdgOuzrgq6bbnHTvrDtHWhpmcgreo0fxHIntswzufnfyKUN5ZP61PP7ST6r8y9+7Mebfd2Mq2HWE4QMnVnlZAdGzfuGq0kbbPly2z2dPU+Lzevls6dd433mb0zOzAlk/p8MRMfOWlZXNrFmzqmTEQovTRHtBcjz4NCjOHsY5406rlI2LJri7aaTgK/gFwOjhZ5KZmVUl67pqRR6EfGZej489u4vYpkurrToaLuCsIqRd8tKo9ZLiLkIIIUQYRSu/YHrnbnxw8AC4vZUeXEMrJPqXR5uEPMUOCK3togcZp/Xz8J9v3XhNJ6bPzeVzxpKSnlxflyZshmGQ0LkzxzZvojw/H2d6u2r3ibWwSOfsfowfdRlQ/e+7Mfm7CN9C1QqzAGUJq1m8+BU8nuorf/oDneqqmpYUl7F+TQH+6Sm9Xti4uYgsErh65mV88MQ/wOvFhKiZtxtvvJGXXnyx0rJIU1GEqzK6akUePrtqrs8wGDN+NrtLjsTUNTe4WE604GtEziQOHs4PjDcMbkMgY+wN/zdj/ZoCZv/w2qhVR0fmTGTX1rLojW3B83+KmpHATwghRKsXS3n4srIyrrvuWhYseC1shUSov0nI1xel4+OY9YNhsuqzXVKxM04SOtmBX0E+yf0HVLt9LFMPuFxOHn5sXpMo6FJXublzeHXxokrLos1BGa6qaeg4x+MB1/GAxIfBjt6ncd5V05m8ayeLXnuF0zOzyWjXPmLbOnbsyAg1hi++/xSv11MpIA2tShqpymhGu27MOO+3+AwH+dvd/P3hp2s0DcXmzZuiBl/+Fz6mw6hSsTPc+NBgHq83kPV7dfHLuD1Vg+nSI47o2b4IpBJw6yRdPYUQQrR6sRRRcDqdlSoSho7VqS8lxWVs3u05Pubn/9u79/i26/ve46/fT5Jjx4mdi+VcIff8kpg4jhMK4ZaWayEhCUkK7QpdR8GDdN3Z2dig3Xrvup52W3d6WkrP9uCcrnA6biXQdYXSbYwSoBRDyNW/3E3i2Ilzj51EiaXf+UP6KbIsyZIl2Zb8fj4efhDr99NPXzvf/NBHn+/388HUnpw8yrTAS7pNv4sh6IPwz3vH6jXdljavWbOWP/vqCsZWl/c4P35voGl6mD/n2p7Zvrg9rI7p4YB3EucCDn/42T9m7pixrBk/gcCB/SnHt3D2zT0q6QJpVyUdV3Wx5UOmSyDdZZvpBF/xS7OT7Q/txoHt77cyqfLqpHsf77x3cbTAk/tVs3BCfJIv4Xh0Xxl6lPETEZEhL50sjsfj6RbkuW/6cq1xQzPxbwX16Xz+RFs6tKZf2TOdpt/FJNnS5mQZ7rXtc1l26/WcD4HXNPj2d78SPXZxb1/PyCR2nv/93Z/m1BsbOLt7F6VTpyUd283n32X3mNG8cqQ9HJB+YUV0DMuX3UTgfPIm6qFQkG27/ottu/4LCGf/7jK+nPESyL5k+nvL9l0co8PZDh91k2p4r2UrXTE9ABN9uOAGlOr/KYko4yciIkNSbJGOm266jkAg+T6Z/sriJMsC6NP5/HEzfoEDB6LFRnoTzfp5u2f9ii3b53J/3nQLn/j91dx27VIM4MbpM3pU8gw5idNRsfO8dHo4E3du9+6kr9N15iwXDh1izeQpLKyr7/HBzIqVd+DzpJfjcLN//VX4JNV+4J4M5tZ9AtPTvQdgIukGlKACUUORMn4iIjIkpVOkw9VfWZxUb9r06Xx++Kqr8Y4eQ9fxY5zdYae1zw/CWbAX1nff+1aM2T6Xu58t3Z/vgc/9Kfbv3mZV5RicYBDD4+lWTCUZd55fMW8mAGf37Ep6bufeveA4jJ82nce/9NWEY37xxechpjBNMvEtIPJd+CQ+S/jayzvYvqktaTBYVj6GyxfdwBu/fanXbF9v/T/vfuAKFXUZopTxExGRISm2HHsqXu/AZvtcyvrlh2GaVFxzLQAnX/uvtJ/n91dz48zZaTX9LgaJmr+nMn76DL557UcY5TgEWsJFVtpaTpGkgGWUm4UqmTSZv9i2mdUv/Ws0Mx//Ne/mm7jznbf477/5z6RjTrUf05VJC4h8SGu/HwYzJ17Pgtr6rLJ9auUwtCnjJyIiQ5L7pnD9+udSZv08noHP9rmU9cuPymuu5di/vkjHu+8Q7OjAM2JEr88JXTjPqvIRvBL5vpizfX1VOnMmF9oPc27XTkovncLKj06g+Ut/ieHzMf073+319zx30mQO7NpBV4p/F17DYP7sOUmPp7N/N1ELiP5cApnu8szSYRXc+3tfSRp8p7N8VMs7hzYFfiIiMmT19qawv7J9oDdtA8k3torh82o4s3ULh157g7ePV3Pzynkpl8OdtZsYhcENU6fz8r49RZ3t66uyGTM5/eYbnN29i1HX38ixf30RgIprrk0ruP707av49Xe/nfIcE7j/3oakx3v7gMfn83HHHReLwgyEtPf7OaRchpqrdjJSvBT4iYjIkOW+KXz+uafpSlDYo7+yfaA3bQOt8tqlnNm6hXffPUyrd1i3zKrjOLT8w9/hnD/PpD/5M8xhw+h4/30A/mD1Wg7/578r25dA2Yzw7+/Env28+fhvmfXuZoZ5PIy5NXEPwHiT6hbykSo//3H0SMJ/n17D4MP+aibW1qa8zmCvwprJfj9l/SUb2uMnIiJDRmwlT/frmWf+JeGbynQrGEpxGFG3kK5KPy1muMpn7H7K8wcPcmbrFs7u3EH7M0/hOA6d728E4NKrl2a0920oKZk0CbO0lJ1cwqHDZ9k7qpbKa67DN2ZsWs8vmz6TNRMv6dHDzmUCn6j/EKYvdaGS2KqkM2bM7NaTcLD9G9deX8knBX4iIjJkpNOoHWDKlKl5ac4ug5fh9bJ/xkeiPRRji2Cc2bolet7JV/+D47/8BV3HjuKpqKB06tT+H2yBMEwTps2hdeQswKC1YhalH74l7ed7RozA+sz93DS3Bm9cISavx8OHq6qZMNtK61oNDetYuHAR3/zmd6JFnQZDti+eCrRIPinwExGRISPdSp7f+c4/KIszxHR2BGjuHIFjhnfBxGZWOreFA7/SmeHldUd+9iwA5bULwsGNJLW7fG40mMY0eX/b6YyeP+q6D/Pf/+ejeOI+sDFDDmsnTmJYmoG3W5XUsuZm1JOwv2mvr+ST9viJiMiQkU4lzxkzZjI7RZVAKU6NG5qJf7vtOA6/+80eJu6wAZj4wGdp/acfcbZpOwDltXX9PMrC0tkRoPlUKU4kNg5h9qlHXvy/W69h8OEqP6N8JZReOiXjcWXak7A/aa+v5JM+phIRkSElVdbPMAz+5m/+tp9HJAMt2b6qUNDB3nyIc0EPJZMvwTtqFOPvvR9zxAjM4eWUz6sZoBEXhsYNzTiRPoeuvi5TjP136/H5+Nj0GXjKhzPskkszvlamPQlFioUCPxERGVLc7IHX4+n2uM/n42Mf+7iyfUNQqn1VTshh7+gFlNeEgzzfmDFM/co3mPLlr2GWlvbnMAtKqmC6L8VJYgu0rFy1hrq/+Q4L/u47mMOG5XLYIkVNSz1FRGTIaWhYxws/e6bbY4Ox0IPkX2yA8uxLX+foiQOJT3wJ+OuvAGBZc3jqqfX9NsZClDKY7mNLgtglmr4xYynzj6SjPbM9gyJDWdaBn2VZy4CvAz7gGPBp27b3WpY1G/gxMBY4CnzKtu2dkeckPSYiIpJvfn81N0yfySu7dtDlOIOyrLv0j9gAZVzVdI6faiUUCiY93+fzsWDBwv4aXkFKtyVBX/b6Pf74E7kapsiQk9VST8uyRhMO4D5u2/Z84B+BH0YOPwb8wLbt2cAPgB/FPDXVMRERkbxbe8lU3N1HyvYNXbFVFOtrlmMYqd8aaa70Ti0JRAanbDN+M4FDtm3viHz/b8BPLMuqBuqBmyKP/xT4vmVZfsBIdsy27fYsxyMiItIrx3GoOHuGj1T5eeVIu7J9Q1h8FcVAybtJq74qM5wetSQQGZyM3j6RScWyrEpgD/BR27Z/Z1nW54DvAYuBf7Ztuybm3G3A3YQDv4THbNt+N42XnQrs7fOgRURkyLtw6hRv3/MHnPJ6+CeC/PCHP6S6unqghyWDwKFDh1iyZAmBQKDHsdLSUt58803NFREZTKYB+9I5MauMn23bJy3Lugv4rmVZpcAvgRPAiGyum46jRzsIhfoetOaD3z+Sdm0yljzQ3JJ8Gorz69wHHwBQVT2ex7721wBD7nfQHwpxbpnm8IS9Hn0+X6SqZFnB/UzFqhDnlxSOwT6/TNNg7NjMQq6s2znYtv1r27avsW17MfB9oIxw1DnJsiwPQOS/E4H9ka9kx0RERPKu69gxALxjxgzwSGQwStTrUXv7RKTQZR34WZY1PvJfE/gm8Jht283ARuATkdM+Abxn23a7bduHkx3LdiwiIiLp6DoeDvx8CvwkAbdnnM/nA7S3T0SKQy4auH/DsqztwE7gPPBI5PEHgM9ZlrUD+Fzke9I4JiIiklcX3IzfaAV+klhs1k/ZPhEpBln38bNt+74kjzcBV2R6TEREJN/cjJ8CP0nGzfo9++xTyvaJSFHIOvATEREpNNrjJ+loaFjH7t27lO0TkaKgwE9ERIYc7fGTdPj91Tz++BMDPQwRkZzIxR4/ERGRguE4Dl3HjwNa6ikiIkOHAj8RERlSgqdP43R1YQ4vxxw2bKCHIyIi0i8U+ImIyJCi/X0iIjIUKfATEZEhJbq/b/ToAR6JiIhI/1HgJyIiQ8qF48r4iYjI0KPAT0REhpQuNW8XEZEhSIGfiIgMKWreLiIiQ5ECPxERGVLcjJ96+ImIyFCiwE9ERIYU7fETEZGhyDvQAxAREcmnu+5ahW039Txwy4e7fWtZc3jqqfX9MygREZF+poyfiIgUtdraOnw+X8pzfD4fCxYs7KcRiYiI9D9l/EREpOAlzeqlyTRNGhrW5XBEIiIig4syfiIiUvDSyeol4/P5WLlyNVVV/hyPSkREZPBQ4CciIgWvoWEdptm3/6Up2yciIkOBAj8RESl4fn81K1bckTTrZ5oeRldMwGN0/9+esn0iIjJUKPATEZGikCrrZxgm1y/5DJiebo8r2yciIkOFAj8RESkKybJ+punBmnYVVaMvYc60q/B4wnXNlO0TEZGhRIGfiIgUjYaGdRhxjxmGyaKaZQAsrFkGkTOU7RMRkaFEgZ+IiBQNv7+aG2dZ0b18brZveFklAOVllcyZfhWGYSjbJyIiQ4oCPxERKQqdHQGe/+dGbhw5HozwXr7YbJ9r4bxljPfP5J5P3j8QwxQRERkQCvxERKQoNG5opu3gaQ5MvAFr+hLA6Jbtc5WXVbLqpj9nb1PnwAxURERkAHgHegAiIiLZ6uwI0LT5EGDQWTKa+prlHD/Z2iPb5woFHdpaTvbvIEVERAaQAj8RESl4jRuacUIhAAxCXH7FbB766s8HeFQiIiKDh5Z6iohIQXOzfZG4D8fwYG9r50zH+YEdmIiIyCCiwE9ERApa44ZmHMfp9pjjOLyzoXmARiQiIjL4KPATEZGCFc32BbsHfqGgQ9PmNmX9REREIhT4iYhIwUqU7XMp6yciInKRAj8RESlIybJ9LmX9RERELlLgJyIyiHV2BFj/5EYFLwmkyva5lPUTEREJU+AnIjKINW5opnX/SQUvCbS1nEqa7XOpX5+IiEiY+viJiAxSF5uSQ9PmNhZfPYXhI0oGeFSDx533Lo7+uflrXybwQTOXPPyXlM2aNYCjEhERGZyyDvwsy1oOfB0wIl9ftW37Z5Zl7QPORb4AHrZt++XIc64EfgSUAfuAu23bPpztWEREikFnR4BXXtjO/37i8xxs3Rt9/NEnEp9vWXN46qn1/TS6wccJBjl/sAWAksmTB3g0IiIig1NWgZ9lWQbwE+Ba27a3WJZVC2ywLMt9B7LWtu0tcc8xgSeAT9u2/bplWX8FfAu4N5uxiIgUkrvuWoVtN2V9HZ/Px4IFC3MwosJ1vq0Np6sLX5UfT1nZQA9HRERkUMrFUs8QUBn58yig1bbtkGVZyc5fBJyzbfv1yPePEc76KfATkaKTTYBnGOFt2I4TSnqOaZo0NKzr0/WLReDAfgBKLrlkgEciIiIyeGVV3MW2bQe4E3jBsqxmYD3wqZhTnrQsa5NlWY9aljUq8tilQHPMNY4ApmVZY7IZi4jIYFRbW4fP5+vTc03Tw6wpH8I0PQmP+3w+Vq5cTVWVP5shFrzA/g8AGDZZgZ+IiEgy2S719AKfB1batr3Bsqyrgacty5pHePnnfsuyhgH/AHwfuDvrEUeMHTsiV5fKKb9/5EAPQYqU5lZhuPnmm9m6dWvW1zFND9a0q6ivWcbu/Y1AsMc5Ho+Hz3/+L3IyNwp5frW3twJQXTObsQX8cxSrQp5bMvhpfkk+Fdv8ynapZx0w0bbtDQCR4K8TmGvb9u8ijwUsy3oUeDHynA+AKe4FLMuqAkK2bR/L5IWPHu0gFEpdxru/+f0jaW8/PdDDkCKkuVU45s2bz44dO7hw4UJW1zEMk0U1yxheVok1bQlNezYQCl0M/nw+HytW3IFhlGU9Nwp9fp3aHS6Ac25kVUH/HMWo0OeWDG6aX5JPg31+maaRcSIs2z5+B4DJVmRDn2VZc4FxwEHLsiojjxnAx4GNkec0AmWWZV0T+f4B4JksxyEiMig0NKzDNDO5tRqYRvelnG62b3hZePt0fc3y6H6/2OcN1b19sU3tg6dPEzxxAmPYMHz+ob3kVUREJJVs9/i1AQ8Cz1qW9T7wL4SLtAwDXrUsaxOwBZgNrIs8JwTcA/zQsqydwFLgkWzGISIyWPj91axYcUda+/pM08OsqVdgxAWKbrbPVR7J+rl7/UzTw/w51w7ZvX2xTe0DLQcAGDZpco/fo4iIiFyUdVVP27afBJ5McChpfXHbtt8A5mf72iIig0FfK3cahsmVC1bj85ZEl3LGZ/tcl9fezq69GzgP+Dwm3/7uV3Iz+DS4fQVvXjlvwBvIxze1n37mBKDCLiIiIr3JRTsHEZEhrba2jj17dqe1r88wDBzH6Rbg1dcsx977JhDske1zDS+rpH7uEn675XVurqnt12xfbIbtultm9ctrphtM/2ykn+9ZMxg2ZUqv54qIiAxlCvxERLLU0LCOF198vtfzfD4foaBD0OnqFuC5Szm37fpNwmwfQCjosLhuFSf3vc/aS6fm+kdIKj7DtvjqKTnN+mXT59A0PYytnkPZDTdTceVVORuTiIhIMVLgJ1LE0n1TbVlzeOqp9f0wosGtr0sa/f5qbrt1BS/+/HmCwa6E55imyRWLbuT40TNs3flajwCvvmY5x0+2cnntcmoWTkyYWQt2dHBd07MYR9pxgkEMT+L+frnUuKEZxwlXUHYcJ+dZv0yypfEMw2Rx7Qr2jpnDJcOG5WxMIiIixUg74UWKWDrNw30+HwsWJN2SO6TELmnMVH3NMsBIetzr9VFfs4yF85YxwT+zx3LO8rJKVtzwEKUlFbS1nEx4Dc+IEXjHjsU5f57zbW0ZjzFTbrYvFAwHfqGgw/ZNrfzsn9/lTMf5nLxG5lVQw9ylsqXDKmja3Jaz8YiIiBQrZfxEilg6SxBN0xyybQFiZbOksbMjQGvzhYT99tw9fatWrebez90IwEOs6PM4S6dMpePoUQLN+xg2aVKfr5OOxg3NOKFQt8dCQYdDB0/nLPPnVkFdv/65jLJ+sUtl85GJFBERKTYK/ESKWDpvqgOBADfeeG30+6G67LMvSxrdpaEVlaU4jtOtSIvL5/NhWXNzFlwPmzKVjncbOde8j4qrrs7qWukuBR47ajJrP/rFbo81bcrdfr9090i64iufhoJOXvYfioiIFBMFfiJFLpM31YW47LMvxUHig9vOjgBf+9ZnOXJ8/8WTngQeTv1cd2lo24GTOM7FIi1u1s/n87Fq1Rq+8IUv9+VHS6h0ylQAAh9kvhw1Xjr760zTw7iqGQA8+9LXOXriQPTYo4ka+ZD5hweZZv0SVT5V1k9ERCQ17fETKXLum2qPkXz/masQl32ms48xnm03UVc3J/p19TULugd9ScQGxrFLQyOJQiBcpMUwwrfWfPw+3bYF5z64uAyzsyPA+ic3ZrzPraFhHTip50VskDWuanq0iXwyff3woKFhHUaKPZKuZH0OQ0En6d5IERERUcZPZEi47/c/w/pnnyaIk/Qcn8/HypWr+7U/XDbcZZb3fPL+jJYJJuMGa44TSnpObCDXuKGZUKjnubGtGZbdtirnv0/vyAq8Y8bQdewY59vaGDZxYp/77A0vq2T2tCVs3/16t32JrvggK9FS1p7P6Vuw6/dXc8uChfyy8W26HAfDMDAMg1AohNfrJRRyIllUL9977BsFM09FREQGC2X8RIaA4YcP85GqqpRZv0LL9rnBzj77DLcsvgJvlq0NTNPDrCkfSprRcgPjstIKnvvnd2na1EayGLG+ZjkTqmdGKn3m3jB3uWfzvh5FaTLJ+jVuaGZRzbJo0BsvfkmlG9Qm+x15PN6sgt01EydFc34+nw+v1xu5rodly27HMIyC+nBCRERkMFHgJzIEdL6/kTUTJuNJEhwVYrYvGuxsbOGmM10YCbJv6XIzWx9asDppEOQGxo0bmjl88DTBYPLsaXlZJSuuf4iD+wJ5aTNQeml4ueep377Fb/9tc4+iNOno7AjQtKmNstLEwZz7OykvG8noscMxPeGQLHYpa09Gn4Pd0LmzDD90iI/4qzEMg1Wr1rBy5eposPfHf/ynLFy4qKA+nBARERlMFPiJFDknFKJz0/uMLilh+U23AiR4k1942T432AkFgxwffwW3LFiItw/94OBiZitZRstjeLilrp6SgMP2Ten3z8skEMtE2czwcs7j23eyc9fJbn320s36NW5oxgmGg+VEwZz7O3EwOX70TPQ1kv2O3EAxPthNd//hmR02BIP83hVXRQO8hoZ10T/7/dU8/vgTBfPhhIiIyGCjwE+kiNx116puRUvq6uawsH4ea/7zV9z5zlv87Jc/B2DEiPLo0kivaXLbbSt5/eWWQd8Eu7MjEF1m6QYijumlbfQcGr7yHTwZFnmBxPvYegZBBsvPBXj1+88TCqafWcxXwZGyOXOZ+NnP0XLZbThxy3fTCTajjdkjCyvjg7lkBVRcKQPFuNeP3X8YGwTGB4Rnt28HYPLCRdEAT8GeiIhI7qi4i0gRSac8v8/nY+nS6/nVy/9GVzCI6cDC2TfR0px5cZD+5i6zBAdiKkA6hsE++0y3lgCxxUFSCYWCbNv1X2zb9V8Jj/t8PpZfdz1V0+bw7qmZ3V43EY/X5O4HrshrPznDMDBmXcYH/34Gx+jZYL23nnaJGrPHFm5J1C4hVnzbithAMfb1HZxu+w+7LgSjQSA43QrSnGnaBsDwufP6/osRERGRpJTxEykiDQ3rMHtZ7miaJv/tv/0ZK1auxgCu9Y+n7YNwlcZMi4P0p86OQMwyy+7Blxts3PPJ+6M/f2xxkEx5vd6Y7JfJZz//VxyYdQOO2fv18rW8M17sctdMxhDN9sXFw24wB0bCbJ/pMahZOJEHH1nKg48s5X/+8Bv4fOHfR3yg6HR18c7r+7ovyQ2F2LE1HARu39RKU+TvsmlzG6fajhLYvx/D56N05syMfxciIiLSOwV+IkXE7dmXrK9dbBGXhoZ11M6eQ/1ly6JZsf4KWuIlWqIa/3X1NQt4+hdfS3oNx3GiWb/44iAzZsyM/k6SFbiJFV9Fsqy0Ipq56k1/9JOLBm9JCsyky7Hi1gAAIABJREFU2uuXKmCsr1nOBP/MhNm++Gv6/dXcdusKEgWKIUy2vXeA7e+1XFySG7rY7zAUdKLFcZxQiN+9El7mWTZzFqYvf5lSERGRoUxLPUUK3F13rcK2m9I6N7aIi99fzQ/+8ac8+eibOEY4GEpnmWCuZDJuCO87G1c1I+nx2Kzf7t27aGhYh+M47N69i4cf/ks+9amPA+Fs3uTJl9DcvC/hddzg+P77H6Sl5UC0kmeyYMn0GMytndCvS2RTjcf11C++xqNP9N6Ufuyoyaz96BeBSDXSGx5Keq77wYD7s9bXLOOtNzYmDBQdjHCg10tP9lAIdu0PUO0po0rLPEVERPJGGT+RAldbW5c0wxfLNM0eLRvefWs/xBXp6K+sX7rjdvW27wwuZv3ii4NY1txoJnDlytX8j//x9xhJehq6wbH7XDfb15fsWr60tZxKOh7XuLHT8PSyNNXr8XDDzdfypb9bztjq8l5fNzab2dkRoLX5AiuufyhxERjD7DG3knGAvWPqKF9Ql9b5IiIikjll/EQKXEPDOl588flez/N6fd1aNsRXdnT1V9Yv3XFD71UmXamWWTY0rItmAquq/Kxde1e0EIwrUT/DdLJr8ZmwfLvz3sU9HjvxH7/m8P97ghGLFjPxwT9ibftcli+/iWCgK+l1PB5PdE4kumYq6fxe0uWYXtrGzCVYWZ2T64mIiEhPyviJFLje9vVBOIu1alX6AU1/ZP3SGbcrWbYvvuDIg48sTRrAxLcGSFQIJ1E/w3Sya/2xr6835bULADizdQtOV1evv19vJPvZ11YJ6fxeMuHAgOwvFRERGSqU8RMpAr1lz5Jm+3pZvjgYsn6psn3ZjNMNjNysX6JsH2SeCRsovio/JZMmc77lAGd37mD43Hnc/cn7eP755xKe7/H5aPjDz/b59ZL9Xl57eQfbY/ospqs/95eKiIgMRcr4iRSBZNkddx9bJtk+Vz6yfvHVO2+66ToCgUDK5/S2ty+bccZm/RJl+wpN+fxaADreawSg2T7D7KlL8BjdK5n6fD5WrlqTl8bo2WQCB6qqrIiIyFCgwE+kSCRauujz+Zg/f8GgWb6YaUGXdPb2ZTNON2A2slz2OFiMqF8EwIn//A8O/tvLNG0+RH3N8h5FVvIZ5N557+Lostt0CsbEGgxLZkVERIqVlnqKFAm/v5rbll7Pz195iS7HwefzsWrVGr7whS/3ODd+md7xf3+F9p8+ScW11zH+9+/N2xjTLehiGCaOE0qY7ct1+4TYoi+Frmz6DKrW3MmR557mnd/sJVRpRRqzX4m9702Cwa6kS1rzoVCWyYqIiAwFyviJFJFPLFwUrdGZSVZn2MRJAJw/eDBPIwtzm357PMk/czJND7OnXkGixuCQ+/YJ8UVfCt2YW2+j8p77aR05Cydyi6+/7HbchnrFsKRVREREMqeMn0gRGX6wlY9U+XnlSHtGWZ2SSZMBOH+wBcdxkva4S1emzdljLV64lDlTPsqpjiNJ9/b1d/uEQmOf84OnNVwqk3Bj9jnTr2LbrteKYkmriIiIZE6Bn0g/yiYgArCsOTz11PqEx5yuLs7u3smaCZNpnzgpo6yOt6ICz4iRBDtO03X8GL4xY/s8Rgjv5duzZ3e3Hnm9jsHrZfTo0VxZt5pAp48VNzyU9FztBUsuWrE1bgvnwnnLOHbyIPd88v6BGZiIiIgMKAV+InnS2RHglRe2c/PKedHy9H0JiGLZdhN1dXN6PG5Zc/i/f/0dnPPnGTdlKv/n69/M+NolEydydofN+YMtWQd+DQ3rWP/8zzJ6jsfj4ac//ZmyUVlKVrG1vKySVTf9OXubOrlkygAMTERERAaU9viJ5EnjhmZa95/kYx9bGW1f8Mwz/9LnoC8Zn8/HvHm1/OLfPiDgKaPM6hkYpsNd7hloacl6TMPLKpk9bQmm6Ul43DQ9jK6YED3enwVHilm6/RlztT9SRERECocCP5E8cN+AA4wacWlGLQwyZZrhypftZzzsHb2A4X0M/KIFXnIQ+DVuaGbR/GUYRuJbjGGYXL/kM9HjKjiSGwPVn1FEREQGPwV+InkQ+wZ80WXL6OW9eJ/5fD5uu20lB/eeBwxaK2bhTJ7Wp2uVTAoHficPtrP+yY19zgq5QW9ZSSVWgqyf25uvavQlWNOWAAbLblulbF8ODFR/RhERERn8tMdPJMfil9uVDavEmnIl9p7X6UoRAZqmh8oR1ZzsOEwoFEzrtRzHYMHsWzm0PxykOYbBxk0nuG5C5kGUm/Gzz1bRuv9k2lUz4/cyNm5oxgkGAYP6muXYe98ELv48sb356muWc/xUK/VJqndKZtQ3T0RERJJRxk8kxxo3NOPElVSsr7kNkix7dMUvf+yNx+Nl9tQltH1wnlAo/JhjePq8h8szYgRdo8fRWj4dIO3ruHsZ39nQHA56N7URcsLtIMLNwy9m/dxsn9ubr7yskhXXP8TBfQHtOxMRERHJIwV+IjkUzfbFBX7Dh4/BmnENXk/yYiexyx+TFUXpzmBRzbIee7qy2cO1r2qR2/otrevE7mVs2tzGW6/uIRTsnq2sr1keDWZjs325GrOIiIiI9C7rpZ6WZS0Hvg4Yka+v2rb9M8uyZgM/BsYCR4FP2ba9M/KcpMdEClmq4hqL5i9jR9yyR1f88sf45ZHxPKYHa+qV0cxZLLdy4+Krp0TbSKSjsyPAfqpxTCPt68T+vKFQiJ1bDuPEfZ7kZv227fpNt2xf/Ji170xEREQkf7LK+FmWZQA/Ae6xbbsOuAf4sWVZJvAY8APbtmcDPwB+FPPUVMdEeujsCGRUcCTT83Oht1L6ZSXhFgduhU+fz8foygmA0WP5o1v0ZHTlhOj5Xq/3YibQMFl02e1Jx9KXDFrjhmbCn91cFAqFeOb/NCb8PXZ2BGh6vzX68zohkga99TXLmeCfyeW1y6lZOJEHH1na40v700RERETyJxdLPUOA+xH+KKAVqALqgZ9GHv8pUG9Zlt+yrOpkx3IwFikiscFb7D6ydGR6fi6kU0p/0fxl4LjBlcGNV93HBP/MHssf3UDpxqvui57v8XhYtux2DMNgzvTEmTNXpv3aokFr3PCdEJzpPM9br+7pEUy/8dxbPZZ1YnQPHF3lZZWsuOEhSksqlNkTERERGQBZLfW0bduxLOtO4AXLsjqBkcBtwCVAi23bwch5QcuyDkYeN1Ica0/3tceOHZHN0PPG7x850EMoGm+/to+2Ayd5760PsCP7yOwtbdyyYh4jKkq5+eab2bp1a+qL/AvwcOJDNTU1/OpXv8rZeI8c6uy1lH5ZSSW1867j3c3/zoJ5SxlTOZkVNzzU4zw3UAKi53/84x/nM/c+QONvt1I/L40qmI7D1ncPctua+b2e+vZr+0jVc2LHtsMMK/XSduAkWxpbmNL+HntaKnHMnrcQr9fkj//yekZUlPY+Rhk0dO+SfNHcknzS/JJ8Krb5lVXgZ1mWF/g8sNK27Q2WZV0NPE14yWdeHT3a0aOAxkDz+0fS3n56oIdRFDo7Amx8ez+OA5saW4hsOyN0IchzX3uSa2+awbx589mxYwcXLlzI+Po+n4+amtqc/n2t/tRCXnt5B1vfPcikk01c//ErGFG3sMd57e1zefjhE3zr219Kq3dde/tcvvjFDu655z42vtXOypv+vNcAEyAYdNi760ivP6P7uw6muKYTctjc2ILjwHtv7qPl1DGcEaMSnhtyHF5+cVtarSBkcNC9S/JFc0vySfNL8mmwzy/TNDJOhGVb3KUOmGjb9gaASPDXCZwDJlmW5Ylk9DzARGA/4YxfsmMiQGTZZDDSoyDkEIosIQxhsD84lv1P/pT7/vRPePHF5/t0fdM0aWhYl6vhAkRbGWCEG6lz6cyE5/n91Tz++BNpX9fvr+a5555j394jNG1uShn0ebwmdz9wRUZFXdJZogoXE4KhUIi2kTOStqfoa3EZEREREcmfbPf4HQAmW5ZlAViWNRcYB+wENgKfiJz3CeA927bbbds+nOxYlmORIhEtGuLGInH7xhzDYJdvJr7Nm7jt1hV4PJl/fhEIBLjxxmupq5tDXd0cPvaxlVkXg4nt3+eYJu/+rq3P10p6/V4CtL4UdWlrOZVWBjHK9Pbak1DtGUREREQGl2z3+LVZlvUg8KxlWZH0DPfatn3MsqwHCFf4/BJwHPhUzFNTHZMh7p3f7A0XDTES97JzDA+tFbNo+9UvWXj5Hbz48/VZvZ7P52Pc2OnRYjB9WaIYXxzFwcx51iudAK0vbRHiq2l2dgR48rG3CXaFkjyjd2rPICIiIjK4ZN3Hz7btJ4EnEzzeBFyR5DlJj0nxu+uuVYSnQGpjR01m7Ue/mPCYY5jYw+bQ/sEFrGlLaNqzgVDoYoVJ0/RQOaKaE6cP4TipAxjTNJk56QaAPgdrsdm+6BgjWa9c7XXrr3YH6S797MuyUhEREREZGLlo5yCSkdraumhvumRM08O4qhlJjzuGSVvFDEKhEPU1yzHiprJhmFy/5DMX+94l4fP5WLzwespKwlWb+rJEMZrtiwv8Mm2pMBj01oswlpZzioiIiBSOrDN+0jen3n4L3+ixlM0aepUPGxrW9VqUxTDMHr3tEpyFY5jhhufTL2b9TNODNe0qqkZfgjVtCdt3v54062cAM6uviy7RTKcwSSYZyzuXfSmnWb98SzfbByriIiIiIlJIFPgNgI+tupWd+/b2ep5lzeGpp7LbvzYY+f3VrFhxB+vXP5ewFYMbuKVqUA50K/pSX7Mce++bQLBb0Og+Hgz2DPy8hsGCCXP519d+wNETB7odezRB0U3376O2to5du3YRDHYlHZqbsSy04CjTQi+5Xs4qIiIiIvmhpZ4DYFZZOd64SpXxfD4fCxb07AFXLBoa1mGaiadfb9m+0WPL8Hi7P7e8rBJr2hLAYOWK1fzZV1fw4CNLeeirK1i9eg1Aj2WfpmEyr+4TjKuantaSUPfv4+5P3kc4V5hc7M9QSEsi77x3MQ8+spQHH1nK2OryXs9XERcRERGRwqCMXx6luyQwkXz0mRtM3Kzf8889TVfoYjYuNttnegzm1k7okU167eUdnNzUs1VCfc1yjp9qpT4uaGxoWMfu3buYNGkyL730Cy5cuIDP5+NDi25k+Mix3bKFycT+fTTbZ5gz/Sq27369W0GZRD8DFG5w1F/FZEREREQk/xT45VFtbR179uxOuJwxFZ/Px8qVq6mq8udpZIPDfb//GdY/+3S3x2IzZYmWSaYqPlJeVsmK6x/i4L4AZzrOR5/jNkxvbz/Mr371S+BiJc9Q0IlmC+Mrg7pM08PlC2+gqsofff2F85bRtOcNEgWLPp+X7z32jaL/+xMRERGRwqGlnnmUajljKsWe7XOVHz3KR6qq8ESWWSba2xe/TDKbJuZultEwDC5feD1lpRXRY/U1yzGSNCU3DJOZk67nTMf5aNsGN1iMXyI6VIJ2ERERESksCvzyyA00krUuMAyjR2A4lAKHM1s3c/vkmRAJuBLt7YtviZBtE/OGhnUsXLiI+ppl3a6TLJBzg9Gy0grefHVPt7YNiYLFoRK0i4iIiEhh0VLPPEvVusANCM+fv9jnbSgFDp1bt3B8/IeYc9rL1l2/SVrJM7ZyZLb7ztxln4msbZ/L8uU3EQhcXL7pBqOhoMOOrYcwY4ryxC8R9Xi8QyZoFxEREZHCooxfnkWzft7uMbbP52PVqjWsXLkabyTr5xtCgcOF9nYuHDrEqbLxLKxZzgT/zKSVPPurOEp8hrbH0lOHHk3au2f9DO755P15H6eIiIiISKaU8esHDQ3reGH9c90eczN7juPwwvPPQiiEYRhFm+1LWuH0nbeif/zJC38x4L0LGxrW8cIL4QxtOk3k3azftl2/Yc70q9jb1MklU/pjpCIiIiIi6VPGrx/4/dXcfFlttHdf7D4+v7+aj15xFQZw89x5RZvtq62tS7rX0TUYehf6/dVcXn89YKTXRJ5w1m+Cfyb185YVZNsGERERESl+yvj1kzunz+blje8CPffx3fepP2Dn++/xsanTB2p4eZdqr6NrMOxv7OwIMHPi9ezx70qa7TNDXSybfYrJa++IPvYQK/priCIiIiIiGVPGr5+UHz/KR6r8GIbRYx/fxLk1fHVODeUnTvTaqqBQ9VbhdLBUM23c0MzwskpW3PBQ0mxfCNjRNbF/ByYiIiIikgVl/PpB1+lTBE+dYu3UGRy55NIeWS3PyJGYw8sJnekkePIk3lGjBmikKfbixUlnL16614LBke2D9NpFYHo50qnPTERERESkcCjw6wfnW1oAGD9tOo9/4Ys9jhuGQcmECZzbvYvzba0DGvjV1taxZ89uLly4kPScdPfipXMtCAd9gyHbByRsFxEKBNj2Z3/OhokrCZleTIIsv2vBAIxORERERKRvlLboB4GWAwCUTJqU9JyS8RMAON/WmtexdHYEWP/kxmhDdAhn5urq5lBXN4dnnvmXtAK1dLJzDQ3rejSoT8Tr9Q2KbF8y5rBh7J+2lIt5QJN3NjQP4IhERERERDKjwK8fuBm/YZMmJz0nF4FfOvsDGzc007r/ZLfAJZ2Km65M9uL1tq8PwkHkqlWDI9uXTGdHgP3BKhwznCAPYdC0ua1b8CwiIiIiMpgp8OsHbsYvZeA3IRL4tfYt8HNCIVr+/m/Z+5ePEAoEEp7T2RGgafMhgG6BS7qZOch8L15v1x7s2T4IB8sORrfHHMdR1k9ERERECoYCvzxzHIfzB8MZv5I8Zvw6Gt/hzPatXDjURuem97sd6zpxgjN2E++8tieaFYwNXNLJzEHfKm+61/bGBX9GpKdhIWT7mjYfIhTqnk0NBR1l/URERESkYKi4Sw4EOztp+d53ufDha/EtWdrtWNexY4TOnsUzciTeioqk1/BVVYHHQ9fRo4QCAcxhwxKel1alzHfeilbddEIhDvz9tzl96DhNU9YScpcrRgKXxVdPYfiIkrz22bvvD+5n/bNPd3vM5/NhWXMLI9uXZAmtGzxfd8usfh6ViIiIiEhmlPHLgVAgwLk9u9n3459wob2927GLhV2SZ/sADK+XkupxBDxlrH/ivaSZpHT243kNg9rLagE4s30b5w8eZO/YhSmXK/aW9fMaBitvX9Vrdi5R8ZgRR4/ykaqqaNbP5/OxatUafvKTpwoj25ekvYOyfiIiIiJSKBT45YBvzBhGXrkEp6uLI+t/1i34ObmvhcZJt+KMv7TX65SMn8DeMQs41B5Iun8snf14JvDJq64B4OSr/0nAU0Zr5Wwc09PtvNjApbMjwKVVSzGS1IcxgXtu+mivP0Oi4jEdmzayZsLk6LgHS8++3qTK9rm0109ERERECoECvxypWnkHhtfL6d++yW9f2hINfjbtPs+J0nHYFyb0eo2gfxKtI8PLBpNlknrNzHk8fLiqmpC9l+d//A5Ht2xn79g6MIyE5we7Qrz56h4aNzTTcdxkweQavJFzfT4fM2bMxDAMPlxVTVmkOmkyiYrHOI5D56b3GV1SwrIbbsYwjEHTs6836TRzDwUd2lpO9tOIRERERET6Rnv8csRX5WfCslvZ+6+/ZueuU4DJ9k2t0FUBhsHeI3Cm4zzDR5QkvYZ9tgqHcA+9VPvHUu3H83i8rJ04iS0tJm0jO2BUPYcrZhAKJR/7ji2H8HjCwd7c+Xey8YPN4AQxTZNvfvM7/M2Xv8DaYWV0btlM1eq1Sa8TmyFzx3/FZcPpOnoUz8gKHvzTh2luP1wQ2T5I3MxdRERERKQQKeOXQ5PXrmGffxFOJMoKBR1CkX11jmOkXBLY2RFgzyHnYq+4FPvHhpdVMn/udXg93Zdu+nw+Vq5azajZtbSWTwcM2ipmgNH7X3MwktkaXlbJ5QuWRjNzljWXx//5KUYPLyfwQTNdp04lHX/sfjh3/EcaNwFQPn8+1ePG8fjjTxREtk9EREREpJgo8Muhc/hoHTkzGrwB0aArFEpdCCSTXnGNG5qZM+UmiFuF6O6d21e9OOaQQaj3vu4XX9P0MmvarSyorY9m5sySEspmWwCc2bYl+fjj9sM5oRDvbwsvgyyvXZD+IEREREREJKcU+OXQa6/sxElReCVZIJdJrzj33PKySqxpV0Wzfm6PvbLSCvadKLkYfBoGHq/J7//REh58ZCkPPrKUT/3RldGlnYkML6vk3t/7SrfMXHnNZeHX39oz8EtW/TIUgv0hP4GScobPuyzp64mIiIiISH4p8MuRzo4A77+9P2UxkGTLN9PpFdft3GB4KWl9zW0YRjjwc7N94cxhGtdI8bMkGufwmvkAnNm6JbqUNa3xA/unXIdn+PAUrygiIiIiIvmkwC9H0in9Dz2DsHR6xW3f1BptudC0+VB06ebw4WOYPW1JdD9eWWlF4sxbXNuGVK+XbJwlEyfiHT2a4KlTBA7sT3v8junlAOPU605EREREZAAp8MsBN/gJ9hJMQc9sWjoBYygYDsIaNzT3yLYtmr+M6VPnXcz29ZI5TDdAjR+nYRiUzw83he94tzF6Xlq97kxTve5ERERERAaQAr8cSDeYcsVm09LpFQdwYN+xyD7A7o+XlVRyy9V/AsGytDKHTZva0nq9+HECjLz8CgBO//at6M+rXnciIiIiIoOf+vjlQLrBmys2EErWK+6l//Vz9p0ejmN6MT0GpmmmzOb9+sXtaWUOSV7TJeU4AcqsOXgqR3Gh/TCBfXspnTadO+9dTGdHgF/++A2sTU8ztq6GiQ/+UfovIiIiIiIieafALwfc4M3vH0l7++msr9fZEeCDc5U45sWeeMePnkl6fm/Hu0kjPh1bXZ4wIDVMk5GXf4gTv/4Vp377FqXTpgPhjGf7aYOS0Qu4tLYmvXGIiIiIiEi/ySrwsyxrKrA+5qFRQIVt22Msy9oHnIt8ATxs2/bLkeddCfwIKAP2AXfbtn04m7EUk96qbiZiegzm1k7gultm5WVMroorruTEr3/Fkcb3eaNrLtfcNIumTW2AQWvFLIzpc/P6+iIiIiIikrmsAj/btvcBde73lmX9Q9w119q23a3xm2VZJvAE8Gnbtl+3LOuvgG8B92YzlmKRbtXNeP21j27Y1Gn4qsfR5Eyj9cCp8BLTSJlRxzDZuOk4102oyvs4REREREQkfTlb6mlZVgnwSeCWXk5dBJyzbfv1yPePEc76KfAjdaEY0zSYcGwbc0+8w8xH/zdGimbx+WIYBt76JbTuGAnQbYmpY5g0bW5j8dVTGD6ipN/HJiIiIiIiieVyj98KoMW27XdjHnvSsiwDeB34gm3bJ4BLgWipSNu2j1iWZVqWNca27WPpvtjYsSNyNe6c8vtH9vm5p0+dw05VmTPk0Foxi3nlR6geV9nn18nWG8Nn4nAo/I3jgBFTMcZx2PruQW5bM39gBlfEsplbIr3R/JJ80dySfNL8knwqtvmVy8DvXuDxmO+vtW17v2VZw4B/AL4P3J2rFzt6tINQKNOdcPmVbXGX117eQai3nnjAzvJ5zMxBEZm+6OwIsGXbcRwzMnWM7mVCg0GH997eT039RGX9cihXhYNEEtH8knzR3JJ80vySfBrs88s0jYwTYTlZK2hZ1iRgKfCk+5ht2/sj/w0AjwJXRw59AEyJeW4VEMok21es0mkL4ZheThgDl+1Lq2F7XP8/EREREREZWLnK+P0+8Avbto8CWJZVDnht2z4ZWer5cWBj5NxGoMyyrGsi+/weAJ7J0TgKWqIWCi3f+y6dm95nfMMDdPzud3S818j4+x8YgNGlX3gmFHS0109EREREZBDJVXWQT9N9mec44FXLsjYBW4DZwDoA27ZDwD3ADy3L2kk4U/hIjsZRdIZNmQpAoHkf51sPAlAyYcKAjCWdbJ9LWT8RERERkcEjJxk/27Znx32/B1iY4vw3AFX/SENpJPA7t2cP59sPg2FQMm58v48j0zYT/dVeQkREREREepfL4i6SB27G7+yuneA4eKuqMIcN6/dxpJPt668m8iIiIiIikpn+bwQnGfGOGoWnooKAWUrjpFsJjbtkQMaRTuEZZflERERERAYnZfwGOcMwKJ0yla1twzlROo7dJSOYOQDjSFR4RkRERERECoMyfgUgNGkqrSNngWHQ3FnOmY7zAz0kEREREREpIAr8CsCOwDjcRZYOhqplioiIiIhIRhT4DXKdHQF2HwzimOFVuaEQNG1uU9ZPRERERETSpsBvkGvc0Ex8SRX1yBMRERERkUwo8BvEkvXOCwUdZf1ERERERCRtCvwGsVS985T1ExERERGRdCnwG6SSZftcyvqJiIiIiEi6FPgNUqmyfS5l/UREREREJB0K/AaptpZTSbN9rlDQoa3lZD+NSERERERECpV3oAcgid157+KBHoKIiIiIiBQJZfxERERERESKnAI/ERERERGRIqfAT0REREREpMgp8BMRERERESlyhVjcxQNgmsZAjyOhwTouKXyaW5JPml+SL5pbkk+aX5JPg3l+xYzNk+5zjN56xQ1C1wC/GehBiIiIiIiIDLBrgdfTObEQA79hwOVAKxAc4LGIiIiIiIj0Nw8wAfgdEEjnCYUY+ImIiIiIiEgGVNxFRERERESkyCnwExERERERKXIK/ERERERERIqcAj8REREREZEip8BPRERERESkyCnwExERERERKXIK/ERERERERIqcd6AHUAwsy5oN/BgYCxwFPmXb9s6BHZUUKsuy9gHnIl8AD9u2/bJlWVcCPwLKgH3A3bZtHx6IMUrhsCzrb4E1wFRgvm3bWyKPJ71v6Z4m6Ugxt/aR4B4WOab7mPTKsqyxwE+AGcB5YCfwh7Ztt6eaQ5pfko5e5pcDbAZCkdPvsW17c+R5twPfIRw/NQJ/YNv2mf4efzaU8cuNx4Af2LY9G/gB4ZuOSDbW2rZdF/l62bIsE3gC+Gxknr0GfGtghygFYj1wHdAc93iq+5buaZKOZHML4u5hALqPSQYc4Nt22oC1AAADAElEQVS2bVu2bc8HdgPfSjWHNL8kAwnnV8zxq2LuX27QNwL4R+B227ZnAqeBh/p74NlS4Jcly7KqgXrgp5GHfgrUW5blH7hRSRFaBJyzbfv1yPePAXcO4HikQNi2/bpt2/tjH0t139I9TdKVaG71QvcxSYtt28ds23415qG3gCmknkOaX5KWFPMrlVuBd2JWvzwG3JWH4eWVAr/sXQK02LYdBIj892DkcZG+etKyrE2WZT1qWdYo4FJiPlW3bfsIYFqWNWbARiiFLNV9S/c0yYX4exjoPiZ9EMnkPQi8SOo5pPklGYubX65XLcvaaFnW31iWNSzyWLf5BXxAAf5/UYGfyOBzrW3bC4DLAQP4/gCPR0QkE7qHSS79L6ADzSPJj/j5dalt24sJL2OfB3xxoAaWDwr8srcfmGRZlgcg8t+JkcdFMuYunbJtOwA8ClxN+JOl6DIEy7KqgJBt28cGZJBS6FLdt3RPk6wkuYeB7mOSoUgBoVnAXbZth0g9hzS/JCMJ5lfs/esU8E8kuX8RzgAW3P8XFfhlKVItaiPwichDnwDes227feBGJYXKsqxyy7IqI382gI8Tnl+NQJllWddETn0AeGZgRimFLtV9S/c0yUaKexjoPiYZsCzrm4T37a2KfIgAqeeQ5pekLdH8sixrtGVZZZE/e4G1XLx/vQRcblnWrMj3DwBP9++os2c4jjPQYyh4lmXNIVz6fDRwnHDpc3tgRyWFyLKs6cBzgCfytQ34Y9u2Wy3LuopwdcVSLpapPjRQY5XCYFnW94DVwHjgCHDUtu2aVPct3dMkHYnmFnA7Se5hkefoPia9siyrBtgC7ADORh7ea9v2HanmkOaXpCPZ/AK+TXj+OIAPeAP4E9u2OyLPWxk5xwO8B3zatu3O/h19dhT4iYiIiIiIFDkt9RQRERERESlyCvxERERERESKnAI/ERERERGRIqfAT0REREREpMgp8BMRERERESlyCvxERERERESKnAI/ERERERGRIqfAT0REREREpMj9fymg21CYI1AAAAAAAElFTkSuQmCC\n","text/plain":["
"]},"metadata":{"tags":[],"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"Ra90QUK5mupJ"},"source":["## Neuro-evolution with Novelty search agent"]},{"cell_type":"code","metadata":{"id":"q4Sbn-74Y6NS"},"source":["df= df_full.copy()\n","name = 'Neuro-evolution with Novelty search agent'\n","\n","close = df.Close.values.tolist()\n","initial_money = 10000\n","window_size = 30\n","skip = 1\n","\n","novelty_search_threshold = 6\n","novelty_log_maxlen = 1000\n","backlog_maxsize = 500\n","novelty_log_add_amount = 3"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"wRfPlPSAY6NX"},"source":["class neuralnetwork:\n"," def __init__(self, id_, hidden_size = 128):\n"," self.W1 = np.random.randn(window_size, hidden_size) / np.sqrt(window_size)\n"," self.W2 = np.random.randn(hidden_size, 3) / np.sqrt(hidden_size)\n"," self.fitness = 0\n"," self.last_features = None\n"," self.id = id_\n","\n","def relu(X):\n"," return np.maximum(X, 0)\n"," \n","def softmax(X):\n"," e_x = np.exp(X - np.max(X, axis=-1, keepdims=True))\n"," return e_x / np.sum(e_x, axis=-1, keepdims=True)\n","\n","def feed_forward(X, nets):\n"," a1 = np.dot(X, nets.W1)\n"," z1 = relu(a1)\n"," a2 = np.dot(z1, nets.W2)\n"," return softmax(a2)"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"po4cAOGfY6NZ"},"source":["class NeuroEvolution:\n"," def __init__(self, population_size, mutation_rate, model_generator,\n"," state_size, window_size, trend, skip, initial_money):\n"," self.population_size = population_size\n"," self.mutation_rate = mutation_rate\n"," self.model_generator = model_generator\n"," self.state_size = state_size\n"," self.window_size = window_size\n"," self.half_window = window_size // 2\n"," self.trend = trend\n"," self.skip = skip\n"," self.initial_money = initial_money\n"," self.generation_backlog = []\n"," self.novel_backlog = []\n"," self.novel_pop = []\n"," \n"," def _initialize_population(self):\n"," self.population = []\n"," for i in range(self.population_size):\n"," self.population.append(self.model_generator(i))\n"," \n"," def _memorize(self, q, i, limit):\n"," q.append(i)\n"," if len(q) > limit:\n"," q.pop()\n"," \n"," def mutate(self, individual, scale=1.0):\n"," mutation_mask = np.random.binomial(1, p=self.mutation_rate, size=individual.W1.shape)\n"," individual.W1 += np.random.normal(loc=0, scale=scale, size=individual.W1.shape) * mutation_mask\n"," mutation_mask = np.random.binomial(1, p=self.mutation_rate, size=individual.W2.shape)\n"," individual.W2 += np.random.normal(loc=0, scale=scale, size=individual.W2.shape) * mutation_mask\n"," return individual\n"," \n"," def inherit_weights(self, parent, child):\n"," child.W1 = parent.W1.copy()\n"," child.W2 = parent.W2.copy()\n"," return child\n"," \n"," def crossover(self, parent1, parent2):\n"," child1 = self.model_generator((parent1.id+1)*10)\n"," child1 = self.inherit_weights(parent1, child1)\n"," child2 = self.model_generator((parent2.id+1)*10)\n"," child2 = self.inherit_weights(parent2, child2)\n"," # first W\n"," n_neurons = child1.W1.shape[1]\n"," cutoff = np.random.randint(0, n_neurons)\n"," child1.W1[:, cutoff:] = parent2.W1[:, cutoff:].copy()\n"," child2.W1[:, cutoff:] = parent1.W1[:, cutoff:].copy()\n"," # second W\n"," n_neurons = child1.W2.shape[1]\n"," cutoff = np.random.randint(0, n_neurons)\n"," child1.W2[:, cutoff:] = parent2.W2[:, cutoff:].copy()\n"," child2.W2[:, cutoff:] = parent1.W2[:, cutoff:].copy()\n"," return child1, child2\n"," \n"," def get_state(self, t):\n"," window_size = self.window_size + 1\n"," d = t - window_size + 1\n"," block = self.trend[d : t + 1] if d >= 0 else -d * [self.trend[0]] + self.trend[0 : t + 1]\n"," res = []\n"," for i in range(window_size - 1):\n"," res.append(block[i + 1] - block[i])\n"," return np.array([res])\n"," \n"," def act(self, p, state):\n"," logits = feed_forward(state, p)\n"," return np.argmax(logits, 1)[0]\n"," \n"," def buy(self, individual):\n"," initial_money = self.initial_money\n"," starting_money = initial_money\n"," state = self.get_state(0)\n"," inventory = []\n"," states_sell = []\n"," states_buy = []\n"," \n"," for t in range(0, len(self.trend) - 1, self.skip):\n"," action = self.act(individual, state)\n"," next_state = self.get_state(t + 1)\n"," \n"," if action == 1 and starting_money >= self.trend[t]:\n"," inventory.append(self.trend[t])\n"," initial_money -= self.trend[t]\n"," states_buy.append(t)\n"," print('day %d: buy 1 unit at price %f, total balance %f'% (t, self.trend[t], initial_money))\n"," \n"," elif action == 2 and len(inventory):\n"," bought_price = inventory.pop(0)\n"," initial_money += self.trend[t]\n"," states_sell.append(t)\n"," try:\n"," invest = ((self.trend[t] - bought_price) / bought_price) * 100\n"," except:\n"," invest = 0\n"," print(\n"," 'day %d, sell 1 unit at price %f, investment %f %%, total balance %f,'\n"," % (t, self.trend[t], invest, initial_money)\n"," )\n"," state = next_state\n"," \n"," invest = ((initial_money - starting_money) / starting_money) * 100\n"," total_gains = initial_money - starting_money\n"," return states_buy, states_sell, total_gains, invest\n"," \n"," def calculate_fitness(self):\n"," for i in range(self.population_size):\n"," initial_money = self.initial_money\n"," starting_money = initial_money\n"," state = self.get_state(0)\n"," inventory = []\n"," \n"," for t in range(0, len(self.trend) - 1, self.skip):\n"," action = self.act(self.population[i], state)\n"," next_state = self.get_state(t + 1)\n"," \n"," if action == 1 and starting_money >= self.trend[t]:\n"," inventory.append(self.trend[t])\n"," starting_money -= self.trend[t]\n","\n"," elif action == 2 and len(inventory):\n"," bought_price = inventory.pop(0)\n"," starting_money += self.trend[t]\n","\n"," state = next_state\n"," invest = ((starting_money - initial_money) / initial_money) * 100\n"," self.population[i].fitness = invest\n"," self.population[i].last_features = self.population[i].W2.flatten()\n"," \n"," def evaluate(self, individual, backlog, pop, k = 4):\n"," score = 0\n"," if len(backlog):\n"," x = np.array(backlog)\n"," nn = NearestNeighbors(n_neighbors = k, metric = 'euclidean').fit(np.array(backlog))\n"," d, _ = nn.kneighbors([individual])\n"," score += np.mean(d)\n"," \n"," if len(pop):\n"," nn = NearestNeighbors(n_neighbors = k, metric = 'euclidean').fit(np.array(pop))\n"," d, _ = nn.kneighbors([individual])\n"," score += np.mean(d)\n"," \n"," return score\n"," \n"," def evolve(self, generations=20, checkpoint= 5):\n"," self._initialize_population()\n"," n_winners = int(self.population_size * 0.4)\n"," n_parents = self.population_size - n_winners\n"," for epoch in range(generations):\n"," self.calculate_fitness()\n"," scores = [self.evaluate(p.last_features, self.novel_backlog, self.novel_pop) for p in self.population]\n"," sort_fitness = np.argsort(scores)[::-1]\n"," self.population = [self.population[i] for i in sort_fitness]\n"," fittest_individual = self.population[0]\n"," if (epoch+1) % checkpoint == 0:\n"," print('epoch %d, fittest individual %d with accuracy %f'%(epoch+1, sort_fitness[0], \n"," fittest_individual.fitness))\n"," next_population = [self.population[i] for i in range(n_winners)]\n"," total_fitness = np.sum([np.abs(i.fitness) for i in self.population])\n"," parent_probabilities = [np.abs(i.fitness / total_fitness) for i in self.population]\n"," parents = np.random.choice(self.population, size=n_parents, p=parent_probabilities, replace=False)\n"," \n"," for p in next_population:\n"," if p.last_features is not None:\n"," self._memorize(self.novel_pop, p.last_features, backlog_maxsize)\n"," if np.random.randint(0,10) < novelty_search_threshold:\n"," self._memorize(self.novel_backlog, p.last_features, novelty_log_maxlen)\n"," \n"," for i in np.arange(0, len(parents), 2):\n"," child1, child2 = self.crossover(parents[i], parents[i+1])\n"," next_population += [self.mutate(child1), self.mutate(child2)]\n"," self.population = next_population\n"," \n"," if np.random.randint(0,10) < novelty_search_threshold:\n"," pop_sorted = sorted(self.population, key=lambda p: p.fitness, reverse=True)\n"," self.generation_backlog.append(pop_sorted[0])\n"," print('novel add fittest, score: %f, backlog size: %d'%(pop_sorted[0].fitness, \n"," len(self.generation_backlog)))\n"," generation_backlog_temp = self.generation_backlog\n"," if len(self.generation_backlog) > backlog_maxsize:\n"," generation_backlog_temp = random.sample(generation_backlog, backlog_maxsize)\n"," for p in generation_backlog_temp:\n"," if p.last_features is not None:\n"," self._memorize(self.novel_backlog, p.last_features, novelty_log_maxlen)\n"," \n"," return fittest_individual"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"-dn0_YeOY6Ng"},"source":["population_size = 100\n","generations = 100\n","mutation_rate = 0.1\n","neural_evolve = NeuroEvolution(population_size, mutation_rate, neuralnetwork,\n"," window_size, window_size, close, skip, initial_money)"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"pGmI3IKcY6Nh","outputId":"a01b84ea-78a7-4de5-8aaa-b92f1b1f322f"},"source":["fittest_nets = neural_evolve.evolve(100)"],"execution_count":null,"outputs":[{"output_type":"stream","text":["novel add fittest, score: 5.960001, backlog size: 16\n","novel add fittest, score: 2.560349, backlog size: 17\n","epoch 5, fittest individual 86 with accuracy -99.353801\n","novel add fittest, score: 2.073401, backlog size: 18\n","epoch 10, fittest individual 53 with accuracy -99.622801\n","novel add fittest, score: 9.773855, backlog size: 19\n","novel add fittest, score: 1.068502, backlog size: 20\n","novel add fittest, score: 1.733602, backlog size: 21\n","epoch 15, fittest individual 49 with accuracy -94.018300\n","novel add fittest, score: 1.439049, backlog size: 22\n","novel add fittest, score: 0.000000, backlog size: 23\n","novel add fittest, score: 0.000000, backlog size: 24\n","novel add fittest, score: 3.052850, backlog size: 25\n","epoch 20, fittest individual 83 with accuracy -42.284500\n","novel add fittest, score: 3.284498, backlog size: 26\n","novel add fittest, score: 3.284498, backlog size: 27\n","novel add fittest, score: 0.000000, backlog size: 28\n","novel add fittest, score: 0.000000, backlog size: 29\n","epoch 25, fittest individual 43 with accuracy -99.809850\n","novel add fittest, score: 0.000000, backlog size: 30\n","novel add fittest, score: 0.000000, backlog size: 31\n","novel add fittest, score: 4.712602, backlog size: 32\n","novel add fittest, score: 4.712602, backlog size: 33\n","epoch 30, fittest individual 51 with accuracy -94.734501\n","novel add fittest, score: 4.712602, backlog size: 34\n","novel add fittest, score: 0.000000, backlog size: 35\n","novel add fittest, score: 0.000000, backlog size: 36\n","epoch 35, fittest individual 74 with accuracy -99.895853\n","novel add fittest, score: 0.000000, backlog size: 37\n","novel add fittest, score: 0.000000, backlog size: 38\n","novel add fittest, score: 0.000000, backlog size: 39\n","novel add fittest, score: 0.000000, backlog size: 40\n","epoch 40, fittest individual 50 with accuracy -99.900900\n","novel add fittest, score: 0.000000, backlog size: 41\n","novel add fittest, score: 0.000000, backlog size: 42\n","epoch 45, fittest individual 98 with accuracy -92.305952\n","novel add fittest, score: 0.000000, backlog size: 43\n","novel add fittest, score: 0.000000, backlog size: 44\n","novel add fittest, score: 0.000000, backlog size: 45\n","novel add fittest, score: 0.000000, backlog size: 46\n","epoch 50, fittest individual 55 with accuracy -99.841901\n","novel add fittest, score: 0.000000, backlog size: 47\n","novel add fittest, score: 0.000000, backlog size: 48\n","novel add fittest, score: 0.000000, backlog size: 49\n","epoch 55, fittest individual 0 with accuracy -99.351002\n","novel add fittest, score: 0.000000, backlog size: 50\n","novel add fittest, score: 0.000000, backlog size: 51\n","novel add fittest, score: 0.000000, backlog size: 52\n","epoch 60, fittest individual 56 with accuracy -91.532553\n","novel add fittest, score: 0.000000, backlog size: 53\n","novel add fittest, score: 0.000000, backlog size: 54\n","novel add fittest, score: 0.000000, backlog size: 55\n","epoch 65, fittest individual 0 with accuracy -99.389200\n","novel add fittest, score: 0.000000, backlog size: 56\n","novel add fittest, score: 0.000000, backlog size: 57\n","novel add fittest, score: 0.000000, backlog size: 58\n","epoch 70, fittest individual 68 with accuracy -90.999901\n","novel add fittest, score: 0.000000, backlog size: 59\n","novel add fittest, score: 0.000000, backlog size: 60\n","novel add fittest, score: 0.000000, backlog size: 61\n","novel add fittest, score: 0.000000, backlog size: 62\n","epoch 75, fittest individual 50 with accuracy -98.881400\n","novel add fittest, score: 0.000000, backlog size: 63\n","novel add fittest, score: 0.000000, backlog size: 64\n","novel add fittest, score: 0.000000, backlog size: 65\n","epoch 80, fittest individual 0 with accuracy -91.959200\n","novel add fittest, score: 0.000000, backlog size: 66\n","novel add fittest, score: 0.000000, backlog size: 67\n","novel add fittest, score: 0.000000, backlog size: 68\n","epoch 85, fittest individual 0 with accuracy -94.175699\n","novel add fittest, score: 0.000000, backlog size: 69\n","novel add fittest, score: 0.000000, backlog size: 70\n","novel add fittest, score: 0.000000, backlog size: 71\n","novel add fittest, score: 0.000000, backlog size: 72\n","novel add fittest, score: 0.000000, backlog size: 73\n","epoch 90, fittest individual 60 with accuracy -93.196199\n","novel add fittest, score: 0.000000, backlog size: 74\n","novel add fittest, score: 0.000000, backlog size: 75\n","novel add fittest, score: 0.000000, backlog size: 76\n","epoch 95, fittest individual 66 with accuracy -93.122201\n","novel add fittest, score: 0.000000, backlog size: 77\n","novel add fittest, score: 0.000000, backlog size: 78\n","novel add fittest, score: 0.000000, backlog size: 79\n","epoch 100, fittest individual 52 with accuracy -93.193801\n","novel add fittest, score: 0.000000, backlog size: 80\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"ZKUdAfxpY6Nv","outputId":"268f7cbd-db9a-443f-886b-ea7553dbb14a"},"source":["states_buy, states_sell, total_gains, invest = neural_evolve.buy(fittest_nets)"],"execution_count":null,"outputs":[{"output_type":"stream","text":["day 1: buy 1 unit at price 762.130005, total balance 9237.869995\n","day 3: buy 1 unit at price 782.520020, total balance 8455.349975\n","day 4: buy 1 unit at price 790.510010, total balance 7664.839965\n","day 5, sell 1 unit at price 785.309998, investment 3.041475 %, total balance 8450.149963,\n","day 9: buy 1 unit at price 758.489990, total balance 7691.659973\n","day 10: buy 1 unit at price 764.479980, total balance 6927.179993\n","day 11: buy 1 unit at price 771.229980, total balance 6155.950013\n","day 15: buy 1 unit at price 760.989990, total balance 5394.960023\n","day 16: buy 1 unit at price 761.679993, total balance 4633.280030\n","day 17: buy 1 unit at price 768.239990, total balance 3865.040040\n","day 21: buy 1 unit at price 750.500000, total balance 3114.540040\n","day 26, sell 1 unit at price 789.289978, investment 0.865148 %, total balance 3903.830018,\n","day 31: buy 1 unit at price 790.799988, total balance 3113.030030\n","day 37: buy 1 unit at price 791.549988, total balance 2321.480042\n","day 39: buy 1 unit at price 782.789978, total balance 1538.690064\n","day 40: buy 1 unit at price 771.820007, total balance 766.870057\n","day 43: buy 1 unit at price 794.020020, total balance -27.149963\n","day 44: buy 1 unit at price 806.150024, total balance -833.299987\n","day 45: buy 1 unit at price 806.650024, total balance -1639.950011\n","day 48: buy 1 unit at price 806.359985, total balance -2446.309996\n","day 49: buy 1 unit at price 807.880005, total balance -3254.190001\n","day 50: buy 1 unit at price 804.609985, total balance -4058.799986\n","day 52: buy 1 unit at price 802.174988, total balance -4860.974974\n","day 53: buy 1 unit at price 805.020020, total balance -5665.994994\n","day 54, sell 1 unit at price 819.309998, investment 3.643216 %, total balance -4846.684996,\n","day 55: buy 1 unit at price 823.869995, total balance -5670.554991\n","day 60: buy 1 unit at price 796.789978, total balance -6467.344969\n","day 61: buy 1 unit at price 795.695007, total balance -7263.039976\n","day 63: buy 1 unit at price 801.489990, total balance -8064.529966\n","day 65: buy 1 unit at price 806.969971, total balance -8871.499937\n","day 66: buy 1 unit at price 808.380005, total balance -9679.879942\n","day 67: buy 1 unit at price 809.559998, total balance -10489.439940\n","day 68: buy 1 unit at price 813.669983, total balance -11303.109923\n","day 69: buy 1 unit at price 819.239990, total balance -12122.349913\n","day 73, sell 1 unit at price 828.070007, investment 9.173492 %, total balance -11294.279906,\n","day 80: buy 1 unit at price 835.239990, total balance -12129.519896\n","day 84: buy 1 unit at price 831.909973, total balance -12961.429869\n","day 85, sell 1 unit at price 835.369995, investment 9.272972 %, total balance -12126.059874,\n","day 86, sell 1 unit at price 838.679993, investment 8.745772 %, total balance -11287.379881,\n","day 88: buy 1 unit at price 845.539978, total balance -12132.919859\n","day 89: buy 1 unit at price 845.619995, total balance -12978.539854\n","day 90: buy 1 unit at price 847.200012, total balance -13825.739866\n","day 92: buy 1 unit at price 852.119995, total balance -14677.859861\n","day 93: buy 1 unit at price 848.400024, total balance -15526.259885\n","day 94: buy 1 unit at price 830.460022, total balance -16356.719907\n","day 96: buy 1 unit at price 817.580017, total balance -17174.299924\n","day 97: buy 1 unit at price 814.429993, total balance -17988.729917\n","day 98: buy 1 unit at price 819.510010, total balance -18808.239927\n","day 99: buy 1 unit at price 820.919983, total balance -19629.159910\n","day 101, sell 1 unit at price 831.500000, investment 9.265563 %, total balance -18797.659910,\n","day 102: buy 1 unit at price 829.559998, total balance -19627.219908\n","day 103, sell 1 unit at price 838.549988, investment 10.092164 %, total balance -18788.669920,\n","day 104: buy 1 unit at price 834.570007, total balance -19623.239927\n","day 105: buy 1 unit at price 831.409973, total balance -20454.649900\n","day 107: buy 1 unit at price 824.669983, total balance -21279.319883\n","day 108: buy 1 unit at price 824.729980, total balance -22104.049863\n","day 109: buy 1 unit at price 823.349976, total balance -22927.399839\n","day 112: buy 1 unit at price 837.169983, total balance -23764.569822\n","day 116: buy 1 unit at price 843.190002, total balance -24607.759824\n","day 119: buy 1 unit at price 871.729980, total balance -25479.489804\n","day 125: buy 1 unit at price 931.659973, total balance -26411.149777\n","day 127: buy 1 unit at price 934.299988, total balance -27345.449765\n","day 129: buy 1 unit at price 928.780029, total balance -28274.229794\n","day 130: buy 1 unit at price 930.599976, total balance -29204.829770\n","day 133: buy 1 unit at price 943.000000, total balance -30147.829770\n","day 134: buy 1 unit at price 919.619995, total balance -31067.449765\n","day 137, sell 1 unit at price 941.859985, investment 22.599708 %, total balance -30125.589780,\n","day 139: buy 1 unit at price 954.960022, total balance -31080.549802\n","day 140: buy 1 unit at price 969.539978, total balance -32050.089780\n","day 141, sell 1 unit at price 971.469971, investment 29.443034 %, total balance -31078.619809,\n","day 142: buy 1 unit at price 975.880005, total balance -32054.499814\n","day 143: buy 1 unit at price 964.859985, total balance -33019.359799\n","day 145: buy 1 unit at price 975.599976, total balance -33994.959775\n","day 147: buy 1 unit at price 976.570007, total balance -34971.529782\n","day 148: buy 1 unit at price 980.940002, total balance -35952.469784\n","day 149: buy 1 unit at price 983.409973, total balance -36935.879757\n","day 151: buy 1 unit at price 942.900024, total balance -37878.779781\n","day 152: buy 1 unit at price 953.400024, total balance -38832.179805\n","day 153: buy 1 unit at price 950.760010, total balance -39782.939815\n","day 154: buy 1 unit at price 942.309998, total balance -40725.249813\n","day 156: buy 1 unit at price 957.369995, total balance -41682.619808\n","day 157, sell 1 unit at price 950.630005, investment 20.211181 %, total balance -40731.989803,\n","day 158: buy 1 unit at price 959.450012, total balance -41691.439815\n","day 159: buy 1 unit at price 957.090027, total balance -42648.529842\n","day 164: buy 1 unit at price 917.789978, total balance -43566.319820\n","day 165: buy 1 unit at price 908.729980, total balance -44475.049800\n","day 167: buy 1 unit at price 911.710022, total balance -45386.759822\n","day 168, sell 1 unit at price 906.690002, investment 14.546146 %, total balance -44480.069820,\n","day 169, sell 1 unit at price 918.590027, investment 17.348210 %, total balance -43561.479793,\n","day 170: buy 1 unit at price 928.799988, total balance -44490.279781\n","day 173, sell 1 unit at price 947.159973, investment 22.717728 %, total balance -43543.119808,\n","day 184: buy 1 unit at price 941.530029, total balance -44484.649837\n","day 186: buy 1 unit at price 930.830017, total balance -45415.479854\n","day 187: buy 1 unit at price 930.390015, total balance -46345.869869\n","day 190: buy 1 unit at price 929.359985, total balance -47275.229854\n","day 191: buy 1 unit at price 926.789978, total balance -48202.019832\n","day 194: buy 1 unit at price 914.390015, total balance -49116.409847\n","day 196: buy 1 unit at price 922.219971, total balance -50038.629818\n","day 198: buy 1 unit at price 910.979980, total balance -50949.609798\n","day 201: buy 1 unit at price 924.690002, total balance -51874.299800\n","day 202: buy 1 unit at price 927.000000, total balance -52801.299800\n","day 206, sell 1 unit at price 921.289978, investment 16.028558 %, total balance -51880.009822,\n","day 207: buy 1 unit at price 929.570007, total balance -52809.579829\n","day 208: buy 1 unit at price 939.330017, total balance -53748.909846\n","day 213: buy 1 unit at price 926.500000, total balance -54675.409846\n","day 218: buy 1 unit at price 920.289978, total balance -55595.699824\n","day 219: buy 1 unit at price 915.000000, total balance -56510.699824\n","day 222: buy 1 unit at price 932.450012, total balance -57443.149836\n","day 224: buy 1 unit at price 920.969971, total balance -58364.119807\n","day 227: buy 1 unit at price 949.500000, total balance -59313.619807\n","day 228: buy 1 unit at price 959.109985, total balance -60272.729792\n","day 229: buy 1 unit at price 953.270020, total balance -61225.999812\n","day 232: buy 1 unit at price 969.960022, total balance -62195.959834\n","day 238: buy 1 unit at price 989.679993, total balance -63185.639827\n","day 240: buy 1 unit at price 992.179993, total balance -64177.819820\n","day 242: buy 1 unit at price 984.450012, total balance -65162.269832\n","day 244: buy 1 unit at price 968.450012, total balance -66130.719844\n","day 247: buy 1 unit at price 972.559998, total balance -67103.279842\n","day 248: buy 1 unit at price 1019.270020, total balance -68122.549862\n","day 249: buy 1 unit at price 1017.109985, total balance -69139.659847\n","day 250: buy 1 unit at price 1016.640015, total balance -70156.299862\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"TpZ5TannY6N0","outputId":"880c6ee9-82f6-45cb-e19f-c933b4adb321"},"source":["fig = plt.figure(figsize = (15,5))\n","plt.plot(close, color='r', lw=2.)\n","plt.plot(close, '^', markersize=10, color='m', label = 'buying signal', markevery = states_buy)\n","plt.plot(close, 'v', markersize=10, color='k', label = 'selling signal', markevery = states_sell)\n","plt.title('total gains %f, total investment %f%%'%(total_gains, invest))\n","plt.legend()\n","plt.savefig('output/'+name+'.png')\n","plt.show()"],"execution_count":null,"outputs":[{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["
"]},"metadata":{"tags":[],"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"FW6xxeNRm9QZ"},"source":["## ABCD strategy agent"]},{"cell_type":"code","metadata":{"id":"tnsxrP9tY6OF"},"source":["df= df_full.copy()\n","name = 'ABCD strategy agent'\n","\n","def abcd(trend, skip_loop = 4, ma = 7):\n"," ma = pd.Series(trend).rolling(ma).mean().values\n"," x = []\n"," for a in range(ma.shape[0]):\n"," for b in range(a, ma.shape[0], skip_loop):\n"," for c in range(b, ma.shape[0], skip_loop):\n"," for d in range(c, ma.shape[0], skip_loop):\n"," if ma[b] > ma[a] and \\\n"," (ma[c] < ma[b] and ma[c] > ma[a]) \\\n"," and ma[d] > ma[b]:\n"," x.append([a,b,c,d])\n"," x_np = np.array(x)\n"," ac = x_np[:,0].tolist() + x_np[:,2].tolist()\n"," bd = x_np[:,1].tolist() + x_np[:,3].tolist()\n"," ac_set = set(ac)\n"," bd_set = set(bd)\n"," signal = np.zeros(len(trend))\n"," buy = list(ac_set - bd_set)\n"," sell = list(list(bd_set - ac_set))\n"," signal[buy] = 1.0\n"," signal[sell] = -1.0\n"," return signal"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"-ZL7mRMfY6OH","outputId":"763c1b2a-cee6-4e31-8576-a630e7fa52f7"},"source":["%%time\n","signal = abcd(df['Close'])"],"execution_count":null,"outputs":[{"output_type":"stream","text":["CPU times: user 1.08 s, sys: 8 ms, total: 1.09 s\n","Wall time: 1.09 s\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"847wzmd9Y6OJ"},"source":["def buy_stock(\n"," real_movement,\n"," signal,\n"," initial_money = 10000,\n"," max_buy = 1,\n"," max_sell = 1,\n","):\n"," \"\"\"\n"," real_movement = actual movement in the real world\n"," delay = how much interval you want to delay to change our decision from buy to sell, vice versa\n"," initial_state = 1 is buy, 0 is sell\n"," initial_money = 10000, ignore what kind of currency\n"," max_buy = max quantity for share to buy\n"," max_sell = max quantity for share to sell\n"," \"\"\"\n"," starting_money = initial_money\n"," states_sell = []\n"," states_buy = []\n"," states_money = []\n"," current_inventory = 0\n"," \n"," def buy(i, initial_money, current_inventory):\n"," shares = initial_money // real_movement[i]\n"," if shares < 1:\n"," print(\n"," 'day %d: total balances %f, not enough money to buy a unit price %f'\n"," % (i, initial_money, real_movement[i])\n"," )\n"," else:\n"," if shares > max_buy:\n"," buy_units = max_buy\n"," else:\n"," buy_units = shares\n"," initial_money -= buy_units * real_movement[i]\n"," current_inventory += buy_units\n"," print(\n"," 'day %d: buy %d units at price %f, total balance %f'\n"," % (i, buy_units, buy_units * real_movement[i], initial_money)\n"," )\n"," states_buy.append(0)\n"," return initial_money, current_inventory\n"," \n"," for i in range(real_movement.shape[0]):\n"," state = signal[i]\n"," if state == 1:\n"," initial_money, current_inventory = buy(\n"," i, initial_money, current_inventory\n"," )\n"," states_buy.append(i)\n"," elif state == -1:\n"," if current_inventory == 0:\n"," print('day %d: cannot sell anything, inventory 0' % (i))\n"," else:\n"," if current_inventory > max_sell:\n"," sell_units = max_sell\n"," else:\n"," sell_units = current_inventory\n"," current_inventory -= sell_units\n"," total_sell = sell_units * real_movement[i]\n"," initial_money += total_sell\n"," try:\n"," invest = (\n"," (real_movement[i] - real_movement[states_buy[-1]])\n"," / real_movement[states_buy[-1]]\n"," ) * 100\n"," except:\n"," invest = 0\n"," print(\n"," 'day %d, sell %d units at price %f, investment %f %%, total balance %f,'\n"," % (i, sell_units, total_sell, invest, initial_money)\n"," )\n"," states_sell.append(i)\n"," states_money.append(initial_money)\n"," \n"," invest = ((initial_money - starting_money) / starting_money) * 100\n"," total_gains = initial_money - starting_money\n"," return states_buy, states_sell, total_gains, invest, states_money"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"QhNWyPhvY6OM","outputId":"bbe68834-bc04-49d6-cdf7-fd7815870c49"},"source":["states_buy, states_sell, total_gains, invest, states_money = buy_stock(df.Close, signal)"],"execution_count":null,"outputs":[{"output_type":"stream","text":["day 6: buy 1 units at price 762.559998, total balance 9237.440002\n","day 7: buy 1 units at price 754.020020, total balance 8483.419982\n","day 8: buy 1 units at price 736.080017, total balance 7747.339965\n","day 9: buy 1 units at price 758.489990, total balance 6988.849975\n","day 10: buy 1 units at price 764.479980, total balance 6224.369995\n","day 11: buy 1 units at price 771.229980, total balance 5453.140015\n","day 12: buy 1 units at price 760.539978, total balance 4692.600037\n","day 13: buy 1 units at price 769.200012, total balance 3923.400025\n","day 14: buy 1 units at price 768.270020, total balance 3155.130005\n","day 15: buy 1 units at price 760.989990, total balance 2394.140015\n","day 19: buy 1 units at price 758.039978, total balance 1636.100037\n","day 21: buy 1 units at price 750.500000, total balance 885.600037\n","day 22: buy 1 units at price 762.520020, total balance 123.080017\n","day 23: total balances 123.080017, not enough money to buy a unit price 759.109985\n","day 24: total balances 123.080017, not enough money to buy a unit price 771.190002\n","day 25: total balances 123.080017, not enough money to buy a unit price 776.419983\n","day 26: total balances 123.080017, not enough money to buy a unit price 789.289978\n","day 27: total balances 123.080017, not enough money to buy a unit price 789.270020\n","day 43: total balances 123.080017, not enough money to buy a unit price 794.020020\n","day 148, sell 1 units at price 980.940002, investment 23.540966 %, total balance 1104.020019,\n","day 149, sell 1 units at price 983.409973, investment 23.852038 %, total balance 2087.429992,\n","day 239, sell 1 units at price 992.000000, investment 24.933878 %, total balance 3079.429992,\n","day 240, sell 1 units at price 992.179993, investment 24.956546 %, total balance 4071.609985,\n","day 241, sell 1 units at price 992.809998, investment 25.035890 %, total balance 5064.419983,\n","day 242, sell 1 units at price 984.450012, investment 23.983021 %, total balance 6048.869995,\n","day 243, sell 1 units at price 988.200012, investment 24.455302 %, total balance 7037.070007,\n","day 244, sell 1 units at price 968.450012, investment 21.967959 %, total balance 8005.520019,\n","day 245, sell 1 units at price 970.539978, investment 22.231172 %, total balance 8976.059997,\n","day 248, sell 1 units at price 1019.270020, investment 28.368302 %, total balance 9995.330017,\n","day 249, sell 1 units at price 1017.109985, investment 28.096264 %, total balance 11012.440002,\n","day 250, sell 1 units at price 1016.640015, investment 28.037076 %, total balance 12029.080017,\n","day 251, sell 1 units at price 1025.500000, investment 29.152915 %, total balance 13054.580017,\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"fBM2FT84Y6OS","outputId":"ff295d15-2a34-44a7-b1b3-36e3d9f6bb38"},"source":["close = df['Close']\n","fig = plt.figure(figsize = (15,5))\n","plt.plot(close, color='r', lw=2.)\n","plt.plot(close, '^', markersize=10, color='m', label = 'buying signal', markevery = states_buy)\n","plt.plot(close, 'v', markersize=10, color='k', label = 'selling signal', markevery = states_sell)\n","plt.title('total gains %f, total investment %f%%'%(total_gains, invest))\n","plt.legend()\n","plt.savefig('output/'+name+'.png')\n","plt.show()"],"execution_count":null,"outputs":[{"output_type":"display_data","data":{"image/png":"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NhtgrPQ5c+YsEhOTSEpqzfz585tVtg8k8KMg38n2X1MA2P7rUQrzXbVS78iRQyksLKyVugDefns63323pNbqK8/27Vt56qnH6qz+L7/8nMcee6jO6hdCCCGEEKIinnxj/0dbdFQDt6R+tfihnutX7ce/ib3P52Pdqv2MvrBnA7fqZHfeeU+9XKd377488cTUermWEEIIIYQQ9c2TXwCALVICvxbDn+3zeozAz+vxsf3Xowwd0aVW5vrNnv0hK1cux+ks5u67/8SYMWM5cuQwd975exYv/g7guO//9a/nadeuHTfeeAsAO3Zs54knHuXjj+czbdpT9O7dh2uuGc8777zJgQP7KSjI5/DhQ3To0JGnn36esLAw8vPzefbZp9i7dw9JSa1JTEwiLi6eP//5vuPaVlxczNSpT7Bv3x5sNjudO3fh6aefY8OGdbz22ku8886HAMyfP4dPPvkvUVHRDB8+ggUL5rJ48XeBdo8bdzVr1qyiuLiYhx9+nAEDBuJ2u3noofvIycnB6XTSt28/Hnzw0cAyuUIIIYQQQjSUQMYvqmUFfi16qGfpbJ+fP+tXG6xWK++99zHPP/9vXnhhGllZmRWWv+aa6/jsswWBNs2fP5errvodFsvJ20tqvY0nnniGjz6ah9vtZsmSrwB4990ZREe34uOP5/P008+xefOmMq+1du1qCgsLmDXrE95/fzYPPvjoSWV27drJhx++xxtvzOTttz8gLy/vuOM5OTmcemp/3n33Y26//S6mT38ZAJvNxhNPTOWddz7kww/n4PF4WLz4s8rfMCGEEEIIIeqYpyAfaHmBX6UZP6XUP4FrgK7AaVrr38zXewHvAwlABnCL1npnTY7VpxOzfX61mfW77LIrAOjcuSu9eim2bPmV7t3LH0batWs32rfvwJo1P9Kv32msWrWCe+/9S5llTz/9TKKjowHo2/dUDh06CMDGjeu4774HAWjVKoZRo84u8/wePXqyb99e/vWv5xk0aAhnnTXypDIbN65n+PARxMXFAXDppeP45puvAsfDwyMYMWIUAP36ncarr74IgNfrZfbsWaxZ8yNer4e8vDzCwsLKf6OEEEIIIYSoJ548M/BrYUM9g8n4LQRGAyemwaYDr2mtewGvAW/WwrF6U1a2z682s34nstlseL3HrutyHb+YzLXXXs+nn85j8eJFjB59DlHlfBIR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\n","text/plain":["