diff --git a/README.ipynb b/README.ipynb index 815e32f..e7fa6ae 100644 --- a/README.ipynb +++ b/README.ipynb @@ -2,164 +2,164 @@ "cells": [ { "cell_type": "markdown", - "metadata": {}, "source": [ - "# gym-anytrading\n", - "\n", - "`AnyTrading` is a collection of [OpenAI Gym](https://github.com/openai/gym) environments for reinforcement learning-based trading algorithms.\n", - "\n", - "Trading algorithms are mostly implemented in two markets: [FOREX](https://en.wikipedia.org/wiki/Foreign_exchange_market) and [Stock](https://en.wikipedia.org/wiki/Stock). AnyTrading aims to provide some Gym environments to improve and facilitate the procedure of developing and testing RL-based algorithms in this area. This purpose is obtained by implementing three Gym environments: **TradingEnv**, **ForexEnv**, and **StocksEnv**.\n", - "\n", - "TradingEnv is an abstract environment which is defined to support all kinds of trading environments. ForexEnv and StocksEnv are simply two environments that inherit and extend TradingEnv. In the future sections, more explanations will be given about them but before that, some environment properties should be discussed.\n", - "\n", - "## Installation\n", - "\n", - "### Via PIP\n", - "```bash\n", - "pip install gym-anytrading\n", - "```\n", - "\n", - "### From Repository\n", - "```bash\n", - "git clone https://github.com/AminHP/gym-anytrading\n", - "cd gym-anytrading\n", - "pip install -e .\n", - "\n", - "## or\n", - "\n", - "pip install --upgrade --no-deps --force-reinstall https://github.com/AminHP/gym-anytrading/archive/master.zip\n", - "```\n", - "\n", - "## Environment Properties\n", - "First of all, **you can't simply expect an RL agent to do everything for you and just sit back on your chair in such complex trading markets!**\n", - "Things need to be simplified as much as possible in order to let the agent learn in a faster and more efficient way. In all trading algorithms, the first thing that should be done is to define **actions** and **positions**. In the two following subsections, I will explain these actions and positions and how to simplify them.\n", - "\n", - "### Trading Actions\n", - "If you search on the Internet for trading algorithms, you will find them using numerous actions such as **Buy**, **Sell**, **Hold**, **Enter**, **Exit**, etc.\n", - "Referring to the first statement of this section, a typical RL agent can only solve a part of the main problem in this area. If you work in trading markets you will learn that deciding whether to hold, enter, or exit a pair (in FOREX) or stock (in Stocks) is a statistical decision depending on many parameters such as your budget, pairs or stocks you trade, your money distribution policy in multiple markets, etc. It's a massive burden for an RL agent to consider all these parameters and may take years to develop such an agent! In this case, you certainly will not use this environment but you will extend your own.\n", - "\n", - "So after months of work, I finally found out that these actions just make things complicated with no real positive impact. In fact, they just increase the learning time and an action like **Hold** will be barely used by a well-trained agent because it doesn't want to miss a single penny. Therefore there is no need to have such numerous actions and only `Sell=0` and `Buy=1` actions are adequate to train an agent just as well.\n", - "\n", - "### Trading Positions\n", - "If you're not familiar with trading positions, refer [here](https://en.wikipedia.org/wiki/Position_\\(finance\\)). It's a very important concept and you should learn it as soon as possible.\n", - "\n", - "In a simple vision: **Long** position wants to buy shares when prices are low and profit by sticking with them while their value is going up, and **Short** position wants to sell shares with high value and use this value to buy shares at a lower value, keeping the difference as profit.\n", - "\n", - "Again, in some trading algorithms, you may find numerous positions such as **Short**, **Long**, **Flat**, etc. As discussed earlier, I use only `Short=0` and `Long=1` positions.\n", - "\n", - "## Trading Environments\n", - "As I noticed earlier, now it's time to introduce the three environments. Before creating this project, I spent so much time to search for a simple and flexible Gym environment for any trading market but didn't find one. They were almost a bunch of complex codes with many unclear parameters that you couldn't simply look at them and comprehend what's going on. So I concluded to implement this project with a great focus on simplicity, flexibility, and comprehensiveness.\n", - "\n", - "In the three following subsections, I will introduce our trading environments and in the next section, some IPython examples will be mentioned and briefly explained.\n", - "\n", - "### TradingEnv\n", - "TradingEnv is an abstract class which inherits `gym.Env`. This class aims to provide a general-purpose environment for all kinds of trading markets. Here I explain its public properties and methods. But feel free to take a look at the complete [source code](https://github.com/AminHP/gym-anytrading/blob/master/gym_anytrading/envs/trading_env.py).\n", - "\n", - "* Properties:\n", - "> `df`: An abbreviation for **DataFrame**. It's a **pandas'** DataFrame which contains your dataset and is passed in the class' constructor.\n", - ">\n", - "> `prices`: Real prices over time. Used to calculate profit and render the environment.\n", - ">\n", - "> `signal_features`: Extracted features over time. Used to create *Gym observations*.\n", - ">\n", - "> `window_size`: Number of ticks (current and previous ticks) returned as a *Gym observation*. It is passed in the class' constructor.\n", - ">\n", - "> `action_space`: The *Gym action_space* property. Containing discrete values of **0=Sell** and **1=Buy**.\n", - ">\n", - "> `observation_space`: The *Gym observation_space* property. Each observation is a window on `signal_features` from index **current_tick - window_size + 1** to **current_tick**. So `_start_tick` of the environment would be equal to `window_size`. In addition, initial value for `_last_trade_tick` is **window_size - 1** .\n", - ">\n", - "> `shape`: Shape of a single observation.\n", - ">\n", - "> `history`: Stores the information of all steps.\n", - "\n", - "* Methods:\n", - "> `seed`: Typical *Gym seed* method.\n", - ">\n", - "> `reset`: Typical *Gym reset* method.\n", - ">\n", - "> `step`: Typical *Gym step* method.\n", - ">\n", - "> `render`: Typical *Gym render* method. Renders the information of the environment's current tick.\n", - ">\n", - "> `render_all`: Renders the whole environment.\n", - ">\n", - "> `close`: Typical *Gym close* method.\n", - "\n", - "* Abstract Methods:\n", - "> `_process_data`: It is called in the constructor and returns `prices` and `signal_features` as a tuple. In different trading markets, different features need to be obtained. So this method enables our TradingEnv to be a general-purpose environment and specific features can be returned for specific environments such as *FOREX*, *Stocks*, etc.\n", - ">\n", - "> `_calculate_reward`: The reward function for the RL agent.\n", - ">\n", - "> `_update_profit`: Calculates and updates total profit which the RL agent has achieved so far. Profit indicates the amount of units of currency you have achieved by starting with *1.0* unit (Profit = FinalMoney / StartingMoney).\n", - ">\n", - "> `max_possible_profit`: The maximum possible profit that an RL agent can obtain regardless of trade fees.\n", - "\n", - "### ForexEnv\n", - "This is a concrete class which inherits TradingEnv and implements its abstract methods. Also, it has some specific properties for the *FOREX* market. For more information refer to the [source code](https://github.com/AminHP/gym-anytrading/blob/master/gym_anytrading/envs/forex_env.py).\n", - "\n", - "* Properties:\n", - "> `frame_bound`: A tuple which specifies the start and end of `df`. It is passed in the class' constructor.\n", - ">\n", - "> `unit_side`: Specifies the side you start your trading. Containing string values of **left** (default value) and **right**. As you know, there are two sides in a currency pair in *FOREX*. For example in the *EUR/USD* pair, when you choose the `left` side, your currency unit is *EUR* and you start your trading with 1 EUR. It is passed in the class' constructor.\n", - ">\n", - "> `trade_fee`: A default constant fee which is subtracted from the real prices on every trade.\n", - "\n", - "\n", - "### StocksEnv\n", - "Same as ForexEnv but for the *Stock* market. For more information refer to the [source code](https://github.com/AminHP/gym-anytrading/blob/master/gym_anytrading/envs/stocks_env.py).\n", - "\n", - "* Properties:\n", - "> `frame_bound`: A tuple which specifies the start and end of `df`. It is passed in the class' constructor.\n", - ">\n", - "> `trade_fee_bid_percent`: A default constant fee percentage for bids. For example with trade_fee_bid_percent=0.01, you will lose 1% of your money every time you sell your shares.\n", - ">\n", - "> `trade_fee_ask_percent`: A default constant fee percentage for asks. For example with trade_fee_ask_percent=0.005, you will lose 0.5% of your money every time you buy some shares.\n", - "\n", - "Besides, you can create your own customized environment by extending TradingEnv or even ForexEnv or StocksEnv with your desired policies for calculating reward, profit, fee, etc.\n", - "\n", - "## Examples\n" - ] + "# gym-anytrading\r\n", + "\r\n", + "`AnyTrading` is a collection of [OpenAI Gym](https://github.com/openai/gym) environments for reinforcement learning-based trading algorithms.\r\n", + "\r\n", + "Trading algorithms are mostly implemented in two markets: [FOREX](https://en.wikipedia.org/wiki/Foreign_exchange_market) and [Stock](https://en.wikipedia.org/wiki/Stock). AnyTrading aims to provide some Gym environments to improve and facilitate the procedure of developing and testing RL-based algorithms in this area. This purpose is obtained by implementing three Gym environments: **TradingEnv**, **ForexEnv**, and **StocksEnv**.\r\n", + "\r\n", + "TradingEnv is an abstract environment which is defined to support all kinds of trading environments. ForexEnv and StocksEnv are simply two environments that inherit and extend TradingEnv. In the future sections, more explanations will be given about them but before that, some environment properties should be discussed.\r\n", + "\r\n", + "**Note:** For experts, it is recommended to check out the [gym-mtsim](https://github.com/AminHP/gym-mtsim) project.\r\n", + "\r\n", + "## Installation\r\n", + "\r\n", + "### Via PIP\r\n", + "```bash\r\n", + "pip install gym-anytrading\r\n", + "```\r\n", + "\r\n", + "### From Repository\r\n", + "```bash\r\n", + "git clone https://github.com/AminHP/gym-anytrading\r\n", + "cd gym-anytrading\r\n", + "pip install -e .\r\n", + "\r\n", + "## or\r\n", + "\r\n", + "pip install --upgrade --no-deps --force-reinstall https://github.com/AminHP/gym-anytrading/archive/master.zip\r\n", + "```\r\n", + "\r\n", + "## Environment Properties\r\n", + "First of all, **you can't simply expect an RL agent to do everything for you and just sit back on your chair in such complex trading markets!**\r\n", + "Things need to be simplified as much as possible in order to let the agent learn in a faster and more efficient way. In all trading algorithms, the first thing that should be done is to define **actions** and **positions**. In the two following subsections, I will explain these actions and positions and how to simplify them.\r\n", + "\r\n", + "### Trading Actions\r\n", + "If you search on the Internet for trading algorithms, you will find them using numerous actions such as **Buy**, **Sell**, **Hold**, **Enter**, **Exit**, etc.\r\n", + "Referring to the first statement of this section, a typical RL agent can only solve a part of the main problem in this area. If you work in trading markets you will learn that deciding whether to hold, enter, or exit a pair (in FOREX) or stock (in Stocks) is a statistical decision depending on many parameters such as your budget, pairs or stocks you trade, your money distribution policy in multiple markets, etc. It's a massive burden for an RL agent to consider all these parameters and may take years to develop such an agent! In this case, you certainly will not use this environment but you will extend your own.\r\n", + "\r\n", + "So after months of work, I finally found out that these actions just make things complicated with no real positive impact. In fact, they just increase the learning time and an action like **Hold** will be barely used by a well-trained agent because it doesn't want to miss a single penny. Therefore there is no need to have such numerous actions and only `Sell=0` and `Buy=1` actions are adequate to train an agent just as well.\r\n", + "\r\n", + "### Trading Positions\r\n", + "If you're not familiar with trading positions, refer [here](https://en.wikipedia.org/wiki/Position_\\(finance\\)). It's a very important concept and you should learn it as soon as possible.\r\n", + "\r\n", + "In a simple vision: **Long** position wants to buy shares when prices are low and profit by sticking with them while their value is going up, and **Short** position wants to sell shares with high value and use this value to buy shares at a lower value, keeping the difference as profit.\r\n", + "\r\n", + "Again, in some trading algorithms, you may find numerous positions such as **Short**, **Long**, **Flat**, etc. As discussed earlier, I use only `Short=0` and `Long=1` positions.\r\n", + "\r\n", + "## Trading Environments\r\n", + "As I noticed earlier, now it's time to introduce the three environments. Before creating this project, I spent so much time to search for a simple and flexible Gym environment for any trading market but didn't find one. They were almost a bunch of complex codes with many unclear parameters that you couldn't simply look at them and comprehend what's going on. So I concluded to implement this project with a great focus on simplicity, flexibility, and comprehensiveness.\r\n", + "\r\n", + "In the three following subsections, I will introduce our trading environments and in the next section, some IPython examples will be mentioned and briefly explained.\r\n", + "\r\n", + "### TradingEnv\r\n", + "TradingEnv is an abstract class which inherits `gym.Env`. This class aims to provide a general-purpose environment for all kinds of trading markets. Here I explain its public properties and methods. But feel free to take a look at the complete [source code](https://github.com/AminHP/gym-anytrading/blob/master/gym_anytrading/envs/trading_env.py).\r\n", + "\r\n", + "* Properties:\r\n", + "> `df`: An abbreviation for **DataFrame**. It's a **pandas'** DataFrame which contains your dataset and is passed in the class' constructor.\r\n", + ">\r\n", + "> `prices`: Real prices over time. Used to calculate profit and render the environment.\r\n", + ">\r\n", + "> `signal_features`: Extracted features over time. Used to create *Gym observations*.\r\n", + ">\r\n", + "> `window_size`: Number of ticks (current and previous ticks) returned as a *Gym observation*. It is passed in the class' constructor.\r\n", + ">\r\n", + "> `action_space`: The *Gym action_space* property. Containing discrete values of **0=Sell** and **1=Buy**.\r\n", + ">\r\n", + "> `observation_space`: The *Gym observation_space* property. Each observation is a window on `signal_features` from index **current_tick - window_size + 1** to **current_tick**. So `_start_tick` of the environment would be equal to `window_size`. In addition, initial value for `_last_trade_tick` is **window_size - 1** .\r\n", + ">\r\n", + "> `shape`: Shape of a single observation.\r\n", + ">\r\n", + "> `history`: Stores the information of all steps.\r\n", + "\r\n", + "* Methods:\r\n", + "> `seed`: Typical *Gym seed* method.\r\n", + ">\r\n", + "> `reset`: Typical *Gym reset* method.\r\n", + ">\r\n", + "> `step`: Typical *Gym step* method.\r\n", + ">\r\n", + "> `render`: Typical *Gym render* method. Renders the information of the environment's current tick.\r\n", + ">\r\n", + "> `render_all`: Renders the whole environment.\r\n", + ">\r\n", + "> `close`: Typical *Gym close* method.\r\n", + "\r\n", + "* Abstract Methods:\r\n", + "> `_process_data`: It is called in the constructor and returns `prices` and `signal_features` as a tuple. In different trading markets, different features need to be obtained. So this method enables our TradingEnv to be a general-purpose environment and specific features can be returned for specific environments such as *FOREX*, *Stocks*, etc.\r\n", + ">\r\n", + "> `_calculate_reward`: The reward function for the RL agent.\r\n", + ">\r\n", + "> `_update_profit`: Calculates and updates total profit which the RL agent has achieved so far. Profit indicates the amount of units of currency you have achieved by starting with *1.0* unit (Profit = FinalMoney / StartingMoney).\r\n", + ">\r\n", + "> `max_possible_profit`: The maximum possible profit that an RL agent can obtain regardless of trade fees.\r\n", + "\r\n", + "### ForexEnv\r\n", + "This is a concrete class which inherits TradingEnv and implements its abstract methods. Also, it has some specific properties for the *FOREX* market. For more information refer to the [source code](https://github.com/AminHP/gym-anytrading/blob/master/gym_anytrading/envs/forex_env.py).\r\n", + "\r\n", + "* Properties:\r\n", + "> `frame_bound`: A tuple which specifies the start and end of `df`. It is passed in the class' constructor.\r\n", + ">\r\n", + "> `unit_side`: Specifies the side you start your trading. Containing string values of **left** (default value) and **right**. As you know, there are two sides in a currency pair in *FOREX*. For example in the *EUR/USD* pair, when you choose the `left` side, your currency unit is *EUR* and you start your trading with 1 EUR. It is passed in the class' constructor.\r\n", + ">\r\n", + "> `trade_fee`: A default constant fee which is subtracted from the real prices on every trade.\r\n", + "\r\n", + "\r\n", + "### StocksEnv\r\n", + "Same as ForexEnv but for the *Stock* market. For more information refer to the [source code](https://github.com/AminHP/gym-anytrading/blob/master/gym_anytrading/envs/stocks_env.py).\r\n", + "\r\n", + "* Properties:\r\n", + "> `frame_bound`: A tuple which specifies the start and end of `df`. It is passed in the class' constructor.\r\n", + ">\r\n", + "> `trade_fee_bid_percent`: A default constant fee percentage for bids. For example with trade_fee_bid_percent=0.01, you will lose 1% of your money every time you sell your shares.\r\n", + ">\r\n", + "> `trade_fee_ask_percent`: A default constant fee percentage for asks. For example with trade_fee_ask_percent=0.005, you will lose 0.5% of your money every time you buy some shares.\r\n", + "\r\n", + "Besides, you can create your own customized environment by extending TradingEnv or even ForexEnv or StocksEnv with your desired policies for calculating reward, profit, fee, etc.\r\n", + "\r\n", + "## Examples\r\n" + ], + "metadata": {} }, { "cell_type": "markdown", - "metadata": {}, "source": [ "### Create an environment" - ] + ], + "metadata": {} }, { "cell_type": "code", "execution_count": 1, - "metadata": {}, - "outputs": [], "source": [ "import gym\n", "import gym_anytrading\n", "\n", "env = gym.make('forex-v0')\n", "# env = gym.make('stocks-v0')\n" - ] + ], + "outputs": [], + "metadata": {} }, { "cell_type": "markdown", - "metadata": {}, "source": [ "- This will create the default environment. You can change any parameters such as dataset, frame_bound, etc." - ] + ], + "metadata": {} }, { "cell_type": "markdown", - "metadata": {}, "source": [ "### Create an environment with custom parameters\n", "I put two default datasets for [*FOREX*](https://github.com/AminHP/gym-anytrading/blob/master/gym_anytrading/datasets/data/FOREX_EURUSD_1H_ASK.csv) and [*Stocks*](https://github.com/AminHP/gym-anytrading/blob/master/gym_anytrading/datasets/data/STOCKS_GOOGL.csv) but you can use your own." - ] + ], + "metadata": {} }, { "cell_type": "code", "execution_count": 2, - "metadata": {}, - "outputs": [], "source": [ "from gym_anytrading.datasets import FOREX_EURUSD_1H_ASK, STOCKS_GOOGL\n", "\n", @@ -173,30 +173,47 @@ "# df = STOCKS_GOOGL,\n", "# window_size = 10,\n", "# frame_bound = (10, 300))" - ] + ], + "outputs": [], + "metadata": {} }, { "cell_type": "markdown", - "metadata": {}, "source": [ "- It is to be noted that the first element of `frame_bound` should be greater than or equal to `window_size`." - ] + ], + "metadata": {} }, { "cell_type": "markdown", - "metadata": {}, "source": [ "### Print some information" - ] + ], + "metadata": {} }, { "cell_type": "code", "execution_count": 3, - "metadata": {}, + "source": [ + "print(\"env information:\")\n", + "print(\"> shape:\", env.shape)\n", + "print(\"> df.shape:\", env.df.shape)\n", + "print(\"> prices.shape:\", env.prices.shape)\n", + "print(\"> signal_features.shape:\", env.signal_features.shape)\n", + "print(\"> max_possible_profit:\", env.max_possible_profit())\n", + "\n", + "print()\n", + "print(\"custom_env information:\")\n", + "print(\"> shape:\", custom_env.shape)\n", + "print(\"> df.shape:\", env.df.shape)\n", + "print(\"> prices.shape:\", custom_env.prices.shape)\n", + "print(\"> signal_features.shape:\", custom_env.signal_features.shape)\n", + "print(\"> max_possible_profit:\", custom_env.max_possible_profit())" + ], "outputs": [ { - "name": "stdout", "output_type": "stream", + "name": "stdout", "text": [ "env information:\n", "> shape: (24, 2)\n", @@ -214,100 +231,63 @@ ] } ], - "source": [ - "print(\"env information:\")\n", - "print(\"> shape:\", env.shape)\n", - "print(\"> df.shape:\", env.df.shape)\n", - "print(\"> prices.shape:\", env.prices.shape)\n", - "print(\"> signal_features.shape:\", env.signal_features.shape)\n", - "print(\"> max_possible_profit:\", env.max_possible_profit())\n", - "\n", - "print()\n", - "print(\"custom_env information:\")\n", - "print(\"> shape:\", custom_env.shape)\n", - "print(\"> df.shape:\", env.df.shape)\n", - "print(\"> prices.shape:\", custom_env.prices.shape)\n", - "print(\"> signal_features.shape:\", custom_env.signal_features.shape)\n", - "print(\"> max_possible_profit:\", custom_env.max_possible_profit())" - ] + "metadata": {} }, { "cell_type": "markdown", - "metadata": {}, "source": [ "- Here `max_possible_profit` signifies that if the market didn't have trade fees, you could have earned **4.054414887146586** (or **1.122900180008982**) units of currency by starting with **1.0**. In other words, your money is almost *quadrupled*." - ] + ], + "metadata": {} }, { "cell_type": "markdown", - "metadata": {}, "source": [ "### Plot the environment" - ] + ], + "metadata": {} }, { "cell_type": "code", "execution_count": 4, - "metadata": {}, + "source": [ + "env.reset()\n", + "env.render()" + ], "outputs": [ { + "output_type": "display_data", "data": { - "image/png": "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\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYAAAAEVCAYAAADpbDJPAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO2dd5xU1fXAv2c7LCwLLL0tIFWRIqIoWFARIYma+DOiMSYWJGrUWBKwtyhqEhMTuxJLIraIhWoHFQQW6b0tvSxll11g+/398d7Mvmm7s7szOzPM+X4+89n37r3vvfNm3t7z7rnnniPGGBRFUZT4IyHSAiiKoiiRQRWAoihKnKIKQFEUJU5RBaAoihKnqAJQFEWJU1QBKIqixCmqAMKEiKSJiBGRjpGWpT6IyCQReTXScih1Q0RuF5FpDXStLiKyQEQKReR+EXlSRP7aENdW6kZcKQARKXJ8KkXkmGP/qhqOHSUiG0Moyw8iUmxfO09E3hORVqE6f6QQkYtEZL2IHBGRL6pTgCLSXUS+FZGjIrJKRM7yqp8gIntFpEBEXhKR5EgfW19E5DrHM3fMfg5d+/uDOP4jEbkrRLIMsF9SiuxOe6OI/L4ep7wVWGWMaWqMedQY8ydjzJ2OaxXVUr4h9jN0SETyg2g/VESW27/rfBHp5ahLEpF/iUi+/f/2QDQcG2niSgEYY5q4PsA24KeOsv9GQKTrbVl6Aa2BSRGQAQARSRCRej0PItIOeBe4G8gCVgP/qeaQD4BvgRbAY8BHIpJpn+tirA7lLKAb0A+4NwqOrRfGmNccz+ClwGbHM5gVquvUgiP2tZsC44G/ichQ70YikhTEubpg/eahogTr+bmlpoYi0gT4BPg70ByYDnzoeKbvBM4AegKnAdeKyBWRPDYqMMbE5QfIBc73KmsEPAfsBnYATwPJQEvgGFAJFNmflsCZwAKgANgFPAMk2edKAwzQMcD1fwB+5di/A1js2E8E7gc2A/uB/wKZdt27wM329gn2da61908C9tjbrYCZQB5wEPgYaOclwyP2PRQDHe3zfQ8U2se+BLwa5Hd6K/CVYz8TKAWy/bQ9GTgCNHKULQJ+Y29/CDzgqBsD5Eby2DA8g6OAjX7KBwLz7Odqqes5Bf4IlGN1jEXAW3b5Y1jPcyGwHBjpONftwLQA1x8AFHmVbQCut387A9xoP4PL7PrzbZkKbBkH2uVTvWQ7FatT/Jddf9g+n+v/p08tvqfBQH4NbS4HVjv2k+xn/nR7fzVwuaP+TmBWJI+Nhk9cjQCC4GGsDqIfcApwDvBHY8wBfN/WDgBlWG8nLYDhwE+x/nlqhW36uQRwmpjuBkYCw7A65jIsBQMwx5YNrDfVzcDZjv059nYC8CLQGehql7nO4eJXwK+BpsAe4D1gLpaC+wtwtZes60Tk5wFu5URgmWvHGJOPNdI6MUDb9caYY46yZY62Hueyt7vYb1yROrZWiIjU4Zh0YAaWws8C7gOmikhHY8xTwDTgXvsZdP02q7DeLjOBfwLvuUY0tZFVRC7Aeotf6qgahaUoTheRDsBHwEO2bG8CM0Qk3RhzqZdsi7wucRZVo40mxpg1ItLPNo00q42sAfB+9sqxOt8T7dFLL3x/V7+/eQMeG3FUAXhyFfCgMWa/MWYv1pvV1YEaG2MWGmMWGWMqjDGbgFep6oiD4SUROQzswxp9/MFRdyMwwRizyxhTjKWcfml3KnOw/qGw/05y7J9t12OM2WuM+dgYc8wYUwA84Ue+V40x64wxZVgmj77Aw8aYUmPMl8Asr3vuZYz5MMD9NMF6M3RSgKVcatvWu77AUR6pY30QkXEissKeM3hdRIaJSBsRuQG4yd8xNTACKDTGPGeMKTPGTAO+Ay4LdIAxZor9W1cYY14B8oH+QV4v3bavH8R6OfidMSbHUf+oMeawrTB/Dswzxnxky/aifa0Lan+bYIxZYYzJtJ/N+lLd79oIq6/z/l0D/eYNdWzEUQVgY3esbYGtjuKtQIdqjukrIjPtf/7DwANYb0bBcqMxJgMYZF+7vUOWTlhvV/n2P+gSrN+rJdYbRoKI9MUaIUwFCkWkC44RgIg0FZHJIrLNlu8zP/Jtd2y3B/JsheP8DoKlCMjwKsvAMk3Utq13fYajPFLHeiAiaVgjsfOx3vQWAf/CeoMeCkzxPiYI2uP7ndf0HI4XkZWOZ6UTwT+HR+xOuLkx5iRjzGte9d7PR61ka0Cq+11d5lvv3zXQb95Qx0YcVQA2xjLQ7cEaArvoDOx0NfFz2CvAj0B3uyN/BKj1sN8YswR4CqvzcMmyExhh/3O6Pmn26MRgmWmuAoqNMfuxOv0bsWyQrom4CVjmo1Nt+Ub6kc95X7uBLLtjc34HwbIKx5unPbTvYpf7a9vT61r9HW09zmVvbzXGFEXwWA9sRXmV/fadb7+1DzDGtDPGXGuMOejnvmtiF57PIFTzHIpIP6y5qt8ALYwxmViddq2fwwA4r1eTbMGeJxx4P3tJWKPZVbZZZh2+v6vf37wBj404qgA8mQI8KCItRaQ1lveHy4tlL9DayxbcFCgwxhSJyInADfW49qtAdxG50N5/EZgkIp0ARKS1iPzU0X4O8Huq7P3fYM1HzLUVhEu+o0C+iLjsydWxHlgL3C8iKSJyLpYNOFg+AE4VkZ/aHezDWCaDXO+GxpjlWBOO94tIqohcjjUB/bHd5E3gRhHpKSItgXuA1yN5rD8c33Wo+ArIEJHf2S6Eo7Hml/5n1+/FMtW5aApUYE30J4jIbVhKPxxMBc6wf98k28zVAvgiiGP3Ao1FpE2wF7PnJdKAFHs/TURSAjSfgfX/+RsRScWaMN8LLLTr3wQmiEgrEemK9b/yeoSPjTwNPescLR/8ewE1Bl7AGgnsAv4GpNh1gqUMDmDZPVsA52F1mkVYHfDjwBd2+1p5AdllDwLf2duJwJ+wOqtCrAniBx1t+9vn/6W93wpruHmbo01nLPtxEVbHfhNQXoMMPbG8O4rw4wUEbAJ+Uc33epEt81GsjqGjo+514O+O/ROw3DGPYY1azvY61wSs+ZEC4GUgOdLHhvgZDOQFdAow377+Mjy9elxvkPnAG/Zz+ay9vxd4FMsEdZndvlZeQI46lxdQllf5SFumAlvGUxx1HwF3OfbdXkCO/f22rH2wnC2KgGbVyGe8Pksd9fOAmxz7ZwAr7N91PtDbUZeENcLOt2V40OtaETk20h+xhVQURVHiDDUBKYqixCmqABRFUeIUVQCKoihxiioARVGUOEUVgKIoSpyiCkBRFCVOUQWgKIoSp6gCUBRFiVNUASiKosQpqgAURVHiFFUAiqIocYoqAEVRlDhFFYCiKEqcogpAURQlTlEFoCiKEqeoAlAURYlTVAEoiqLEKUmRFqA2ZGVlmezs7EiLoSiKElMsXrx4vzGmlXd5TCmA7OxscnJyIi2GoihKTCEiW/2VqwlIURQlTlEFoCiKEqeoAlAURYlTVAEoiqLEKaoAFEVR4hRVAIqiKHGKKgBFUZQ4RRWAoihBs+PQUb5euy/SYighIqYWgimKElmGPfk1ALmTxkRYEiUU6AhAURQACo6WkX+0NKi236zTUcDxgCoARVEA6P/IZwx45POg2v64LT/M0igNgSoARVGCwhjj3u6QmRZBSZRQoQpAUZSgeH1ernt7+oo9kRNECRmqABRF8cD5pu/ks1V73dtz1+c1lDhKGAlKAYjIZBHZJyIrA9RfJSLL7c88EenvqBslIutEZKOITHCUdxWRBSKyQUTeFZGU+t+Ooij15cAR/xPB8zcf8NgvOFbWEOLEPTm5B/ndfxZTXlEZ8nMHOwJ4HRhVTf0W4GxjzMnAo8DLACKSCDwHXAT0BcaKSF/7mCeBZ4wxPYBDwHW1ll5RlJBzOMiO/bFpq/2Wz9u4n+wJ07n+jUWhFCtueXr2Omau3EPugSMhP3dQCsAYMxc4WE39PGPMIXv3B6CjvT0E2GiM2WyMKQXeAS4WEQFGAB/Y7d4ALqmD/IqihJijpRVBtTt01L+iuPLVBQB8sUZdRUPBgi1W1/tlGL7PcMwBXAfMtLc7ANsddTvsspZAvjGm3KtcUZQIE6wCGN4jy6fsQFGJx/7Xa/fx4Y87QiJXvNM8PfRW8pAqABE5F0sB/MlV5KeZqabc3znHiUiOiOTk5enEk6KEm0CLwXq1aQrABX3bAHCktJzsCdN5ee4md5sHPlnlccxvX1/EHe8tC5Ok8cVlgzrW3KiWhEwBiMjJwKvAxcYY12zRDqCTo1lHYBewH8gUkSSvch+MMS8bYwYbYwa3auWT01hRlBDw+eoqD59xby3222bd3kIA7rigJyLw1Kx1ADw+Yy3FZRW8vWAbWx126qwm6tcRShIS/L0314+QxAISkc7Ah8DVxpj1jqpFQA8R6QrsBK4ArjTGGBH5GrgMa17gGuDjUMiiKErtueHNnKDbtmySgren6FOz1jH5+y2kJFW9UyYnVm0bY7Cm/pTacmL7DNpmhGfhXbBuoFOA+UAvEdkhIteJyHgRGW83eQDLrv+8iCwVkRwA28Z/CzAbWAO8Z4xxjRH/BNwhIhvtY18L2V0pilIr/NnzvfntmdkAtG7q2xnl2bb/0nLLVXHYCVkeSmLHoWP1FzKK+HHbIbYfPBr26xQcLWPVrsNkNEoOy/mDGgEYY8bWUH89cH2AuhnADD/lm7G8hBRFiSA784/x7Yb9gPW2uWrXYb/tjIGMNN8u48T2GT6LxzpkNmLN7qrzBDuxHCv8/Pl5QPijol756g8ANAuTAtCVwIoS5/ztsyqrravzLyn37LCnLd/F6/NySUlK9Dm+otL4mIREPBeU/U89geqE6/f4aOnOsJxfFYCixDl5DtfN8/u0BqC41HPV6S1vLwFgv912+UMj3XVlFZUcLvZcE+Bt7t+cF/pFTJFi8GNfNMh1nN/pmH7twnINVQCKEueUlVd19md0t+YC9h8pCdQcgIy0KpNEaUUlHZs3du/fNbIn3p7eX6zZy/HC/iLf7+bi574ne8J0n5FTfShwLLR77JKTQnZeJ5oRTFHinCYOu/7UJZap4by/zgGqnxP46OYz+etn6/h2w36mLNzmLr/hrG48/Kn/MBHHI9OX72bZdis/QmFxOalNfM1kdaGoxFon+5f/6x82DyodAShKnNOnXQYAS+6/gI7NG3nUeXf+48/u7t4e0CmT7q2aeNTnThpDalKi35WexyP7i0qYuXK3ez/YOErBsHirFV3H+zcJJaoAFCXOKa+oJClBaJ6ewu9H9AjYbniPLO6+sJdHWWpyzV3I5YM70iYjtd5yRgPWeoaq/cGPfcHaPYXu/RH2yCkU3PeRFXy5fTNVAIqihInySkNSotWrNU8P7G740tWnkOi1GrXY4d45+/az3NvTV1hvxT1aN6FxShLHjhM30HI/Hk+NU0Jj8nFSUVl1kdZhVJ6qABQlxth+8CiTv9vC6H98y61TltT7fC/P3UxxmTUR7Jzc9aZxiu+U4YyVVZnBMhpV1ZdXWB1YdlY6acmJHC4u9zk2FnEtdJtwUW932cUD6h/H8omZa/jXVxsoLrMU5b7CYnddWnLoFYwLVQCKEmP86rUFPDJtNat3H+aTZbtC6nmSnurfLyQtgKmnqWMCWRyW/ytOtUKAVVQavl5rhTFev7eQ2vL07LUMfOSzWh8XLlwKINUR8sL7+39ixppaJ295ac5m/vLZenrfP4vxby1m6BNfAfCLMASAc6IKQFFijANFntE69xZU77JZE0OyW5DZuOrN3zvm2Ozbz2Lhvef7PfaBn/R1bztXq142uCP9OjTj0UtOctvMN+wtqpVcxhie+3oTh46W8dKcTazbU3sFEmp25lshLXYeOsa5vazglK6geC5emrvZbQKrC7NWVY2qCovDm3VNFYCixBgu90AXgd7OgyUtJZEuLdPd+xMv6uNR36tt04CmoXN6tSZ30hhyJ42hkcMW3rttBp/+fhgdMhtx7xjrfDe//WOt5Cp03OcTM9fy039+51FfXFbhYStvCF75djMA7y7aTucWjQO2u+2dpUGfM1AOZoBHw+T/70IVgKLEOBXVdCDBUFlpSHK89htHao6fnFz/Fah1jWPz7BcbPPZLHWaVpdvz6X3/LLrf4xNmrF5UVhpycv0nPywsLuPjpVbU+muHdaUsRMqnukB5bcIUBdSFKgBFiRHenJ/LxA9X+JR790PGGHL3Bx96obyykkSHb2O5fcIbz+rGv64cVCdZA1Hd2643s1fvCVj3cZhi40z+fguXvTifbzf4Jp/6zb+rchxfeVpnpi3zTGHy79+c6rE/dYlv/KOtB47ws399xyFHnKThT33tV5a//3JArWSvC6oAFCVGeODjVR4rbl1UemmAj5fu4py/fMOdQWbiqqzEw73zxPbNADitW4t6SFtFTzuTGFS5N+4rLGZXfvUhom8Y3i1gXSDTz+KtB33SUtYG1zzDTj9v5at2FQBwz+jetMlIY/w53T3qh/XI4tdDu7j3X/xms885/vnVRpbvKOD0J770qRvRu7V7e80jo7hkYPiz5KoCUJQYxTUBW+n1Vu0Kw+wvAue+w8U8+PFKSssr2XHoKIXFZdYIwKEAzu7ZioX3nMeI3m1CImdacqJ7AZnLXDXkz19yxqSvqj3ugY9XBawr8uNWevBIKb94YT6nhCBYW3mlYduBqnj/5RWVblfZa8/sCsDvzu7Op7cMo2+7DE5o3YTkxAQeubjKZr/Oj9fT7gJLsZTY3kRz11eNNB675CS+uONs3rx2iMd8SjjRWECKEoOc0qU5Lewk4bNX7eHxGWv5fsIIOmQ28liZ6s24txazdHs+R0or+GBx4BDNrUNse3Z5LpVVGJyeppvziujmFU4C4P2c7e7tD286wx1/v7S8kpSkBD5cUmUCKjhWRrNGyXyzbl+95XRZwp6cuZb7PlrJDxPPo22zNI/Q1kl2pjMRoV/HZsy4bXjQ5z+pfTO+32hlzDXGMPn7Le669pnWit8TWvt+H+FCRwCKEoO0bZbmzhH7+Iy1AJxpv1HPWe9rv3ax1A5aVl3nHw62HbTmJO5419M7JveA/7mKuz9Y7t5Oc+Qg6HnfTJ+2b87Ltc4dwuTzLg+kf3xp5UpwmZy6ZqUHPMYfBce8w2RXjbRufWcp36yzfqu+djymhkYVgKLEIF1aNPbx1z+je0ufdt7zA3de0DOcYgXk8sHWwrDPVu9lx6Eq00pCEFEue7Vt6rE/a6Wnj32rpqEJlVBwtIz3cjwV45SF25m3cb9bAdzkZff3x31jqtxo+z/8GRv2FpI9YTpv/bDVvZAM4FPHJPIb10YmOaIqAEWJEZzulLef39PDcwfg5I6ZPse8MGcTeYUlTP5uC8YYymq5QjVU7C6oCm0w7Mkqr5eS8urlWXL/BSQmCK/+erC77NNlngogMUEoLqtgcJfmAHUOPLcxz7/p7MpXF7hX+6YGEZbheq/J6wuemQvA/R+t9JtLAEKnxGqLKgBFiREqKw2/PTOb3EljSElKcJuA3PX2BKszfMDTs9dx41s5PDJtNYu3HqIkgAIY0MlXeYSSQP7sOw8do7S8kpfmbPJ4O3bR3J7nSHGEXnDd5y/tUcXdHyznqlcXkGOHT67r4rAmqYHXKxwpsRRAepCTszee5d+D6RMv19FIU6MCEJHJIrJPRFYGqO8tIvNFpERE7nKU9xKRpY7PYRG53a57SER2OupGh+6WFOX4pMIYj7d+p/kkPSWRykrDmt2Hfbx/ftxm2f0X5h706WQ/vWUYZ/dsxRM/7xdGyQPHtH9k2mp63jeTJ2auped9M1m6Pd8jE5aL4T2y3GkRZ9oB6EaeWOWl5IqdD1XrGGpLdaMjVwiIYL1zJo7uU3MjG2eOhYYmmBHA68CoauoPArcCf3EWGmPWGWMGGGMGAKcAR4GpjibPuOqNMaFdzqcoxxmfr97L0dIKD3dN15vu0G4tOVJaweTvt3DRP74NeA5j4N/f53qUndC6CW9cO8SdFCZcBIpoeY4dT8fF56v3UOwnuJ2IMOkXnkrq1K7+1ynUdQRQnQK46b9WGAt/EVED8d2fzg2qnTOyaENTowIwxszF6uQD1e8zxiwCqotadB6wyRiztfYiKkr88rfP1/PGvFxueDMH8PQiKThmuSa2bWaZV7z7Pe9J4b99vt7n/MmJDZO764TWTdzB0wB+c0Y2gNsLxkViQoLbxHO610K0Rl5KJFB8oroqAFeMpeeqWf0crAkI8MiT3LNNlWtngkBGWnR44DfUHMAVwBSvsltEZLltYmreQHIoSsxQXlHJs19u4MFPqhZEOc3+LhOQP/t9s0bJzNt0wKPMX8fo8mlvCH7av717O5A7ZYvGye5QyKdmeyoAf7IO75HlsT+6X9s6m4A27ityy7by4Qt9sp9B3WPzjx3S2b1daeDvV1hhHpoGCL/dUIT91xeRFOBnwPuO4heA7sAAYDfw12qOHyciOSKSk5cX2L9ZUY43NuzzDZ+8YmeBe/sXgzry79+e6hF+wMWyB0fS0p5A9cdr1wxm1u3BL2AKBa7E6YA78Yk3DzmSyWc29pV/iJdSOKdXVfiE3Elj6JbVpM4jAJeCyWqaQpPUJF6cs8mnTV2zf43xCqp3ShfrPn59hu9v15A0hPq/CPjRGLPXVWCM2WuMqTDGVAKvAAGdYI0xLxtjBhtjBrdq1SpQM0U57vD3tvnthv3u7YQE4dxerT3MQk5cb5nejOzbhvP6tKF324ZdfDS6X1UnuNMrDtBEP3bwq0/37RzfGz+URfee77avu1w/XSQmCBWVplZB51yU2Eop1V541sfP99OySd3cNdMdcwcv/uoUmjVKZukDF3DHBb6jjIakIRTAWLzMPyLiVIeXAn49jBRF8eTiAe1rbmQT6E34ZYdPfUPSp31Vh3pS+2a8P36oe3/cWd08kq13a5Xu4frppFXTVLd9vX+nTNY/dhG5k8YAuMNa12UUsCvfWqvgyvb16m88v6eNf76o1ufc9PhoVjw00iPT2qiT2gLWCMc7x3JDU6MBSkSmAOcAWSKyA3gQSAYwxrwoIm2BHCADqLRdPfsaYw6LSGPgAuBGr9M+JSIDAAPk+qlXlLinotLTK6VtRhr/uGKg37azbh/OqL97egAd9ZOI/b0bh/qUNRTpKUn075TJzwd24HI7ZaQLEXEnW89IS+KrO88J+rxORZFoT2pbie5rJ9/7i634Qy4FkJGWTO6kMfR/+DMKjpXVab4kMUFoak9Wvz9+KM39mLUiSY0KwBgztob6PYDfxJXGmKOAz/p0Y8zVwQqoKPFKWYXnW+zNI04I2LZ32wyuGdqFN+Zv5bbzegD+FcCQAK6TDUFigvDxzWfW2K4+CeRdIwDvCKnBcOGJbflg8Q4fk9pnfziLPY6VzHXFe1I7GogOXyRFUTx47uuNPgu6/u+U6hOEP3zxSTzsCEccqbAPteGG4V0JpZguV9GikvJa+ey76JDpu2CtTUZa2DNzRQpVAIoShTw9e51PWW1dEL0Xd115WucALSPHvWOqksq/dd0Qrn5tYb3O5+r0j/kZ/dREWUVlg62LiBZUAShKFDH8qa/YfrD6TFnBMqBTJksfuMCvO2U0MuyELG48uxtjT627okpNtuz0NQWZ88eBotI6HRfLaDA4RYkiQtX5u4iVzh+sieCJF/Uhu5Yx9524XDhLyjw78qdmrSV7wnS/AeeOlpbzxMw1fLdxv0fU0nhARwCKEiW4cs7646ooNN9EIy4PnpLyCgqOlbFl/xGapCbx/DfWoq7+D3/Gmkc9Q5v1fWB2g8sZLagCUJQo4bVvtwSsc8aVUQLjyjk8b9MBLntxvk/9Ma8VyBv3eeYAmPybyKyRiBRqAlKUKKFpgABh1w3ryg3DuzawNLHJYTsFo7/Ady6cq4TP/9tcj7oRvdt4Nz+uUQWgKFGAMYY35vsPlnvpwA4NGrQtlnGGmwhEaQC/09YRysoVSfSpUpQoYO/hqlSB3hEu8/0kSFH8kxyEonR5+jhHAqNObMucu4OL3388oQpAUaKACkdn9Oa1Q9yxbQAGZ2u09FBw3TDLjPbpsl0cLi7zCBv9wq8GBZ3t63hCFYCiRAGVdmf09GUnu0MRrHlkFKsevrDOMejjlfvGVKVjfPSSqpXRrjAR905dyckPfcbRkqoJ4UARVY931AtIUaIA1wDAmec3Ht9IQ4EzONzVp3dhYKdMmqQmMWXhNo92/R/5rKFFizp0BKAoUYAreFmC/kfWG+9FYCd1aEZ2Vjq/t4PkKVXo46YoEaS4rIJVuwqqFECcmiJCiSvb2EV23H0XTVKTuMxPQL3vJ4xoELmiEVUAihJBHp22mjHPfucOQRCvtuhQcoo9ae4v+N0Er8xjT112st8IoPGCKgBFiSBLtll5cvcethRAhBNEHRec0T2LBfecx/Aevilks5qk0qtNUwDOPKEllw/u5NMmnlAFoCgRZO2ewwAU2CtYE3UEEBKqi9/vWix2cf8ODSVO1KJeQIoSQVyu6FsPHAXUBNQQ3HZ+Dy4d2IFOLeLX9ONCRwCKEkGa2snCV+y0IoGqCahh6NyysSpbVAEoSkQpLLHy3y7eeghQLyClYalRAYjIZBHZJyIrA9T3FpH5IlIiInd51eWKyAoRWSoiOY7yFiLyuYhssP/qWncl7igq8U1+rusAlIYkmMftdWBUNfUHgVuBvwSoP9cYM8AY4wy0PQH40hjTA/jS3leUuKKkzDdvrSMkkKKEnRoVgDFmLlYnH6h+nzFmEVCbkIUXA2/Y228Al9TiWEU5LnBNAN8zuso3Pd5y0iqRJdwDTgN8JiKLRWSco7yNMWY3gP23dZjlUJSow7X6Nz21yhnv2w37IyWOEoeEWwGcaYwZBFwE3CwiZ9X2BCIyTkRyRCQnLy8v9BIqSgNxpKTcveALqhRAoghjh1gLkto1C+y/riihJqwKwBizy/67D5gKDLGr9opIOwD7775qzvGyMWawMWZwq1a+K/sUJVY47fEvOe3xL937q3dZi8COlVVwereWAHTNSo+IbEp8EjYFICLpItLUtQ2MBFyeRJ8A19jb1wAfh0sORYkGDh0p9fD6mbZ8F9e9YTnGrd1dyM/6t+fTW4bxk5NrTtdnlS8AACAASURBVGmoKKGixpXAIjIFOAfIEpEdwINAMoAx5kURaQvkABlApYjcDvQFsoCp9mKLJOBtY8ws+7STgPdE5DpgG/B/obwpRYk28o9V+UjMWrmbW95e4t6/68JeiAj9OjaLhGhKHFOjAjDGjK2hfg/gG2MVDgP9AxxzADgvGAEV5XggybHEd+qSnR51reIwGbkSHeiyE0WpJ+UVlSzKPeiRZNynjSP/7OxVextCLEWpEQ0Gpyj15NQ/f8Gho5aJx5nM3UlZhX///szGyWGTS1FqQkcAilJPXJ0/QEm57+peqMpS5SS7ZWNm3jY8bHIpSk2oAlCUEPLn6Wvc25c+/z3ZE6bz7qJtFBb7xv0Z2r0l7ZppSGIlcqgCUJR6UFnpafd/c/5W97Yr29ef/reCq15d4HPslIXbwyucotSAKgBFqQe7Co4FrOvSsnEDSqIotUcVgKLUg135xQHrmqT6+lg8fdnJ7u2Xrz4lLDIpSrCoAlCUelBeaXn3/OOKAVx1WmdapKe46/zF+2+fWWXzH3li2/ALqCjVoApAUepIeUUlV75i2fazW6bTJC2Jg0dKyT9aCljB3/7vlI60twO8pSQmMNSO+dO/U2ZkhFYUB7oOQFHqyCo7mBtAdlY66/cUAjDgkc/58KYzKCwup0V6CvMmnkdZRSWVxpCQIGx6fDSa+FGJBlQBKEodSXSEd2jWKJltB4+693/+/Dygah4gOTHB73GKEknUBKQodWTDvkKP/eev8p3UTfczEawo0YIqAEWpI394d5nHfq+2TX3a+PMEUpRoQRWAooSQ+RNHeOxnNFIFoEQvqgAUpZ44F3y1a9aIN64d4t4f1KV5JERSlKDQ1xNFqSO92jSleXoy//7NEI/yRsmJ7u3WTTXHrxK9qAJQlDpSWlFJVpNUGqUkepQP6dqCK0/rzC3nnhAhyRQlOFQBKEodKS2vJCXJvxX18Uv7NbA0ilJ7dA5AUerIzvzAgeAUJRZQBaDEDfM3HeDGt3IoLqtgysJtlPvJ0lVRadyhHKrDlf7xwx931tBSUaIXNQEpccPYV34AoPf9swArOft7Nw71aPPc1xv52+frybnvfLKaBE7WXlJuKY+xQzqHSVpFCT81jgBEZLKI7BORlQHqe4vIfBEpEZG7HOWdRORrEVkjIqtE5DZH3UMislNEltqf0aG5HUUJnoVbDvLUrLUeZd9uyANgw96iao89Ykf67O1n8ZeixArBmIBeB0ZVU38QuBX4i1d5OXCnMaYPcDpws4j0ddQ/Y4wZYH9m1EJmRXFzuLiMiR8u548fLKO03H/idRdJfmLwPP/NJo/9BLHaGIxPWydHS60cv94eQIoSS9RoAjLGzBWR7Grq9wH7RGSMV/luYLe9XSgia4AOwOr6CKwoTp6etc6dWnFk37ac37eNT5v/LthKalIinVs0ZvP+Iz71JeUVpCZZHXmlbdt3KYJAlNnzBymJOo2mxC4N8vTaCmQg4EyMeouILLdNTAGXS4rIOBHJEZGcvLy8MEuqxBr5x8rc26t2HSZ7wnQe+bTqHWNX/jHunbqSu95fRl5Rid9zHCmpcG+7UvzWFK+zwm6okT2VWCbsCkBEmgD/A243xrgCqL8AdAcGYI0S/hroeGPMy8aYwcaYwa1atQq3uEqMscvhivnMF+sBmPz9FneZy1QDUFhcTsv0FJ4dO9DjHJvzquz9rhFATZTbCiA5URWAEruEVQGISDJW5/9fY8yHrnJjzF5jTIUxphJ4BRgS6ByKUh0XD2jvt3zuemu06ErZ6GJg5+b8rH97umalu8u+WruP4U99xRer97J8RwEAHy/bVe11q0YAagJSYpewPb0iIsBrwBpjzN+86to5di8F/HoYKUpN7C/y77P/68kLASgu81QAX6zZC1TZ8MGaCN5+8BjXv5nj7tjfXrCt2uu6kr/4m1hWlFghGDfQKcB8oJeI7BCR60RkvIiMt+vbisgO4A7gPrtNBnAmcDUwwo+751MiskJElgPnAn8Ix80pxzdTl+zg2S83VNumuKzCb/nlgzvVeP6N+4rInjCd3QWeK36Xbs/npv/+COgcgBLbBOMFNLaG+j1ARz9V3xFgLs0Yc3VQ0ilKNSzYfNC9LQL+zPcuBfDQT/vy9sJt/PbMrgD8fsQJjD+7Oz3vm+n33M0aJXP+3+YAMPSJr8idZDm5bTtwlEue+97dLknnAJQYRlcCKzHLJw47vb/O/7XvtvDoNMsj6NSuLfiN3fkDiAgpSf477z7tMliz+7DfulW7Cjz2N+wt4ozuWbUVXVGiAp3BUmKW8/r4+vw7cXX+AOUVwXn3jD+7O6d0yfQou2tkT8CK/llkrwB2cXq3lkGdV1GiER0BKDFL24zAsXq8SU32/65z5Wmd3RO+LjPPw5+u8mhztLQCY4xfc5G/PMCKEivoCECJOf7zw1ayJ0xntcNMs/nx0dx8bne+uvNsv8f0bpvht/ye0X0AT3fSd+yVxS6e/2YT7yzyLJtz9zluhaEosYqYIBe+RAODBw82OTk5kRZDiTDZE6a7t1s3TeV/vzuDTi2q8vLmFZbw039+x57DxQB8essw+nVsFvB8RSXlNE5OJMH26HGePxDa+SuxhIgsNsYM9i7XEYAS07RtlubR+QO0aprKtFuHufer6/wBmqQmuTt/gEk/12xeSnygCkCJaZqk+p/GappW9+mtU7u2cG//fFAHn/p/XDGgzudWlGhCJ4GVmCaQAnBF96wL3Vs1Yc7d55AgQqcWjT2yfi17YCTNGifX+dyKEk2oAlBijsQEcYdsCKQA6kuXluk+ZdN+P0w7f+W4QhWAElPsLjjm7vwByirD78Tw2R/OorS8kpM6VD+XoCixhioAJaa4491lHvufLtvFP73CO7tYeM95IVEQPduor79yfKIKQIkpth7wzOh1xamBg7q1zkgLtziKEtOoF5ASU+wqKPbY/9Oo3hGSRFFiHx0BKDHJ3385gBbpKTRPT4m0KIoSs6gCUGKSSwb6+ucrilI71ASkxAyuLF6B0kAqilI7VAEoMUP+0TIAsv346CuKUntUASgxQ2GxpQAqGsD3X1HiAVUASszgSvB+Ugf/oZ0VRakdqgCUmKG43Mrvm5pc9zg/iqJUEZQCEJHJIrJPRFYGqO8tIvNFpERE7vKqGyUi60Rko4hMcJR3FZEFIrJBRN4VEfXnUyguq3AncvdXB5BWj0BviqJUEewI4HVgVDX1B4Fbgb84C0UkEXgOuAjoC4wVkb529ZPAM8aYHsAh4LrgxVaOV058cDanPvaF37oS2wSUFiC9o6IotSOo/yRjzFysTj5Q/T5jzCKgzKtqCLDRGLPZGFMKvANcLCICjAA+sNu9AVxSW+GV44+KSkOhV+J1FyUuE5COABQlJIT7VaoD4EymusMuawnkG2PKvcp9EJFxIpIjIjl5eXlhFVaJLK4OHuBAUYlPfbGOABQlpIT7P0n8lJlqyn0LjXnZGDPYGDO4VatWIRVOiR6MMfS6b5Z7f+Wuwz5tFmw5gIgGeVOUUBFuBbADcIZr7AjsAvYDmSKS5FWuxCneZp9KL1//IyXlTFm4HWPClwRGUeKNcCuARUAP2+MnBbgC+MQYY4CvgcvsdtcAH4dZFiWKKSr2VABJiZ6DxANFpQ0pjqLEBUG9SonIFOAcIEtEdgAPAskAxpgXRaQtkANkAJUicjvQ1xhzWERuAWYDicBkY8wq+7R/At4RkceAJcBrobstJdYo8hoBJCd6vpscOGLNCTx12ckNJpOiHO8EpQCMMWNrqN+DZcbxVzcDmOGnfDOWl5ASB+wrLObeqSuZeFFvurVq4lNf6DUCWLItn9O7tXTvu0YAvTQ7l6KEDHWnUBqESTPX8vnqvYz46xwAvli9172wyxjjHgFceVpnAJ6ctdbj+INHLAXQsomuF1SUUKEKQGkQkhKqbPrr9xZy/Zs53Dt1Jbvyj9F14gyumbwQgLN7Vnl6ucI/A/zxf8sBaJme2kASK8rxjyoApUFwLt5yve1vzCvi3UXbPdqd0LrKPDRr5R4Afth8wF3WKEUXgSlKqFB/OqVB6NC8kXv7WKll+lm2PZ9l2/M92nVtmU7rpqnsKyxxLwx5cc6mhhJTUeIKHQEoDYIzwNtVry4I2C4hQZh26zAACo5adv/LTrH8C2bfflYYJVSU+EMVgALA1gNHAkbhrA8b9hYy8cMVHC0N/tyZjayJ3vs/XoUxxp0AJjnR3wJyRVHqiioAheKyCs5++hvu/mB5yM99039/ZMrCbbw8d3PANs9fNchjPyWp6rHsOnEG6/YUApCUoI+rooQSnQNQKDhmBXH9Zt2+kJ87tYbAbe+OO53OLRtX2+b5b6w5gEQdAShKSFEFoLgVQGFxOflHS8lsHDpf++pCN8+8bTh92lnpHZ/5ZX9aNak+yFu5wy1UUZT6o2Nqxa0AAAY88nlIz+1M4C4Cvds29Vt36cCODOuR5d53moFctGqqawAUJZSoAlAoOOqdxyd0lJZXvbUbA++PH+re7+4nJISLpQ9cQNesdI+yxik6YFWUUKIKQOH6N3PCdm7nvO3bN5xG07Rktjwxmk2Pj652UVfjlCSm3zrMPWJY9sDIsMmoKPGKvlIpbk7v1oJDR0I7GkiQqonb07pawd1EhGDmcy0lMJyyikrSknUFsKKEGh0BKG7bequmaZSGeKL1whPbAvDwz04kMaH2XjyJCaKdv6KECVUAYWTlzoKo9FwxxnCstIJNeUUAdM1K5/RuLQDYsv8Ih46ELvlKqj2Z+/NBflM+K4oSQdQEFGKKSspZsu0Qs1ft4T8/bOPywR156rL+kRbLg64Tq9IzLLz3PI6UlJPZOJlPl1lZOV/5djN/HNU7JNcyfjM9K4oSDagCCDHXv7GIHzYfdO+/l7Mj6hSAk9/950dW2QnYT+vaggVbDobU5GLskG4iuohLUaINNQGFGGfnD1Ygs3DE2AkVi7cecm+/ca2VoO1gCE1ALrT7V5ToQxVAmPlg8Q563z8r0mIAnglWvOnXoZn7zf/1ebkhu6aagBQlelEFUEcqKg3GT++WHSCuzY/bDvktbyjez9lOj3tnsmb3YTIbJ/vUv/CrQX6Oqj+ub0gtQIoSfdSoAERksojsE5GVAepFRJ4VkY0islxEBtnl54rIUsenWEQuseteF5EtjroBob2t8FJwtIzu98xg8ve5PnUut0dvyisi+yrsivR50T++Jf9oGTed090jtEK61yrb7QeP1ut6BcfKOO+v37Bpn+VpJGoEUpSoI5gRwOvAqGrqLwJ62J9xwAsAxpivjTEDjDEDgBHAUeAzx3F3u+qNMUvrInykyCsqAeDRaat56JNV/MqR4KSk3L+Z5ViUzQN8v3E/U286w73fONVz4nf4U1/X6/xTf9zBprwjvL94R73OoyhK+KhRARhj5gIHq2lyMfCmsfgByBSRdl5tLgNmGmPq91oZJWw7eMS9/fq8XL7buJ/DxdYK2kALqd6an9sAkgVPanIiHZs35vmrBnHlaZ2rjdpZF1K8zqcmIEWJPkIxB9ABcGb23mGXObkCmOJV9mfbZPSMiAQM8ygi40QkR0Ry8vLyQiBu/bn2dd/YOfl2CIWyACOAL9bsC+kCq/py18heAIzu147HL+0X8vNr9i5FiX5CoQD8/ae7Dd72aKAfMNtRPxHoDZwKtAD+FOjkxpiXjTGDjTGDW7VqFQJx64e/iV+A5Tvz6ffgbNbvLXSHMr6gbxuPNgePRkYBZE+Y7lOWGOCX3/LE6Hpf79VvN3u4lyqKEp2EYiHYDqCTY78jsMuxfzkw1RjjjjJmjNltb5aIyL+Bu0IgR4MQKLftLW8vAWDZjgJ6tG7C/246g0NHSvl89V53G2fc/UjTq22G33Lngq28wpJax+A/UlLOY9PX+Dlv7eRTFCX8hGIE8Anwa9sb6HSgwNHBA4zFy/zjmiMQq7e5BPDrYRQtfPjjDvbbE7/BdOIpSQlkpCXTpWU6X955tru8sLg8bDIGy4xbh/PS1afQJLVm3V+XBWyB7jEl0JBDUZSIEYwb6BRgPtBLRHaIyHUiMl5ExttNZgCbgY3AK8BNjmOzsUYHc7xO+18RWQGsALKAx+p5H2Hj63X7uOO9ZQx+7AsADtlmnOevGkSP1lUJTZyBLp0LrpxJT575fD1fra0aEYST7AnTeXTaag+TVdPUJPq2zwjoquriyV9YcwKBRjvVUVjsX0FqKAhFiT5qfA00xoytod4ANweoy8V3QhhjzIgg5Ys4D32yymP/m3XWRHRacgIf33ImW/YfYcyz3+HIbsj6vUUex7x9w2lc+coClm7P59rXc2jfLI15E88Lm8yuVIuvfbeFe0b3cZcvuDe4a7ZuauXmXZh7kBNaN6lVGOfDUTDKURQlOHRcXgPOrq/P/bPc4RJObN+MxilJnNi+WY3nGNylhcf+roLigJPJoWDmyioLnEsZ3DWyZ9ApFV2Zuu7/aCWvfbe5Vtd2jQCeuuxkNj9e/wllRVHChyqAGmjWqCpswrGyCh6dthqoinPvj/t/0tdj359LZDgXhrkmpAEqbUWTUIu3eGdC9u82HuBwcRmvzN0cVJA41whgUOfMWl1TUZSGRxWAH75YvZdZK/cAcPmpnfy2qW7h1HXDunrs+7N/e0+WHjxSSvaE6bz23ZbailstrhFAYi1s8M7J37nr8zj5oc/484w1DHr0c8Z55Q8uLqvgxTmb3PMerhFA0zRLcS685zwW3Xt+ve5BUZTwoArAD9e/mcP4/ywGICnAW2xacv2+utW7D3vsPzlzLYB7hFEfTnBMTlfYI4Da2PG9TVZOPlvtOYnd+/5ZTJq5lo+W7KS4rIJFW6xF441tM1LrjLRau5IqitIwqAKogbnr9/std77VP39V7SNp/vbfizz2383ZHqBl7Wnt6HBvm2KZgxJqMQJISUpg7aOBwz+V+lntnJyYwD1TV/DRUmsJiObxVZToRxVANdw7dQXTV1gTqt2y0gO2G92vHbmTxlR7rpevPsWn7JrJCzlmu1o6RxpL6hk62mnC+dr2WqptQvbqOvCe9810bw/t1hKwlILLQwoshaAoSnSj/6XV8N8F2wBokZ7Czvxj9TrXSD++93PW5/HINMvNtNzhR1rfCeKyCsPwHlkeZct3FNT6PLmTxvDnS0+qtk2qbQrbtL8oLJnEFEUJH6oAvPC3+rVpWlLAMM+14fsJI5hz9zlcPriju2zKwu1sO+AZJLU25hp/lFVU0sjrDf5/P9YtLPOVQzpz94W9WHzf+Xz7x3M96jbnFbmv89GSne7yuy/sVadrKYrSsKgC8OKYn9WvwZozWjdNJSMtsK99h8xGdGmZztk9W3uUn/W0Z+z9K17+wWfEsbvgGD3unUH2hOl8YU/EbsorInvCdH4/ZYlH29KKSpKTEujTrireT6cWjYK6B29EhJvPPYGWTVLp1KIq29mW/UcY8dc5zLS9pfYeLnHX3XzuCXW6lqIoDYsqAJvvNuzn5rd/9Gt+aZKaxPyJVYuXF9zjf0Xt/Inn8eP9F9R4rWA64zMnfeXezt1/hPFvLabMzir21GzLY+gXL8wD4NNluzyO3Zx3hENHSnn4Zye6y1zhn0PFD5sPhPR8iqI0PHGtAIpKysmeMJ0b38rhV68tYPry3Szfke/Tbs3uw7RrVtVpt8lI83u+xAQhKYjRwskdM2tlJhn1j7ksc9jwXeaoTs198w+7cg7M23TAw1V11EnVx/8JFlecoIkfrvBb371V4MlyRVGii7hWABc+MxeA2auqfNvH/+dHn3ahsP97489Mck6vVvRu2xSANhmWK2dxWQXFZZ7X32rPGVwxpGqR2rTl1ihg+c4qRdHRVhDPXzUoZBm/GgUIJ7HwnvPokNmIl64eHJLrKIoSfuJaAVQX7tgZzuGZX/ZvCHEY3qMVs24/i3N6tWLv4RIqKw2XvzQ/YPsKh+eQK/zDNZMXAjAkuwUt0lPInTSG0f28M3TWnbVeC9hctM5I4/sJIzwWoSmKEt3EtQIYd1a3gHXlFZW0tU09F/e3Apq+ds1g3rtxaMiu77124OrTuwBVEUeXbM+v1n3Te0GWK2cBwDNXDAiVmB509DI7LbznPBbfp6EeFCUWCUVGsJjF6XvvzW/P7MrIE9uy7eBRd1Cz8/q0Cdg+FLiCsI0d0okpC7eTu/9Ite33FBR77A97smriuENm3bx+amLskE7cM9Wy/7989Sm0DjAfoihK9BPXCuDp2ev8lrfJSCUlKYGuWel0rWYFcLj4ycntmbJwO3e+vyxgm1F/n8vaPYUeZa65ghG9W/s7JCSICO+MO52tB474XdymKErsENcmoEA4fdrDjb+Vtq54/NXh7Pz//ktPc8+c9XnezUPK6d1a8stTO4f1GoqihB9VABHmqtO6+JQ1DqAA7r6wlzv2jpNLBnbg3XGnu/efvWJg6ARUFOW4JW5NQHsPF/uUnd+nNV+s2RcBaTxJ93K1fOoXJ/PzQR1ITBBKyyuZ71iE5Yr5M6BzprusbTMNv6woSs3E1QhgweYD7lWzK/x41wztnuVT1hBkNk722E/xyjZ2+amdSEpMQEQYO8S/6SXFsQCtvrGEFEWJD4JSACIyWUT2icjKAPUiIs+KyEYRWS4igxx1FSKy1P584ijvKiILRGSDiLwrIin1v53queHNHHfcnAQ/d77zUP0iftaVeRNGsPyhke79Nhlp3Hxud79tvZXFtxusfAUiwud/OIs/jurFwM7NwyesoijHDcGOAF4HAmcIgYuAHvZnHPCCo+6YMWaA/fmZo/xJ4BljTA/gEHBd0FLXEVe+2rV7DpOSWGVnd4VluPI0/+kfw03jlCQy0jw79ksHdvDbNi050SMukZMebZpy0zkaiE1RlOAISgEYY+YCB6tpcjHwprH4AcgUkYDLT8VKpzUC+MAuegO4JDiR644rKcuRkgqPN+mbzz2B3EljOKF103CLEDSl5YHXKDjjEn1159kNIY6iKMchoZoD6AA4cxrusMsA0kQkR0R+EBFXJ98SyDfGlPtp74GIjLOPz8nLq597Y0Yjq9MvKaug0gTuYKOBzi19A7056WuHeu7WSkMvKIpSN0LlBeRv1tHVw3Y2xuwSkW7AVyKyAvAXUMZvj2yMeRl4GWDw4MH16rVdaQ6vfHVB1EetbJKaxLd/PJcW6f6nRmbcNryBJVIU5XgjVCOAHYDTgN4R2AVgjHH93Qx8AwwE9mOZiZK824eTxk8+7t7elGeFWXjwp30DNY84nVo0Jj01bj11FUUJM6FSAJ8Av7a9gU4HCowxu0WkuYikAohIFnAmsNoYY4Cvgcvs468BPg6RLP656SaavfGaT/FJ77wa1ssqiqJEK0G9XorIFOAcIEtEdgAPAskAxpgXgRnAaGAjcBT4rX1oH+AlEanEUjaTjDGr7bo/Ae+IyGPAEsC3dw4lL79Mhvjebtc3XoR//tm9v+zBkagbvaIo8UBQCsAYM7aGegPc7Kd8HtAvwDGbgSHBXD8kVFTQCM/4/50P7Sar0NO5qVkjT3dMRVGU45X4WQls+/1/9OYd7qKkygp3uaIoSrwRPwpg3DgAsg9VzTVvbtnRXa4oihJvxI+LyfPPA5D87zf9liuKosQb8TMCAHj+eZILq5YguFIwKoqixCPxpQCA5MQqF58tNaRcVBRFOZ6JOwUgDh/PdXsLq2mpKIpyfBN3CsCJmoAURYln4loBjD/bf8x9RVGUeCB+vIAcvHDVIBITxCfzlqIoSjwRlwrgon4BUxUoiqLEDfoKrCiKEqeoAlAURYlTVAEoiqLEKaoAFEVR4hRVAIqiKHGKKgBFUZQ4RRWAoihKnKIKQFEUJU4RK5tjbCAiecDWep4mC9gfAnEiSazfQ6zLD7F/D7EuP+g91IYuxphW3oUxpQBCgYjkGGMGR1qO+hDr9xDr8kPs30Osyw96D6FATUCKoihxiioARVGUOCUeFcDLkRYgBMT6PcS6/BD79xDr8oPeQ72JuzkARVEUxSIeRwCKoigKcaYARGSUiKwTkY0iMiHS8rgQkckisk9EVjrKWojI5yKywf7b3C4XEXnWvoflIjLIccw1dvsNInJNA8rfSUS+FpE1IrJKRG6LwXtIE5GFIrLMvoeH7fKuIrLAluddEUmxy1Pt/Y12fbbjXBPt8nUicmFD3YN97UQRWSIi02JU/lwRWSEiS0Ukxy6LmefIvnamiHwgImvt/4mhUXsPxpi4+ACJwCagG5ACLAP6RlouW7azgEHASkfZU8AEe3sC8KS9PRqYCQhwOrDALm8BbLb/Nre3mzeQ/O2AQfZ2U2A90DfG7kGAJvZ2MrDAlu094Aq7/EXgd/b2TcCL9vYVwLv2dl/72UoFutrPXGIDPkt3AG8D0+z9WJM/F8jyKouZ58i+/hvA9fZ2CpAZrffQIF9INHyAocBsx/5EYGKk5XLIk42nAlgHtLO32wHr7O2XgLHe7YCxwEuOco92DXwvHwMXxOo9AI2BH4HTsBbpJHk/Q8BsYKi9nWS3E+/nytmuAeTuCHwJjACm2fLEjPz29XLxVQAx8xwBGcAW7PnVaL+HeDIBdQC2O/Z32GXRShtjzG4A+29ruzzQfUTF/dmmhIFYb9AxdQ+2+WQpsA/4HOvtN98YU+5HHresdn0B0JLI3sPfgT8ClfZ+S2JLfgADfCYii0VknF0WS89RNyAP+LdtintVRNKJ0nuIJwUgfspi0QUq0H1E/P5EpAnwP+B2Y8zh6pr6KYv4PRhjKowxA7DepIcAfaqRJ6ruQUR+Auwzxix2FlcjS1TJ7+BMY8wg4CLgZhE5q5q20XgPSVjm3BeMMQOBI1gmn0BE9B7iSQHsADo59jsCuyIkSzDsFZF2APbffXZ5oPuI6P2JSDJW5/9fY8yHdnFM3YMLY0w+8A2WTTZTRJL8yOOW1a5vBhwkcvdwJvAzEckF3sEyA/2d2JEfAGPMma+dtwAAAYhJREFULvvvPmAqliKOpedoB7DDGLPA3v8ASyFE5T3EkwJYBPSwvSJSsCa+PomwTNXxCeCa+b8Gy67uKv+17T1wOlBgDylnAyNFpLntYTDSLgs7IiLAa8AaY8zfYvQeWolIpr3dCDgfWAN8DVwW4B5c93YZ8JWxjLWfAFfYXjZdgR7AwnDLb4yZaIzpaIzJxnq2vzLGXBUr8gOISLqINHVtY/3+K4mh58gYswfYLiK97KLzgNVRew8NNbkTDR+sGff1WLbdeyMtj0OuKcBuoAxL81+HZY/9Ethg/21htxXgOfseVgCDHee5Fthof37bgPIPwxqeLgeW2p/RMXYPJwNL7HtYCTxgl3fD6gA3Au8DqXZ5mr2/0a7v5jjXvfa9rQMuisDzdA5VXkAxI78t6zL7s8r1PxpLz5F97QFAjv0sfYTlxROV96ArgRVFUeKUeDIBKYqiKA5UASiKosQpqgAURVHiFFUAiqIocYoqAEVRlDhFFYCiKEqcogpAURQlTlEFoCiKEqf8P4CBahRgldnTAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" - }, - "output_type": "display_data" + } } ], - "source": [ - "env.reset()\n", - "env.render()" - ] + "metadata": {} }, { "cell_type": "markdown", - "metadata": {}, "source": [ "- **Short** and **Long** positions are shown in `red` and `green` colors.\n", "- As you see, the starting *position* of the environment is always **Short**." - ] + ], + "metadata": {} }, { "cell_type": "markdown", - "metadata": {}, "source": [ "### A complete example" - ] + ], + "metadata": {} }, { "cell_type": "code", "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "info: {'total_reward': -173.10000000000602, 'total_profit': 0.980652456904312, 'position': 0}\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], "source": [ "import gym\n", "import gym_anytrading\n", @@ -330,41 +310,61 @@ "plt.cla()\n", "env.render_all()\n", "plt.show()" - ] + ], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "info: {'total_reward': -173.10000000000602, 'total_profit': 0.980652456904312, 'position': 0}\n" + ] + }, + { + "output_type": "display_data", + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + } + } + ], + "metadata": {} }, { "cell_type": "markdown", - "metadata": {}, "source": [ "- You can use `render_all` method to avoid rendering on each step and prevent time-wasting.\n", "- As you see, the first **10** points (`window_size`=10) on the plot don't have a *position*. Because they aren't involved in calculating reward, profit, etc. They just display the first observations. So the environment's `_start_tick` and initial `_last_trade_tick` are **10** and **9**." - ] + ], + "metadata": {} }, { "cell_type": "markdown", - "metadata": {}, "source": [ "#### Mix with `stable-baselines` and `quantstats`\n", "\n", "[Here](https://github.com/AminHP/gym-anytrading/blob/master/examples/a2c_quantstats.ipynb) is an example that mixes `gym-anytrading` with the mentioned famous libraries and shows how to utilize our trading environments in other RL or trading libraries." - ] + ], + "metadata": {} }, { "cell_type": "markdown", - "metadata": {}, "source": [ "### Extend and manipulate TradingEnv\n", "\n", "In case you want to process data and extract features outside the environment, it can be simply done by two methods:\n", "\n", "**Method 1 (Recommended):**" - ] + ], + "metadata": {} }, { "cell_type": "code", "execution_count": 6, - "metadata": {}, - "outputs": [], "source": [ "def my_process_data(env):\n", " start = env.frame_bound[0] - env.window_size\n", @@ -379,20 +379,20 @@ "\n", "\n", "env = MyForexEnv(df=FOREX_EURUSD_1H_ASK, window_size=12, frame_bound=(12, len(FOREX_EURUSD_1H_ASK)))" - ] + ], + "outputs": [], + "metadata": {} }, { "cell_type": "markdown", - "metadata": {}, "source": [ "**Method 2:**" - ] + ], + "metadata": {} }, { "cell_type": "code", "execution_count": 7, - "metadata": {}, - "outputs": [], "source": [ "def my_process_data(df, window_size, frame_bound):\n", " start = frame_bound[0] - window_size\n", @@ -415,7 +415,9 @@ " \n", "prices, signal_features = my_process_data(df=STOCKS_GOOGL, window_size=30, frame_bound=(30, len(STOCKS_GOOGL)))\n", "env = MyStocksEnv(prices, signal_features, df=STOCKS_GOOGL, window_size=30, frame_bound=(30, len(STOCKS_GOOGL)))" - ] + ], + "outputs": [], + "metadata": {} } ], "metadata": { diff --git a/README.md b/README.md index 8ea4031..f95be49 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,9 @@ Trading algorithms are mostly implemented in two markets: [FOREX](https://en.wik TradingEnv is an abstract environment which is defined to support all kinds of trading environments. ForexEnv and StocksEnv are simply two environments that inherit and extend TradingEnv. In the future sections, more explanations will be given about them but before that, some environment properties should be discussed. +**Note:** For experts, it is recommended to check out the [gym-mtsim](https://github.com/AminHP/gym-mtsim) project. + + ## Installation ### Via PIP