├── 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 | 
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 | 
18 |
19 | 
20 |
21 | 
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 | 
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 | 
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 | 
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 | "
"
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 | " Date | \n",
141 | " Open | \n",
142 | " High | \n",
143 | " Low | \n",
144 | " Close | \n",
145 | " Volume | \n",
146 | "
\n",
147 | " \n",
148 | " \n",
149 | " \n",
150 | " | 0 | \n",
151 | " 03/12/21 | \n",
152 | " 0.330407 | \n",
153 | " 0.432618 | \n",
154 | " 0.297074 | \n",
155 | " 0.397741 | \n",
156 | " 13850000000 | \n",
157 | "
\n",
158 | " \n",
159 | " | 1 | \n",
160 | " 03/11/21 | \n",
161 | " 0.474719 | \n",
162 | " 0.477866 | \n",
163 | " 0.217528 | \n",
164 | " 0.330353 | \n",
165 | " 19280000000 | \n",
166 | "
\n",
167 | " \n",
168 | " | 2 | \n",
169 | " 03/10/21 | \n",
170 | " 0.486444 | \n",
171 | " 0.512529 | \n",
172 | " 0.468941 | \n",
173 | " 0.474714 | \n",
174 | " 4750000000 | \n",
175 | "
\n",
176 | " \n",
177 | " | 3 | \n",
178 | " 03/09/21 | \n",
179 | " 0.513062 | \n",
180 | " 0.514821 | \n",
181 | " 0.457331 | \n",
182 | " 0.486366 | \n",
183 | " 6840000000 | \n",
184 | "
\n",
185 | " \n",
186 | " | 4 | \n",
187 | " 03/08/21 | \n",
188 | " 0.507796 | \n",
189 | " 0.547205 | \n",
190 | " 0.449635 | \n",
191 | " 0.513023 | \n",
192 | " 8260000000 | \n",
193 | "
\n",
194 | " \n",
195 | "
\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 | " Open | \n",
288 | " High | \n",
289 | " Low | \n",
290 | " Close | \n",
291 | " Volume | \n",
292 | "
\n",
293 | " \n",
294 | " | Date | \n",
295 | " | \n",
296 | " | \n",
297 | " | \n",
298 | " | \n",
299 | " | \n",
300 | "
\n",
301 | " \n",
302 | " \n",
303 | " \n",
304 | " | 2021-03-12 | \n",
305 | " 0.330407 | \n",
306 | " 0.432618 | \n",
307 | " 0.297074 | \n",
308 | " 0.397741 | \n",
309 | " 13850000000 | \n",
310 | "
\n",
311 | " \n",
312 | " | 2021-03-11 | \n",
313 | " 0.474719 | \n",
314 | " 0.477866 | \n",
315 | " 0.217528 | \n",
316 | " 0.330353 | \n",
317 | " 19280000000 | \n",
318 | "
\n",
319 | " \n",
320 | " | 2021-03-10 | \n",
321 | " 0.486444 | \n",
322 | " 0.512529 | \n",
323 | " 0.468941 | \n",
324 | " 0.474714 | \n",
325 | " 4750000000 | \n",
326 | "
\n",
327 | " \n",
328 | " | 2021-03-09 | \n",
329 | " 0.513062 | \n",
330 | " 0.514821 | \n",
331 | " 0.457331 | \n",
332 | " 0.486366 | \n",
333 | " 6840000000 | \n",
334 | "
\n",
335 | " \n",
336 | " | 2021-03-08 | \n",
337 | " 0.507796 | \n",
338 | " 0.547205 | \n",
339 | " 0.449635 | \n",
340 | " 0.513023 | \n",
341 | " 8260000000 | \n",
342 | "
\n",
343 | " \n",
344 | "
\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 | }
--------------------------------------------------------------------------------