├── envs ├── __init__.py ├── stocks_env.py ├── forex_env.py └── trading_env.py ├── .gitignore ├── README.md ├── Data ├── doge.csv └── apple.csv └── Doge_Predict_A2C.ipynb /envs/__init__.py: -------------------------------------------------------------------------------- 1 | from .trading_env import TradingEnv, Actions, Positions 2 | from .forex_env import ForexEnv 3 | from .stocks_env import StocksEnv 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .DS_Store 11 | .Python 12 | build/ 13 | develop-eggs/ 14 | dist/ 15 | downloads/ 16 | eggs/ 17 | .eggs/ 18 | lib/ 19 | lib64/ 20 | parts/ 21 | sdist/ 22 | var/ 23 | wheels/ 24 | pip-wheel-metadata/ 25 | share/python-wheels/ 26 | *.egg-info/ 27 | .installed.cfg 28 | *.egg 29 | MANIFEST 30 | 31 | # PyInstaller 32 | # Usually these files are written by a python script from a template 33 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 34 | *.manifest 35 | *.spec 36 | 37 | # Installer logs 38 | pip-log.txt 39 | pip-delete-this-directory.txt 40 | 41 | # Unit test / coverage reports 42 | htmlcov/ 43 | .tox/ 44 | .nox/ 45 | .coverage 46 | .coverage.* 47 | .cache 48 | nosetests.xml 49 | coverage.xml 50 | *.cover 51 | *.py,cover 52 | .hypothesis/ 53 | .pytest_cache/ 54 | 55 | # Translations 56 | *.mo 57 | *.pot 58 | 59 | # Django stuff: 60 | *.log 61 | local_settings.py 62 | db.sqlite3 63 | db.sqlite3-journal 64 | 65 | # Flask stuff: 66 | instance/ 67 | .webassets-cache 68 | 69 | # Scrapy stuff: 70 | .scrapy 71 | 72 | # Sphinx documentation 73 | docs/_build/ 74 | 75 | # PyBuilder 76 | target/ 77 | 78 | # Jupyter Notebook 79 | .ipynb_checkpoints 80 | 81 | # IPython 82 | profile_default/ 83 | ipython_config.py 84 | 85 | # pyenv 86 | .python-version 87 | 88 | # pipenv 89 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 90 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 91 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 92 | # install all needed dependencies. 93 | #Pipfile.lock 94 | 95 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow 96 | __pypackages__/ 97 | 98 | # Celery stuff 99 | celerybeat-schedule 100 | celerybeat.pid 101 | 102 | # SageMath parsed files 103 | *.sage.py 104 | 105 | # Environments 106 | .env 107 | .venv 108 | env/ 109 | venv/ 110 | ENV/ 111 | env.bak/ 112 | venv.bak/ 113 | 114 | # Spyder project settings 115 | .spyderproject 116 | .spyproject 117 | 118 | # Rope project settings 119 | .ropeproject 120 | 121 | # mkdocs documentation 122 | /site 123 | 124 | # mypy 125 | .mypy_cache/ 126 | .dmypy.json 127 | dmypy.json 128 | 129 | # Pyre type checker 130 | .pyre/ 131 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Deep-RL-for-Automated-Stock-Trading 2 | Deep Reinforcement Learning methods for facilitating Automated Stock Trading. 3 | 4 | This project implements a Stock Trading Bot, trained using Deep Reinforcement Learning. Implementation is kept simple, Stable baselines has been used for implementation of RL algorithms. 5 | 6 | ## Reinforcement Learning 7 | 8 | ![image](https://user-images.githubusercontent.com/81774578/119201322-47ff7f80-baac-11eb-8eaf-ea2fe437c0e1.png) 9 | 10 | Reinforcement learning (RL) is an area of machine learning concerned with how intelligent agents ought to take actions in an environment in order to maximize the notion of cumulative reward.Reinforcement learning is one of three basic machine learning paradigms, alongside supervised learning and unsupervised learning. 11 | 12 | 13 | ## Stable-Baselines 14 | 15 | Stable Baselines is a set of improved implementations of Reinforcement Learning (RL) algorithms based on OpenAI Baselines. 16 | 17 | ![image](https://user-images.githubusercontent.com/81774578/119201254-20a8b280-baac-11eb-8963-ee9868339d9a.png) 18 | 19 | ![image](https://user-images.githubusercontent.com/81774578/119203250-3f10ad00-bab0-11eb-8534-dc023e814208.png) 20 | 21 | ![image](https://user-images.githubusercontent.com/81774578/119201750-205ce700-baad-11eb-99ed-034f60d69eeb.png) 22 | 23 | 24 | ## Implementing A2C ALgorithm 25 | **A2C** is a policy gradient algorithm and it is part of the on-policy family. That means that we are learning the value function for one policy while following it, or in other words, we can’t learn the value function by following another policy. We will be using another policy if were using experience replay for example, because by learning from too old data, we use information generated by a policy (ie. the network) slightly different to the current state. 26 | 27 | ![image](https://user-images.githubusercontent.com/81774578/119203325-649db680-bab0-11eb-8004-c948d560dcc6.png) 28 | 29 | On each learning step, we update both the Actor parameter (with policy gradients and advantage value), and the Critic parameter (with minimizing the mean squared error with the Bellman update equation) 30 | 31 | ## Data 32 | You can download Historical Financial data from www.Marketwatch.com for training. We have used data of Apple and DogeCoin for Training. 33 | 34 | ## Training 35 | ![image](https://user-images.githubusercontent.com/55630860/119236632-28249600-bb56-11eb-8af7-0bf4939bbe29.png) 36 | 37 | We used data of Apple Stocks for a period of one year. 38 | 39 | Here, 40 | Red indicates Short SELL, 41 | Green indicates Short BUY. 42 | 43 | 44 | ## Evaluation 45 | ![image](https://user-images.githubusercontent.com/55630860/119236661-51452680-bb56-11eb-9b1f-3364e94f8dcb.png) 46 | 47 | The Model predicted the **Stock Prices** for next 50 days. 48 | -------------------------------------------------------------------------------- /envs/stocks_env.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | 3 | from .trading_env import TradingEnv, Actions, Positions 4 | 5 | 6 | class StocksEnv(TradingEnv): 7 | 8 | def __init__(self, df, window_size, frame_bound): 9 | assert len(frame_bound) == 2 10 | 11 | self.frame_bound = frame_bound 12 | super().__init__(df, window_size) 13 | 14 | self.trade_fee_bid_percent = 0.01 # unit 15 | self.trade_fee_ask_percent = 0.005 # unit 16 | 17 | 18 | def _process_data(self): 19 | prices = self.df.loc[:, 'Close'].to_numpy() 20 | 21 | prices[self.frame_bound[0] - self.window_size] # validate index (TODO: Improve validation) 22 | prices = prices[self.frame_bound[0]-self.window_size:self.frame_bound[1]] 23 | 24 | diff = np.insert(np.diff(prices), 0, 0) 25 | signal_features = np.column_stack((prices, diff)) 26 | 27 | return prices, signal_features 28 | 29 | 30 | def _calculate_reward(self, action): 31 | step_reward = 0 32 | 33 | trade = False 34 | if ((action == Actions.Buy.value and self._position == Positions.Short) or 35 | (action == Actions.Sell.value and self._position == Positions.Long)): 36 | trade = True 37 | 38 | if trade: 39 | current_price = self.prices[self._current_tick] 40 | last_trade_price = self.prices[self._last_trade_tick] 41 | price_diff = current_price - last_trade_price 42 | 43 | if self._position == Positions.Long: 44 | step_reward += price_diff 45 | 46 | return step_reward 47 | 48 | 49 | def _update_profit(self, action): 50 | trade = False 51 | if ((action == Actions.Buy.value and self._position == Positions.Short) or 52 | (action == Actions.Sell.value and self._position == Positions.Long)): 53 | trade = True 54 | 55 | if trade or self._done: 56 | current_price = self.prices[self._current_tick] 57 | last_trade_price = self.prices[self._last_trade_tick] 58 | 59 | if self._position == Positions.Long: 60 | shares = (self._total_profit * (1 - self.trade_fee_ask_percent)) / last_trade_price 61 | self._total_profit = (shares * (1 - self.trade_fee_bid_percent)) * current_price 62 | 63 | 64 | def max_possible_profit(self): 65 | current_tick = self._start_tick 66 | last_trade_tick = current_tick - 1 67 | profit = 1. 68 | 69 | while current_tick <= self._end_tick: 70 | position = None 71 | if self.prices[current_tick] < self.prices[current_tick - 1]: 72 | while (current_tick <= self._end_tick and 73 | self.prices[current_tick] < self.prices[current_tick - 1]): 74 | current_tick += 1 75 | position = Positions.Short 76 | else: 77 | while (current_tick <= self._end_tick and 78 | self.prices[current_tick] >= self.prices[current_tick - 1]): 79 | current_tick += 1 80 | position = Positions.Long 81 | 82 | if position == Positions.Long: 83 | current_price = self.prices[current_tick - 1] 84 | last_trade_price = self.prices[last_trade_tick] 85 | shares = profit / last_trade_price 86 | profit = shares * current_price 87 | last_trade_tick = current_tick - 1 88 | 89 | return profit 90 | -------------------------------------------------------------------------------- /envs/forex_env.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | 3 | from .trading_env import TradingEnv, Actions, Positions 4 | 5 | 6 | class ForexEnv(TradingEnv): 7 | 8 | def __init__(self, df, window_size, frame_bound, unit_side='left'): 9 | assert len(frame_bound) == 2 10 | assert unit_side.lower() in ['left', 'right'] 11 | 12 | self.frame_bound = frame_bound 13 | self.unit_side = unit_side.lower() 14 | super().__init__(df, window_size) 15 | 16 | self.trade_fee = 0.0003 # unit 17 | 18 | 19 | def _process_data(self): 20 | prices = self.df.loc[:, 'Close'].to_numpy() 21 | 22 | prices[self.frame_bound[0] - self.window_size] # validate index (TODO: Improve validation) 23 | prices = prices[self.frame_bound[0]-self.window_size:self.frame_bound[1]] 24 | 25 | diff = np.insert(np.diff(prices), 0, 0) 26 | signal_features = np.column_stack((prices, diff)) 27 | 28 | return prices, signal_features 29 | 30 | 31 | def _calculate_reward(self, action): 32 | step_reward = 0 # pip 33 | 34 | trade = False 35 | if ((action == Actions.Buy.value and self._position == Positions.Short) or 36 | (action == Actions.Sell.value and self._position == Positions.Long)): 37 | trade = True 38 | 39 | if trade: 40 | current_price = self.prices[self._current_tick] 41 | last_trade_price = self.prices[self._last_trade_tick] 42 | price_diff = current_price - last_trade_price 43 | 44 | if self._position == Positions.Short: 45 | step_reward += -price_diff * 10000 46 | elif self._position == Positions.Long: 47 | step_reward += price_diff * 10000 48 | 49 | return step_reward 50 | 51 | 52 | def _update_profit(self, action): 53 | trade = False 54 | if ((action == Actions.Buy.value and self._position == Positions.Short) or 55 | (action == Actions.Sell.value and self._position == Positions.Long)): 56 | trade = True 57 | 58 | if trade or self._done: 59 | current_price = self.prices[self._current_tick] 60 | last_trade_price = self.prices[self._last_trade_tick] 61 | 62 | if self.unit_side == 'left': 63 | if self._position == Positions.Short: 64 | quantity = self._total_profit * (last_trade_price - self.trade_fee) 65 | self._total_profit = quantity / current_price 66 | 67 | elif self.unit_side == 'right': 68 | if self._position == Positions.Long: 69 | quantity = self._total_profit / last_trade_price 70 | self._total_profit = quantity * (current_price - self.trade_fee) 71 | 72 | 73 | def max_possible_profit(self): 74 | current_tick = self._start_tick 75 | last_trade_tick = current_tick - 1 76 | profit = 1. 77 | 78 | while current_tick <= self._end_tick: 79 | position = None 80 | if self.prices[current_tick] < self.prices[current_tick - 1]: 81 | while (current_tick <= self._end_tick and 82 | self.prices[current_tick] < self.prices[current_tick - 1]): 83 | current_tick += 1 84 | position = Positions.Short 85 | else: 86 | while (current_tick <= self._end_tick and 87 | self.prices[current_tick] >= self.prices[current_tick - 1]): 88 | current_tick += 1 89 | position = Positions.Long 90 | 91 | current_price = self.prices[current_tick - 1] 92 | last_trade_price = self.prices[last_trade_tick] 93 | 94 | if self.unit_side == 'left': 95 | if position == Positions.Short: 96 | quantity = profit * (last_trade_price - self.trade_fee) 97 | profit = quantity / current_price 98 | 99 | elif self.unit_side == 'right': 100 | if position == Positions.Long: 101 | quantity = profit / last_trade_price 102 | profit = quantity * (current_price - self.trade_fee) 103 | 104 | last_trade_tick = current_tick - 1 105 | 106 | return profit 107 | -------------------------------------------------------------------------------- /envs/trading_env.py: -------------------------------------------------------------------------------- 1 | import gym 2 | from gym import spaces 3 | from gym.utils import seeding 4 | import numpy as np 5 | from enum import Enum 6 | import matplotlib.pyplot as plt 7 | 8 | 9 | class Actions(Enum): 10 | Sell = 0 11 | Buy = 1 12 | 13 | 14 | class Positions(Enum): 15 | Short = 0 16 | Long = 1 17 | 18 | def opposite(self): 19 | return Positions.Short if self == Positions.Long else Positions.Long 20 | 21 | 22 | class TradingEnv(gym.Env): 23 | 24 | metadata = {'render.modes': ['human']} 25 | 26 | def __init__(self, df, window_size): 27 | assert df.ndim == 2 28 | 29 | self.seed() 30 | self.df = df 31 | self.window_size = window_size 32 | self.prices, self.signal_features = self._process_data() 33 | self.shape = (window_size, self.signal_features.shape[1]) 34 | 35 | # spaces 36 | self.action_space = spaces.Discrete(len(Actions)) 37 | self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=self.shape, dtype=np.float32) 38 | 39 | # episode 40 | self._start_tick = self.window_size 41 | self._end_tick = len(self.prices) - 1 42 | self._done = None 43 | self._current_tick = None 44 | self._last_trade_tick = None 45 | self._position = None 46 | self._position_history = None 47 | self._total_reward = None 48 | self._total_profit = None 49 | self._first_rendering = None 50 | self.history = None 51 | 52 | 53 | def seed(self, seed=None): 54 | self.np_random, seed = seeding.np_random(seed) 55 | return [seed] 56 | 57 | 58 | def reset(self): 59 | self._done = False 60 | self._current_tick = self._start_tick 61 | self._last_trade_tick = self._current_tick - 1 62 | self._position = Positions.Short 63 | self._position_history = (self.window_size * [None]) + [self._position] 64 | self._total_reward = 0. 65 | self._total_profit = 1. # unit 66 | self._first_rendering = True 67 | self.history = {} 68 | return self._get_observation() 69 | 70 | 71 | def step(self, action): 72 | self._done = False 73 | self._current_tick += 1 74 | 75 | if self._current_tick == self._end_tick: 76 | self._done = True 77 | 78 | step_reward = self._calculate_reward(action) 79 | self._total_reward += step_reward 80 | 81 | self._update_profit(action) 82 | 83 | trade = False 84 | if ((action == Actions.Buy.value and self._position == Positions.Short) or 85 | (action == Actions.Sell.value and self._position == Positions.Long)): 86 | trade = True 87 | 88 | if trade: 89 | self._position = self._position.opposite() 90 | self._last_trade_tick = self._current_tick 91 | 92 | self._position_history.append(self._position) 93 | observation = self._get_observation() 94 | info = dict( 95 | total_reward = self._total_reward, 96 | total_profit = self._total_profit, 97 | position = self._position.value 98 | ) 99 | self._update_history(info) 100 | 101 | return observation, step_reward, self._done, info 102 | 103 | 104 | def _get_observation(self): 105 | return self.signal_features[(self._current_tick-self.window_size):self._current_tick] 106 | 107 | 108 | def _update_history(self, info): 109 | if not self.history: 110 | self.history = {key: [] for key in info.keys()} 111 | 112 | for key, value in info.items(): 113 | self.history[key].append(value) 114 | 115 | 116 | def render(self, mode='human'): 117 | 118 | def _plot_position(position, tick): 119 | color = None 120 | if position == Positions.Short: 121 | color = 'red' 122 | elif position == Positions.Long: 123 | color = 'green' 124 | if color: 125 | plt.scatter(tick, self.prices[tick], color=color) 126 | 127 | if self._first_rendering: 128 | self._first_rendering = False 129 | plt.cla() 130 | plt.plot(self.prices) 131 | start_position = self._position_history[self._start_tick] 132 | _plot_position(start_position, self._start_tick) 133 | 134 | _plot_position(self._position, self._current_tick) 135 | 136 | plt.suptitle( 137 | "Total Reward: %.6f" % self._total_reward + ' ~ ' + 138 | "Total Profit: %.6f" % self._total_profit 139 | ) 140 | 141 | plt.pause(0.01) 142 | 143 | 144 | def render_all(self, mode='human'): 145 | window_ticks = np.arange(len(self._position_history)) 146 | plt.plot(self.prices) 147 | 148 | short_ticks = [] 149 | long_ticks = [] 150 | for i, tick in enumerate(window_ticks): 151 | if self._position_history[i] == Positions.Short: 152 | short_ticks.append(tick) 153 | elif self._position_history[i] == Positions.Long: 154 | long_ticks.append(tick) 155 | 156 | plt.plot(short_ticks, self.prices[short_ticks], 'ro') 157 | plt.plot(long_ticks, self.prices[long_ticks], 'go') 158 | 159 | plt.suptitle( 160 | "Total Reward: %.6f" % self._total_reward + ' ~ ' + 161 | "Total Profit: %.6f" % self._total_profit 162 | ) 163 | 164 | 165 | def close(self): 166 | plt.close() 167 | 168 | 169 | def save_rendering(self, filepath): 170 | plt.savefig(filepath) 171 | 172 | 173 | def pause_rendering(self): 174 | plt.show() 175 | 176 | 177 | def _process_data(self): 178 | raise NotImplementedError 179 | 180 | 181 | def _calculate_reward(self, action): 182 | raise NotImplementedError 183 | 184 | 185 | def _update_profit(self, action): 186 | raise NotImplementedError 187 | 188 | 189 | def max_possible_profit(self): # trade fees are ignored 190 | raise NotImplementedError 191 | -------------------------------------------------------------------------------- /Data/doge.csv: -------------------------------------------------------------------------------- 1 | Date,Open,High,Low,Close,Volume 2 | 03/12/21,0.330407,0.432618,0.297074,0.397741,13850000000 3 | 03/11/21,0.474719,0.477866,0.217528,0.330353,19280000000 4 | 03/10/21,0.486444,0.512529,0.468941,0.474714,4750000000 5 | 03/09/21,0.513062,0.514821,0.457331,0.486366,6840000000 6 | 03/08/21,0.507796,0.547205,0.449635,0.513023,8260000000 7 | 03/05/21,0.559594,0.563262,0.493248,0.507448,7920000000 8 | 03/04/21,0.486983,0.589075,0.464572,0.559581,16220000000 9 | 03/03/21,0.389257,0.514831,0.353838,0.48691,16690000000 10 | 03/02/21,0.493226,0.519039,0.385839,0.389159,8600000000 11 | 03/01/21,0.449956,0.544636,0.44294,0.493231,12460000000 12 | 02/26/2021,0.568689,0.568689,0.422392,0.449977,15360000000 13 | 02/25/2021,0.63533,0.697487,0.423602,0.568682,37250000000 14 | 02/24/2021,0.686914,0.738255,0.605162,0.634394,16920000000 15 | 02/23/2021,0.579819,0.729865,0.519357,0.68688,18810000000 16 | 02/22/2021,0.653501,0.663006,0.541526,0.579839,12970000000 17 | 02/19/2021,0.559521,0.693839,0.536232,0.655355,28030000000 18 | 02/18/2021,0.438349,0.594039,0.398416,0.559005,31900000000 19 | 02/17/2021,0.372467,0.443181,0.372467,0.438244,9970000000 20 | 02/16/2021,0.390686,0.399246,0.363912,0.372404,8200000000 21 | 02/12/21,0.336657,0.396647,0.327317,0.390642,11340000000 22 | 02/11/21,0.303226,0.338327,0.300761,0.336635,6480000000 23 | 02/10/21,0.323591,0.323797,0.295612,0.30324,6740000000 24 | 02/09/21,0.270696,0.343505,0.255591,0.323582,21220000000 25 | 02/08/21,0.270118,0.278347,0.264018,0.270668,5380000000 26 | 02/05/21,0.251192,0.279737,0.24739,0.269805,7900000000 27 | 02/04/21,0.269932,0.288841,0.224455,0.251103,10020000000 28 | 02/03/21,0.24879,0.289165,0.229214,0.270017,17250000000 29 | 02/02/21,0.2608,0.269065,0.166312,0.248731,27910000000 30 | 02/01/21,0.305718,0.308332,0.256061,0.26081,17340000000 31 | 01/29/2021,0.317922,0.346599,0.297108,0.305633,15480000000 32 | 01/28/2021,0.407451,0.422212,0.271758,0.317696,33270000000 33 | 01/27/2021,0.322197,0.433969,0.309128,0.407335,31680000000 34 | 01/26/2021,0.282723,0.349748,0.239707,0.322037,29110000000 35 | 01/25/2021,0.365389,0.378924,0.23201,0.281909,39280000000 36 | 01/22/2021,0.182628,0.449889,0.180132,0.365551,83390000000 37 | 01/21/2021,0.121275,0.189446,0.120291,0.182784,37960000000 38 | 01/20/2021,0.09425,0.144229,0.092535,0.121349,57290000000 39 | 01/19/2021,0.070709,0.095671,0.070705,0.093763,23190000000 40 | 01/15/2021,0.074205,0.075337,0.068792,0.070719,8900000000 41 | 01/14/2021,0.06368,0.079712,0.063402,0.07415,24470000000 42 | 01/13/2021,0.061605,0.065016,0.060969,0.063688,5300000000 43 | 01/12/21,0.061754,0.063832,0.060536,0.061582,4130000000 44 | 01/11/21,0.05873,0.062168,0.058705,0.061757,3860000000 45 | 01/08/21,0.064281,0.067151,0.057211,0.058728,9590000000 46 | 01/07/21,0.059921,0.064989,0.058068,0.064283,9450000000 47 | 01/06/21,0.057393,0.060593,0.056318,0.059948,5220000000 48 | 01/05/21,0.055542,0.058122,0.055121,0.057401,3280000000 49 | 01/04/21,0.057567,0.05944,0.055553,0.055554,4080000000 50 | 12/31/2020,0.062093,0.062794,0.057285,0.05757,8100000000 51 | 12/30/2020,0.053742,0.070722,0.053723,0.062113,26140000000 52 | 12/29/2020,0.054026,0.054484,0.051896,0.053744,2260000000 53 | 12/28/2020,0.054122,0.055567,0.053738,0.054027,2810000000 54 | 12/24/2020,0.053641,0.054673,0.05323,0.054102,1920000000 55 | 12/23/2020,0.054436,0.054859,0.053046,0.053637,1420000000 56 | 12/22/2020,0.053976,0.055388,0.053456,0.054426,2390000000 57 | 12/21/2020,0.051249,0.053988,0.051241,0.053973,2110000000 58 | 12/18/2020,0.051501,0.05241,0.04965,0.051263,3470000000 59 | 12/17/2020,0.053431,0.056659,0.050887,0.05151,3000000000 60 | 12/16/2020,0.054913,0.056043,0.052797,0.053437,2810000000 61 | 12/15/2020,0.057475,0.057923,0.054801,0.054929,2420000000 62 | 12/14/2020,0.058829,0.059509,0.056763,0.057471,2570000000 63 | 12/11/20,0.058263,0.060603,0.058042,0.058827,3430000000 64 | 12/10/20,0.05729,0.059825,0.056462,0.05827,3120000000 65 | 12/09/20,0.057878,0.05915,0.056997,0.057294,2560000000 66 | 12/08/20,0.058606,0.058881,0.056567,0.05788,2390000000 67 | 12/07/20,0.056968,0.05905,0.055365,0.058611,3910000000 68 | 12/04/20,0.058429,0.059736,0.055064,0.056965,4770000000 69 | 12/03/20,0.062676,0.06351,0.058431,0.058431,9160000000 70 | 12/02/20,0.055238,0.062739,0.054694,0.062694,6370000000 71 | 12/01/20,0.055896,0.056965,0.054298,0.055261,3660000000 72 | 11/30/2020,0.055877,0.056895,0.054398,0.055893,3390000000 73 | 11/27/2020,0.0579,0.058642,0.054554,0.0559,4710000000 74 | 11/25/2020,0.062851,0.062851,0.056009,0.057978,8670000000 75 | 11/24/2020,0.051888,0.062848,0.051622,0.062848,13640000000 76 | 11/23/2020,0.050924,0.052248,0.050548,0.051881,3030000000 77 | 11/20/2020,0.049523,0.052453,0.049256,0.050935,5280000000 78 | 11/19/2020,0.049925,0.050877,0.048026,0.049584,3760000000 79 | 11/18/2020,0.050469,0.051118,0.047762,0.049927,3650000000 80 | 11/17/2020,0.050343,0.052153,0.050011,0.050474,3640000000 81 | 11/16/2020,0.050582,0.052423,0.049198,0.050279,4670000000 82 | 11/13/2020,0.048134,0.05229,0.047929,0.050576,5220000000 83 | 11/12/20,0.050076,0.050176,0.044811,0.048129,4850000000 84 | 11/11/20,0.050466,0.051993,0.049173,0.050076,4450000000 85 | 11/10/20,0.049909,0.052537,0.048537,0.050463,6160000000 86 | 11/09/20,0.056663,0.05803,0.049862,0.050045,9270000000 87 | 11/06/20,0.047663,0.0604,0.046065,0.056653,19490000000 88 | 11/05/20,0.053537,0.053774,0.041782,0.047673,11250000000 89 | 11/04/20,0.056136,0.060737,0.046516,0.05353,15500000000 90 | 11/03/20,0.054196,0.059292,0.05335,0.055881,10290000000 91 | 11/02/20,0.055044,0.060455,0.051115,0.054135,14030000000 92 | 10/30/2020,0.059117,0.059628,0.054075,0.055036,11880000000 93 | 10/29/2020,0.049469,0.063482,0.04897,0.059134,21380000000 94 | 10/28/2020,0.053513,0.055054,0.04796,0.049467,10520000000 95 | 10/27/2020,0.056427,0.05981,0.050815,0.053513,11600000000 96 | 10/26/2020,0.062639,0.064003,0.047653,0.056442,19300000000 97 | 10/23/2020,0.066244,0.066392,0.055785,0.062639,13800000000 98 | 10/22/2020,0.069815,0.071703,0.065915,0.066249,7320000000 99 | 10/21/2020,0.06978,0.07272,0.061285,0.069791,13240000000 100 | 10/20/2020,0.07258,0.074843,0.068152,0.069611,11230000000 101 | 10/19/2020,0.070015,0.081396,0.067081,0.072584,22670000000 102 | 10/16/2020,0.078782,0.083567,0.064053,0.070012,22360000000 103 | 10/15/2020,0.077936,0.085037,0.063839,0.078793,38110000000 104 | 10/14/2020,0.057506,0.086356,0.053464,0.078508,54230000000 105 | 10/13/2020,0.046788,0.058646,0.044505,0.057465,26400000000 106 | 10/12/20,0.052933,0.054033,0.043289,0.046783,27110000000 107 | 10/09/20,0.03734,0.059081,0.035919,0.052944,72240000000 108 | 10/08/20,0.031297,0.039651,0.031031,0.037345,20280000000 109 | 10/07/20,0.034784,0.035142,0.029054,0.031296,19700000000 110 | 10/06/20,0.036826,0.0437,0.033096,0.034705,39340000000 111 | 10/05/20,0.028199,0.048998,0.026909,0.036841,65010000000 112 | 10/02/20,0.045859,0.050499,0.022269,0.028197,77240000000 113 | 10/01/20,0.036085,0.07797,0.03234,0.046597,146800000000 114 | 09/30/2020,0.007415,0.037902,0.007415,0.036265,12410000000 115 | 09/29/2020,0.008244,0.008245,0.007268,0.007441,2010000000 116 | 09/28/2020,0.008349,0.008454,0.008014,0.00824,1470000000 117 | 09/25/2020,0.008714,0.008899,0.008259,0.008353,2070000000 118 | 09/24/2020,0.008571,0.008955,0.008504,0.008714,1840000000 119 | 09/23/2020,0.008516,0.008801,0.008359,0.008571,1790000000 120 | 09/22/2020,0.008167,0.008751,0.007571,0.008516,2470000000 121 | 09/21/2020,0.009055,0.009099,0.008049,0.008172,2880000000 122 | 09/18/2020,0.00905,0.009141,0.008506,0.009055,2650000000 123 | 09/17/2020,0.009173,0.009655,0.009,0.009053,3510000000 124 | 09/16/2020,0.009094,0.009302,0.008949,0.009172,2480000000 125 | 09/15/2020,0.009235,0.009365,0.008806,0.009094,3070000000 126 | 09/14/2020,0.00937,0.009546,0.009095,0.009235,3590000000 127 | 09/11/20,0.009398,0.009827,0.008373,0.009373,6690000000 128 | 09/10/20,0.008672,0.010064,0.008329,0.0094,7540000000 129 | 09/09/20,0.008068,0.008669,0.007779,0.008669,3980000000 130 | 09/08/20,0.008824,0.009136,0.007848,0.008066,5990000000 131 | 09/04/20,0.009829,0.009846,0.006727,0.008828,11360000000 132 | 09/03/20,0.010159,0.01085,0.009056,0.009831,8010000000 133 | 09/02/20,0.009753,0.010687,0.009658,0.010158,6610000000 134 | 09/01/20,0.009728,0.010253,0.008834,0.009753,5480000000 135 | 08/31/2020,0.010443,0.010497,0.008972,0.009724,7150000000 136 | 08/28/2020,0.00996,0.010968,0.009652,0.010443,16840000000 137 | 08/27/2020,0.009784,0.010319,0.008866,0.009958,15370000000 138 | 08/26/2020,0.009845,0.011493,0.007623,0.00978,38720000000 139 | 08/25/2020,0.010493,0.013928,0.009381,0.00985,71680000000 140 | 08/24/2020,0.005667,0.014008,0.005553,0.010489,100850000000 141 | 08/21/2020,0.004666,0.005676,0.004606,0.005661,8410000000 142 | 08/20/2020,0.004626,0.004756,0.004522,0.004666,3050000000 143 | 08/19/2020,0.004488,0.004718,0.004439,0.004627,3430000000 144 | 08/18/2020,0.004594,0.004622,0.004255,0.004488,3420000000 145 | 08/17/2020,0.004549,0.004732,0.004509,0.004594,3590000000 146 | 08/14/2020,0.004511,0.004818,0.004399,0.004548,5620000000 147 | 08/13/2020,0.004558,0.004659,0.004412,0.004508,5180000000 148 | 08/12/20,0.004573,0.004638,0.004384,0.004563,5340000000 149 | 08/11/20,0.003764,0.004594,0.003673,0.004573,6350000000 150 | 08/10/20,0.004515,0.004766,0.003604,0.003767,8030000000 151 | 08/07/20,0.004777,0.004866,0.004339,0.004514,8850000000 152 | 08/06/20,0.004645,0.005463,0.004339,0.004773,32480000000 153 | 08/05/20,0.003919,0.004721,0.003815,0.004641,23480000000 154 | 08/04/20,0.003862,0.004025,0.003799,0.003925,4570000000 155 | 08/03/20,0.003723,0.003985,0.003606,0.003863,4750000000 156 | 07/31/2020,0.003419,0.004127,0.003397,0.003723,9510000000 157 | 07/30/2020,0.003203,0.003439,0.003174,0.003423,1810000000 158 | 07/29/2020,0.003226,0.003262,0.003169,0.003204,1110000000 159 | 07/28/2020,0.003259,0.003285,0.003192,0.003224,1160000000 160 | 07/27/2020,0.003164,0.003278,0.003149,0.003259,1150000000 161 | 07/24/2020,0.003076,0.00319,0.003072,0.003164,1100000000 162 | 07/23/2020,0.003109,0.003114,0.003001,0.003075,996000000 163 | 07/22/2020,0.003158,0.003171,0.003058,0.003109,780000000 164 | 07/21/2020,0.003176,0.003191,0.003006,0.003158,1280000000 165 | 07/20/2020,0.003333,0.003368,0.003115,0.003176,1430000000 166 | 07/17/2020,0.003388,0.003407,0.003309,0.003335,1040000000 167 | 07/16/2020,0.003391,0.003447,0.003348,0.003388,1050000000 168 | 07/15/2020,0.003285,0.003411,0.003255,0.003391,1120000000 169 | 07/14/2020,0.003433,0.003449,0.003272,0.003282,1650000000 170 | 07/13/2020,0.003369,0.003522,0.003343,0.003433,1730000000 171 | 07/10/20,0.003327,0.003457,0.003274,0.003369,1800000000 172 | 07/09/20,0.003559,0.003585,0.003261,0.00332,2970000000 173 | 07/08/20,0.00344,0.003592,0.003408,0.003551,2450000000 174 | 07/07/20,0.003393,0.003532,0.003345,0.00344,1610000000 175 | 07/06/20,0.00327,0.003482,0.003236,0.003392,2140000000 176 | 07/02/20,0.003251,0.003359,0.003089,0.00327,2940000000 177 | 07/01/20,0.003716,0.003793,0.002945,0.003245,7720000000 178 | 06/30/2020,0.004232,0.004287,0.003598,0.003716,7730000000 179 | 06/29/2020,0.003682,0.004263,0.003551,0.00424,13300000000 180 | 06/26/2020,0.00334,0.003686,0.003231,0.003684,5150000000 181 | 06/25/2020,0.00351,0.003673,0.003159,0.00334,5990000000 182 | 06/24/2020,0.002987,0.003587,0.002983,0.00351,9100000000 183 | 06/23/2020,0.002906,0.003023,0.002904,0.002986,2780000000 184 | 06/22/2020,0.002908,0.002963,0.002856,0.002905,1900000000 185 | 06/19/2020,0.002935,0.003017,0.002817,0.002904,2870000000 186 | 06/18/2020,0.002879,0.002991,0.002874,0.002935,3210000000 187 | 06/17/2020,0.002773,0.003024,0.002745,0.002879,3970000000 188 | 06/16/2020,0.002766,0.00282,0.002732,0.002773,1320000000 189 | 06/15/2020,0.002811,0.002819,0.002708,0.002769,1880000000 190 | 06/12/20,0.002774,0.002855,0.002761,0.002811,1580000000 191 | 06/11/20,0.002757,0.002797,0.002725,0.002773,1150000000 192 | 06/10/20,0.00276,0.002863,0.00274,0.002757,1990000000 193 | 06/09/20,0.002671,0.002881,0.002632,0.00276,2520000000 194 | 06/08/20,0.002707,0.002786,0.002651,0.002673,1480000000 195 | 06/05/20,0.00267,0.002745,0.002645,0.002707,923000000 196 | 06/04/20,0.002757,0.002828,0.0026,0.00267,2240000000 197 | 06/03/20,0.002639,0.002815,0.002625,0.002757,2800000000 198 | 06/02/20,0.002546,0.002666,0.002546,0.002639,1290000000 199 | 06/01/20,0.002517,0.00256,0.002484,0.002546,1260000000 200 | 05/29/2020,0.002513,0.002529,0.002453,0.002517,1330000000 201 | 05/28/2020,0.002576,0.002588,0.00251,0.002514,1170000000 202 | 05/27/2020,0.002569,0.002586,0.002557,0.002576,657000000 203 | 05/26/2020,0.002583,0.002599,0.002548,0.002568,1050000000 204 | 05/22/2020,0.002576,0.002598,0.002512,0.002583,1640000000 205 | 05/21/2020,0.002583,0.00261,0.002512,0.002576,1220000000 206 | 05/20/2020,0.002674,0.002696,0.002566,0.002583,1810000000 207 | 05/19/2020,0.002666,0.002704,0.00262,0.002674,2380000000 208 | 05/18/2020,0.002651,0.002905,0.002634,0.002665,5750000000 209 | 05/15/2020,0.002634,0.002673,0.002618,0.002652,1130000000 210 | 05/14/2020,0.002644,0.00265,0.00261,0.002634,969000000 211 | 05/13/2020,0.002647,0.00269,0.002627,0.002644,959000000 212 | 05/12/20,0.002624,0.002689,0.002618,0.002647,1330000000 213 | 05/11/20,0.002595,0.002662,0.002593,0.002624,1700000000 214 | 05/08/20,0.002592,0.002624,0.002581,0.002595,1360000000 215 | 05/07/20,0.002592,0.002619,0.002573,0.002592,1410000000 216 | 05/06/20,0.002585,0.002605,0.002579,0.002593,653000000 217 | 05/05/20,0.002604,0.002607,0.002575,0.002585,597000000 218 | 05/04/20,0.002601,0.00262,0.002554,0.002604,1420000000 219 | 05/01/20,0.002638,0.002639,0.002572,0.0026,1270000000 220 | 04/30/2020,0.002637,0.002661,0.002621,0.002638,735000000 221 | 04/29/2020,0.002669,0.002679,0.002629,0.002637,926000000 222 | 04/28/2020,0.002681,0.002711,0.002628,0.002667,1260000000 223 | 04/27/2020,0.002666,0.002704,0.002652,0.002681,815000000 224 | 04/24/2020,0.002657,0.002719,0.002652,0.002666,1710000000 225 | 04/23/2020,0.002605,0.00268,0.002594,0.002657,2470000000 226 | 04/22/2020,0.002594,0.002628,0.002555,0.002609,2260000000 227 | 04/21/2020,0.002599,0.002614,0.002559,0.002595,2160000000 228 | 04/20/2020,0.002622,0.00263,0.002573,0.002602,2020000000 229 | 04/17/2020,0.002638,0.002654,0.0026,0.002621,1820000000 230 | 04/16/2020,0.002599,0.002676,0.002592,0.002638,1880000000 231 | 04/15/2020,0.00259,0.002634,0.002575,0.002597,1830000000 232 | 04/14/2020,0.002625,0.002633,0.002541,0.00259,4000000000 233 | 04/13/2020,0.002634,0.002684,0.002569,0.002625,2360000000 234 | 04/09/20,0.002673,0.002682,0.002619,0.002634,1460000000 235 | 04/08/20,0.002648,0.002709,0.002635,0.002673,2200000000 236 | 04/07/20,0.002697,0.002737,0.002624,0.002649,1600000000 237 | 04/06/20,0.002697,0.002733,0.002663,0.002697,1060000000 238 | 04/03/20,0.002713,0.002753,0.002675,0.002697,1660000000 239 | 04/02/20,0.002631,0.002723,0.002616,0.002713,2110000000 240 | 04/01/20,0.00255,0.002655,0.002533,0.00263,1400000000 241 | 03/31/2020,0.002643,0.002648,0.002539,0.002549,1500000000 242 | 03/30/2020,0.0026,0.002655,0.002583,0.002643,1360000000 243 | 03/27/2020,0.002774,0.002799,0.002583,0.002606,2400000000 244 | 03/26/2020,0.002792,0.0028,0.002725,0.002774,1690000000 245 | 03/25/2020,0.002788,0.002808,0.002766,0.002792,1540000000 246 | 03/24/2020,0.002807,0.002815,0.002751,0.002787,1150000000 247 | 03/23/2020,0.002793,0.002839,0.002771,0.002807,1410000000 248 | 03/20/2020,0.002829,0.002857,0.002783,0.002793,2020000000 249 | 03/19/2020,0.00279,0.002868,0.002778,0.002829,2210000000 250 | 03/18/2020,0.002783,0.002811,0.00274,0.00279,1840000000 251 | 03/17/2020,0.002815,0.002817,0.002743,0.002783,2020000000 252 | 03/16/2020,0.002796,0.002835,0.002762,0.002815,2280000000 -------------------------------------------------------------------------------- /Data/apple.csv: -------------------------------------------------------------------------------- 1 | Date,Open,High,Low,Close,Volume 2 | 03/12/2021,"120.40","121.17","119.16","121.03","88,105,047" 3 | 03/11/2021,"122.54","123.21","121.26","121.96","103,026,492" 4 | 03/10/2021,"121.69","122.17","119.45","119.98","111,943,297" 5 | 03/09/2021,"119.03","122.06","118.79","121.09","129,525,797" 6 | 03/08/2021,"120.93","121.00","116.21","116.36","154,376,609" 7 | 03/05/2021,"120.98","121.94","117.57","121.42","153,766,594" 8 | 03/04/2021,"121.75","123.60","118.62","120.13","178,155,016" 9 | 03/03/2021,"124.81","125.71","121.84","122.06","112,966,305" 10 | 03/02/2021,"128.41","128.72","125.01","125.12","102,260,898" 11 | 03/01/2021,"123.75","127.93","122.79","127.79","116,307,906" 12 | 02/26/2021,"122.59","124.85","121.20","121.26","164,560,406" 13 | 02/25/2021,"124.68","126.46","120.54","120.99","148,199,500" 14 | 02/24/2021,"124.94","125.56","122.23","125.35","111,039,906" 15 | 02/23/2021,"123.76","126.71","118.39","125.86","158,272,984" 16 | 02/22/2021,"128.01","129.72","125.60","126.00","103,916,398" 17 | 02/19/2021,"130.24","130.71","128.80","129.87","87,668,828" 18 | 02/18/2021,"129.20","130.00","127.41","129.71","96,856,750" 19 | 02/17/2021,"131.25","132.22","129.47","130.84","98,085,250" 20 | 02/16/2021,"135.49","136.01","132.79","133.19","80,576,320" 21 | 02/12/2021,"134.35","135.53","133.69","135.37","60,145,129" 22 | 02/11/2021,"135.90","136.39","133.77","135.13","64,280,031" 23 | 02/10/2021,"136.48","136.99","134.40","135.39","73,046,562" 24 | 02/09/2021,"136.62","137.88","135.85","136.01","76,774,211" 25 | 02/08/2021,"136.03","136.96","134.92","136.91","71,297,211" 26 | 02/05/2021,"137.35","137.42","135.86","136.76","75,693,828" 27 | 02/04/2021,"136.30","137.40","134.59","137.39","84,183,055" 28 | 02/03/2021,"135.76","135.77","133.61","133.94","89,880,945" 29 | 02/02/2021,"135.73","136.31","134.61","134.99","83,305,367" 30 | 02/01/2021,"133.75","135.38","130.93","134.14","106,239,797" 31 | 01/29/2021,"135.83","136.74","130.21","131.96","177,523,812" 32 | 01/28/2021,"139.52","141.99","136.70","137.09","142,621,109" 33 | 01/27/2021,"143.43","144.30","140.41","142.06","140,843,812" 34 | 01/26/2021,"143.60","144.30","141.37","143.16","98,390,562" 35 | 01/25/2021,"143.07","145.09","136.54","142.92","157,611,703" 36 | 01/22/2021,"136.28","139.85","135.02","139.07","114,459,398" 37 | 01/21/2021,"133.80","139.67","133.59","136.87","120,529,508" 38 | 01/20/2021,"128.66","132.49","128.55","132.03","104,319,508" 39 | 01/19/2021,"127.78","128.71","126.94","127.83","90,757,328" 40 | 01/15/2021,"128.78","130.22","127.00","127.14","111,598,492" 41 | 01/14/2021,"130.80","131.00","128.76","128.91","90,221,758" 42 | 01/13/2021,"128.76","131.45","128.49","130.89","88,636,828" 43 | 01/12/2021,"128.50","129.69","126.86","128.80","91,951,148" 44 | 01/11/2021,"129.19","130.17","128.50","128.98","100,620,898" 45 | 01/08/2021,"132.43","132.63","130.23","132.05","105,158,203" 46 | 01/07/2021,"128.36","131.63","127.86","130.92","109,578,203" 47 | 01/06/2021,"127.72","131.05","126.38","126.60","155,088,000" 48 | 01/05/2021,"128.89","131.74","128.43","131.01","97,664,898" 49 | 01/04/2021,"133.52","133.61","126.76","129.41","143,301,906" 50 | 12/31/2020,"134.08","134.74","131.72","132.69","99,116,594" 51 | 12/30/2020,"135.58","135.99","133.40","133.72","96,452,117" 52 | 12/29/2020,"138.05","138.79","134.34","134.87","121,047,297" 53 | 12/28/2020,"133.99","137.34","133.51","136.69","124,486,203" 54 | 12/24/2020,"131.32","133.46","131.10","131.97","54,930,059" 55 | 12/23/2020,"132.16","132.43","130.78","130.96","88,223,688" 56 | 12/22/2020,"131.61","134.41","129.65","131.88","169,351,812" 57 | 12/21/2020,"125.02","128.31","123.45","128.23","121,251,602" 58 | 12/18/2020,"128.96","129.10","126.12","126.66","192,541,500" 59 | 12/17/2020,"128.90","129.58","128.05","128.70","94,359,805" 60 | 12/16/2020,"127.41","128.37","126.56","127.81","98,208,594" 61 | 12/15/2020,"124.34","127.90","124.13","127.88","157,572,297" 62 | 12/14/2020,"122.60","123.35","121.54","121.78","79,075,992" 63 | 12/11/2020,"122.43","122.76","120.55","122.41","86,939,789" 64 | 12/10/2020,"120.50","123.87","120.15","123.24","81,312,172" 65 | 12/09/2020,"124.53","125.95","121.00","121.78","115,089,203" 66 | 12/08/2020,"124.37","124.98","123.09","124.38","82,225,516" 67 | 12/07/2020,"122.31","124.57","122.25","123.75","86,711,992" 68 | 12/04/2020,"122.60","122.86","121.52","122.25","78,260,414" 69 | 12/03/2020,"123.52","123.78","122.21","122.94","78,967,633" 70 | 12/02/2020,"122.02","123.37","120.89","123.08","89,004,203" 71 | 12/01/2020,"121.01","123.47","120.01","122.72","128,166,797" 72 | 11/30/2020,"116.97","120.97","116.81","119.05","169,410,203" 73 | 11/27/2020,"116.57","117.49","116.22","116.59","46,691,328" 74 | 11/25/2020,"115.55","116.75","115.17","116.03","76,499,234" 75 | 11/24/2020,"113.91","115.85","112.59","115.17","113,874,203" 76 | 11/23/2020,"117.18","117.62","113.75","113.85","127,959,297" 77 | 11/20/2020,"118.64","118.77","117.29","117.34","73,604,289" 78 | 11/19/2020,"117.59","119.06","116.81","118.64","74,112,969" 79 | 11/18/2020,"118.61","119.82","118.00","118.03","76,322,109" 80 | 11/17/2020,"119.55","120.67","118.96","119.39","74,270,969" 81 | 11/16/2020,"118.92","120.99","118.15","120.30","91,183,023" 82 | 11/13/2020,"119.44","119.67","117.87","119.26","81,688,594" 83 | 11/12/2020,"119.62","120.53","118.57","119.21","103,350,703" 84 | 11/11/2020,"117.19","119.63","116.44","119.49","112,295,000" 85 | 11/10/2020,"115.55","117.59","114.13","115.97","138,023,391" 86 | 11/09/2020,"120.50","121.99","116.05","116.32","154,515,297" 87 | 11/06/2020,"118.32","119.20","116.13","118.69","114,457,906" 88 | 11/05/2020,"117.95","119.62","116.87","119.03","126,387,102" 89 | 11/04/2020,"114.14","115.59","112.35","114.95","138,235,500" 90 | 11/03/2020,"109.66","111.49","108.73","110.44","107,624,398" 91 | 11/02/2020,"109.11","110.68","107.32","108.77","122,866,898" 92 | 10/30/2020,"111.06","111.99","107.72","108.86","190,573,500" 93 | 10/29/2020,"112.37","116.93","112.20","115.32","146,129,203" 94 | 10/28/2020,"115.05","115.43","111.10","111.20","143,937,797" 95 | 10/27/2020,"115.49","117.28","114.54","116.60","92,276,766" 96 | 10/26/2020,"114.01","116.55","112.88","115.05","111,850,703" 97 | 10/23/2020,"116.39","116.55","114.28","115.04","82,572,648" 98 | 10/22/2020,"117.45","118.04","114.59","115.75","101,988,000" 99 | 10/21/2020,"116.67","118.71","116.45","116.87","89,945,984" 100 | 10/20/2020,"116.20","118.98","115.63","117.51","124,423,695" 101 | 10/19/2020,"119.96","120.42","115.66","115.98","120,639,297" 102 | 10/16/2020,"121.28","121.55","118.81","119.02","115,393,797" 103 | 10/15/2020,"118.72","121.20","118.15","120.71","112,559,203" 104 | 10/14/2020,"121.00","123.03","119.62","121.19","151,062,297" 105 | 10/13/2020,"125.27","125.39","119.65","121.10","262,330,500" 106 | 10/12/2020,"120.06","125.18","119.28","124.40","240,226,797" 107 | 10/09/2020,"115.28","117.00","114.92","116.97","100,506,898" 108 | 10/08/2020,"116.25","116.40","114.59","114.97","83,477,148" 109 | 10/07/2020,"114.62","115.55","114.13","115.08","96,848,992" 110 | 10/06/2020,"115.70","116.12","112.25","113.16","161,498,203" 111 | 10/05/2020,"113.91","116.65","113.55","116.50","106,243,797" 112 | 10/02/2020,"112.89","115.37","112.22","113.02","144,712,000" 113 | 10/01/2020,"117.64","117.72","115.83","116.79","116,120,398" 114 | 09/30/2020,"113.79","117.26","113.62","115.81","142,675,203" 115 | 09/29/2020,"114.55","115.31","113.57","114.09","100,060,492" 116 | 09/28/2020,"115.01","115.32","112.78","114.96","137,672,406" 117 | 09/25/2020,"108.43","112.44","107.67","112.28","149,981,406" 118 | 09/24/2020,"105.17","110.25","105.00","108.22","167,743,297" 119 | 09/23/2020,"111.62","112.11","106.77","107.12","150,718,703" 120 | 09/22/2020,"112.68","112.86","109.16","111.81","183,055,391" 121 | 09/21/2020,"104.54","110.19","103.10","110.08","195,713,797" 122 | 09/18/2020,"110.40","110.88","106.09","106.84","287,104,906" 123 | 09/17/2020,"109.72","112.20","108.71","110.34","178,011,016" 124 | 09/16/2020,"115.23","116.00","112.04","112.13","155,026,703" 125 | 09/15/2020,"118.33","118.83","113.61","115.54","184,642,000" 126 | 09/14/2020,"114.72","115.93","112.80","115.36","140,150,094" 127 | 09/11/2020,"114.57","115.23","110.00","112.00","180,860,297" 128 | 09/10/2020,"120.36","120.50","112.50","113.49","182,274,406" 129 | 09/09/2020,"117.26","119.14","115.26","117.32","176,940,500" 130 | 09/08/2020,"113.95","118.99","112.68","112.82","231,366,594" 131 | 09/04/2020,"120.07","123.70","110.89","120.96","332,607,188" 132 | 09/03/2020,"126.91","128.84","120.50","120.88","257,599,594" 133 | 09/02/2020,"137.59","137.98","127.00","131.40","200,119,016" 134 | 09/01/2020,"132.76","134.80","130.53","134.18","152,470,094" 135 | 08/31/2020,"127.58","131.00","126.00","129.04","225,702,703" 136 | 08/28/2020,"126.01","126.44","124.58","124.81","187,629,920" 137 | 08/27/2020,"127.14","127.49","123.83","125.01","155,552,408" 138 | 08/26/2020,"126.18","126.99","125.08","126.52","163,022,264" 139 | 08/25/2020,"124.70","125.18","123.05","124.83","211,495,812" 140 | 08/24/2020,"128.70","128.79","123.94","125.86","345,937,752" 141 | 08/21/2020,"119.26","124.87","119.25","124.37","338,054,656" 142 | 08/20/2020,"115.75","118.39","115.73","118.28","126,907,204" 143 | 08/19/2020,"115.98","117.16","115.61","115.71","145,538,000" 144 | 08/18/2020,"114.35","116.00","114.01","115.56","105,633,564" 145 | 08/17/2020,"116.06","116.09","113.96","114.61","119,561,436" 146 | 08/14/2020,"114.83","115.00","113.05","114.91","165,565,204" 147 | 08/13/2020,"114.43","116.04","113.93","115.01","210,082,080" 148 | 08/12/2020,"110.50","113.28","110.30","113.01","165,944,828" 149 | 08/11/2020,"111.97","112.48","109.11","109.38","187,902,376" 150 | 08/10/2020,"112.60","113.78","110.00","112.73","212,403,436" 151 | 08/07/2020,"113.21","113.68","110.29","111.11","198,045,592" 152 | 08/06/2020,"110.41","114.41","109.80","113.90","202,428,920" 153 | 08/05/2020,"109.38","110.39","108.90","110.06","121,991,960" 154 | 08/04/2020,"109.13","110.79","108.39","109.67","172,792,360" 155 | 08/03/2020,"108.20","111.64","107.89","108.94","308,151,408" 156 | 07/31/2020,"102.88","106.42","100.83","106.26","374,295,500" 157 | 07/30/2020,"94.19","96.30","93.77","96.19","158,130,048" 158 | 07/29/2020,"93.75","95.23","93.71","95.04","90,329,244" 159 | 07/28/2020,"94.37","94.55","93.25","93.25","103,625,524" 160 | 07/27/2020,"93.71","94.91","93.48","94.81","121,214,204" 161 | 07/24/2020,"90.99","92.97","89.15","92.62","185,438,876" 162 | 07/23/2020,"97.00","97.08","92.01","92.85","197,004,452" 163 | 07/22/2020,"96.69","97.98","96.60","97.27","89,001,640" 164 | 07/21/2020,"99.17","99.25","96.74","97.00","103,645,844" 165 | 07/20/2020,"96.42","98.50","96.06","98.36","90,317,920" 166 | 07/17/2020,"96.99","97.15","95.84","96.33","92,186,920" 167 | 07/16/2020,"96.56","97.41","95.91","96.52","110,577,680" 168 | 07/15/2020,"98.99","99.25","96.49","97.73","153,197,920" 169 | 07/14/2020,"94.84","97.26","93.88","97.06","170,989,360" 170 | 07/13/2020,"97.27","99.96","95.26","95.48","191,649,156" 171 | 07/10/2020,"95.34","95.98","94.71","95.92","90,257,320" 172 | 07/09/2020,"96.26","96.32","94.67","95.68","125,642,600" 173 | 07/08/2020,"94.18","95.38","94.09","95.34","117,091,884" 174 | 07/07/2020,"93.85","94.66","93.06","93.17","112,424,436" 175 | 07/06/2020,"92.50","93.95","92.47","93.46","118,655,640" 176 | 07/02/2020,"91.96","92.62","90.91","91.03","114,041,476" 177 | 07/01/2020,"91.28","91.84","90.98","91.03","110,737,244" 178 | 06/30/2020,"90.02","91.50","90.00","91.20","140,223,280" 179 | 06/29/2020,"88.31","90.54","87.82","90.45","130,646,080" 180 | 06/26/2020,"91.10","91.33","88.26","88.41","205,256,828" 181 | 06/25/2020,"90.18","91.25","89.39","91.21","137,522,532" 182 | 06/24/2020,"91.25","92.20","89.63","90.02","192,623,392" 183 | 06/23/2020,"91.00","93.10","90.57","91.63","212,155,484" 184 | 06/22/2020,"87.84","89.87","87.79","89.72","135,445,280" 185 | 06/19/2020,"88.66","89.14","86.29","87.43","264,475,812" 186 | 06/18/2020,"87.85","88.36","87.31","87.93","96,820,400" 187 | 06/17/2020,"88.79","88.85","87.77","87.90","114,406,524" 188 | 06/16/2020,"87.87","88.30","86.18","88.02","165,428,720" 189 | 06/15/2020,"83.31","86.42","83.15","85.75","138,808,920" 190 | 06/12/2020,"86.18","86.95","83.56","84.70","200,146,048" 191 | 06/11/2020,"87.33","87.77","83.87","83.98","201,662,436" 192 | 06/10/2020,"86.98","88.69","86.52","88.21","166,651,764" 193 | 06/09/2020,"83.04","86.40","83.00","86.00","147,712,360" 194 | 06/08/2020,"82.56","83.40","81.83","83.37","95,654,524" 195 | 06/05/2020,"80.84","82.94","80.81","82.88","137,250,204" 196 | 06/04/2020,"81.10","81.41","80.20","80.58","87,560,360" 197 | 06/03/2020,"81.17","81.55","80.58","81.28","104,491,204" 198 | 06/02/2020,"80.19","80.86","79.73","80.84","87,642,796" 199 | 06/01/2020,"79.44","80.59","79.30","80.46","81,018,600" 200 | 05/29/2020,"79.81","80.29","79.12","79.49","153,598,108" 201 | 05/28/2020,"79.19","80.86","78.91","79.56","133,796,408" 202 | 05/27/2020,"79.04","79.68","78.27","79.53","112,945,080" 203 | 05/26/2020,"80.88","81.06","79.13","79.18","125,521,796" 204 | 05/22/2020,"78.94","79.81","78.84","79.72","81,803,000" 205 | 05/21/2020,"79.67","80.22","78.97","79.21","102,688,844" 206 | 05/20/2020,"79.17","79.88","79.05","79.81","111,504,884" 207 | 05/19/2020,"78.76","79.63","78.25","78.29","101,729,564" 208 | 05/18/2020,"78.29","79.13","77.58","78.74","135,372,516" 209 | 05/15/2020,"75.09","76.98","75.05","76.93","166,348,360" 210 | 05/14/2020,"76.13","77.45","75.38","77.39","158,929,092" 211 | 05/13/2020,"78.04","78.99","75.80","76.91","200,622,564" 212 | 05/12/2020,"79.46","79.92","77.73","77.85","162,301,048" 213 | 05/11/2020,"77.03","79.26","76.81","78.75","145,946,236" 214 | 05/08/2020,"76.41","77.59","76.07","77.53","134,047,952" 215 | 05/07/2020,"75.81","76.29","75.49","75.94","115,215,040" 216 | 05/06/2020,"75.12","75.81","74.72","75.16","142,333,764" 217 | 05/05/2020,"73.77","75.25","73.62","74.39","147,751,204" 218 | 05/04/2020,"72.29","73.42","71.58","73.29","133,567,952" 219 | 05/01/2020,"71.56","74.75","71.46","72.27","240,616,720" 220 | 04/30/2020,"72.49","73.63","72.09","73.45","183,063,876" 221 | 04/29/2020,"71.18","72.42","70.97","71.93","137,280,796" 222 | 04/28/2020,"71.27","71.46","69.55","69.65","112,004,756" 223 | 04/27/2020,"70.45","71.14","69.99","70.79","117,087,564" 224 | 04/24/2020,"69.30","70.75","69.25","70.74","126,508,720" 225 | 04/23/2020,"68.97","70.44","68.72","68.76","124,814,320" 226 | 04/22/2020,"68.40","69.48","68.05","69.03","117,057,360" 227 | 04/21/2020,"69.07","69.31","66.36","67.09","180,991,548" 228 | 04/20/2020,"69.49","70.42","69.21","69.23","130,015,000" 229 | 04/17/2020,"71.17","71.74","69.22","70.70","215,249,920" 230 | 04/16/2020,"71.85","72.05","70.59","71.67","157,125,156" 231 | 04/15/2020,"70.60","71.58","70.16","71.11","131,154,564" 232 | 04/14/2020,"70.00","72.06","69.51","71.76","194,994,688" 233 | 04/13/2020,"67.08","68.43","66.46","68.31","131,022,920" 234 | 04/09/2020,"67.18","67.52","66.18","67.00","162,116,484" 235 | 04/08/2020,"65.69","66.84","65.31","66.52","168,895,280" 236 | 04/07/2020,"67.70","67.93","64.75","64.86","202,887,328" 237 | 04/06/2020,"62.73","65.78","62.35","65.62","200,337,200" 238 | 04/03/2020,"60.70","61.43","59.74","60.35","129,880,080" 239 | 04/02/2020,"60.09","61.29","59.23","61.23","165,933,952" 240 | 04/01/2020,"61.63","62.18","59.78","60.23","176,218,564" 241 | 03/31/2020,"63.90","65.62","63.00","63.57","197,002,000" 242 | 03/30/2020,"62.69","63.88","62.35","63.70","167,976,452" 243 | 03/27/2020,"63.19","63.97","61.76","61.94","204,216,608" 244 | 03/26/2020,"61.63","64.67","61.59","64.61","252,560,672" 245 | 03/25/2020,"62.69","64.56","61.08","61.38","303,602,064" 246 | 03/24/2020,"59.09","61.92","58.58","61.72","287,531,064" 247 | 03/23/2020,"57.02","57.12","53.15","56.09","336,752,844" 248 | 03/20/2020,"61.80","62.96","57.00","57.31","401,693,188" 249 | 03/19/2020,"61.85","63.21","60.65","61.20","271,857,032" 250 | 03/18/2020,"59.94","62.50","59.28","61.67","300,233,624" 251 | 03/17/2020,"61.88","64.40","59.60","63.22","324,055,876" 252 | 03/16/2020,"60.49","64.77","60.00","60.55","322,423,500" 253 | -------------------------------------------------------------------------------- /Doge_Predict_A2C.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "kernelspec": { 6 | "display_name": "Python 3", 7 | "language": "python", 8 | "name": "python3" 9 | }, 10 | "language_info": { 11 | "codemirror_mode": { 12 | "name": "ipython", 13 | "version": 3 14 | }, 15 | "file_extension": ".py", 16 | "mimetype": "text/x-python", 17 | "name": "python", 18 | "nbconvert_exporter": "python", 19 | "pygments_lexer": "ipython3", 20 | "version": "3.7.3" 21 | }, 22 | "colab": { 23 | "name": "Doge Predict A2C.ipynb", 24 | "provenance": [], 25 | "collapsed_sections": [], 26 | "include_colab_link": true 27 | } 28 | }, 29 | "cells": [ 30 | { 31 | "cell_type": "markdown", 32 | "metadata": { 33 | "id": "view-in-github", 34 | "colab_type": "text" 35 | }, 36 | "source": [ 37 | "\"Open" 38 | ] 39 | }, 40 | { 41 | "cell_type": "markdown", 42 | "metadata": { 43 | "id": "iHtx87S1IoIp" 44 | }, 45 | "source": [ 46 | "#Dependencies" 47 | ] 48 | }, 49 | { 50 | "cell_type": "code", 51 | "metadata": { 52 | "collapsed": true, 53 | "id": "cEMIqiDfIoIq" 54 | }, 55 | "source": [ 56 | "!pip install tensorflow-gpu==1.15.0 tensorflow==1.15.0 stable-baselines gym-anytrading gym" 57 | ], 58 | "execution_count": null, 59 | "outputs": [] 60 | }, 61 | { 62 | "cell_type": "code", 63 | "metadata": { 64 | "id": "-Msb95l5IoIr" 65 | }, 66 | "source": [ 67 | "\n", 68 | "import gym\n", 69 | "import gym_anytrading\n", 70 | "\n", 71 | "\n", 72 | "from stable_baselines.common.vec_env import DummyVecEnv\n", 73 | "from stable_baselines import A2C\n", 74 | "\n", 75 | "\n", 76 | "import numpy as np\n", 77 | "import pandas as pd\n", 78 | "from matplotlib import pyplot as plt" 79 | ], 80 | "execution_count": null, 81 | "outputs": [] 82 | }, 83 | { 84 | "cell_type": "markdown", 85 | "metadata": { 86 | "id": "nz6WJkO2IoIs" 87 | }, 88 | "source": [ 89 | "#Importing Data" 90 | ] 91 | }, 92 | { 93 | "cell_type": "code", 94 | "metadata": { 95 | "id": "apKdZZjHIoIs" 96 | }, 97 | "source": [ 98 | "df = pd.read_csv('doge.csv')" 99 | ], 100 | "execution_count": 13, 101 | "outputs": [] 102 | }, 103 | { 104 | "cell_type": "code", 105 | "metadata": { 106 | "colab": { 107 | "base_uri": "https://localhost:8080/", 108 | "height": 204 109 | }, 110 | "id": "XLrDZ20xIoIs", 111 | "outputId": "23ae64ee-3907-469c-a411-18fb78486bfa" 112 | }, 113 | "source": [ 114 | "df.head()" 115 | ], 116 | "execution_count": 14, 117 | "outputs": [ 118 | { 119 | "output_type": "execute_result", 120 | "data": { 121 | "text/html": [ 122 | "
\n", 123 | "\n", 136 | "\n", 137 | " \n", 138 | " \n", 139 | " \n", 140 | " \n", 141 | " \n", 142 | " \n", 143 | " \n", 144 | " \n", 145 | " \n", 146 | " \n", 147 | " \n", 148 | " \n", 149 | " \n", 150 | " \n", 151 | " \n", 152 | " \n", 153 | " \n", 154 | " \n", 155 | " \n", 156 | " \n", 157 | " \n", 158 | " \n", 159 | " \n", 160 | " \n", 161 | " \n", 162 | " \n", 163 | " \n", 164 | " \n", 165 | " \n", 166 | " \n", 167 | " \n", 168 | " \n", 169 | " \n", 170 | " \n", 171 | " \n", 172 | " \n", 173 | " \n", 174 | " \n", 175 | " \n", 176 | " \n", 177 | " \n", 178 | " \n", 179 | " \n", 180 | " \n", 181 | " \n", 182 | " \n", 183 | " \n", 184 | " \n", 185 | " \n", 186 | " \n", 187 | " \n", 188 | " \n", 189 | " \n", 190 | " \n", 191 | " \n", 192 | " \n", 193 | " \n", 194 | " \n", 195 | "
DateOpenHighLowCloseVolume
003/12/210.3304070.4326180.2970740.39774113850000000
103/11/210.4747190.4778660.2175280.33035319280000000
203/10/210.4864440.5125290.4689410.4747144750000000
303/09/210.5130620.5148210.4573310.4863666840000000
403/08/210.5077960.5472050.4496350.5130238260000000
\n", 196 | "
" 197 | ], 198 | "text/plain": [ 199 | " Date Open High Low Close Volume\n", 200 | "0 03/12/21 0.330407 0.432618 0.297074 0.397741 13850000000\n", 201 | "1 03/11/21 0.474719 0.477866 0.217528 0.330353 19280000000\n", 202 | "2 03/10/21 0.486444 0.512529 0.468941 0.474714 4750000000\n", 203 | "3 03/09/21 0.513062 0.514821 0.457331 0.486366 6840000000\n", 204 | "4 03/08/21 0.507796 0.547205 0.449635 0.513023 8260000000" 205 | ] 206 | }, 207 | "metadata": { 208 | "tags": [] 209 | }, 210 | "execution_count": 14 211 | } 212 | ] 213 | }, 214 | { 215 | "cell_type": "code", 216 | "metadata": { 217 | "colab": { 218 | "base_uri": "https://localhost:8080/" 219 | }, 220 | "id": "CXwVb0GlIoIt", 221 | "outputId": "98609b25-a94c-4163-fd1d-e2e2d71bae14" 222 | }, 223 | "source": [ 224 | "df['Date'] = pd.to_datetime(df['Date'])\n", 225 | "df.dtypes" 226 | ], 227 | "execution_count": 15, 228 | "outputs": [ 229 | { 230 | "output_type": "execute_result", 231 | "data": { 232 | "text/plain": [ 233 | "Date datetime64[ns]\n", 234 | "Open float64\n", 235 | "High float64\n", 236 | "Low float64\n", 237 | "Close float64\n", 238 | "Volume int64\n", 239 | "dtype: object" 240 | ] 241 | }, 242 | "metadata": { 243 | "tags": [] 244 | }, 245 | "execution_count": 15 246 | } 247 | ] 248 | }, 249 | { 250 | "cell_type": "code", 251 | "metadata": { 252 | "colab": { 253 | "base_uri": "https://localhost:8080/", 254 | "height": 235 255 | }, 256 | "id": "UkvrzgPZIoIt", 257 | "outputId": "696c24bd-ad06-4a50-e955-3dbd86d1cbb8" 258 | }, 259 | "source": [ 260 | "df.set_index('Date', inplace=True)\n", 261 | "df.head()" 262 | ], 263 | "execution_count": 16, 264 | "outputs": [ 265 | { 266 | "output_type": "execute_result", 267 | "data": { 268 | "text/html": [ 269 | "
\n", 270 | "\n", 283 | "\n", 284 | " \n", 285 | " \n", 286 | " \n", 287 | " \n", 288 | " \n", 289 | " \n", 290 | " \n", 291 | " \n", 292 | " \n", 293 | " \n", 294 | " \n", 295 | " \n", 296 | " \n", 297 | " \n", 298 | " \n", 299 | " \n", 300 | " \n", 301 | " \n", 302 | " \n", 303 | " \n", 304 | " \n", 305 | " \n", 306 | " \n", 307 | " \n", 308 | " \n", 309 | " \n", 310 | " \n", 311 | " \n", 312 | " \n", 313 | " \n", 314 | " \n", 315 | " \n", 316 | " \n", 317 | " \n", 318 | " \n", 319 | " \n", 320 | " \n", 321 | " \n", 322 | " \n", 323 | " \n", 324 | " \n", 325 | " \n", 326 | " \n", 327 | " \n", 328 | " \n", 329 | " \n", 330 | " \n", 331 | " \n", 332 | " \n", 333 | " \n", 334 | " \n", 335 | " \n", 336 | " \n", 337 | " \n", 338 | " \n", 339 | " \n", 340 | " \n", 341 | " \n", 342 | " \n", 343 | " \n", 344 | "
OpenHighLowCloseVolume
Date
2021-03-120.3304070.4326180.2970740.39774113850000000
2021-03-110.4747190.4778660.2175280.33035319280000000
2021-03-100.4864440.5125290.4689410.4747144750000000
2021-03-090.5130620.5148210.4573310.4863666840000000
2021-03-080.5077960.5472050.4496350.5130238260000000
\n", 345 | "
" 346 | ], 347 | "text/plain": [ 348 | " Open High Low Close Volume\n", 349 | "Date \n", 350 | "2021-03-12 0.330407 0.432618 0.297074 0.397741 13850000000\n", 351 | "2021-03-11 0.474719 0.477866 0.217528 0.330353 19280000000\n", 352 | "2021-03-10 0.486444 0.512529 0.468941 0.474714 4750000000\n", 353 | "2021-03-09 0.513062 0.514821 0.457331 0.486366 6840000000\n", 354 | "2021-03-08 0.507796 0.547205 0.449635 0.513023 8260000000" 355 | ] 356 | }, 357 | "metadata": { 358 | "tags": [] 359 | }, 360 | "execution_count": 16 361 | } 362 | ] 363 | }, 364 | { 365 | "cell_type": "code", 366 | "metadata": { 367 | "id": "ERLxZXL9IoIu" 368 | }, 369 | "source": [ 370 | "env = gym.make('stocks-v0', df=df, frame_bound=(5,200), window_size=5)" 371 | ], 372 | "execution_count": 17, 373 | "outputs": [] 374 | }, 375 | { 376 | "cell_type": "code", 377 | "metadata": { 378 | "scrolled": true, 379 | "colab": { 380 | "base_uri": "https://localhost:8080/" 381 | }, 382 | "id": "YgYtXvcnIoIu", 383 | "outputId": "53266e53-6911-4b7e-bc3d-28a72303aa19" 384 | }, 385 | "source": [ 386 | "env.signal_features" 387 | ], 388 | "execution_count": 18, 389 | "outputs": [ 390 | { 391 | "output_type": "execute_result", 392 | "data": { 393 | "text/plain": [ 394 | "array([[ 3.97741e-01, 0.00000e+00],\n", 395 | " [ 3.30353e-01, -6.73880e-02],\n", 396 | " [ 4.74714e-01, 1.44361e-01],\n", 397 | " [ 4.86366e-01, 1.16520e-02],\n", 398 | " [ 5.13023e-01, 2.66570e-02],\n", 399 | " [ 5.07448e-01, -5.57500e-03],\n", 400 | " [ 5.59581e-01, 5.21330e-02],\n", 401 | " [ 4.86910e-01, -7.26710e-02],\n", 402 | " [ 3.89159e-01, -9.77510e-02],\n", 403 | " [ 4.93231e-01, 1.04072e-01],\n", 404 | " [ 4.49977e-01, -4.32540e-02],\n", 405 | " [ 5.68682e-01, 1.18705e-01],\n", 406 | " [ 6.34394e-01, 6.57120e-02],\n", 407 | " [ 6.86880e-01, 5.24860e-02],\n", 408 | " [ 5.79839e-01, -1.07041e-01],\n", 409 | " [ 6.55355e-01, 7.55160e-02],\n", 410 | " [ 5.59005e-01, -9.63500e-02],\n", 411 | " [ 4.38244e-01, -1.20761e-01],\n", 412 | " [ 3.72404e-01, -6.58400e-02],\n", 413 | " [ 3.90642e-01, 1.82380e-02],\n", 414 | " [ 3.36635e-01, -5.40070e-02],\n", 415 | " [ 3.03240e-01, -3.33950e-02],\n", 416 | " [ 3.23582e-01, 2.03420e-02],\n", 417 | " [ 2.70668e-01, -5.29140e-02],\n", 418 | " [ 2.69805e-01, -8.63000e-04],\n", 419 | " [ 2.51103e-01, -1.87020e-02],\n", 420 | " [ 2.70017e-01, 1.89140e-02],\n", 421 | " [ 2.48731e-01, -2.12860e-02],\n", 422 | " [ 2.60810e-01, 1.20790e-02],\n", 423 | " [ 3.05633e-01, 4.48230e-02],\n", 424 | " [ 3.17696e-01, 1.20630e-02],\n", 425 | " [ 4.07335e-01, 8.96390e-02],\n", 426 | " [ 3.22037e-01, -8.52980e-02],\n", 427 | " [ 2.81909e-01, -4.01280e-02],\n", 428 | " [ 3.65551e-01, 8.36420e-02],\n", 429 | " [ 1.82784e-01, -1.82767e-01],\n", 430 | " [ 1.21349e-01, -6.14350e-02],\n", 431 | " [ 9.37630e-02, -2.75860e-02],\n", 432 | " [ 7.07190e-02, -2.30440e-02],\n", 433 | " [ 7.41500e-02, 3.43100e-03],\n", 434 | " [ 6.36880e-02, -1.04620e-02],\n", 435 | " [ 6.15820e-02, -2.10600e-03],\n", 436 | " [ 6.17570e-02, 1.75000e-04],\n", 437 | " [ 5.87280e-02, -3.02900e-03],\n", 438 | " [ 6.42830e-02, 5.55500e-03],\n", 439 | " [ 5.99480e-02, -4.33500e-03],\n", 440 | " [ 5.74010e-02, -2.54700e-03],\n", 441 | " [ 5.55540e-02, -1.84700e-03],\n", 442 | " [ 5.75700e-02, 2.01600e-03],\n", 443 | " [ 6.21130e-02, 4.54300e-03],\n", 444 | " [ 5.37440e-02, -8.36900e-03],\n", 445 | " [ 5.40270e-02, 2.83000e-04],\n", 446 | " [ 5.41020e-02, 7.50000e-05],\n", 447 | " [ 5.36370e-02, -4.65000e-04],\n", 448 | " [ 5.44260e-02, 7.89000e-04],\n", 449 | " [ 5.39730e-02, -4.53000e-04],\n", 450 | " [ 5.12630e-02, -2.71000e-03],\n", 451 | " [ 5.15100e-02, 2.47000e-04],\n", 452 | " [ 5.34370e-02, 1.92700e-03],\n", 453 | " [ 5.49290e-02, 1.49200e-03],\n", 454 | " [ 5.74710e-02, 2.54200e-03],\n", 455 | " [ 5.88270e-02, 1.35600e-03],\n", 456 | " [ 5.82700e-02, -5.57000e-04],\n", 457 | " [ 5.72940e-02, -9.76000e-04],\n", 458 | " [ 5.78800e-02, 5.86000e-04],\n", 459 | " [ 5.86110e-02, 7.31000e-04],\n", 460 | " [ 5.69650e-02, -1.64600e-03],\n", 461 | " [ 5.84310e-02, 1.46600e-03],\n", 462 | " [ 6.26940e-02, 4.26300e-03],\n", 463 | " [ 5.52610e-02, -7.43300e-03],\n", 464 | " [ 5.58930e-02, 6.32000e-04],\n", 465 | " [ 5.59000e-02, 7.00000e-06],\n", 466 | " [ 5.79780e-02, 2.07800e-03],\n", 467 | " [ 6.28480e-02, 4.87000e-03],\n", 468 | " [ 5.18810e-02, -1.09670e-02],\n", 469 | " [ 5.09350e-02, -9.46000e-04],\n", 470 | " [ 4.95840e-02, -1.35100e-03],\n", 471 | " [ 4.99270e-02, 3.43000e-04],\n", 472 | " [ 5.04740e-02, 5.47000e-04],\n", 473 | " [ 5.02790e-02, -1.95000e-04],\n", 474 | " [ 5.05760e-02, 2.97000e-04],\n", 475 | " [ 4.81290e-02, -2.44700e-03],\n", 476 | " [ 5.00760e-02, 1.94700e-03],\n", 477 | " [ 5.04630e-02, 3.87000e-04],\n", 478 | " [ 5.00450e-02, -4.18000e-04],\n", 479 | " [ 5.66530e-02, 6.60800e-03],\n", 480 | " [ 4.76730e-02, -8.98000e-03],\n", 481 | " [ 5.35300e-02, 5.85700e-03],\n", 482 | " [ 5.58810e-02, 2.35100e-03],\n", 483 | " [ 5.41350e-02, -1.74600e-03],\n", 484 | " [ 5.50360e-02, 9.01000e-04],\n", 485 | " [ 5.91340e-02, 4.09800e-03],\n", 486 | " [ 4.94670e-02, -9.66700e-03],\n", 487 | " [ 5.35130e-02, 4.04600e-03],\n", 488 | " [ 5.64420e-02, 2.92900e-03],\n", 489 | " [ 6.26390e-02, 6.19700e-03],\n", 490 | " [ 6.62490e-02, 3.61000e-03],\n", 491 | " [ 6.97910e-02, 3.54200e-03],\n", 492 | " [ 6.96110e-02, -1.80000e-04],\n", 493 | " [ 7.25840e-02, 2.97300e-03],\n", 494 | " [ 7.00120e-02, -2.57200e-03],\n", 495 | " [ 7.87930e-02, 8.78100e-03],\n", 496 | " [ 7.85080e-02, -2.85000e-04],\n", 497 | " [ 5.74650e-02, -2.10430e-02],\n", 498 | " [ 4.67830e-02, -1.06820e-02],\n", 499 | " [ 5.29440e-02, 6.16100e-03],\n", 500 | " [ 3.73450e-02, -1.55990e-02],\n", 501 | " [ 3.12960e-02, -6.04900e-03],\n", 502 | " [ 3.47050e-02, 3.40900e-03],\n", 503 | " [ 3.68410e-02, 2.13600e-03],\n", 504 | " [ 2.81970e-02, -8.64400e-03],\n", 505 | " [ 4.65970e-02, 1.84000e-02],\n", 506 | " [ 3.62650e-02, -1.03320e-02],\n", 507 | " [ 7.44100e-03, -2.88240e-02],\n", 508 | " [ 8.24000e-03, 7.99000e-04],\n", 509 | " [ 8.35300e-03, 1.13000e-04],\n", 510 | " [ 8.71400e-03, 3.61000e-04],\n", 511 | " [ 8.57100e-03, -1.43000e-04],\n", 512 | " [ 8.51600e-03, -5.50000e-05],\n", 513 | " [ 8.17200e-03, -3.44000e-04],\n", 514 | " [ 9.05500e-03, 8.83000e-04],\n", 515 | " [ 9.05300e-03, -2.00000e-06],\n", 516 | " [ 9.17200e-03, 1.19000e-04],\n", 517 | " [ 9.09400e-03, -7.80000e-05],\n", 518 | " [ 9.23500e-03, 1.41000e-04],\n", 519 | " [ 9.37300e-03, 1.38000e-04],\n", 520 | " [ 9.40000e-03, 2.70000e-05],\n", 521 | " [ 8.66900e-03, -7.31000e-04],\n", 522 | " [ 8.06600e-03, -6.03000e-04],\n", 523 | " [ 8.82800e-03, 7.62000e-04],\n", 524 | " [ 9.83100e-03, 1.00300e-03],\n", 525 | " [ 1.01580e-02, 3.27000e-04],\n", 526 | " [ 9.75300e-03, -4.05000e-04],\n", 527 | " [ 9.72400e-03, -2.90000e-05],\n", 528 | " [ 1.04430e-02, 7.19000e-04],\n", 529 | " [ 9.95800e-03, -4.85000e-04],\n", 530 | " [ 9.78000e-03, -1.78000e-04],\n", 531 | " [ 9.85000e-03, 7.00000e-05],\n", 532 | " [ 1.04890e-02, 6.39000e-04],\n", 533 | " [ 5.66100e-03, -4.82800e-03],\n", 534 | " [ 4.66600e-03, -9.95000e-04],\n", 535 | " [ 4.62700e-03, -3.90000e-05],\n", 536 | " [ 4.48800e-03, -1.39000e-04],\n", 537 | " [ 4.59400e-03, 1.06000e-04],\n", 538 | " [ 4.54800e-03, -4.60000e-05],\n", 539 | " [ 4.50800e-03, -4.00000e-05],\n", 540 | " [ 4.56300e-03, 5.50000e-05],\n", 541 | " [ 4.57300e-03, 1.00000e-05],\n", 542 | " [ 3.76700e-03, -8.06000e-04],\n", 543 | " [ 4.51400e-03, 7.47000e-04],\n", 544 | " [ 4.77300e-03, 2.59000e-04],\n", 545 | " [ 4.64100e-03, -1.32000e-04],\n", 546 | " [ 3.92500e-03, -7.16000e-04],\n", 547 | " [ 3.86300e-03, -6.20000e-05],\n", 548 | " [ 3.72300e-03, -1.40000e-04],\n", 549 | " [ 3.42300e-03, -3.00000e-04],\n", 550 | " [ 3.20400e-03, -2.19000e-04],\n", 551 | " [ 3.22400e-03, 2.00000e-05],\n", 552 | " [ 3.25900e-03, 3.50000e-05],\n", 553 | " [ 3.16400e-03, -9.50000e-05],\n", 554 | " [ 3.07500e-03, -8.90000e-05],\n", 555 | " [ 3.10900e-03, 3.40000e-05],\n", 556 | " [ 3.15800e-03, 4.90000e-05],\n", 557 | " [ 3.17600e-03, 1.80000e-05],\n", 558 | " [ 3.33500e-03, 1.59000e-04],\n", 559 | " [ 3.38800e-03, 5.30000e-05],\n", 560 | " [ 3.39100e-03, 3.00000e-06],\n", 561 | " [ 3.28200e-03, -1.09000e-04],\n", 562 | " [ 3.43300e-03, 1.51000e-04],\n", 563 | " [ 3.36900e-03, -6.40000e-05],\n", 564 | " [ 3.32000e-03, -4.90000e-05],\n", 565 | " [ 3.55100e-03, 2.31000e-04],\n", 566 | " [ 3.44000e-03, -1.11000e-04],\n", 567 | " [ 3.39200e-03, -4.80000e-05],\n", 568 | " [ 3.27000e-03, -1.22000e-04],\n", 569 | " [ 3.24500e-03, -2.50000e-05],\n", 570 | " [ 3.71600e-03, 4.71000e-04],\n", 571 | " [ 4.24000e-03, 5.24000e-04],\n", 572 | " [ 3.68400e-03, -5.56000e-04],\n", 573 | " [ 3.34000e-03, -3.44000e-04],\n", 574 | " [ 3.51000e-03, 1.70000e-04],\n", 575 | " [ 2.98600e-03, -5.24000e-04],\n", 576 | " [ 2.90500e-03, -8.10000e-05],\n", 577 | " [ 2.90400e-03, -1.00000e-06],\n", 578 | " [ 2.93500e-03, 3.10000e-05],\n", 579 | " [ 2.87900e-03, -5.60000e-05],\n", 580 | " [ 2.77300e-03, -1.06000e-04],\n", 581 | " [ 2.76900e-03, -4.00000e-06],\n", 582 | " [ 2.81100e-03, 4.20000e-05],\n", 583 | " [ 2.77300e-03, -3.80000e-05],\n", 584 | " [ 2.75700e-03, -1.60000e-05],\n", 585 | " [ 2.76000e-03, 3.00000e-06],\n", 586 | " [ 2.67300e-03, -8.70000e-05],\n", 587 | " [ 2.70700e-03, 3.40000e-05],\n", 588 | " [ 2.67000e-03, -3.70000e-05],\n", 589 | " [ 2.75700e-03, 8.70000e-05],\n", 590 | " [ 2.63900e-03, -1.18000e-04],\n", 591 | " [ 2.54600e-03, -9.30000e-05],\n", 592 | " [ 2.51700e-03, -2.90000e-05],\n", 593 | " [ 2.51400e-03, -3.00000e-06]])" 594 | ] 595 | }, 596 | "metadata": { 597 | "tags": [] 598 | }, 599 | "execution_count": 18 600 | } 601 | ] 602 | }, 603 | { 604 | "cell_type": "markdown", 605 | "metadata": { 606 | "id": "VTL3enuCIoIu" 607 | }, 608 | "source": [ 609 | "#Environment" 610 | ] 611 | }, 612 | { 613 | "cell_type": "code", 614 | "metadata": { 615 | "colab": { 616 | "base_uri": "https://localhost:8080/" 617 | }, 618 | "id": "UdlxksziIoIu", 619 | "outputId": "c8b94c27-249b-4af5-bd74-12c17fdff047" 620 | }, 621 | "source": [ 622 | "env.action_space" 623 | ], 624 | "execution_count": 19, 625 | "outputs": [ 626 | { 627 | "output_type": "execute_result", 628 | "data": { 629 | "text/plain": [ 630 | "Discrete(2)" 631 | ] 632 | }, 633 | "metadata": { 634 | "tags": [] 635 | }, 636 | "execution_count": 19 637 | } 638 | ] 639 | }, 640 | { 641 | "cell_type": "code", 642 | "metadata": { 643 | "colab": { 644 | "base_uri": "https://localhost:8080/", 645 | "height": 434 646 | }, 647 | "id": "zu8H7ne-IoIv", 648 | "outputId": "a178c533-f2d4-419f-e626-5602123e97e8" 649 | }, 650 | "source": [ 651 | "state = env.reset()\n", 652 | "while True: \n", 653 | " action = env.action_space.sample()\n", 654 | " n_state, reward, done, info = env.step(action)\n", 655 | " if done: \n", 656 | " print(\"info\", info)\n", 657 | " break\n", 658 | " \n", 659 | "plt.figure(figsize=(15,6))\n", 660 | "plt.cla()\n", 661 | "env.render_all()\n", 662 | "plt.show()" 663 | ], 664 | "execution_count": 20, 665 | "outputs": [ 666 | { 667 | "output_type": "stream", 668 | "text": [ 669 | "info {'total_reward': -0.43189899999999987, 'total_profit': 0.06970873211095607, 'position': 1}\n" 670 | ], 671 | "name": "stdout" 672 | }, 673 | { 674 | "output_type": "display_data", 675 | "data": { 676 | "image/png": "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\n", 677 | "text/plain": [ 678 | "
" 679 | ] 680 | }, 681 | "metadata": { 682 | "tags": [], 683 | "needs_background": "light" 684 | } 685 | } 686 | ] 687 | }, 688 | { 689 | "cell_type": "markdown", 690 | "metadata": { 691 | "id": "yBUd4U-hIoIv" 692 | }, 693 | "source": [ 694 | "#Training" 695 | ] 696 | }, 697 | { 698 | "cell_type": "code", 699 | "metadata": { 700 | "id": "csMcZeMLIoIv" 701 | }, 702 | "source": [ 703 | "env_maker = lambda: gym.make('stocks-v0', df=df, frame_bound=(5,100), window_size=5)\n", 704 | "env = DummyVecEnv([env_maker])" 705 | ], 706 | "execution_count": 21, 707 | "outputs": [] 708 | }, 709 | { 710 | "cell_type": "code", 711 | "metadata": { 712 | "scrolled": true, 713 | "id": "gGAAv8WUIoIv" 714 | }, 715 | "source": [ 716 | "model = A2C('MlpLstmPolicy', env, verbose=1) \n", 717 | "model.learn(total_timesteps=1000000)" 718 | ], 719 | "execution_count": null, 720 | "outputs": [] 721 | }, 722 | { 723 | "cell_type": "markdown", 724 | "metadata": { 725 | "id": "2vF_IapKIoIw" 726 | }, 727 | "source": [ 728 | "Evaluation" 729 | ] 730 | }, 731 | { 732 | "cell_type": "code", 733 | "metadata": { 734 | "colab": { 735 | "base_uri": "https://localhost:8080/" 736 | }, 737 | "id": "ab1uoiw7IoIw", 738 | "outputId": "eb87b44b-a967-468a-ddad-9bafca77a4d1" 739 | }, 740 | "source": [ 741 | "env = gym.make('stocks-v0', df=df, frame_bound=(200,250), window_size=5)\n", 742 | "obs = env.reset()\n", 743 | "while True: \n", 744 | " obs = obs[np.newaxis, ...]\n", 745 | " action, _states = model.predict(obs)\n", 746 | " obs, rewards, done, info = env.step(action)\n", 747 | " if done:\n", 748 | " print(\"info\", info)\n", 749 | " break" 750 | ], 751 | "execution_count": 25, 752 | "outputs": [ 753 | { 754 | "output_type": "stream", 755 | "text": [ 756 | "info {'total_reward': 0.0, 'total_profit': 1.0675210864485982, 'position': 1}\n" 757 | ], 758 | "name": "stdout" 759 | } 760 | ] 761 | }, 762 | { 763 | "cell_type": "code", 764 | "metadata": { 765 | "colab": { 766 | "base_uri": "https://localhost:8080/", 767 | "height": 417 768 | }, 769 | "id": "9pVdz6W9IoIw", 770 | "outputId": "5bd98e9c-d071-40b9-bdcf-a4257f811518" 771 | }, 772 | "source": [ 773 | "plt.figure(figsize=(15,6))\n", 774 | "plt.cla()\n", 775 | "env.render_all()\n", 776 | "plt.show()" 777 | ], 778 | "execution_count": 26, 779 | "outputs": [ 780 | { 781 | "output_type": "display_data", 782 | "data": { 783 | "image/png": "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\n", 784 | "text/plain": [ 785 | "
" 786 | ] 787 | }, 788 | "metadata": { 789 | "tags": [], 790 | "needs_background": "light" 791 | } 792 | } 793 | ] 794 | }, 795 | { 796 | "cell_type": "code", 797 | "metadata": { 798 | "id": "Dwd3lJh8IoIw" 799 | }, 800 | "source": [ 801 | "" 802 | ], 803 | "execution_count": null, 804 | "outputs": [] 805 | } 806 | ] 807 | } --------------------------------------------------------------------------------