├── .gitignore
├── Custom Signals.ipynb
└── data
└── gmedata.csv
/.gitignore:
--------------------------------------------------------------------------------
1 | Reinforcement Learning GME Trading Tutorial - Custom Signals.ipynb
2 | data/bitcoindata.csv
3 | logs
4 | train
--------------------------------------------------------------------------------
/Custom Signals.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "# 0. Install and Import dependencies"
8 | ]
9 | },
10 | {
11 | "cell_type": "code",
12 | "execution_count": null,
13 | "metadata": {},
14 | "outputs": [],
15 | "source": [
16 | "!pip install tensorflow-gpu==1.15.0 tensorflow==1.15.0 stable-baselines gym-anytrading gym"
17 | ]
18 | },
19 | {
20 | "cell_type": "code",
21 | "execution_count": 1,
22 | "metadata": {},
23 | "outputs": [
24 | {
25 | "name": "stdout",
26 | "output_type": "stream",
27 | "text": [
28 | "WARNING:tensorflow:\n",
29 | "The TensorFlow contrib module will not be included in TensorFlow 2.0.\n",
30 | "For more information, please see:\n",
31 | " * https://github.com/tensorflow/community/blob/master/rfcs/20180907-contrib-sunset.md\n",
32 | " * https://github.com/tensorflow/addons\n",
33 | " * https://github.com/tensorflow/io (for I/O related ops)\n",
34 | "If you depend on functionality not listed there, please file an issue.\n",
35 | "\n"
36 | ]
37 | }
38 | ],
39 | "source": [
40 | "# Gym stuff\n",
41 | "import gym\n",
42 | "import gym_anytrading\n",
43 | "\n",
44 | "# Stable baselines - rl stuff\n",
45 | "from stable_baselines.common.vec_env import DummyVecEnv\n",
46 | "from stable_baselines import A2C\n",
47 | "\n",
48 | "# Processing libraries\n",
49 | "import numpy as np\n",
50 | "import pandas as pd\n",
51 | "from matplotlib import pyplot as plt"
52 | ]
53 | },
54 | {
55 | "cell_type": "markdown",
56 | "metadata": {},
57 | "source": [
58 | "# 1. Bring in Marketwatch GME Data \n",
59 | "https://www.marketwatch.com/investing/stock/gme/download-data?startDate=11/1/2019&endDate=03/12/2021"
60 | ]
61 | },
62 | {
63 | "cell_type": "code",
64 | "execution_count": 2,
65 | "metadata": {},
66 | "outputs": [],
67 | "source": [
68 | "df = pd.read_csv('data/gmedata.csv')"
69 | ]
70 | },
71 | {
72 | "cell_type": "code",
73 | "execution_count": 3,
74 | "metadata": {},
75 | "outputs": [
76 | {
77 | "data": {
78 | "text/html": [
79 | "
\n",
80 | "\n",
93 | "
\n",
94 | " \n",
95 | " \n",
96 | " | \n",
97 | " Date | \n",
98 | " Open | \n",
99 | " High | \n",
100 | " Low | \n",
101 | " Close | \n",
102 | " Volume | \n",
103 | "
\n",
104 | " \n",
105 | " \n",
106 | " \n",
107 | " 0 | \n",
108 | " 03/12/2021 | \n",
109 | " 275.00 | \n",
110 | " 295.50 | \n",
111 | " 262.27 | \n",
112 | " 264.5 | \n",
113 | " 25,845,900 | \n",
114 | "
\n",
115 | " \n",
116 | " 1 | \n",
117 | " 03/11/2021 | \n",
118 | " 241.64 | \n",
119 | " 281.50 | \n",
120 | " 232.60 | \n",
121 | " 260.0 | \n",
122 | " 28,312,490 | \n",
123 | "
\n",
124 | " \n",
125 | " 2 | \n",
126 | " 03/10/2021 | \n",
127 | " 269.43 | \n",
128 | " 348.50 | \n",
129 | " 172.00 | \n",
130 | " 265.0 | \n",
131 | " 71,570,570 | \n",
132 | "
\n",
133 | " \n",
134 | " 3 | \n",
135 | " 03/09/2021 | \n",
136 | " 217.71 | \n",
137 | " 249.85 | \n",
138 | " 208.51 | \n",
139 | " 246.9 | \n",
140 | " 39,099,328 | \n",
141 | "
\n",
142 | " \n",
143 | " 4 | \n",
144 | " 03/08/2021 | \n",
145 | " 154.89 | \n",
146 | " 210.87 | \n",
147 | " 146.10 | \n",
148 | " 194.5 | \n",
149 | " 63,565,621 | \n",
150 | "
\n",
151 | " \n",
152 | "
\n",
153 | "
"
154 | ],
155 | "text/plain": [
156 | " Date Open High Low Close Volume\n",
157 | "0 03/12/2021 275.00 295.50 262.27 264.5 25,845,900\n",
158 | "1 03/11/2021 241.64 281.50 232.60 260.0 28,312,490\n",
159 | "2 03/10/2021 269.43 348.50 172.00 265.0 71,570,570\n",
160 | "3 03/09/2021 217.71 249.85 208.51 246.9 39,099,328\n",
161 | "4 03/08/2021 154.89 210.87 146.10 194.5 63,565,621"
162 | ]
163 | },
164 | "execution_count": 3,
165 | "metadata": {},
166 | "output_type": "execute_result"
167 | }
168 | ],
169 | "source": [
170 | "df.head()"
171 | ]
172 | },
173 | {
174 | "cell_type": "code",
175 | "execution_count": 4,
176 | "metadata": {},
177 | "outputs": [
178 | {
179 | "data": {
180 | "text/plain": [
181 | "Date datetime64[ns]\n",
182 | "Open float64\n",
183 | "High float64\n",
184 | "Low float64\n",
185 | "Close float64\n",
186 | "Volume object\n",
187 | "dtype: object"
188 | ]
189 | },
190 | "execution_count": 4,
191 | "metadata": {},
192 | "output_type": "execute_result"
193 | }
194 | ],
195 | "source": [
196 | "df['Date'] = pd.to_datetime(df['Date'])\n",
197 | "df.dtypes"
198 | ]
199 | },
200 | {
201 | "cell_type": "code",
202 | "execution_count": 5,
203 | "metadata": {},
204 | "outputs": [
205 | {
206 | "data": {
207 | "text/html": [
208 | "\n",
209 | "\n",
222 | "
\n",
223 | " \n",
224 | " \n",
225 | " | \n",
226 | " Date | \n",
227 | " Open | \n",
228 | " High | \n",
229 | " Low | \n",
230 | " Close | \n",
231 | " Volume | \n",
232 | "
\n",
233 | " \n",
234 | " \n",
235 | " \n",
236 | " 250 | \n",
237 | " 2020-03-16 | \n",
238 | " 3.93 | \n",
239 | " 4.57 | \n",
240 | " 3.90 | \n",
241 | " 4.37 | \n",
242 | " 4,866,696 | \n",
243 | "
\n",
244 | " \n",
245 | " 249 | \n",
246 | " 2020-03-17 | \n",
247 | " 4.40 | \n",
248 | " 4.65 | \n",
249 | " 4.11 | \n",
250 | " 4.23 | \n",
251 | " 3,562,210 | \n",
252 | "
\n",
253 | " \n",
254 | " 248 | \n",
255 | " 2020-03-18 | \n",
256 | " 4.10 | \n",
257 | " 4.25 | \n",
258 | " 3.50 | \n",
259 | " 3.77 | \n",
260 | " 3,651,709 | \n",
261 | "
\n",
262 | " \n",
263 | " 247 | \n",
264 | " 2020-03-19 | \n",
265 | " 3.71 | \n",
266 | " 4.20 | \n",
267 | " 3.55 | \n",
268 | " 4.19 | \n",
269 | " 5,039,539 | \n",
270 | "
\n",
271 | " \n",
272 | " 246 | \n",
273 | " 2020-03-20 | \n",
274 | " 4.08 | \n",
275 | " 4.08 | \n",
276 | " 3.65 | \n",
277 | " 3.76 | \n",
278 | " 7,722,194 | \n",
279 | "
\n",
280 | " \n",
281 | "
\n",
282 | "
"
283 | ],
284 | "text/plain": [
285 | " Date Open High Low Close Volume\n",
286 | "250 2020-03-16 3.93 4.57 3.90 4.37 4,866,696\n",
287 | "249 2020-03-17 4.40 4.65 4.11 4.23 3,562,210\n",
288 | "248 2020-03-18 4.10 4.25 3.50 3.77 3,651,709\n",
289 | "247 2020-03-19 3.71 4.20 3.55 4.19 5,039,539\n",
290 | "246 2020-03-20 4.08 4.08 3.65 3.76 7,722,194"
291 | ]
292 | },
293 | "execution_count": 5,
294 | "metadata": {},
295 | "output_type": "execute_result"
296 | }
297 | ],
298 | "source": [
299 | "df.sort_values('Date', ascending=True, inplace=True)\n",
300 | "df.head()"
301 | ]
302 | },
303 | {
304 | "cell_type": "code",
305 | "execution_count": 6,
306 | "metadata": {},
307 | "outputs": [
308 | {
309 | "data": {
310 | "text/html": [
311 | "\n",
312 | "\n",
325 | "
\n",
326 | " \n",
327 | " \n",
328 | " | \n",
329 | " Open | \n",
330 | " High | \n",
331 | " Low | \n",
332 | " Close | \n",
333 | " Volume | \n",
334 | "
\n",
335 | " \n",
336 | " Date | \n",
337 | " | \n",
338 | " | \n",
339 | " | \n",
340 | " | \n",
341 | " | \n",
342 | "
\n",
343 | " \n",
344 | " \n",
345 | " \n",
346 | " 2020-03-16 | \n",
347 | " 3.93 | \n",
348 | " 4.57 | \n",
349 | " 3.90 | \n",
350 | " 4.37 | \n",
351 | " 4,866,696 | \n",
352 | "
\n",
353 | " \n",
354 | " 2020-03-17 | \n",
355 | " 4.40 | \n",
356 | " 4.65 | \n",
357 | " 4.11 | \n",
358 | " 4.23 | \n",
359 | " 3,562,210 | \n",
360 | "
\n",
361 | " \n",
362 | " 2020-03-18 | \n",
363 | " 4.10 | \n",
364 | " 4.25 | \n",
365 | " 3.50 | \n",
366 | " 3.77 | \n",
367 | " 3,651,709 | \n",
368 | "
\n",
369 | " \n",
370 | " 2020-03-19 | \n",
371 | " 3.71 | \n",
372 | " 4.20 | \n",
373 | " 3.55 | \n",
374 | " 4.19 | \n",
375 | " 5,039,539 | \n",
376 | "
\n",
377 | " \n",
378 | " 2020-03-20 | \n",
379 | " 4.08 | \n",
380 | " 4.08 | \n",
381 | " 3.65 | \n",
382 | " 3.76 | \n",
383 | " 7,722,194 | \n",
384 | "
\n",
385 | " \n",
386 | "
\n",
387 | "
"
388 | ],
389 | "text/plain": [
390 | " Open High Low Close Volume\n",
391 | "Date \n",
392 | "2020-03-16 3.93 4.57 3.90 4.37 4,866,696\n",
393 | "2020-03-17 4.40 4.65 4.11 4.23 3,562,210\n",
394 | "2020-03-18 4.10 4.25 3.50 3.77 3,651,709\n",
395 | "2020-03-19 3.71 4.20 3.55 4.19 5,039,539\n",
396 | "2020-03-20 4.08 4.08 3.65 3.76 7,722,194"
397 | ]
398 | },
399 | "execution_count": 6,
400 | "metadata": {},
401 | "output_type": "execute_result"
402 | }
403 | ],
404 | "source": [
405 | "df.set_index('Date', inplace=True)\n",
406 | "df.head()"
407 | ]
408 | },
409 | {
410 | "cell_type": "code",
411 | "execution_count": 16,
412 | "metadata": {},
413 | "outputs": [],
414 | "source": [
415 | "env = gym.make('stocks-v0', df=df, frame_bound=(5,250), window_size=5)"
416 | ]
417 | },
418 | {
419 | "cell_type": "code",
420 | "execution_count": 17,
421 | "metadata": {
422 | "scrolled": true
423 | },
424 | "outputs": [
425 | {
426 | "data": {
427 | "text/plain": [
428 | "array([[ 4.3700e+00, 0.0000e+00],\n",
429 | " [ 4.2300e+00, -1.4000e-01],\n",
430 | " [ 3.7700e+00, -4.6000e-01],\n",
431 | " [ 4.1900e+00, 4.2000e-01],\n",
432 | " [ 3.7600e+00, -4.3000e-01],\n",
433 | " [ 3.8100e+00, 5.0000e-02],\n",
434 | " [ 4.1600e+00, 3.5000e-01],\n",
435 | " [ 4.1700e+00, 1.0000e-02],\n",
436 | " [ 4.4100e+00, 2.4000e-01],\n",
437 | " [ 4.2200e+00, -1.9000e-01],\n",
438 | " [ 3.6500e+00, -5.7000e-01],\n",
439 | " [ 3.5000e+00, -1.5000e-01],\n",
440 | " [ 3.2500e+00, -2.5000e-01],\n",
441 | " [ 2.8500e+00, -4.0000e-01],\n",
442 | " [ 2.8000e+00, -5.0000e-02],\n",
443 | " [ 3.0900e+00, 2.9000e-01],\n",
444 | " [ 3.2700e+00, 1.8000e-01],\n",
445 | " [ 3.4100e+00, 1.4000e-01],\n",
446 | " [ 3.8900e+00, 4.8000e-01],\n",
447 | " [ 4.7400e+00, 8.5000e-01],\n",
448 | " [ 5.9500e+00, 1.2100e+00],\n",
449 | " [ 5.2700e+00, -6.8000e-01],\n",
450 | " [ 5.0300e+00, -2.4000e-01],\n",
451 | " [ 4.8800e+00, -1.5000e-01],\n",
452 | " [ 5.6100e+00, 7.3000e-01],\n",
453 | " [ 4.7800e+00, -8.3000e-01],\n",
454 | " [ 4.8900e+00, 1.1000e-01],\n",
455 | " [ 4.7000e+00, -1.9000e-01],\n",
456 | " [ 4.7700e+00, 7.0000e-02],\n",
457 | " [ 5.8200e+00, 1.0500e+00],\n",
458 | " [ 5.6400e+00, -1.8000e-01],\n",
459 | " [ 6.0400e+00, 4.0000e-01],\n",
460 | " [ 5.7300e+00, -3.1000e-01],\n",
461 | " [ 6.0500e+00, 3.2000e-01],\n",
462 | " [ 5.4800e+00, -5.7000e-01],\n",
463 | " [ 5.3900e+00, -9.0000e-02],\n",
464 | " [ 4.9300e+00, -4.6000e-01],\n",
465 | " [ 4.8700e+00, -6.0000e-02],\n",
466 | " [ 4.9800e+00, 1.1000e-01],\n",
467 | " [ 4.7600e+00, -2.2000e-01],\n",
468 | " [ 4.5400e+00, -2.2000e-01],\n",
469 | " [ 4.2100e+00, -3.3000e-01],\n",
470 | " [ 4.1300e+00, -8.0000e-02],\n",
471 | " [ 4.2200e+00, 9.0000e-02],\n",
472 | " [ 4.5800e+00, 3.6000e-01],\n",
473 | " [ 4.4400e+00, -1.4000e-01],\n",
474 | " [ 4.4300e+00, -1.0000e-02],\n",
475 | " [ 4.4400e+00, 1.0000e-02],\n",
476 | " [ 4.1800e+00, -2.6000e-01],\n",
477 | " [ 4.4200e+00, 2.4000e-01],\n",
478 | " [ 4.6900e+00, 2.7000e-01],\n",
479 | " [ 4.3300e+00, -3.6000e-01],\n",
480 | " [ 4.0600e+00, -2.7000e-01],\n",
481 | " [ 4.1300e+00, 7.0000e-02],\n",
482 | " [ 4.1800e+00, 5.0000e-02],\n",
483 | " [ 4.4400e+00, 2.6000e-01],\n",
484 | " [ 4.4700e+00, 3.0000e-02],\n",
485 | " [ 4.1400e+00, -3.3000e-01],\n",
486 | " [ 5.0100e+00, 8.7000e-01],\n",
487 | " [ 4.9600e+00, -5.0000e-02],\n",
488 | " [ 5.0700e+00, 1.1000e-01],\n",
489 | " [ 4.3700e+00, -7.0000e-01],\n",
490 | " [ 4.7200e+00, 3.5000e-01],\n",
491 | " [ 4.6900e+00, -3.0000e-02],\n",
492 | " [ 4.6400e+00, -5.0000e-02],\n",
493 | " [ 4.7600e+00, 1.2000e-01],\n",
494 | " [ 4.9500e+00, 1.9000e-01],\n",
495 | " [ 4.8800e+00, -7.0000e-02],\n",
496 | " [ 4.8700e+00, -1.0000e-02],\n",
497 | " [ 4.8300e+00, -4.0000e-02],\n",
498 | " [ 4.4100e+00, -4.2000e-01],\n",
499 | " [ 4.4600e+00, 5.0000e-02],\n",
500 | " [ 4.3500e+00, -1.1000e-01],\n",
501 | " [ 4.3800e+00, 3.0000e-02],\n",
502 | " [ 4.3400e+00, -4.0000e-02],\n",
503 | " [ 4.4400e+00, 1.0000e-01],\n",
504 | " [ 4.2900e+00, -1.5000e-01],\n",
505 | " [ 4.2400e+00, -5.0000e-02],\n",
506 | " [ 4.0900e+00, -1.5000e-01],\n",
507 | " [ 4.2600e+00, 1.7000e-01],\n",
508 | " [ 4.2100e+00, -5.0000e-02],\n",
509 | " [ 4.3400e+00, 1.3000e-01],\n",
510 | " [ 4.2600e+00, -8.0000e-02],\n",
511 | " [ 4.0800e+00, -1.8000e-01],\n",
512 | " [ 4.1900e+00, 1.1000e-01],\n",
513 | " [ 4.1700e+00, -2.0000e-02],\n",
514 | " [ 3.9600e+00, -2.1000e-01],\n",
515 | " [ 3.8500e+00, -1.1000e-01],\n",
516 | " [ 4.0100e+00, 1.6000e-01],\n",
517 | " [ 4.1100e+00, 1.0000e-01],\n",
518 | " [ 4.1100e+00, 0.0000e+00],\n",
519 | " [ 4.0300e+00, -8.0000e-02],\n",
520 | " [ 4.0100e+00, -2.0000e-02],\n",
521 | " [ 3.9400e+00, -7.0000e-02],\n",
522 | " [ 4.0600e+00, 1.2000e-01],\n",
523 | " [ 4.1000e+00, 4.0000e-02],\n",
524 | " [ 4.0100e+00, -9.0000e-02],\n",
525 | " [ 4.1500e+00, 1.4000e-01],\n",
526 | " [ 4.4300e+00, 2.8000e-01],\n",
527 | " [ 4.6300e+00, 2.0000e-01],\n",
528 | " [ 4.4300e+00, -2.0000e-01],\n",
529 | " [ 4.1600e+00, -2.7000e-01],\n",
530 | " [ 4.3300e+00, 1.7000e-01],\n",
531 | " [ 4.3500e+00, 2.0000e-02],\n",
532 | " [ 4.5200e+00, 1.7000e-01],\n",
533 | " [ 4.6400e+00, 1.2000e-01],\n",
534 | " [ 4.7500e+00, 1.1000e-01],\n",
535 | " [ 4.6300e+00, -1.2000e-01],\n",
536 | " [ 4.8100e+00, 1.8000e-01],\n",
537 | " [ 4.7200e+00, -9.0000e-02],\n",
538 | " [ 4.6100e+00, -1.1000e-01],\n",
539 | " [ 5.0300e+00, 4.2000e-01],\n",
540 | " [ 4.8700e+00, -1.6000e-01],\n",
541 | " [ 4.9800e+00, 1.1000e-01],\n",
542 | " [ 5.1100e+00, 1.3000e-01],\n",
543 | " [ 5.2500e+00, 1.4000e-01],\n",
544 | " [ 5.3900e+00, 1.4000e-01],\n",
545 | " [ 6.6800e+00, 1.2900e+00],\n",
546 | " [ 7.6500e+00, 9.7000e-01],\n",
547 | " [ 7.7100e+00, 6.0000e-02],\n",
548 | " [ 7.8200e+00, 1.1000e-01],\n",
549 | " [ 7.6500e+00, -1.7000e-01],\n",
550 | " [ 7.7000e+00, 5.0000e-02],\n",
551 | " [ 7.3500e+00, -3.5000e-01],\n",
552 | " [ 6.2300e+00, -1.1200e+00],\n",
553 | " [ 6.0900e+00, -1.4000e-01],\n",
554 | " [ 6.9100e+00, 8.2000e-01],\n",
555 | " [ 7.0900e+00, 1.8000e-01],\n",
556 | " [ 8.6800e+00, 1.5900e+00],\n",
557 | " [ 9.2000e+00, 5.2000e-01],\n",
558 | " [ 9.4700e+00, 2.7000e-01],\n",
559 | " [ 8.7500e+00, -7.2000e-01],\n",
560 | " [ 1.0560e+01, 1.8100e+00],\n",
561 | " [ 1.0040e+01, -5.2000e-01],\n",
562 | " [ 9.1400e+00, -9.0000e-01],\n",
563 | " [ 1.0020e+01, 8.8000e-01],\n",
564 | " [ 1.0090e+01, 7.0000e-02],\n",
565 | " [ 1.0350e+01, 2.6000e-01],\n",
566 | " [ 1.0200e+01, -1.5000e-01],\n",
567 | " [ 9.7700e+00, -4.3000e-01],\n",
568 | " [ 9.3900e+00, -3.8000e-01],\n",
569 | " [ 9.4600e+00, 7.0000e-02],\n",
570 | " [ 9.1300e+00, -3.3000e-01],\n",
571 | " [ 9.3600e+00, 2.3000e-01],\n",
572 | " [ 1.3490e+01, 4.1300e+00],\n",
573 | " [ 1.2020e+01, -1.4700e+00],\n",
574 | " [ 1.1800e+01, -2.2000e-01],\n",
575 | " [ 1.1880e+01, 8.0000e-02],\n",
576 | " [ 1.2250e+01, 3.7000e-01],\n",
577 | " [ 1.3830e+01, 1.5800e+00],\n",
578 | " [ 1.3310e+01, -5.2000e-01],\n",
579 | " [ 1.3910e+01, 6.0000e-01],\n",
580 | " [ 1.3860e+01, -5.0000e-02],\n",
581 | " [ 1.4100e+01, 2.4000e-01],\n",
582 | " [ 1.4910e+01, 8.1000e-01],\n",
583 | " [ 1.5000e+01, 9.0000e-02],\n",
584 | " [ 1.3450e+01, -1.5500e+00],\n",
585 | " [ 1.2690e+01, -7.6000e-01],\n",
586 | " [ 1.1820e+01, -8.7000e-01],\n",
587 | " [ 1.1730e+01, -9.0000e-02],\n",
588 | " [ 1.0470e+01, -1.2600e+00],\n",
589 | " [ 1.0750e+01, 2.8000e-01],\n",
590 | " [ 1.1570e+01, 8.2000e-01],\n",
591 | " [ 1.0910e+01, -6.6000e-01],\n",
592 | " [ 1.1450e+01, 5.4000e-01],\n",
593 | " [ 1.1860e+01, 4.1000e-01],\n",
594 | " [ 1.1490e+01, -3.7000e-01],\n",
595 | " [ 1.1100e+01, -3.9000e-01],\n",
596 | " [ 1.1750e+01, 6.5000e-01],\n",
597 | " [ 1.1130e+01, -6.2000e-01],\n",
598 | " [ 1.1010e+01, -1.2000e-01],\n",
599 | " [ 1.2060e+01, 1.0500e+00],\n",
600 | " [ 1.1630e+01, -4.3000e-01],\n",
601 | " [ 1.1570e+01, -6.0000e-02],\n",
602 | " [ 1.2460e+01, 8.9000e-01],\n",
603 | " [ 1.2710e+01, 2.5000e-01],\n",
604 | " [ 1.3900e+01, 1.1900e+00],\n",
605 | " [ 1.3670e+01, -2.3000e-01],\n",
606 | " [ 1.4750e+01, 1.0800e+00],\n",
607 | " [ 1.6080e+01, 1.3300e+00],\n",
608 | " [ 1.6560e+01, 4.8000e-01],\n",
609 | " [ 1.5800e+01, -7.6000e-01],\n",
610 | " [ 1.6580e+01, 7.8000e-01],\n",
611 | " [ 1.6120e+01, -4.6000e-01],\n",
612 | " [ 1.6900e+01, 7.8000e-01],\n",
613 | " [ 1.6350e+01, -5.5000e-01],\n",
614 | " [ 1.6940e+01, 5.9000e-01],\n",
615 | " [ 1.3660e+01, -3.2800e+00],\n",
616 | " [ 1.4120e+01, 4.6000e-01],\n",
617 | " [ 1.3310e+01, -8.1000e-01],\n",
618 | " [ 1.2720e+01, -5.9000e-01],\n",
619 | " [ 1.3850e+01, 1.1300e+00],\n",
620 | " [ 1.3850e+01, 0.0000e+00],\n",
621 | " [ 1.4830e+01, 9.8000e-01],\n",
622 | " [ 1.5630e+01, 8.0000e-01],\n",
623 | " [ 1.5530e+01, -1.0000e-01],\n",
624 | " [ 1.9460e+01, 3.9300e+00],\n",
625 | " [ 2.0570e+01, 1.1100e+00],\n",
626 | " [ 2.0150e+01, -4.2000e-01],\n",
627 | " [ 2.0990e+01, 8.4000e-01],\n",
628 | " [ 1.9380e+01, -1.6100e+00],\n",
629 | " [ 1.9260e+01, -1.2000e-01],\n",
630 | " [ 1.8840e+01, -4.2000e-01],\n",
631 | " [ 1.7250e+01, -1.5900e+00],\n",
632 | " [ 1.7370e+01, 1.2000e-01],\n",
633 | " [ 1.8360e+01, 9.9000e-01],\n",
634 | " [ 1.8080e+01, -2.8000e-01],\n",
635 | " [ 1.7690e+01, -3.9000e-01],\n",
636 | " [ 1.9940e+01, 2.2500e+00],\n",
637 | " [ 1.9950e+01, 1.0000e-02],\n",
638 | " [ 3.1400e+01, 1.1450e+01],\n",
639 | " [ 3.9910e+01, 8.5100e+00],\n",
640 | " [ 3.5500e+01, -4.4100e+00],\n",
641 | " [ 3.9360e+01, 3.8600e+00],\n",
642 | " [ 3.9120e+01, -2.4000e-01],\n",
643 | " [ 4.3030e+01, 3.9100e+00],\n",
644 | " [ 6.5010e+01, 2.1980e+01],\n",
645 | " [ 7.6790e+01, 1.1780e+01],\n",
646 | " [ 1.4798e+02, 7.1190e+01],\n",
647 | " [ 3.4751e+02, 1.9953e+02],\n",
648 | " [ 1.9360e+02, -1.5391e+02],\n",
649 | " [ 3.2500e+02, 1.3140e+02],\n",
650 | " [ 2.2500e+02, -1.0000e+02],\n",
651 | " [ 9.0000e+01, -1.3500e+02],\n",
652 | " [ 9.2410e+01, 2.4100e+00],\n",
653 | " [ 5.3500e+01, -3.8910e+01],\n",
654 | " [ 6.3770e+01, 1.0270e+01],\n",
655 | " [ 6.0000e+01, -3.7700e+00],\n",
656 | " [ 5.0310e+01, -9.6900e+00],\n",
657 | " [ 5.1200e+01, 8.9000e-01],\n",
658 | " [ 5.1100e+01, -1.0000e-01],\n",
659 | " [ 5.2400e+01, 1.3000e+00],\n",
660 | " [ 4.9510e+01, -2.8900e+00],\n",
661 | " [ 4.5940e+01, -3.5700e+00],\n",
662 | " [ 4.0690e+01, -5.2500e+00],\n",
663 | " [ 4.0590e+01, -1.0000e-01],\n",
664 | " [ 4.6000e+01, 5.4100e+00],\n",
665 | " [ 4.4970e+01, -1.0300e+00],\n",
666 | " [ 9.1710e+01, 4.6740e+01],\n",
667 | " [ 1.0873e+02, 1.7020e+01],\n",
668 | " [ 1.0174e+02, -6.9900e+00],\n",
669 | " [ 1.2040e+02, 1.8660e+01],\n",
670 | " [ 1.1818e+02, -2.2200e+00],\n",
671 | " [ 1.2418e+02, 6.0000e+00],\n",
672 | " [ 1.3235e+02, 8.1700e+00],\n",
673 | " [ 1.3774e+02, 5.3900e+00],\n",
674 | " [ 1.9450e+02, 5.6760e+01],\n",
675 | " [ 2.4690e+02, 5.2400e+01],\n",
676 | " [ 2.6500e+02, 1.8100e+01],\n",
677 | " [ 2.6000e+02, -5.0000e+00]])"
678 | ]
679 | },
680 | "execution_count": 17,
681 | "metadata": {},
682 | "output_type": "execute_result"
683 | }
684 | ],
685 | "source": [
686 | "env.signal_features"
687 | ]
688 | },
689 | {
690 | "cell_type": "markdown",
691 | "metadata": {},
692 | "source": [
693 | "# 2. Build Environment"
694 | ]
695 | },
696 | {
697 | "cell_type": "code",
698 | "execution_count": 18,
699 | "metadata": {},
700 | "outputs": [
701 | {
702 | "data": {
703 | "text/plain": [
704 | "Discrete(2)"
705 | ]
706 | },
707 | "execution_count": 18,
708 | "metadata": {},
709 | "output_type": "execute_result"
710 | }
711 | ],
712 | "source": [
713 | "env.action_space"
714 | ]
715 | },
716 | {
717 | "cell_type": "code",
718 | "execution_count": 19,
719 | "metadata": {},
720 | "outputs": [
721 | {
722 | "name": "stdout",
723 | "output_type": "stream",
724 | "text": [
725 | "info {'total_reward': 48.68000000000002, 'total_profit': 2.2553045372528024, 'position': 0}\n"
726 | ]
727 | },
728 | {
729 | "data": {
730 | "image/png": "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\n",
731 | "text/plain": [
732 | ""
733 | ]
734 | },
735 | "metadata": {
736 | "needs_background": "light"
737 | },
738 | "output_type": "display_data"
739 | }
740 | ],
741 | "source": [
742 | "state = env.reset()\n",
743 | "while True: \n",
744 | " action = env.action_space.sample()\n",
745 | " n_state, reward, done, info = env.step(action)\n",
746 | " if done: \n",
747 | " print(\"info\", info)\n",
748 | " break\n",
749 | " \n",
750 | "plt.figure(figsize=(15,6))\n",
751 | "plt.cla()\n",
752 | "env.render_all()\n",
753 | "plt.show()"
754 | ]
755 | },
756 | {
757 | "cell_type": "markdown",
758 | "metadata": {},
759 | "source": [
760 | "# 2.1 Add Custom Indicators"
761 | ]
762 | },
763 | {
764 | "cell_type": "markdown",
765 | "metadata": {},
766 | "source": [
767 | "## 2.1.1. Install and Import New Dependencies"
768 | ]
769 | },
770 | {
771 | "cell_type": "code",
772 | "execution_count": 20,
773 | "metadata": {
774 | "collapsed": true
775 | },
776 | "outputs": [
777 | {
778 | "name": "stdout",
779 | "output_type": "stream",
780 | "text": [
781 | "Requirement already satisfied: finta in c:\\programdata\\anaconda3\\lib\\site-packages (1.2)\n",
782 | "Requirement already satisfied: numpy in c:\\users\\user\\appdata\\roaming\\python\\python37\\site-packages (from finta) (1.18.5)\n",
783 | "Requirement already satisfied: pandas in c:\\programdata\\anaconda3\\lib\\site-packages (from finta) (0.24.2)\n",
784 | "Requirement already satisfied: pytz>=2011k in c:\\programdata\\anaconda3\\lib\\site-packages (from pandas->finta) (2019.1)\n",
785 | "Requirement already satisfied: python-dateutil>=2.5.0 in c:\\programdata\\anaconda3\\lib\\site-packages (from pandas->finta) (2.8.0)\n",
786 | "Requirement already satisfied: six>=1.5 in c:\\users\\user\\appdata\\roaming\\python\\python37\\site-packages (from python-dateutil>=2.5.0->pandas->finta) (1.15.0)\n"
787 | ]
788 | }
789 | ],
790 | "source": [
791 | "!pip install finta"
792 | ]
793 | },
794 | {
795 | "cell_type": "code",
796 | "execution_count": 21,
797 | "metadata": {},
798 | "outputs": [],
799 | "source": [
800 | "from gym_anytrading.envs import StocksEnv\n",
801 | "from finta import TA"
802 | ]
803 | },
804 | {
805 | "cell_type": "markdown",
806 | "metadata": {},
807 | "source": [
808 | "## 2.1.2. Fix Volume Column"
809 | ]
810 | },
811 | {
812 | "cell_type": "code",
813 | "execution_count": 26,
814 | "metadata": {},
815 | "outputs": [],
816 | "source": [
817 | "df['Volume'] = df['Volume'].apply(lambda x: float(x.replace(\",\", \"\")))"
818 | ]
819 | },
820 | {
821 | "cell_type": "code",
822 | "execution_count": 28,
823 | "metadata": {},
824 | "outputs": [
825 | {
826 | "data": {
827 | "text/plain": [
828 | "Open float64\n",
829 | "High float64\n",
830 | "Low float64\n",
831 | "Close float64\n",
832 | "Volume float64\n",
833 | "dtype: object"
834 | ]
835 | },
836 | "execution_count": 28,
837 | "metadata": {},
838 | "output_type": "execute_result"
839 | }
840 | ],
841 | "source": [
842 | "df.dtypes"
843 | ]
844 | },
845 | {
846 | "cell_type": "markdown",
847 | "metadata": {},
848 | "source": [
849 | "## 2.1.3. Calculate SMA, RSI and OBV"
850 | ]
851 | },
852 | {
853 | "cell_type": "code",
854 | "execution_count": 32,
855 | "metadata": {},
856 | "outputs": [],
857 | "source": [
858 | "df['SMA'] = TA.SMA(df, 12)\n",
859 | "df['RSI'] = TA.RSI(df)\n",
860 | "df['OBV'] = TA.OBV(df)\n",
861 | "df.fillna(0, inplace=True)"
862 | ]
863 | },
864 | {
865 | "cell_type": "code",
866 | "execution_count": 33,
867 | "metadata": {},
868 | "outputs": [
869 | {
870 | "data": {
871 | "text/html": [
872 | "\n",
873 | "\n",
886 | "
\n",
887 | " \n",
888 | " \n",
889 | " | \n",
890 | " Open | \n",
891 | " High | \n",
892 | " Low | \n",
893 | " Close | \n",
894 | " Volume | \n",
895 | " SMA | \n",
896 | " RSI | \n",
897 | " OBV | \n",
898 | "
\n",
899 | " \n",
900 | " Date | \n",
901 | " | \n",
902 | " | \n",
903 | " | \n",
904 | " | \n",
905 | " | \n",
906 | " | \n",
907 | " | \n",
908 | " | \n",
909 | "
\n",
910 | " \n",
911 | " \n",
912 | " \n",
913 | " 2020-03-16 | \n",
914 | " 3.93 | \n",
915 | " 4.57 | \n",
916 | " 3.90 | \n",
917 | " 4.37 | \n",
918 | " 4866696.0 | \n",
919 | " 0.000000 | \n",
920 | " 0.000000 | \n",
921 | " 0.0 | \n",
922 | "
\n",
923 | " \n",
924 | " 2020-03-17 | \n",
925 | " 4.40 | \n",
926 | " 4.65 | \n",
927 | " 4.11 | \n",
928 | " 4.23 | \n",
929 | " 3562210.0 | \n",
930 | " 0.000000 | \n",
931 | " 0.000000 | \n",
932 | " -3562210.0 | \n",
933 | "
\n",
934 | " \n",
935 | " 2020-03-18 | \n",
936 | " 4.10 | \n",
937 | " 4.25 | \n",
938 | " 3.50 | \n",
939 | " 3.77 | \n",
940 | " 3651709.0 | \n",
941 | " 0.000000 | \n",
942 | " 0.000000 | \n",
943 | " -7213919.0 | \n",
944 | "
\n",
945 | " \n",
946 | " 2020-03-19 | \n",
947 | " 3.71 | \n",
948 | " 4.20 | \n",
949 | " 3.55 | \n",
950 | " 4.19 | \n",
951 | " 5039539.0 | \n",
952 | " 0.000000 | \n",
953 | " 43.394834 | \n",
954 | " -2174380.0 | \n",
955 | "
\n",
956 | " \n",
957 | " 2020-03-20 | \n",
958 | " 4.08 | \n",
959 | " 4.08 | \n",
960 | " 3.65 | \n",
961 | " 3.76 | \n",
962 | " 7722194.0 | \n",
963 | " 0.000000 | \n",
964 | " 29.351457 | \n",
965 | " -9896574.0 | \n",
966 | "
\n",
967 | " \n",
968 | " 2020-03-23 | \n",
969 | " 3.58 | \n",
970 | " 3.86 | \n",
971 | " 3.50 | \n",
972 | " 3.81 | \n",
973 | " 6009784.0 | \n",
974 | " 0.000000 | \n",
975 | " 32.102964 | \n",
976 | " -3886790.0 | \n",
977 | "
\n",
978 | " \n",
979 | " 2020-03-24 | \n",
980 | " 3.95 | \n",
981 | " 4.21 | \n",
982 | " 3.89 | \n",
983 | " 4.16 | \n",
984 | " 6805659.0 | \n",
985 | " 0.000000 | \n",
986 | " 47.512950 | \n",
987 | " 2918869.0 | \n",
988 | "
\n",
989 | " \n",
990 | " 2020-03-25 | \n",
991 | " 4.15 | \n",
992 | " 4.49 | \n",
993 | " 4.04 | \n",
994 | " 4.17 | \n",
995 | " 3592059.0 | \n",
996 | " 0.000000 | \n",
997 | " 47.876947 | \n",
998 | " 6510928.0 | \n",
999 | "
\n",
1000 | " \n",
1001 | " 2020-03-26 | \n",
1002 | " 4.24 | \n",
1003 | " 4.71 | \n",
1004 | " 4.24 | \n",
1005 | " 4.41 | \n",
1006 | " 6210979.0 | \n",
1007 | " 0.000000 | \n",
1008 | " 55.799557 | \n",
1009 | " 12721907.0 | \n",
1010 | "
\n",
1011 | " \n",
1012 | " 2020-03-27 | \n",
1013 | " 4.94 | \n",
1014 | " 5.09 | \n",
1015 | " 4.15 | \n",
1016 | " 4.22 | \n",
1017 | " 7024763.0 | \n",
1018 | " 0.000000 | \n",
1019 | " 49.398141 | \n",
1020 | " 5697144.0 | \n",
1021 | "
\n",
1022 | " \n",
1023 | " 2020-03-30 | \n",
1024 | " 4.22 | \n",
1025 | " 4.27 | \n",
1026 | " 3.65 | \n",
1027 | " 3.65 | \n",
1028 | " 3350571.0 | \n",
1029 | " 0.000000 | \n",
1030 | " 36.040223 | \n",
1031 | " 2346573.0 | \n",
1032 | "
\n",
1033 | " \n",
1034 | " 2020-03-31 | \n",
1035 | " 3.63 | \n",
1036 | " 3.80 | \n",
1037 | " 3.50 | \n",
1038 | " 3.50 | \n",
1039 | " 2304132.0 | \n",
1040 | " 4.020000 | \n",
1041 | " 33.474865 | \n",
1042 | " 42441.0 | \n",
1043 | "
\n",
1044 | " \n",
1045 | " 2020-04-01 | \n",
1046 | " 3.45 | \n",
1047 | " 3.49 | \n",
1048 | " 3.12 | \n",
1049 | " 3.25 | \n",
1050 | " 4568695.0 | \n",
1051 | " 3.926667 | \n",
1052 | " 29.682621 | \n",
1053 | " -4526254.0 | \n",
1054 | "
\n",
1055 | " \n",
1056 | " 2020-04-02 | \n",
1057 | " 3.26 | \n",
1058 | " 3.35 | \n",
1059 | " 2.85 | \n",
1060 | " 2.85 | \n",
1061 | " 4064339.0 | \n",
1062 | " 3.811667 | \n",
1063 | " 24.834835 | \n",
1064 | " -8590593.0 | \n",
1065 | "
\n",
1066 | " \n",
1067 | " 2020-04-03 | \n",
1068 | " 2.85 | \n",
1069 | " 2.94 | \n",
1070 | " 2.57 | \n",
1071 | " 2.80 | \n",
1072 | " 3830761.0 | \n",
1073 | " 3.730833 | \n",
1074 | " 24.300576 | \n",
1075 | " -12421354.0 | \n",
1076 | "
\n",
1077 | " \n",
1078 | "
\n",
1079 | "
"
1080 | ],
1081 | "text/plain": [
1082 | " Open High Low Close Volume SMA RSI \\\n",
1083 | "Date \n",
1084 | "2020-03-16 3.93 4.57 3.90 4.37 4866696.0 0.000000 0.000000 \n",
1085 | "2020-03-17 4.40 4.65 4.11 4.23 3562210.0 0.000000 0.000000 \n",
1086 | "2020-03-18 4.10 4.25 3.50 3.77 3651709.0 0.000000 0.000000 \n",
1087 | "2020-03-19 3.71 4.20 3.55 4.19 5039539.0 0.000000 43.394834 \n",
1088 | "2020-03-20 4.08 4.08 3.65 3.76 7722194.0 0.000000 29.351457 \n",
1089 | "2020-03-23 3.58 3.86 3.50 3.81 6009784.0 0.000000 32.102964 \n",
1090 | "2020-03-24 3.95 4.21 3.89 4.16 6805659.0 0.000000 47.512950 \n",
1091 | "2020-03-25 4.15 4.49 4.04 4.17 3592059.0 0.000000 47.876947 \n",
1092 | "2020-03-26 4.24 4.71 4.24 4.41 6210979.0 0.000000 55.799557 \n",
1093 | "2020-03-27 4.94 5.09 4.15 4.22 7024763.0 0.000000 49.398141 \n",
1094 | "2020-03-30 4.22 4.27 3.65 3.65 3350571.0 0.000000 36.040223 \n",
1095 | "2020-03-31 3.63 3.80 3.50 3.50 2304132.0 4.020000 33.474865 \n",
1096 | "2020-04-01 3.45 3.49 3.12 3.25 4568695.0 3.926667 29.682621 \n",
1097 | "2020-04-02 3.26 3.35 2.85 2.85 4064339.0 3.811667 24.834835 \n",
1098 | "2020-04-03 2.85 2.94 2.57 2.80 3830761.0 3.730833 24.300576 \n",
1099 | "\n",
1100 | " OBV \n",
1101 | "Date \n",
1102 | "2020-03-16 0.0 \n",
1103 | "2020-03-17 -3562210.0 \n",
1104 | "2020-03-18 -7213919.0 \n",
1105 | "2020-03-19 -2174380.0 \n",
1106 | "2020-03-20 -9896574.0 \n",
1107 | "2020-03-23 -3886790.0 \n",
1108 | "2020-03-24 2918869.0 \n",
1109 | "2020-03-25 6510928.0 \n",
1110 | "2020-03-26 12721907.0 \n",
1111 | "2020-03-27 5697144.0 \n",
1112 | "2020-03-30 2346573.0 \n",
1113 | "2020-03-31 42441.0 \n",
1114 | "2020-04-01 -4526254.0 \n",
1115 | "2020-04-02 -8590593.0 \n",
1116 | "2020-04-03 -12421354.0 "
1117 | ]
1118 | },
1119 | "execution_count": 33,
1120 | "metadata": {},
1121 | "output_type": "execute_result"
1122 | }
1123 | ],
1124 | "source": [
1125 | "df.head(15)"
1126 | ]
1127 | },
1128 | {
1129 | "cell_type": "markdown",
1130 | "metadata": {},
1131 | "source": [
1132 | "## 2.1.4. Create New Environments"
1133 | ]
1134 | },
1135 | {
1136 | "cell_type": "code",
1137 | "execution_count": 35,
1138 | "metadata": {},
1139 | "outputs": [],
1140 | "source": [
1141 | "def add_signals(env):\n",
1142 | " start = env.frame_bound[0] - env.window_size\n",
1143 | " end = env.frame_bound[1]\n",
1144 | " prices = env.df.loc[:, 'Low'].to_numpy()[start:end]\n",
1145 | " signal_features = env.df.loc[:, ['Low', 'Volume','SMA', 'RSI', 'OBV']].to_numpy()[start:end]\n",
1146 | " return prices, signal_features"
1147 | ]
1148 | },
1149 | {
1150 | "cell_type": "code",
1151 | "execution_count": 36,
1152 | "metadata": {},
1153 | "outputs": [],
1154 | "source": [
1155 | "class MyCustomEnv(StocksEnv):\n",
1156 | " _process_data = add_signals\n",
1157 | " \n",
1158 | "env2 = MyCustomEnv(df=df, window_size=12, frame_bound=(12,50))"
1159 | ]
1160 | },
1161 | {
1162 | "cell_type": "code",
1163 | "execution_count": 40,
1164 | "metadata": {
1165 | "scrolled": true
1166 | },
1167 | "outputs": [
1168 | {
1169 | "data": {
1170 | "text/plain": [
1171 | "array([[ 3.90000000e+00, 4.86669600e+06, 0.00000000e+00,\n",
1172 | " 0.00000000e+00, 0.00000000e+00],\n",
1173 | " [ 4.11000000e+00, 3.56221000e+06, 0.00000000e+00,\n",
1174 | " 0.00000000e+00, -3.56221000e+06],\n",
1175 | " [ 3.50000000e+00, 3.65170900e+06, 0.00000000e+00,\n",
1176 | " 0.00000000e+00, -7.21391900e+06],\n",
1177 | " [ 3.55000000e+00, 5.03953900e+06, 0.00000000e+00,\n",
1178 | " 4.33948339e+01, -2.17438000e+06],\n",
1179 | " [ 3.65000000e+00, 7.72219400e+06, 0.00000000e+00,\n",
1180 | " 2.93514572e+01, -9.89657400e+06],\n",
1181 | " [ 3.50000000e+00, 6.00978400e+06, 0.00000000e+00,\n",
1182 | " 3.21029638e+01, -3.88679000e+06],\n",
1183 | " [ 3.89000000e+00, 6.80565900e+06, 0.00000000e+00,\n",
1184 | " 4.75129499e+01, 2.91886900e+06],\n",
1185 | " [ 4.04000000e+00, 3.59205900e+06, 0.00000000e+00,\n",
1186 | " 4.78769470e+01, 6.51092800e+06],\n",
1187 | " [ 4.24000000e+00, 6.21097900e+06, 0.00000000e+00,\n",
1188 | " 5.57995572e+01, 1.27219070e+07],\n",
1189 | " [ 4.15000000e+00, 7.02476300e+06, 0.00000000e+00,\n",
1190 | " 4.93981406e+01, 5.69714400e+06],\n",
1191 | " [ 3.65000000e+00, 3.35057100e+06, 0.00000000e+00,\n",
1192 | " 3.60402233e+01, 2.34657300e+06],\n",
1193 | " [ 3.50000000e+00, 2.30413200e+06, 4.02000000e+00,\n",
1194 | " 3.34748648e+01, 4.24410000e+04],\n",
1195 | " [ 3.12000000e+00, 4.56869500e+06, 3.92666667e+00,\n",
1196 | " 2.96826208e+01, -4.52625400e+06],\n",
1197 | " [ 2.85000000e+00, 4.06433900e+06, 3.81166667e+00,\n",
1198 | " 2.48348354e+01, -8.59059300e+06],\n",
1199 | " [ 2.57000000e+00, 3.83076100e+06, 3.73083333e+00,\n",
1200 | " 2.43005757e+01, -1.24213540e+07],\n",
1201 | " [ 2.83000000e+00, 3.33107000e+06, 3.63916667e+00,\n",
1202 | " 3.32674579e+01, -9.09028400e+06],\n",
1203 | " [ 3.10000000e+00, 2.83685900e+06, 3.59833333e+00,\n",
1204 | " 3.81635819e+01, -6.25342500e+06],\n",
1205 | " [ 3.20000000e+00, 2.88452800e+06, 3.56500000e+00,\n",
1206 | " 4.17437038e+01, -3.36889700e+06],\n",
1207 | " [ 3.49000000e+00, 5.90891600e+06, 3.54250000e+00,\n",
1208 | " 5.20039324e+01, 2.54001900e+06],\n",
1209 | " [ 4.16000000e+00, 6.84450100e+06, 3.59000000e+00,\n",
1210 | " 6.40714144e+01, 9.38452000e+06],\n",
1211 | " [ 5.14000000e+00, 1.35066300e+07, 3.71833333e+00,\n",
1212 | " 7.40671104e+01, 2.28911500e+07],\n",
1213 | " [ 4.90000000e+00, 7.49985400e+06, 3.80583333e+00,\n",
1214 | " 6.33931944e+01, 1.53912960e+07],\n",
1215 | " [ 4.88000000e+00, 3.37192100e+06, 3.92083333e+00,\n",
1216 | " 6.01011321e+01, 1.20193750e+07],\n",
1217 | " [ 4.43000000e+00, 5.65318800e+06, 4.03583333e+00,\n",
1218 | " 5.80713382e+01, 6.36618700e+06],\n",
1219 | " [ 4.78000000e+00, 6.08501100e+06, 4.23250000e+00,\n",
1220 | " 6.43768198e+01, 1.24511980e+07],\n",
1221 | " [ 4.76000000e+00, 4.14205000e+06, 4.39333333e+00,\n",
1222 | " 5.43659043e+01, 8.30914800e+06],\n",
1223 | " [ 4.83000000e+00, 2.67813300e+06, 4.56750000e+00,\n",
1224 | " 5.53567351e+01, 1.09872810e+07],\n",
1225 | " [ 4.58000000e+00, 2.26585300e+06, 4.70166667e+00,\n",
1226 | " 5.32077636e+01, 8.72142800e+06],\n",
1227 | " [ 4.66000000e+00, 2.23654400e+06, 4.82666667e+00,\n",
1228 | " 5.39175455e+01, 1.09579720e+07],\n",
1229 | " [ 4.81000000e+00, 7.27513800e+06, 5.02750000e+00,\n",
1230 | " 6.29870029e+01, 1.82331100e+07],\n",
1231 | " [ 5.06000000e+00, 5.20018900e+06, 5.17333333e+00,\n",
1232 | " 6.07786688e+01, 1.30329210e+07],\n",
1233 | " [ 5.45000000e+00, 3.37004500e+06, 5.28166667e+00,\n",
1234 | " 6.38147771e+01, 1.64029660e+07],\n",
1235 | " [ 5.64000000e+00, 2.17353000e+06, 5.26333333e+00,\n",
1236 | " 5.99420834e+01, 1.42294360e+07],\n",
1237 | " [ 5.45000000e+00, 4.00559800e+06, 5.32833333e+00,\n",
1238 | " 6.24737146e+01, 1.82350340e+07],\n",
1239 | " [ 5.40000000e+00, 4.06810500e+06, 5.36583333e+00,\n",
1240 | " 5.57187511e+01, 1.41669290e+07],\n",
1241 | " [ 5.35000000e+00, 2.10591900e+06, 5.40833333e+00,\n",
1242 | " 5.47128225e+01, 1.20610100e+07],\n",
1243 | " [ 4.90000000e+00, 3.36964000e+06, 5.35166667e+00,\n",
1244 | " 4.97673242e+01, 8.69137000e+06],\n",
1245 | " [ 4.65000000e+00, 2.50119500e+06, 5.35916667e+00,\n",
1246 | " 4.91433540e+01, 6.19017500e+06],\n",
1247 | " [ 4.82000000e+00, 2.35366100e+06, 5.36666667e+00,\n",
1248 | " 5.03718500e+01, 8.54383600e+06],\n",
1249 | " [ 4.75000000e+00, 1.69915800e+06, 5.37166667e+00,\n",
1250 | " 4.78806928e+01, 6.84467800e+06],\n",
1251 | " [ 4.46000000e+00, 2.63915700e+06, 5.35250000e+00,\n",
1252 | " 4.54595360e+01, 4.20552100e+06],\n",
1253 | " [ 4.07000000e+00, 2.88287700e+06, 5.21833333e+00,\n",
1254 | " 4.20266220e+01, 1.32264400e+06],\n",
1255 | " [ 3.96000000e+00, 2.00486800e+06, 5.09250000e+00,\n",
1256 | " 4.12140829e+01, -6.82224000e+05],\n",
1257 | " [ 4.04000000e+00, 1.94070400e+06, 4.94083333e+00,\n",
1258 | " 4.25595553e+01, 1.25848000e+06],\n",
1259 | " [ 4.36000000e+00, 2.37169400e+06, 4.84500000e+00,\n",
1260 | " 4.77145371e+01, 3.63017400e+06],\n",
1261 | " [ 4.37000000e+00, 1.84073200e+06, 4.71083333e+00,\n",
1262 | " 4.59861286e+01, 1.78944200e+06],\n",
1263 | " [ 4.34000000e+00, 2.54360900e+06, 4.62333333e+00,\n",
1264 | " 4.58583463e+01, -7.54167000e+05],\n",
1265 | " [ 4.40000000e+00, 1.97190600e+06, 4.54416667e+00,\n",
1266 | " 4.60198797e+01, 1.21773900e+06],\n",
1267 | " [ 4.13000000e+00, 2.37985100e+06, 4.48166667e+00,\n",
1268 | " 4.24718284e+01, -1.16211200e+06],\n",
1269 | " [ 4.33000000e+00, 3.54592600e+06, 4.44416667e+00,\n",
1270 | " 4.65670389e+01, 2.38381400e+06]])"
1271 | ]
1272 | },
1273 | "execution_count": 40,
1274 | "metadata": {},
1275 | "output_type": "execute_result"
1276 | }
1277 | ],
1278 | "source": [
1279 | "env2.signal_features"
1280 | ]
1281 | },
1282 | {
1283 | "cell_type": "code",
1284 | "execution_count": 39,
1285 | "metadata": {},
1286 | "outputs": [
1287 | {
1288 | "data": {
1289 | "text/html": [
1290 | "\n",
1291 | "\n",
1304 | "
\n",
1305 | " \n",
1306 | " \n",
1307 | " | \n",
1308 | " Open | \n",
1309 | " High | \n",
1310 | " Low | \n",
1311 | " Close | \n",
1312 | " Volume | \n",
1313 | " SMA | \n",
1314 | " RSI | \n",
1315 | " OBV | \n",
1316 | "
\n",
1317 | " \n",
1318 | " Date | \n",
1319 | " | \n",
1320 | " | \n",
1321 | " | \n",
1322 | " | \n",
1323 | " | \n",
1324 | " | \n",
1325 | " | \n",
1326 | " | \n",
1327 | "
\n",
1328 | " \n",
1329 | " \n",
1330 | " \n",
1331 | " 2020-03-16 | \n",
1332 | " 3.93 | \n",
1333 | " 4.57 | \n",
1334 | " 3.90 | \n",
1335 | " 4.37 | \n",
1336 | " 4866696.0 | \n",
1337 | " 0.0 | \n",
1338 | " 0.000000 | \n",
1339 | " 0.0 | \n",
1340 | "
\n",
1341 | " \n",
1342 | " 2020-03-17 | \n",
1343 | " 4.40 | \n",
1344 | " 4.65 | \n",
1345 | " 4.11 | \n",
1346 | " 4.23 | \n",
1347 | " 3562210.0 | \n",
1348 | " 0.0 | \n",
1349 | " 0.000000 | \n",
1350 | " -3562210.0 | \n",
1351 | "
\n",
1352 | " \n",
1353 | " 2020-03-18 | \n",
1354 | " 4.10 | \n",
1355 | " 4.25 | \n",
1356 | " 3.50 | \n",
1357 | " 3.77 | \n",
1358 | " 3651709.0 | \n",
1359 | " 0.0 | \n",
1360 | " 0.000000 | \n",
1361 | " -7213919.0 | \n",
1362 | "
\n",
1363 | " \n",
1364 | " 2020-03-19 | \n",
1365 | " 3.71 | \n",
1366 | " 4.20 | \n",
1367 | " 3.55 | \n",
1368 | " 4.19 | \n",
1369 | " 5039539.0 | \n",
1370 | " 0.0 | \n",
1371 | " 43.394834 | \n",
1372 | " -2174380.0 | \n",
1373 | "
\n",
1374 | " \n",
1375 | " 2020-03-20 | \n",
1376 | " 4.08 | \n",
1377 | " 4.08 | \n",
1378 | " 3.65 | \n",
1379 | " 3.76 | \n",
1380 | " 7722194.0 | \n",
1381 | " 0.0 | \n",
1382 | " 29.351457 | \n",
1383 | " -9896574.0 | \n",
1384 | "
\n",
1385 | " \n",
1386 | "
\n",
1387 | "
"
1388 | ],
1389 | "text/plain": [
1390 | " Open High Low Close Volume SMA RSI OBV\n",
1391 | "Date \n",
1392 | "2020-03-16 3.93 4.57 3.90 4.37 4866696.0 0.0 0.000000 0.0\n",
1393 | "2020-03-17 4.40 4.65 4.11 4.23 3562210.0 0.0 0.000000 -3562210.0\n",
1394 | "2020-03-18 4.10 4.25 3.50 3.77 3651709.0 0.0 0.000000 -7213919.0\n",
1395 | "2020-03-19 3.71 4.20 3.55 4.19 5039539.0 0.0 43.394834 -2174380.0\n",
1396 | "2020-03-20 4.08 4.08 3.65 3.76 7722194.0 0.0 29.351457 -9896574.0"
1397 | ]
1398 | },
1399 | "execution_count": 39,
1400 | "metadata": {},
1401 | "output_type": "execute_result"
1402 | }
1403 | ],
1404 | "source": [
1405 | "df.head()"
1406 | ]
1407 | },
1408 | {
1409 | "cell_type": "markdown",
1410 | "metadata": {},
1411 | "source": [
1412 | "# 3. Build Environment and Train"
1413 | ]
1414 | },
1415 | {
1416 | "cell_type": "code",
1417 | "execution_count": 41,
1418 | "metadata": {},
1419 | "outputs": [],
1420 | "source": [
1421 | "env_maker = lambda: env2\n",
1422 | "env = DummyVecEnv([env_maker])"
1423 | ]
1424 | },
1425 | {
1426 | "cell_type": "code",
1427 | "execution_count": 42,
1428 | "metadata": {
1429 | "scrolled": true
1430 | },
1431 | "outputs": [
1432 | {
1433 | "name": "stdout",
1434 | "output_type": "stream",
1435 | "text": [
1436 | "WARNING:tensorflow:From C:\\ProgramData\\Anaconda3\\lib\\site-packages\\stable_baselines\\common\\tf_util.py:191: The name tf.ConfigProto is deprecated. Please use tf.compat.v1.ConfigProto instead.\n",
1437 | "\n",
1438 | "WARNING:tensorflow:From C:\\ProgramData\\Anaconda3\\lib\\site-packages\\stable_baselines\\common\\tf_util.py:200: The name tf.Session is deprecated. Please use tf.compat.v1.Session instead.\n",
1439 | "\n",
1440 | "WARNING:tensorflow:From C:\\ProgramData\\Anaconda3\\lib\\site-packages\\stable_baselines\\common\\policies.py:116: The name tf.variable_scope is deprecated. Please use tf.compat.v1.variable_scope instead.\n",
1441 | "\n",
1442 | "WARNING:tensorflow:From C:\\ProgramData\\Anaconda3\\lib\\site-packages\\stable_baselines\\common\\input.py:25: The name tf.placeholder is deprecated. Please use tf.compat.v1.placeholder instead.\n",
1443 | "\n",
1444 | "WARNING:tensorflow:From C:\\ProgramData\\Anaconda3\\lib\\site-packages\\stable_baselines\\common\\policies.py:420: flatten (from tensorflow.python.layers.core) is deprecated and will be removed in a future version.\n",
1445 | "Instructions for updating:\n",
1446 | "Use keras.layers.flatten instead.\n",
1447 | "WARNING:tensorflow:From C:\\Users\\User\\AppData\\Roaming\\Python\\Python37\\site-packages\\tensorflow_core\\python\\layers\\core.py:332: Layer.apply (from tensorflow.python.keras.engine.base_layer) is deprecated and will be removed in a future version.\n",
1448 | "Instructions for updating:\n",
1449 | "Please use `layer.__call__` method instead.\n",
1450 | "WARNING:tensorflow:From C:\\ProgramData\\Anaconda3\\lib\\site-packages\\stable_baselines\\common\\tf_layers.py:123: The name tf.get_variable is deprecated. Please use tf.compat.v1.get_variable instead.\n",
1451 | "\n",
1452 | "WARNING:tensorflow:From C:\\ProgramData\\Anaconda3\\lib\\site-packages\\stable_baselines\\common\\distributions.py:326: The name tf.random_uniform is deprecated. Please use tf.random.uniform instead.\n",
1453 | "\n",
1454 | "WARNING:tensorflow:From C:\\ProgramData\\Anaconda3\\lib\\site-packages\\stable_baselines\\common\\distributions.py:327: The name tf.log is deprecated. Please use tf.math.log instead.\n",
1455 | "\n",
1456 | "WARNING:tensorflow:From C:\\ProgramData\\Anaconda3\\lib\\site-packages\\stable_baselines\\a2c\\a2c.py:160: The name tf.summary.scalar is deprecated. Please use tf.compat.v1.summary.scalar instead.\n",
1457 | "\n",
1458 | "WARNING:tensorflow:From C:\\ProgramData\\Anaconda3\\lib\\site-packages\\stable_baselines\\common\\tf_util.py:449: The name tf.get_collection is deprecated. Please use tf.compat.v1.get_collection instead.\n",
1459 | "\n",
1460 | "WARNING:tensorflow:From C:\\ProgramData\\Anaconda3\\lib\\site-packages\\stable_baselines\\common\\tf_util.py:449: The name tf.GraphKeys is deprecated. Please use tf.compat.v1.GraphKeys instead.\n",
1461 | "\n",
1462 | "WARNING:tensorflow:From C:\\Users\\User\\AppData\\Roaming\\Python\\Python37\\site-packages\\tensorflow_core\\python\\ops\\clip_ops.py:301: where (from tensorflow.python.ops.array_ops) is deprecated and will be removed in a future version.\n",
1463 | "Instructions for updating:\n",
1464 | "Use tf.where in 2.0, which has the same broadcast rule as np.where\n",
1465 | "WARNING:tensorflow:From C:\\ProgramData\\Anaconda3\\lib\\site-packages\\stable_baselines\\a2c\\a2c.py:184: The name tf.train.RMSPropOptimizer is deprecated. Please use tf.compat.v1.train.RMSPropOptimizer instead.\n",
1466 | "\n",
1467 | "WARNING:tensorflow:From C:\\Users\\User\\AppData\\Roaming\\Python\\Python37\\site-packages\\tensorflow_core\\python\\training\\rmsprop.py:119: calling Ones.__init__ (from tensorflow.python.ops.init_ops) with dtype is deprecated and will be removed in a future version.\n",
1468 | "Instructions for updating:\n",
1469 | "Call initializer instance with the dtype argument instead of passing it to the constructor\n",
1470 | "WARNING:tensorflow:From C:\\ProgramData\\Anaconda3\\lib\\site-packages\\stable_baselines\\a2c\\a2c.py:194: The name tf.global_variables_initializer is deprecated. Please use tf.compat.v1.global_variables_initializer instead.\n",
1471 | "\n",
1472 | "WARNING:tensorflow:From C:\\ProgramData\\Anaconda3\\lib\\site-packages\\stable_baselines\\a2c\\a2c.py:196: The name tf.summary.merge_all is deprecated. Please use tf.compat.v1.summary.merge_all instead.\n",
1473 | "\n",
1474 | "---------------------------------\n",
1475 | "| explained_variance | -467 |\n",
1476 | "| fps | 14 |\n",
1477 | "| nupdates | 1 |\n",
1478 | "| policy_entropy | 0.691 |\n",
1479 | "| total_timesteps | 5 |\n",
1480 | "| value_loss | 0.000654 |\n",
1481 | "---------------------------------\n",
1482 | "---------------------------------\n",
1483 | "| explained_variance | -25.8 |\n",
1484 | "| fps | 380 |\n",
1485 | "| nupdates | 100 |\n",
1486 | "| policy_entropy | 0.691 |\n",
1487 | "| total_timesteps | 500 |\n",
1488 | "| value_loss | 0.364 |\n",
1489 | "---------------------------------\n",
1490 | "---------------------------------\n",
1491 | "| explained_variance | 0.159 |\n",
1492 | "| fps | 439 |\n",
1493 | "| nupdates | 200 |\n",
1494 | "| policy_entropy | 0.68 |\n",
1495 | "| total_timesteps | 1000 |\n",
1496 | "| value_loss | 0.0516 |\n",
1497 | "---------------------------------\n",
1498 | "---------------------------------\n",
1499 | "| explained_variance | 0.332 |\n",
1500 | "| fps | 465 |\n",
1501 | "| nupdates | 300 |\n",
1502 | "| policy_entropy | 0.69 |\n",
1503 | "| total_timesteps | 1500 |\n",
1504 | "| value_loss | 0.127 |\n",
1505 | "---------------------------------\n",
1506 | "---------------------------------\n",
1507 | "| explained_variance | 0.073 |\n",
1508 | "| fps | 477 |\n",
1509 | "| nupdates | 400 |\n",
1510 | "| policy_entropy | 0.683 |\n",
1511 | "| total_timesteps | 2000 |\n",
1512 | "| value_loss | 0.0264 |\n",
1513 | "---------------------------------\n",
1514 | "---------------------------------\n",
1515 | "| explained_variance | 0.229 |\n",
1516 | "| fps | 484 |\n",
1517 | "| nupdates | 500 |\n",
1518 | "| policy_entropy | 0.688 |\n",
1519 | "| total_timesteps | 2500 |\n",
1520 | "| value_loss | 0.0305 |\n",
1521 | "---------------------------------\n",
1522 | "---------------------------------\n",
1523 | "| explained_variance | -0.00671 |\n",
1524 | "| fps | 490 |\n",
1525 | "| nupdates | 600 |\n",
1526 | "| policy_entropy | 0.682 |\n",
1527 | "| total_timesteps | 3000 |\n",
1528 | "| value_loss | 0.00356 |\n",
1529 | "---------------------------------\n",
1530 | "---------------------------------\n",
1531 | "| explained_variance | 0.476 |\n",
1532 | "| fps | 494 |\n",
1533 | "| nupdates | 700 |\n",
1534 | "| policy_entropy | 0.684 |\n",
1535 | "| total_timesteps | 3500 |\n",
1536 | "| value_loss | 0.0242 |\n",
1537 | "---------------------------------\n",
1538 | "---------------------------------\n",
1539 | "| explained_variance | 0.558 |\n",
1540 | "| fps | 498 |\n",
1541 | "| nupdates | 800 |\n",
1542 | "| policy_entropy | 0.685 |\n",
1543 | "| total_timesteps | 4000 |\n",
1544 | "| value_loss | 0.17 |\n",
1545 | "---------------------------------\n",
1546 | "---------------------------------\n",
1547 | "| explained_variance | 0.551 |\n",
1548 | "| fps | 500 |\n",
1549 | "| nupdates | 900 |\n",
1550 | "| policy_entropy | 0.688 |\n",
1551 | "| total_timesteps | 4500 |\n",
1552 | "| value_loss | 0.0382 |\n",
1553 | "---------------------------------\n",
1554 | "---------------------------------\n",
1555 | "| explained_variance | -288 |\n",
1556 | "| fps | 504 |\n",
1557 | "| nupdates | 1000 |\n",
1558 | "| policy_entropy | 0.681 |\n",
1559 | "| total_timesteps | 5000 |\n",
1560 | "| value_loss | 0.152 |\n",
1561 | "---------------------------------\n",
1562 | "---------------------------------\n",
1563 | "| explained_variance | 0.501 |\n",
1564 | "| fps | 507 |\n",
1565 | "| nupdates | 1100 |\n",
1566 | "| policy_entropy | 0.55 |\n",
1567 | "| total_timesteps | 5500 |\n",
1568 | "| value_loss | 0.156 |\n",
1569 | "---------------------------------\n",
1570 | "---------------------------------\n",
1571 | "| explained_variance | -0.744 |\n",
1572 | "| fps | 509 |\n",
1573 | "| nupdates | 1200 |\n",
1574 | "| policy_entropy | 0.686 |\n",
1575 | "| total_timesteps | 6000 |\n",
1576 | "| value_loss | 0.0239 |\n",
1577 | "---------------------------------\n",
1578 | "---------------------------------\n",
1579 | "| explained_variance | 0.13 |\n",
1580 | "| fps | 511 |\n",
1581 | "| nupdates | 1300 |\n",
1582 | "| policy_entropy | 0.56 |\n",
1583 | "| total_timesteps | 6500 |\n",
1584 | "| value_loss | 0.133 |\n",
1585 | "---------------------------------\n",
1586 | "---------------------------------\n",
1587 | "| explained_variance | 0.559 |\n",
1588 | "| fps | 512 |\n",
1589 | "| nupdates | 1400 |\n",
1590 | "| policy_entropy | 0.63 |\n",
1591 | "| total_timesteps | 7000 |\n",
1592 | "| value_loss | 0.0293 |\n",
1593 | "---------------------------------\n",
1594 | "---------------------------------\n",
1595 | "| explained_variance | -218 |\n",
1596 | "| fps | 513 |\n",
1597 | "| nupdates | 1500 |\n",
1598 | "| policy_entropy | 0.288 |\n",
1599 | "| total_timesteps | 7500 |\n",
1600 | "| value_loss | 0.0144 |\n",
1601 | "---------------------------------\n",
1602 | "---------------------------------\n",
1603 | "| explained_variance | 0.434 |\n",
1604 | "| fps | 514 |\n",
1605 | "| nupdates | 1600 |\n",
1606 | "| policy_entropy | 0.633 |\n",
1607 | "| total_timesteps | 8000 |\n",
1608 | "| value_loss | 0.103 |\n",
1609 | "---------------------------------\n"
1610 | ]
1611 | },
1612 | {
1613 | "name": "stdout",
1614 | "output_type": "stream",
1615 | "text": [
1616 | "---------------------------------\n",
1617 | "| explained_variance | -666 |\n",
1618 | "| fps | 514 |\n",
1619 | "| nupdates | 1700 |\n",
1620 | "| policy_entropy | 0.378 |\n",
1621 | "| total_timesteps | 8500 |\n",
1622 | "| value_loss | 0.00894 |\n",
1623 | "---------------------------------\n",
1624 | "---------------------------------\n",
1625 | "| explained_variance | 0.846 |\n",
1626 | "| fps | 514 |\n",
1627 | "| nupdates | 1800 |\n",
1628 | "| policy_entropy | 0.519 |\n",
1629 | "| total_timesteps | 9000 |\n",
1630 | "| value_loss | 0.0529 |\n",
1631 | "---------------------------------\n",
1632 | "---------------------------------\n",
1633 | "| explained_variance | -70.5 |\n",
1634 | "| fps | 515 |\n",
1635 | "| nupdates | 1900 |\n",
1636 | "| policy_entropy | 0.196 |\n",
1637 | "| total_timesteps | 9500 |\n",
1638 | "| value_loss | 0.00208 |\n",
1639 | "---------------------------------\n",
1640 | "---------------------------------\n",
1641 | "| explained_variance | 0.727 |\n",
1642 | "| fps | 515 |\n",
1643 | "| nupdates | 2000 |\n",
1644 | "| policy_entropy | 0.428 |\n",
1645 | "| total_timesteps | 10000 |\n",
1646 | "| value_loss | 0.628 |\n",
1647 | "---------------------------------\n",
1648 | "---------------------------------\n",
1649 | "| explained_variance | -1.03 |\n",
1650 | "| fps | 516 |\n",
1651 | "| nupdates | 2100 |\n",
1652 | "| policy_entropy | 0.472 |\n",
1653 | "| total_timesteps | 10500 |\n",
1654 | "| value_loss | 0.0664 |\n",
1655 | "---------------------------------\n",
1656 | "---------------------------------\n",
1657 | "| explained_variance | 0.888 |\n",
1658 | "| fps | 516 |\n",
1659 | "| nupdates | 2200 |\n",
1660 | "| policy_entropy | 0.34 |\n",
1661 | "| total_timesteps | 11000 |\n",
1662 | "| value_loss | 0.104 |\n",
1663 | "---------------------------------\n",
1664 | "---------------------------------\n",
1665 | "| explained_variance | -0.375 |\n",
1666 | "| fps | 517 |\n",
1667 | "| nupdates | 2300 |\n",
1668 | "| policy_entropy | 0.509 |\n",
1669 | "| total_timesteps | 11500 |\n",
1670 | "| value_loss | 0.131 |\n",
1671 | "---------------------------------\n",
1672 | "---------------------------------\n",
1673 | "| explained_variance | 0.84 |\n",
1674 | "| fps | 517 |\n",
1675 | "| nupdates | 2400 |\n",
1676 | "| policy_entropy | 0.316 |\n",
1677 | "| total_timesteps | 12000 |\n",
1678 | "| value_loss | 0.149 |\n",
1679 | "---------------------------------\n",
1680 | "---------------------------------\n",
1681 | "| explained_variance | 0.0525 |\n",
1682 | "| fps | 517 |\n",
1683 | "| nupdates | 2500 |\n",
1684 | "| policy_entropy | 0.349 |\n",
1685 | "| total_timesteps | 12500 |\n",
1686 | "| value_loss | 0.108 |\n",
1687 | "---------------------------------\n",
1688 | "---------------------------------\n",
1689 | "| explained_variance | -1.12 |\n",
1690 | "| fps | 517 |\n",
1691 | "| nupdates | 2600 |\n",
1692 | "| policy_entropy | 0.326 |\n",
1693 | "| total_timesteps | 13000 |\n",
1694 | "| value_loss | 0.144 |\n",
1695 | "---------------------------------\n",
1696 | "---------------------------------\n",
1697 | "| explained_variance | -108 |\n",
1698 | "| fps | 518 |\n",
1699 | "| nupdates | 2700 |\n",
1700 | "| policy_entropy | 0.362 |\n",
1701 | "| total_timesteps | 13500 |\n",
1702 | "| value_loss | 0.015 |\n",
1703 | "---------------------------------\n",
1704 | "---------------------------------\n",
1705 | "| explained_variance | 0.837 |\n",
1706 | "| fps | 518 |\n",
1707 | "| nupdates | 2800 |\n",
1708 | "| policy_entropy | 0.368 |\n",
1709 | "| total_timesteps | 14000 |\n",
1710 | "| value_loss | 0.00409 |\n",
1711 | "---------------------------------\n",
1712 | "---------------------------------\n",
1713 | "| explained_variance | 0.802 |\n",
1714 | "| fps | 519 |\n",
1715 | "| nupdates | 2900 |\n",
1716 | "| policy_entropy | 0.317 |\n",
1717 | "| total_timesteps | 14500 |\n",
1718 | "| value_loss | 0.0127 |\n",
1719 | "---------------------------------\n",
1720 | "---------------------------------\n",
1721 | "| explained_variance | 0.59 |\n",
1722 | "| fps | 519 |\n",
1723 | "| nupdates | 3000 |\n",
1724 | "| policy_entropy | 0.296 |\n",
1725 | "| total_timesteps | 15000 |\n",
1726 | "| value_loss | 0.0143 |\n",
1727 | "---------------------------------\n",
1728 | "---------------------------------\n",
1729 | "| explained_variance | 0.915 |\n",
1730 | "| fps | 520 |\n",
1731 | "| nupdates | 3100 |\n",
1732 | "| policy_entropy | 0.332 |\n",
1733 | "| total_timesteps | 15500 |\n",
1734 | "| value_loss | 0.00452 |\n",
1735 | "---------------------------------\n",
1736 | "---------------------------------\n",
1737 | "| explained_variance | 0.321 |\n",
1738 | "| fps | 520 |\n",
1739 | "| nupdates | 3200 |\n",
1740 | "| policy_entropy | 0.387 |\n",
1741 | "| total_timesteps | 16000 |\n",
1742 | "| value_loss | 0.0236 |\n",
1743 | "---------------------------------\n",
1744 | "---------------------------------\n",
1745 | "| explained_variance | 0.972 |\n",
1746 | "| fps | 521 |\n",
1747 | "| nupdates | 3300 |\n",
1748 | "| policy_entropy | 0.494 |\n",
1749 | "| total_timesteps | 16500 |\n",
1750 | "| value_loss | 0.00107 |\n",
1751 | "---------------------------------\n",
1752 | "---------------------------------\n",
1753 | "| explained_variance | -20.5 |\n",
1754 | "| fps | 521 |\n",
1755 | "| nupdates | 3400 |\n",
1756 | "| policy_entropy | 0.325 |\n",
1757 | "| total_timesteps | 17000 |\n",
1758 | "| value_loss | 0.0384 |\n",
1759 | "---------------------------------\n",
1760 | "---------------------------------\n",
1761 | "| explained_variance | 0.984 |\n",
1762 | "| fps | 522 |\n",
1763 | "| nupdates | 3500 |\n",
1764 | "| policy_entropy | 0.441 |\n",
1765 | "| total_timesteps | 17500 |\n",
1766 | "| value_loss | 0.00547 |\n",
1767 | "---------------------------------\n",
1768 | "---------------------------------\n",
1769 | "| explained_variance | -3.04 |\n",
1770 | "| fps | 522 |\n",
1771 | "| nupdates | 3600 |\n",
1772 | "| policy_entropy | 0.152 |\n",
1773 | "| total_timesteps | 18000 |\n",
1774 | "| value_loss | 0.00669 |\n",
1775 | "---------------------------------\n",
1776 | "---------------------------------\n",
1777 | "| explained_variance | 0.272 |\n",
1778 | "| fps | 522 |\n",
1779 | "| nupdates | 3700 |\n",
1780 | "| policy_entropy | 0.321 |\n",
1781 | "| total_timesteps | 18500 |\n",
1782 | "| value_loss | 0.00272 |\n",
1783 | "---------------------------------\n",
1784 | "---------------------------------\n",
1785 | "| explained_variance | -29.2 |\n",
1786 | "| fps | 523 |\n",
1787 | "| nupdates | 3800 |\n",
1788 | "| policy_entropy | 0.141 |\n",
1789 | "| total_timesteps | 19000 |\n",
1790 | "| value_loss | 0.0211 |\n",
1791 | "---------------------------------\n",
1792 | "---------------------------------\n",
1793 | "| explained_variance | 0.993 |\n",
1794 | "| fps | 523 |\n",
1795 | "| nupdates | 3900 |\n",
1796 | "| policy_entropy | 0.344 |\n",
1797 | "| total_timesteps | 19500 |\n",
1798 | "| value_loss | 0.0432 |\n",
1799 | "---------------------------------\n",
1800 | "---------------------------------\n",
1801 | "| explained_variance | -152 |\n",
1802 | "| fps | 523 |\n",
1803 | "| nupdates | 4000 |\n",
1804 | "| policy_entropy | 0.129 |\n",
1805 | "| total_timesteps | 20000 |\n",
1806 | "| value_loss | 0.137 |\n",
1807 | "---------------------------------\n",
1808 | "---------------------------------\n",
1809 | "| explained_variance | 0.997 |\n",
1810 | "| fps | 523 |\n",
1811 | "| nupdates | 4100 |\n",
1812 | "| policy_entropy | 0.173 |\n",
1813 | "| total_timesteps | 20500 |\n",
1814 | "| value_loss | 0.0275 |\n",
1815 | "---------------------------------\n",
1816 | "---------------------------------\n",
1817 | "| explained_variance | 0.997 |\n",
1818 | "| fps | 524 |\n",
1819 | "| nupdates | 4200 |\n",
1820 | "| policy_entropy | 0.132 |\n",
1821 | "| total_timesteps | 21000 |\n",
1822 | "| value_loss | 0.000371 |\n",
1823 | "---------------------------------\n",
1824 | "---------------------------------\n",
1825 | "| explained_variance | 1 |\n",
1826 | "| fps | 524 |\n",
1827 | "| nupdates | 4300 |\n",
1828 | "| policy_entropy | 0.09 |\n",
1829 | "| total_timesteps | 21500 |\n",
1830 | "| value_loss | 0.00113 |\n",
1831 | "---------------------------------\n",
1832 | "---------------------------------\n",
1833 | "| explained_variance | 0.966 |\n",
1834 | "| fps | 524 |\n",
1835 | "| nupdates | 4400 |\n",
1836 | "| policy_entropy | 0.0744 |\n",
1837 | "| total_timesteps | 22000 |\n",
1838 | "| value_loss | 0.00829 |\n",
1839 | "---------------------------------\n",
1840 | "---------------------------------\n",
1841 | "| explained_variance | 0.987 |\n",
1842 | "| fps | 524 |\n",
1843 | "| nupdates | 4500 |\n",
1844 | "| policy_entropy | 0.0909 |\n",
1845 | "| total_timesteps | 22500 |\n",
1846 | "| value_loss | 0.0252 |\n",
1847 | "---------------------------------\n",
1848 | "---------------------------------\n",
1849 | "| explained_variance | 0.976 |\n",
1850 | "| fps | 525 |\n",
1851 | "| nupdates | 4600 |\n",
1852 | "| policy_entropy | 0.0546 |\n",
1853 | "| total_timesteps | 23000 |\n",
1854 | "| value_loss | 0.00374 |\n",
1855 | "---------------------------------\n",
1856 | "---------------------------------\n",
1857 | "| explained_variance | 0.967 |\n",
1858 | "| fps | 525 |\n",
1859 | "| nupdates | 4700 |\n",
1860 | "| policy_entropy | 0.0854 |\n",
1861 | "| total_timesteps | 23500 |\n",
1862 | "| value_loss | 0.00123 |\n",
1863 | "---------------------------------\n"
1864 | ]
1865 | },
1866 | {
1867 | "name": "stdout",
1868 | "output_type": "stream",
1869 | "text": [
1870 | "---------------------------------\n",
1871 | "| explained_variance | -2.94 |\n",
1872 | "| fps | 525 |\n",
1873 | "| nupdates | 4800 |\n",
1874 | "| policy_entropy | 0.069 |\n",
1875 | "| total_timesteps | 24000 |\n",
1876 | "| value_loss | 0.000452 |\n",
1877 | "---------------------------------\n",
1878 | "---------------------------------\n",
1879 | "| explained_variance | 0.89 |\n",
1880 | "| fps | 525 |\n",
1881 | "| nupdates | 4900 |\n",
1882 | "| policy_entropy | 0.0423 |\n",
1883 | "| total_timesteps | 24500 |\n",
1884 | "| value_loss | 0.0176 |\n",
1885 | "---------------------------------\n",
1886 | "---------------------------------\n",
1887 | "| explained_variance | -2.31 |\n",
1888 | "| fps | 525 |\n",
1889 | "| nupdates | 5000 |\n",
1890 | "| policy_entropy | 0.0696 |\n",
1891 | "| total_timesteps | 25000 |\n",
1892 | "| value_loss | 0.000334 |\n",
1893 | "---------------------------------\n",
1894 | "---------------------------------\n",
1895 | "| explained_variance | 0.953 |\n",
1896 | "| fps | 525 |\n",
1897 | "| nupdates | 5100 |\n",
1898 | "| policy_entropy | 0.0813 |\n",
1899 | "| total_timesteps | 25500 |\n",
1900 | "| value_loss | 0.00272 |\n",
1901 | "---------------------------------\n",
1902 | "---------------------------------\n",
1903 | "| explained_variance | 0.178 |\n",
1904 | "| fps | 526 |\n",
1905 | "| nupdates | 5200 |\n",
1906 | "| policy_entropy | 0.0713 |\n",
1907 | "| total_timesteps | 26000 |\n",
1908 | "| value_loss | 0.000402 |\n",
1909 | "---------------------------------\n",
1910 | "---------------------------------\n",
1911 | "| explained_variance | -0.802 |\n",
1912 | "| fps | 526 |\n",
1913 | "| nupdates | 5300 |\n",
1914 | "| policy_entropy | 0.0364 |\n",
1915 | "| total_timesteps | 26500 |\n",
1916 | "| value_loss | 0.00977 |\n",
1917 | "---------------------------------\n",
1918 | "---------------------------------\n",
1919 | "| explained_variance | 0.942 |\n",
1920 | "| fps | 526 |\n",
1921 | "| nupdates | 5400 |\n",
1922 | "| policy_entropy | 0.0623 |\n",
1923 | "| total_timesteps | 27000 |\n",
1924 | "| value_loss | 0.000934 |\n",
1925 | "---------------------------------\n",
1926 | "---------------------------------\n",
1927 | "| explained_variance | 0.995 |\n",
1928 | "| fps | 526 |\n",
1929 | "| nupdates | 5500 |\n",
1930 | "| policy_entropy | 0.0254 |\n",
1931 | "| total_timesteps | 27500 |\n",
1932 | "| value_loss | 0.00379 |\n",
1933 | "---------------------------------\n",
1934 | "---------------------------------\n",
1935 | "| explained_variance | 0.995 |\n",
1936 | "| fps | 526 |\n",
1937 | "| nupdates | 5600 |\n",
1938 | "| policy_entropy | 0.0692 |\n",
1939 | "| total_timesteps | 28000 |\n",
1940 | "| value_loss | 0.000541 |\n",
1941 | "---------------------------------\n",
1942 | "---------------------------------\n",
1943 | "| explained_variance | 0.999 |\n",
1944 | "| fps | 526 |\n",
1945 | "| nupdates | 5700 |\n",
1946 | "| policy_entropy | 0.0144 |\n",
1947 | "| total_timesteps | 28500 |\n",
1948 | "| value_loss | 0.000932 |\n",
1949 | "---------------------------------\n",
1950 | "---------------------------------\n",
1951 | "| explained_variance | 0.983 |\n",
1952 | "| fps | 526 |\n",
1953 | "| nupdates | 5800 |\n",
1954 | "| policy_entropy | 0.0664 |\n",
1955 | "| total_timesteps | 29000 |\n",
1956 | "| value_loss | 0.00109 |\n",
1957 | "---------------------------------\n",
1958 | "---------------------------------\n",
1959 | "| explained_variance | 0.999 |\n",
1960 | "| fps | 527 |\n",
1961 | "| nupdates | 5900 |\n",
1962 | "| policy_entropy | 0.0195 |\n",
1963 | "| total_timesteps | 29500 |\n",
1964 | "| value_loss | 0.00217 |\n",
1965 | "---------------------------------\n",
1966 | "---------------------------------\n",
1967 | "| explained_variance | 0.988 |\n",
1968 | "| fps | 527 |\n",
1969 | "| nupdates | 6000 |\n",
1970 | "| policy_entropy | 0.0624 |\n",
1971 | "| total_timesteps | 30000 |\n",
1972 | "| value_loss | 0.000422 |\n",
1973 | "---------------------------------\n",
1974 | "---------------------------------\n",
1975 | "| explained_variance | 1 |\n",
1976 | "| fps | 527 |\n",
1977 | "| nupdates | 6100 |\n",
1978 | "| policy_entropy | 0.025 |\n",
1979 | "| total_timesteps | 30500 |\n",
1980 | "| value_loss | 0.00031 |\n",
1981 | "---------------------------------\n",
1982 | "---------------------------------\n",
1983 | "| explained_variance | 0.81 |\n",
1984 | "| fps | 526 |\n",
1985 | "| nupdates | 6200 |\n",
1986 | "| policy_entropy | 0.0487 |\n",
1987 | "| total_timesteps | 31000 |\n",
1988 | "| value_loss | 0.000109 |\n",
1989 | "---------------------------------\n",
1990 | "---------------------------------\n",
1991 | "| explained_variance | 0.957 |\n",
1992 | "| fps | 526 |\n",
1993 | "| nupdates | 6300 |\n",
1994 | "| policy_entropy | 0.0444 |\n",
1995 | "| total_timesteps | 31500 |\n",
1996 | "| value_loss | 0.000846 |\n",
1997 | "---------------------------------\n",
1998 | "---------------------------------\n",
1999 | "| explained_variance | -1.13 |\n",
2000 | "| fps | 526 |\n",
2001 | "| nupdates | 6400 |\n",
2002 | "| policy_entropy | 0.107 |\n",
2003 | "| total_timesteps | 32000 |\n",
2004 | "| value_loss | 0.102 |\n",
2005 | "---------------------------------\n",
2006 | "---------------------------------\n",
2007 | "| explained_variance | 0.816 |\n",
2008 | "| fps | 527 |\n",
2009 | "| nupdates | 6500 |\n",
2010 | "| policy_entropy | 0.0605 |\n",
2011 | "| total_timesteps | 32500 |\n",
2012 | "| value_loss | 0.00951 |\n",
2013 | "---------------------------------\n",
2014 | "---------------------------------\n",
2015 | "| explained_variance | 0.917 |\n",
2016 | "| fps | 527 |\n",
2017 | "| nupdates | 6600 |\n",
2018 | "| policy_entropy | 0.111 |\n",
2019 | "| total_timesteps | 33000 |\n",
2020 | "| value_loss | 0.00398 |\n",
2021 | "---------------------------------\n",
2022 | "---------------------------------\n",
2023 | "| explained_variance | 0.891 |\n",
2024 | "| fps | 527 |\n",
2025 | "| nupdates | 6700 |\n",
2026 | "| policy_entropy | 0.0583 |\n",
2027 | "| total_timesteps | 33500 |\n",
2028 | "| value_loss | 0.00824 |\n",
2029 | "---------------------------------\n",
2030 | "---------------------------------\n",
2031 | "| explained_variance | 0.998 |\n",
2032 | "| fps | 527 |\n",
2033 | "| nupdates | 6800 |\n",
2034 | "| policy_entropy | 0.19 |\n",
2035 | "| total_timesteps | 34000 |\n",
2036 | "| value_loss | 9.06e-05 |\n",
2037 | "---------------------------------\n",
2038 | "---------------------------------\n",
2039 | "| explained_variance | 0.995 |\n",
2040 | "| fps | 527 |\n",
2041 | "| nupdates | 6900 |\n",
2042 | "| policy_entropy | 0.157 |\n",
2043 | "| total_timesteps | 34500 |\n",
2044 | "| value_loss | 0.000606 |\n",
2045 | "---------------------------------\n",
2046 | "---------------------------------\n",
2047 | "| explained_variance | 0.997 |\n",
2048 | "| fps | 527 |\n",
2049 | "| nupdates | 7000 |\n",
2050 | "| policy_entropy | 0.146 |\n",
2051 | "| total_timesteps | 35000 |\n",
2052 | "| value_loss | 0.000427 |\n",
2053 | "---------------------------------\n",
2054 | "---------------------------------\n",
2055 | "| explained_variance | -2.64 |\n",
2056 | "| fps | 527 |\n",
2057 | "| nupdates | 7100 |\n",
2058 | "| policy_entropy | 0.114 |\n",
2059 | "| total_timesteps | 35500 |\n",
2060 | "| value_loss | 0.00557 |\n",
2061 | "---------------------------------\n",
2062 | "---------------------------------\n",
2063 | "| explained_variance | 0.978 |\n",
2064 | "| fps | 527 |\n",
2065 | "| nupdates | 7200 |\n",
2066 | "| policy_entropy | 0.182 |\n",
2067 | "| total_timesteps | 36000 |\n",
2068 | "| value_loss | 0.000835 |\n",
2069 | "---------------------------------\n",
2070 | "---------------------------------\n",
2071 | "| explained_variance | -3.59 |\n",
2072 | "| fps | 527 |\n",
2073 | "| nupdates | 7300 |\n",
2074 | "| policy_entropy | 0.145 |\n",
2075 | "| total_timesteps | 36500 |\n",
2076 | "| value_loss | 0.0131 |\n",
2077 | "---------------------------------\n",
2078 | "---------------------------------\n",
2079 | "| explained_variance | 0.808 |\n",
2080 | "| fps | 527 |\n",
2081 | "| nupdates | 7400 |\n",
2082 | "| policy_entropy | 0.145 |\n",
2083 | "| total_timesteps | 37000 |\n",
2084 | "| value_loss | 0.00111 |\n",
2085 | "---------------------------------\n",
2086 | "---------------------------------\n",
2087 | "| explained_variance | -0.0716 |\n",
2088 | "| fps | 527 |\n",
2089 | "| nupdates | 7500 |\n",
2090 | "| policy_entropy | 0.188 |\n",
2091 | "| total_timesteps | 37500 |\n",
2092 | "| value_loss | 0.00112 |\n",
2093 | "---------------------------------\n",
2094 | "---------------------------------\n",
2095 | "| explained_variance | 1 |\n",
2096 | "| fps | 527 |\n",
2097 | "| nupdates | 7600 |\n",
2098 | "| policy_entropy | 0.0702 |\n",
2099 | "| total_timesteps | 38000 |\n",
2100 | "| value_loss | 0.000107 |\n",
2101 | "---------------------------------\n",
2102 | "---------------------------------\n",
2103 | "| explained_variance | 0.979 |\n",
2104 | "| fps | 527 |\n",
2105 | "| nupdates | 7700 |\n",
2106 | "| policy_entropy | 0.181 |\n",
2107 | "| total_timesteps | 38500 |\n",
2108 | "| value_loss | 0.00362 |\n",
2109 | "---------------------------------\n",
2110 | "---------------------------------\n",
2111 | "| explained_variance | 1 |\n",
2112 | "| fps | 527 |\n",
2113 | "| nupdates | 7800 |\n",
2114 | "| policy_entropy | 0.0209 |\n",
2115 | "| total_timesteps | 39000 |\n",
2116 | "| value_loss | 0.000694 |\n",
2117 | "---------------------------------\n"
2118 | ]
2119 | },
2120 | {
2121 | "name": "stdout",
2122 | "output_type": "stream",
2123 | "text": [
2124 | "---------------------------------\n",
2125 | "| explained_variance | 0.985 |\n",
2126 | "| fps | 527 |\n",
2127 | "| nupdates | 7900 |\n",
2128 | "| policy_entropy | 0.0404 |\n",
2129 | "| total_timesteps | 39500 |\n",
2130 | "| value_loss | 0.00274 |\n",
2131 | "---------------------------------\n",
2132 | "---------------------------------\n",
2133 | "| explained_variance | 1 |\n",
2134 | "| fps | 527 |\n",
2135 | "| nupdates | 8000 |\n",
2136 | "| policy_entropy | 0.0199 |\n",
2137 | "| total_timesteps | 40000 |\n",
2138 | "| value_loss | 0.00167 |\n",
2139 | "---------------------------------\n",
2140 | "---------------------------------\n",
2141 | "| explained_variance | 1 |\n",
2142 | "| fps | 526 |\n",
2143 | "| nupdates | 8100 |\n",
2144 | "| policy_entropy | 0.02 |\n",
2145 | "| total_timesteps | 40500 |\n",
2146 | "| value_loss | 8.88e-06 |\n",
2147 | "---------------------------------\n",
2148 | "---------------------------------\n",
2149 | "| explained_variance | 1 |\n",
2150 | "| fps | 526 |\n",
2151 | "| nupdates | 8200 |\n",
2152 | "| policy_entropy | 0.0312 |\n",
2153 | "| total_timesteps | 41000 |\n",
2154 | "| value_loss | 0.000449 |\n",
2155 | "---------------------------------\n",
2156 | "---------------------------------\n",
2157 | "| explained_variance | 0.999 |\n",
2158 | "| fps | 526 |\n",
2159 | "| nupdates | 8300 |\n",
2160 | "| policy_entropy | 0.0128 |\n",
2161 | "| total_timesteps | 41500 |\n",
2162 | "| value_loss | 5.99e-05 |\n",
2163 | "---------------------------------\n",
2164 | "---------------------------------\n",
2165 | "| explained_variance | 0.996 |\n",
2166 | "| fps | 526 |\n",
2167 | "| nupdates | 8400 |\n",
2168 | "| policy_entropy | 0.0407 |\n",
2169 | "| total_timesteps | 42000 |\n",
2170 | "| value_loss | 0.000844 |\n",
2171 | "---------------------------------\n",
2172 | "---------------------------------\n",
2173 | "| explained_variance | -0.536 |\n",
2174 | "| fps | 526 |\n",
2175 | "| nupdates | 8500 |\n",
2176 | "| policy_entropy | 0.0549 |\n",
2177 | "| total_timesteps | 42500 |\n",
2178 | "| value_loss | 0.000144 |\n",
2179 | "---------------------------------\n",
2180 | "---------------------------------\n",
2181 | "| explained_variance | 0.997 |\n",
2182 | "| fps | 526 |\n",
2183 | "| nupdates | 8600 |\n",
2184 | "| policy_entropy | 0.0102 |\n",
2185 | "| total_timesteps | 43000 |\n",
2186 | "| value_loss | 0.000419 |\n",
2187 | "---------------------------------\n",
2188 | "---------------------------------\n",
2189 | "| explained_variance | -4.28 |\n",
2190 | "| fps | 526 |\n",
2191 | "| nupdates | 8700 |\n",
2192 | "| policy_entropy | 0.024 |\n",
2193 | "| total_timesteps | 43500 |\n",
2194 | "| value_loss | 0.00111 |\n",
2195 | "---------------------------------\n",
2196 | "---------------------------------\n",
2197 | "| explained_variance | 0.998 |\n",
2198 | "| fps | 526 |\n",
2199 | "| nupdates | 8800 |\n",
2200 | "| policy_entropy | 0.0096 |\n",
2201 | "| total_timesteps | 44000 |\n",
2202 | "| value_loss | 0.00163 |\n",
2203 | "---------------------------------\n",
2204 | "---------------------------------\n",
2205 | "| explained_variance | 0.52 |\n",
2206 | "| fps | 526 |\n",
2207 | "| nupdates | 8900 |\n",
2208 | "| policy_entropy | 0.0676 |\n",
2209 | "| total_timesteps | 44500 |\n",
2210 | "| value_loss | 0.000124 |\n",
2211 | "---------------------------------\n",
2212 | "---------------------------------\n",
2213 | "| explained_variance | 0.994 |\n",
2214 | "| fps | 526 |\n",
2215 | "| nupdates | 9000 |\n",
2216 | "| policy_entropy | 0.00787 |\n",
2217 | "| total_timesteps | 45000 |\n",
2218 | "| value_loss | 0.00129 |\n",
2219 | "---------------------------------\n",
2220 | "---------------------------------\n",
2221 | "| explained_variance | 0.994 |\n",
2222 | "| fps | 526 |\n",
2223 | "| nupdates | 9100 |\n",
2224 | "| policy_entropy | 0.0742 |\n",
2225 | "| total_timesteps | 45500 |\n",
2226 | "| value_loss | 0.000395 |\n",
2227 | "---------------------------------\n",
2228 | "---------------------------------\n",
2229 | "| explained_variance | 1 |\n",
2230 | "| fps | 526 |\n",
2231 | "| nupdates | 9200 |\n",
2232 | "| policy_entropy | 0.00514 |\n",
2233 | "| total_timesteps | 46000 |\n",
2234 | "| value_loss | 0.00014 |\n",
2235 | "---------------------------------\n",
2236 | "---------------------------------\n",
2237 | "| explained_variance | 0.99 |\n",
2238 | "| fps | 526 |\n",
2239 | "| nupdates | 9300 |\n",
2240 | "| policy_entropy | 0.0903 |\n",
2241 | "| total_timesteps | 46500 |\n",
2242 | "| value_loss | 0.00019 |\n",
2243 | "---------------------------------\n",
2244 | "---------------------------------\n",
2245 | "| explained_variance | 1 |\n",
2246 | "| fps | 525 |\n",
2247 | "| nupdates | 9400 |\n",
2248 | "| policy_entropy | 0.0135 |\n",
2249 | "| total_timesteps | 47000 |\n",
2250 | "| value_loss | 0.00026 |\n",
2251 | "---------------------------------\n",
2252 | "---------------------------------\n",
2253 | "| explained_variance | 0.973 |\n",
2254 | "| fps | 525 |\n",
2255 | "| nupdates | 9500 |\n",
2256 | "| policy_entropy | 0.0169 |\n",
2257 | "| total_timesteps | 47500 |\n",
2258 | "| value_loss | 0.00347 |\n",
2259 | "---------------------------------\n",
2260 | "---------------------------------\n",
2261 | "| explained_variance | 1 |\n",
2262 | "| fps | 525 |\n",
2263 | "| nupdates | 9600 |\n",
2264 | "| policy_entropy | 0.00614 |\n",
2265 | "| total_timesteps | 48000 |\n",
2266 | "| value_loss | 0.000452 |\n",
2267 | "---------------------------------\n",
2268 | "---------------------------------\n",
2269 | "| explained_variance | 0.999 |\n",
2270 | "| fps | 525 |\n",
2271 | "| nupdates | 9700 |\n",
2272 | "| policy_entropy | 0.0218 |\n",
2273 | "| total_timesteps | 48500 |\n",
2274 | "| value_loss | 0.00041 |\n",
2275 | "---------------------------------\n"
2276 | ]
2277 | },
2278 | {
2279 | "ename": "KeyboardInterrupt",
2280 | "evalue": "",
2281 | "output_type": "error",
2282 | "traceback": [
2283 | "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
2284 | "\u001b[1;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)",
2285 | "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[0mmodel\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mA2C\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'MlpLstmPolicy'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0menv\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mverbose\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0mmodel\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mlearn\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mtotal_timesteps\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m1000000\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
2286 | "\u001b[1;32mC:\\ProgramData\\Anaconda3\\lib\\site-packages\\stable_baselines\\a2c\\a2c.py\u001b[0m in \u001b[0;36mlearn\u001b[1;34m(self, total_timesteps, callback, log_interval, tb_log_name, reset_num_timesteps)\u001b[0m\n\u001b[0;32m 261\u001b[0m \u001b[0mcallback\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mon_rollout_start\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 262\u001b[0m \u001b[1;31m# true_reward is the reward without discount\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 263\u001b[1;33m \u001b[0mrollout\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mrunner\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mrun\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mcallback\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 264\u001b[0m \u001b[1;31m# unpack\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 265\u001b[0m \u001b[0mobs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mstates\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mrewards\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mmasks\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mactions\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mvalues\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mep_infos\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtrue_reward\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mrollout\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
2287 | "\u001b[1;32mC:\\ProgramData\\Anaconda3\\lib\\site-packages\\stable_baselines\\common\\runners.py\u001b[0m in \u001b[0;36mrun\u001b[1;34m(self, callback)\u001b[0m\n\u001b[0;32m 46\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcallback\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mcallback\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 47\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcontinue_training\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;32mTrue\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 48\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_run\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 49\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 50\u001b[0m \u001b[1;33m@\u001b[0m\u001b[0mabstractmethod\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
2288 | "\u001b[1;32mC:\\ProgramData\\Anaconda3\\lib\\site-packages\\stable_baselines\\a2c\\a2c.py\u001b[0m in \u001b[0;36m_run\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 350\u001b[0m \u001b[0mep_infos\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 351\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0m_\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mn_steps\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 352\u001b[1;33m \u001b[0mactions\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mvalues\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mstates\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0m_\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmodel\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mstep\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mobs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mstates\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdones\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 353\u001b[0m \u001b[0mmb_obs\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcopy\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mobs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 354\u001b[0m \u001b[0mmb_actions\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mactions\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
2289 | "\u001b[1;32mC:\\ProgramData\\Anaconda3\\lib\\site-packages\\stable_baselines\\common\\policies.py\u001b[0m in \u001b[0;36mstep\u001b[1;34m(self, obs, state, mask, deterministic)\u001b[0m\n\u001b[0;32m 506\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 507\u001b[0m return self.sess.run([self.action, self.value_flat, self.snew, self.neglogp],\n\u001b[1;32m--> 508\u001b[1;33m {self.obs_ph: obs, self.states_ph: state, self.dones_ph: mask})\n\u001b[0m\u001b[0;32m 509\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 510\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mproba_step\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mobs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mstate\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mNone\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mmask\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mNone\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
2290 | "\u001b[1;32m~\\AppData\\Roaming\\Python\\Python37\\site-packages\\tensorflow_core\\python\\client\\session.py\u001b[0m in \u001b[0;36mrun\u001b[1;34m(self, fetches, feed_dict, options, run_metadata)\u001b[0m\n\u001b[0;32m 954\u001b[0m \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 955\u001b[0m result = self._run(None, fetches, feed_dict, options_ptr,\n\u001b[1;32m--> 956\u001b[1;33m run_metadata_ptr)\n\u001b[0m\u001b[0;32m 957\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mrun_metadata\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 958\u001b[0m \u001b[0mproto_data\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mtf_session\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mTF_GetBuffer\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mrun_metadata_ptr\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
2291 | "\u001b[1;32m~\\AppData\\Roaming\\Python\\Python37\\site-packages\\tensorflow_core\\python\\client\\session.py\u001b[0m in \u001b[0;36m_run\u001b[1;34m(self, handle, fetches, feed_dict, options, run_metadata)\u001b[0m\n\u001b[0;32m 1178\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mfinal_fetches\u001b[0m \u001b[1;32mor\u001b[0m \u001b[0mfinal_targets\u001b[0m \u001b[1;32mor\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0mhandle\u001b[0m \u001b[1;32mand\u001b[0m \u001b[0mfeed_dict_tensor\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1179\u001b[0m results = self._do_run(handle, final_targets, final_fetches,\n\u001b[1;32m-> 1180\u001b[1;33m feed_dict_tensor, options, run_metadata)\n\u001b[0m\u001b[0;32m 1181\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1182\u001b[0m \u001b[0mresults\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
2292 | "\u001b[1;32m~\\AppData\\Roaming\\Python\\Python37\\site-packages\\tensorflow_core\\python\\client\\session.py\u001b[0m in \u001b[0;36m_do_run\u001b[1;34m(self, handle, target_list, fetch_list, feed_dict, options, run_metadata)\u001b[0m\n\u001b[0;32m 1357\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mhandle\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1358\u001b[0m return self._do_call(_run_fn, feeds, fetches, targets, options,\n\u001b[1;32m-> 1359\u001b[1;33m run_metadata)\n\u001b[0m\u001b[0;32m 1360\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1361\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_do_call\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0m_prun_fn\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mhandle\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mfeeds\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mfetches\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
2293 | "\u001b[1;32m~\\AppData\\Roaming\\Python\\Python37\\site-packages\\tensorflow_core\\python\\client\\session.py\u001b[0m in \u001b[0;36m_do_call\u001b[1;34m(self, fn, *args)\u001b[0m\n\u001b[0;32m 1363\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0m_do_call\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mfn\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m*\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1364\u001b[0m \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1365\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mfn\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 1366\u001b[0m \u001b[1;32mexcept\u001b[0m \u001b[0merrors\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mOpError\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1367\u001b[0m \u001b[0mmessage\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mcompat\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mas_text\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0me\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmessage\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
2294 | "\u001b[1;32m~\\AppData\\Roaming\\Python\\Python37\\site-packages\\tensorflow_core\\python\\client\\session.py\u001b[0m in \u001b[0;36m_run_fn\u001b[1;34m(feed_dict, fetch_list, target_list, options, run_metadata)\u001b[0m\n\u001b[0;32m 1348\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_extend_graph\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1349\u001b[0m return self._call_tf_sessionrun(options, feed_dict, fetch_list,\n\u001b[1;32m-> 1350\u001b[1;33m target_list, run_metadata)\n\u001b[0m\u001b[0;32m 1351\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1352\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0m_prun_fn\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mhandle\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mfeed_dict\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mfetch_list\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
2295 | "\u001b[1;32m~\\AppData\\Roaming\\Python\\Python37\\site-packages\\tensorflow_core\\python\\client\\session.py\u001b[0m in \u001b[0;36m_call_tf_sessionrun\u001b[1;34m(self, options, feed_dict, fetch_list, target_list, run_metadata)\u001b[0m\n\u001b[0;32m 1441\u001b[0m return tf_session.TF_SessionRun_wrapper(self._session, options, feed_dict,\n\u001b[0;32m 1442\u001b[0m \u001b[0mfetch_list\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtarget_list\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1443\u001b[1;33m run_metadata)\n\u001b[0m\u001b[0;32m 1444\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1445\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0m_call_tf_sessionprun\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mhandle\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mfeed_dict\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mfetch_list\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
2296 | "\u001b[1;31mKeyboardInterrupt\u001b[0m: "
2297 | ]
2298 | }
2299 | ],
2300 | "source": [
2301 | "model = A2C('MlpLstmPolicy', env, verbose=1) \n",
2302 | "model.learn(total_timesteps=1000000)"
2303 | ]
2304 | },
2305 | {
2306 | "cell_type": "markdown",
2307 | "metadata": {},
2308 | "source": [
2309 | "# 4. Evaluation"
2310 | ]
2311 | },
2312 | {
2313 | "cell_type": "code",
2314 | "execution_count": 45,
2315 | "metadata": {},
2316 | "outputs": [
2317 | {
2318 | "name": "stdout",
2319 | "output_type": "stream",
2320 | "text": [
2321 | "info {'total_reward': 16.17, 'total_profit': 1.3591332483648229, 'position': 0}\n"
2322 | ]
2323 | }
2324 | ],
2325 | "source": [
2326 | "env = MyCustomEnv(df=df, window_size=12, frame_bound=(80,250))\n",
2327 | "obs = env.reset()\n",
2328 | "while True: \n",
2329 | " obs = obs[np.newaxis, ...]\n",
2330 | " action, _states = model.predict(obs)\n",
2331 | " obs, rewards, done, info = env.step(action)\n",
2332 | " if done:\n",
2333 | " print(\"info\", info)\n",
2334 | " break"
2335 | ]
2336 | },
2337 | {
2338 | "cell_type": "code",
2339 | "execution_count": 46,
2340 | "metadata": {},
2341 | "outputs": [
2342 | {
2343 | "data": {
2344 | "image/png": "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\n",
2345 | "text/plain": [
2346 | ""
2347 | ]
2348 | },
2349 | "metadata": {
2350 | "needs_background": "light"
2351 | },
2352 | "output_type": "display_data"
2353 | }
2354 | ],
2355 | "source": [
2356 | "plt.figure(figsize=(15,6))\n",
2357 | "plt.cla()\n",
2358 | "env.render_all()\n",
2359 | "plt.show()"
2360 | ]
2361 | },
2362 | {
2363 | "cell_type": "code",
2364 | "execution_count": null,
2365 | "metadata": {},
2366 | "outputs": [],
2367 | "source": []
2368 | }
2369 | ],
2370 | "metadata": {
2371 | "kernelspec": {
2372 | "display_name": "Python 3",
2373 | "language": "python",
2374 | "name": "python3"
2375 | },
2376 | "language_info": {
2377 | "codemirror_mode": {
2378 | "name": "ipython",
2379 | "version": 3
2380 | },
2381 | "file_extension": ".py",
2382 | "mimetype": "text/x-python",
2383 | "name": "python",
2384 | "nbconvert_exporter": "python",
2385 | "pygments_lexer": "ipython3",
2386 | "version": "3.7.3"
2387 | }
2388 | },
2389 | "nbformat": 4,
2390 | "nbformat_minor": 2
2391 | }
2392 |
--------------------------------------------------------------------------------
/data/gmedata.csv:
--------------------------------------------------------------------------------
1 | Date,Open,High,Low,Close,Volume
2 | 03/12/2021,"275.00","295.50","262.27","264.50","25,845,900"
3 | 03/11/2021,"241.64","281.50","232.60","260.00","28,312,490"
4 | 03/10/2021,"269.43","348.50","172.00","265.00","71,570,570"
5 | 03/09/2021,"217.71","249.85","208.51","246.90","39,099,328"
6 | 03/08/2021,"154.89","210.87","146.10","194.50","63,565,621"
7 | 03/05/2021,"128.17","151.53","127.50","137.74","30,733,670"
8 | 03/04/2021,"125.00","147.87","115.30","132.35","32,606,891"
9 | 03/03/2021,"122.51","127.75","113.12","124.18","19,273,881"
10 | 03/02/2021,"116.93","133.20","112.20","118.18","33,783,039"
11 | 03/01/2021,"104.54","133.99","99.97","120.40","49,793,969"
12 | 02/26/2021,"117.46","142.90","86.00","101.74","92,194,148"
13 | 02/25/2021,"169.56","184.68","101.00","108.73","150,308,797"
14 | 02/24/2021,"44.70","91.71","44.70","91.71","83,111,742"
15 | 02/23/2021,"44.97","46.23","40.00","44.97","7,565,215"
16 | 02/22/2021,"46.69","48.51","42.40","46.00","19,476,020"
17 | 02/19/2021,"41.28","43.89","38.50","40.59","14,828,240"
18 | 02/18/2021,"48.49","48.87","40.65","40.69","23,990,561"
19 | 02/17/2021,"49.77","51.19","44.56","45.94","9,260,795"
20 | 02/16/2021,"52.66","53.50","49.04","49.51","8,175,030"
21 | 02/12/2021,"50.75","55.24","48.05","52.40","14,573,260"
22 | 02/11/2021,"50.01","55.32","48.22","51.10","13,056,730"
23 | 02/10/2021,"50.77","62.83","46.55","51.20","36,455,039"
24 | 02/09/2021,"56.61","57.00","46.52","50.31","26,843,080"
25 | 02/08/2021,"72.41","72.66","58.02","60.00","25,687,279"
26 | 02/05/2021,"54.04","95.00","51.09","63.77","81,345,008"
27 | 02/04/2021,"91.19","91.50","53.33","53.50","62,427,281"
28 | 02/03/2021,"112.01","113.40","85.25","92.41","42,698,512"
29 | 02/02/2021,"140.76","158.00","74.22","90.00","78,183,070"
30 | 02/01/2021,"316.56","322.00","212.00","225.00","37,382,152"
31 | 01/29/2021,"379.71","413.98","250.00","325.00","50,566,059"
32 | 01/28/2021,"265.00","483.00","112.25","193.60","58,815,809"
33 | 01/27/2021,"354.83","380.00","249.00","347.51","93,396,672"
34 | 01/26/2021,"88.56","150.00","80.20","147.98","178,588,000"
35 | 01/25/2021,"96.73","159.18","61.13","76.79","177,874,000"
36 | 01/22/2021,"42.59","76.76","42.32","65.01","197,157,906"
37 | 01/21/2021,"39.23","44.75","37.00","43.03","57,079,754"
38 | 01/20/2021,"37.37","41.19","36.06","39.12","33,471,789"
39 | 01/19/2021,"41.55","45.52","36.64","39.36","74,721,922"
40 | 01/15/2021,"38.49","40.75","34.01","35.50","46,866,359"
41 | 01/14/2021,"38.09","43.06","33.05","39.91","93,717,406"
42 | 01/13/2021,"20.42","38.65","20.03","31.40","144,501,703"
43 | 01/12/2021,"19.96","20.40","19.32","19.95","7,060,665"
44 | 01/11/2021,"19.41","20.65","19.01","19.94","14,927,610"
45 | 01/08/2021,"18.18","18.30","17.08","17.69","6,481,960"
46 | 01/07/2021,"18.47","19.45","18.02","18.08","6,129,276"
47 | 01/06/2021,"17.34","18.98","17.33","18.36","6,056,248"
48 | 01/05/2021,"17.35","18.08","17.23","17.37","4,961,457"
49 | 01/04/2021,"19.00","19.10","17.15","17.25","10,022,470"
50 | 12/31/2020,"19.25","19.80","18.80","18.84","6,922,652"
51 | 12/30/2020,"19.38","20.00","18.85","19.26","5,934,391"
52 | 12/29/2020,"20.82","21.07","18.56","19.38","9,241,441"
53 | 12/28/2020,"21.31","21.97","20.35","20.99","8,965,858"
54 | 12/24/2020,"21.01","21.48","19.95","20.15","6,262,174"
55 | 12/23/2020,"20.17","22.35","19.13","20.57","25,830,260"
56 | 12/22/2020,"16.22","20.04","16.15","19.46","30,687,721"
57 | 12/21/2020,"15.81","16.35","15.28","15.53","9,876,128"
58 | 12/18/2020,"15.78","16.30","15.18","15.63","16,618,779"
59 | 12/17/2020,"13.96","14.98","13.59","14.83","8,194,902"
60 | 12/16/2020,"13.96","14.31","13.58","13.85","5,865,123"
61 | 12/15/2020,"12.78","14.02","12.48","13.85","8,192,856"
62 | 12/14/2020,"13.34","13.43","12.14","12.72","10,007,090"
63 | 12/11/2020,"13.91","14.00","13.02","13.31","7,496,868"
64 | 12/10/2020,"13.12","14.41","13.05","14.12","7,558,922"
65 | 12/09/2020,"13.92","14.73","13.23","13.66","24,357,939"
66 | 12/08/2020,"16.37","17.21","15.93","16.94","16,120,160"
67 | 12/07/2020,"17.00","17.50","16.22","16.35","7,386,258"
68 | 12/04/2020,"16.30","17.29","16.26","16.90","8,972,672"
69 | 12/03/2020,"16.48","16.64","15.87","16.12","6,294,965"
70 | 12/02/2020,"15.70","16.68","15.38","16.58","7,883,380"
71 | 12/01/2020,"17.11","17.40","15.76","15.80","12,666,030"
72 | 11/30/2020,"18.17","19.42","16.56","16.56","31,983,500"
73 | 11/27/2020,"15.29","16.74","14.88","16.08","12,504,200"
74 | 11/25/2020,"13.60","15.25","13.42","14.75","8,860,092"
75 | 11/24/2020,"14.23","14.26","13.30","13.67","7,186,710"
76 | 11/23/2020,"12.90","14.12","12.67","13.90","9,607,973"
77 | 11/20/2020,"12.55","13.46","12.54","12.71","8,402,347"
78 | 11/19/2020,"11.60","12.79","11.45","12.46","11,787,610"
79 | 11/18/2020,"11.80","12.04","11.56","11.57","3,169,222"
80 | 11/17/2020,"11.65","11.92","11.23","11.63","6,678,176"
81 | 11/16/2020,"11.16","12.66","10.72","12.06","9,774,824"
82 | 11/13/2020,"11.36","11.55","11.00","11.01","3,546,171"
83 | 11/12/2020,"11.74","11.87","10.97","11.13","4,355,892"
84 | 11/11/2020,"11.50","11.95","11.21","11.75","4,882,569"
85 | 11/10/2020,"11.50","11.66","10.83","11.10","3,825,963"
86 | 11/09/2020,"12.76","12.93","11.25","11.49","6,244,865"
87 | 11/06/2020,"11.52","12.17","11.32","11.86","5,518,243"
88 | 11/05/2020,"11.27","11.84","11.06","11.45","4,705,245"
89 | 11/04/2020,"11.76","11.77","10.61","10.91","5,807,871"
90 | 11/03/2020,"10.75","11.86","10.63","11.57","7,454,472"
91 | 11/02/2020,"10.82","11.09","10.50","10.75","5,227,011"
92 | 10/30/2020,"11.64","11.64","10.36","10.47","11,562,370"
93 | 10/29/2020,"11.88","12.25","11.68","11.73","4,165,843"
94 | 10/28/2020,"12.27","13.05","11.78","11.82","6,388,580"
95 | 10/27/2020,"13.71","13.71","12.36","12.69","7,231,006"
96 | 10/26/2020,"14.93","15.45","13.26","13.45","13,376,270"
97 | 10/23/2020,"15.05","15.38","14.55","15.00","6,507,324"
98 | 10/22/2020,"14.20","15.87","14.19","14.91","16,212,230"
99 | 10/21/2020,"13.90","14.42","13.80","14.10","5,361,928"
100 | 10/20/2020,"14.03","14.14","13.67","13.86","6,603,951"
101 | 10/19/2020,"13.44","14.50","13.38","13.91","13,169,070"
102 | 10/16/2020,"13.77","13.90","13.08","13.31","11,651,580"
103 | 10/15/2020,"11.99","15.10","11.99","13.83","39,894,820"
104 | 10/14/2020,"12.67","12.68","12.05","12.25","10,776,760"
105 | 10/13/2020,"11.73","12.42","11.65","11.88","10,179,710"
106 | 10/12/2020,"11.66","12.77","11.40","11.80","23,655,699"
107 | 10/09/2020,"12.83","14.80","11.90","12.02","77,152,781"
108 | 10/08/2020,"9.54","13.64","9.19","13.49","76,453,562"
109 | 10/07/2020,"9.23","9.56","9.17","9.36","3,308,644"
110 | 10/06/2020,"9.56","9.84","9.10","9.13","4,535,421"
111 | 10/05/2020,"9.44","9.59","9.25","9.46","2,804,969"
112 | 10/02/2020,"9.38","9.78","9.30","9.39","4,340,484"
113 | 10/01/2020,"10.09","10.25","9.69","9.77","4,554,055"
114 | 09/30/2020,"10.25","10.76","10.06","10.20","6,079,033"
115 | 09/29/2020,"10.00","10.65","9.93","10.35","5,244,339"
116 | 09/28/2020,"10.16","10.26","9.55","10.09","6,764,323"
117 | 09/25/2020,"9.19","10.18","9.10","10.02","7,515,157"
118 | 09/24/2020,"9.71","9.81","9.01","9.14","7,938,838"
119 | 09/23/2020,"10.60","10.86","9.92","10.04","10,651,150"
120 | 09/22/2020,"10.45","11.17","9.90","10.56","34,752,480"
121 | 09/21/2020,"9.35","9.60","8.38","8.75","7,639,806"
122 | 09/18/2020,"9.20","9.77","8.91","9.47","17,407,510"
123 | 09/17/2020,"8.57","9.77","8.41","9.20","17,026,721"
124 | 09/16/2020,"7.03","9.04","7.03","8.68","19,346,510"
125 | 09/15/2020,"6.86","7.26","6.69","7.09","5,743,489"
126 | 09/14/2020,"6.80","7.00","6.43","6.91","10,118,970"
127 | 09/11/2020,"6.26","6.33","5.87","6.09","6,061,190"
128 | 09/10/2020,"6.65","6.95","6.19","6.23","15,558,280"
129 | 09/09/2020,"7.96","7.99","7.31","7.35","9,068,082"
130 | 09/08/2020,"7.55","8.28","7.48","7.70","9,816,620"
131 | 09/04/2020,"7.78","7.92","7.17","7.65","7,661,994"
132 | 09/03/2020,"7.88","8.45","7.24","7.82","14,344,500"
133 | 09/02/2020,"7.80","8.05","7.11","7.71","13,011,110"
134 | 09/01/2020,"7.30","7.82","6.77","7.65","23,211,051"
135 | 08/31/2020,"5.77","7.15","5.69","6.68","37,976,000"
136 | 08/28/2020,"5.30","5.57","5.22","5.39","4,236,926"
137 | 08/27/2020,"5.11","5.38","5.02","5.25","3,384,658"
138 | 08/26/2020,"4.97","5.22","4.92","5.11","2,779,664"
139 | 08/25/2020,"4.88","5.25","4.88","4.98","2,998,678"
140 | 08/24/2020,"5.10","5.13","4.56","4.87","4,585,366"
141 | 08/21/2020,"4.60","5.60","4.60","5.03","10,642,590"
142 | 08/20/2020,"4.62","4.68","4.51","4.61","2,441,184"
143 | 08/19/2020,"4.80","4.84","4.64","4.72","2,612,583"
144 | 08/18/2020,"4.61","4.87","4.44","4.81","3,834,840"
145 | 08/17/2020,"4.78","4.78","4.56","4.63","2,370,970"
146 | 08/14/2020,"4.60","4.83","4.55","4.75","3,474,692"
147 | 08/13/2020,"4.52","4.71","4.50","4.64","2,128,313"
148 | 08/12/2020,"4.40","4.63","4.36","4.52","3,057,594"
149 | 08/11/2020,"4.43","4.57","4.34","4.35","3,139,105"
150 | 08/10/2020,"4.20","4.57","4.18","4.33","4,561,772"
151 | 08/07/2020,"4.39","4.40","4.06","4.16","3,341,099"
152 | 08/06/2020,"4.60","4.66","4.38","4.43","1,901,224"
153 | 08/05/2020,"4.50","4.76","4.25","4.63","4,925,697"
154 | 08/04/2020,"4.13","4.74","4.13","4.43","10,361,360"
155 | 08/03/2020,"4.03","4.25","4.00","4.15","2,518,010"
156 | 07/31/2020,"4.06","4.16","3.99","4.01","1,879,553"
157 | 07/30/2020,"4.00","4.23","3.97","4.10","2,398,485"
158 | 07/29/2020,"3.94","4.18","3.92","4.06","2,879,626"
159 | 07/28/2020,"3.96","4.05","3.92","3.94","4,555,392"
160 | 07/27/2020,"4.02","4.12","3.95","4.01","2,472,696"
161 | 07/24/2020,"4.06","4.23","4.01","4.03","2,216,295"
162 | 07/23/2020,"4.09","4.31","4.06","4.11","3,237,550"
163 | 07/22/2020,"4.02","4.12","3.92","4.11","2,523,547"
164 | 07/21/2020,"3.90","4.09","3.88","4.01","3,341,012"
165 | 07/20/2020,"3.95","4.06","3.77","3.85","3,401,088"
166 | 07/17/2020,"4.16","4.23","3.94","3.96","3,066,549"
167 | 07/16/2020,"4.19","4.20","4.09","4.17","1,330,461"
168 | 07/15/2020,"4.13","4.29","4.13","4.19","1,474,126"
169 | 07/14/2020,"4.22","4.31","4.07","4.08","2,261,589"
170 | 07/13/2020,"4.35","4.55","4.26","4.26","4,216,265"
171 | 07/10/2020,"4.20","4.38","4.18","4.34","1,410,828"
172 | 07/09/2020,"4.27","4.32","4.13","4.21","1,992,621"
173 | 07/08/2020,"4.10","4.29","4.03","4.26","2,052,829"
174 | 07/07/2020,"4.20","4.25","4.06","4.09","2,456,970"
175 | 07/06/2020,"4.31","4.34","4.19","4.24","2,140,879"
176 | 07/02/2020,"4.49","4.51","4.29","4.29","1,887,751"
177 | 07/01/2020,"4.31","4.50","4.31","4.44","2,304,101"
178 | 06/30/2020,"4.33","4.51","4.20","4.34","3,889,029"
179 | 06/29/2020,"4.35","4.52","4.30","4.38","2,131,330"
180 | 06/26/2020,"4.48","4.50","4.27","4.35","3,801,155"
181 | 06/25/2020,"4.33","4.54","4.30","4.46","2,450,936"
182 | 06/24/2020,"4.83","4.84","4.38","4.41","2,976,209"
183 | 06/23/2020,"4.95","4.99","4.80","4.83","3,205,372"
184 | 06/22/2020,"4.79","4.95","4.72","4.87","3,178,966"
185 | 06/19/2020,"4.95","5.08","4.69","4.88","7,365,867"
186 | 06/18/2020,"4.67","4.95","4.65","4.95","3,423,827"
187 | 06/17/2020,"4.54","4.83","4.53","4.76","3,593,466"
188 | 06/16/2020,"4.95","4.95","4.51","4.64","3,123,535"
189 | 06/15/2020,"4.50","4.77","4.42","4.69","3,910,385"
190 | 06/12/2020,"4.60","4.78","4.39","4.72","4,378,192"
191 | 06/11/2020,"4.64","4.90","4.18","4.37","6,235,993"
192 | 06/10/2020,"4.78","5.53","4.68","5.07","10,606,370"
193 | 06/09/2020,"5.00","5.00","4.55","4.96","8,073,448"
194 | 06/08/2020,"4.28","5.14","4.27","5.01","10,133,660"
195 | 06/05/2020,"4.29","4.41","4.09","4.14","6,274,428"
196 | 06/04/2020,"4.44","4.72","4.37","4.47","3,514,299"
197 | 06/03/2020,"4.24","4.52","4.20","4.44","3,037,424"
198 | 06/02/2020,"4.27","4.31","4.06","4.18","2,369,780"
199 | 06/01/2020,"4.12","4.36","4.02","4.13","2,618,424"
200 | 05/29/2020,"4.33","4.42","4.05","4.06","3,973,540"
201 | 05/28/2020,"4.75","4.76","4.30","4.33","2,184,367"
202 | 05/27/2020,"4.57","4.71","4.36","4.69","3,146,603"
203 | 05/26/2020,"4.34","4.61","4.33","4.42","3,545,926"
204 | 05/22/2020,"4.46","4.49","4.13","4.18","2,379,851"
205 | 05/21/2020,"4.45","4.65","4.40","4.44","1,971,906"
206 | 05/20/2020,"4.50","4.69","4.34","4.43","2,543,609"
207 | 05/19/2020,"4.58","4.75","4.37","4.44","1,840,732"
208 | 05/18/2020,"4.40","4.63","4.36","4.58","2,371,694"
209 | 05/15/2020,"4.05","4.45","4.04","4.22","1,940,704"
210 | 05/14/2020,"4.15","4.19","3.96","4.13","2,004,868"
211 | 05/13/2020,"4.54","4.54","4.07","4.21","2,882,877"
212 | 05/12/2020,"4.78","4.92","4.46","4.54","2,639,157"
213 | 05/11/2020,"4.92","4.96","4.75","4.76","1,699,158"
214 | 05/08/2020,"4.88","5.19","4.82","4.98","2,353,661"
215 | 05/07/2020,"4.83","4.94","4.65","4.87","2,501,195"
216 | 05/06/2020,"5.40","5.40","4.90","4.93","3,369,640"
217 | 05/05/2020,"5.55","5.63","5.35","5.39","2,105,919"
218 | 05/04/2020,"5.84","5.93","5.40","5.48","4,068,105"
219 | 05/01/2020,"5.65","6.18","5.45","6.05","4,005,598"
220 | 04/30/2020,"5.87","5.98","5.64","5.73","2,173,530"
221 | 04/29/2020,"5.83","6.09","5.45","6.04","3,370,045"
222 | 04/28/2020,"5.92","6.04","5.06","5.64","5,200,189"
223 | 04/27/2020,"4.85","5.99","4.81","5.82","7,275,138"
224 | 04/24/2020,"4.78","4.85","4.66","4.77","2,236,544"
225 | 04/23/2020,"4.75","4.89","4.58","4.70","2,265,853"
226 | 04/22/2020,"5.14","5.17","4.83","4.89","2,678,133"
227 | 04/21/2020,"5.23","5.30","4.76","4.78","4,142,050"
228 | 04/20/2020,"4.85","5.90","4.78","5.61","6,085,011"
229 | 04/17/2020,"5.22","5.28","4.43","4.88","5,653,188"
230 | 04/16/2020,"5.12","5.44","4.88","5.03","3,371,921"
231 | 04/15/2020,"5.66","5.67","4.90","5.27","7,499,854"
232 | 04/14/2020,"5.21","6.47","5.14","5.95","13,506,630"
233 | 04/13/2020,"4.25","4.76","4.16","4.74","6,844,501"
234 | 04/09/2020,"3.60","4.25","3.49","3.89","5,908,916"
235 | 04/08/2020,"3.23","3.67","3.20","3.41","2,884,528"
236 | 04/07/2020,"3.39","3.44","3.10","3.27","2,836,859"
237 | 04/06/2020,"2.86","3.20","2.83","3.09","3,331,070"
238 | 04/03/2020,"2.85","2.94","2.57","2.80","3,830,761"
239 | 04/02/2020,"3.26","3.35","2.85","2.85","4,064,339"
240 | 04/01/2020,"3.45","3.49","3.12","3.25","4,568,695"
241 | 03/31/2020,"3.63","3.80","3.50","3.50","2,304,132"
242 | 03/30/2020,"4.22","4.27","3.65","3.65","3,350,571"
243 | 03/27/2020,"4.94","5.09","4.15","4.22","7,024,763"
244 | 03/26/2020,"4.24","4.71","4.24","4.41","6,210,979"
245 | 03/25/2020,"4.15","4.49","4.04","4.17","3,592,059"
246 | 03/24/2020,"3.95","4.21","3.89","4.16","6,805,659"
247 | 03/23/2020,"3.58","3.86","3.50","3.81","6,009,784"
248 | 03/20/2020,"4.08","4.08","3.65","3.76","7,722,194"
249 | 03/19/2020,"3.71","4.20","3.55","4.19","5,039,539"
250 | 03/18/2020,"4.10","4.25","3.50","3.77","3,651,709"
251 | 03/17/2020,"4.40","4.65","4.11","4.23","3,562,210"
252 | 03/16/2020,"3.93","4.57","3.90","4.37","4,866,696"
253 |
--------------------------------------------------------------------------------