├── info
├── SinD600.PNG
├── CL60D_train.PNG
├── SinDTraining.PNG
├── SinTestData.PNG
├── output_13_0.png
├── output_14_0.png
├── CL60D_evaluate.PNG
├── MLWriteRLTrainDataDT.PNG
├── RLQEvaluate_CL_800.PNG
├── SinDTraining2_0.01.PNG
├── CL60D_evaluate_zoomed.PNG
└── CL60D_trainedinsidedata.PNG
├── MLWriteRLTrainData.PNG
├── models
├── RLDataForCL30_800.h5
├── RLDataForCL60D_4000.h5
├── RLDataForCL30_skaler.sav
└── RLDataForCL60D_skaler.sav
├── LICENSE
├── PlotModel.py
├── README.md
├── constant.py
├── RLDataExample.md
├── agent
└── PVAgent.py
├── PVQEvaluate.py
├── PVQTrain.py
├── Train.ipynb
├── data
├── RLTestDataSinSF.csv
├── RLTestDataSinSFD.csv
├── RLTestDataSin30.csv
└── RLTestDataSin30D.csv
└── functions.py
/info/SinD600.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PVoodoo/RLDQTrading/HEAD/info/SinD600.PNG
--------------------------------------------------------------------------------
/info/CL60D_train.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PVoodoo/RLDQTrading/HEAD/info/CL60D_train.PNG
--------------------------------------------------------------------------------
/info/SinDTraining.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PVoodoo/RLDQTrading/HEAD/info/SinDTraining.PNG
--------------------------------------------------------------------------------
/info/SinTestData.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PVoodoo/RLDQTrading/HEAD/info/SinTestData.PNG
--------------------------------------------------------------------------------
/info/output_13_0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PVoodoo/RLDQTrading/HEAD/info/output_13_0.png
--------------------------------------------------------------------------------
/info/output_14_0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PVoodoo/RLDQTrading/HEAD/info/output_14_0.png
--------------------------------------------------------------------------------
/MLWriteRLTrainData.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PVoodoo/RLDQTrading/HEAD/MLWriteRLTrainData.PNG
--------------------------------------------------------------------------------
/info/CL60D_evaluate.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PVoodoo/RLDQTrading/HEAD/info/CL60D_evaluate.PNG
--------------------------------------------------------------------------------
/info/MLWriteRLTrainDataDT.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PVoodoo/RLDQTrading/HEAD/info/MLWriteRLTrainDataDT.PNG
--------------------------------------------------------------------------------
/info/RLQEvaluate_CL_800.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PVoodoo/RLDQTrading/HEAD/info/RLQEvaluate_CL_800.PNG
--------------------------------------------------------------------------------
/info/SinDTraining2_0.01.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PVoodoo/RLDQTrading/HEAD/info/SinDTraining2_0.01.PNG
--------------------------------------------------------------------------------
/models/RLDataForCL30_800.h5:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PVoodoo/RLDQTrading/HEAD/models/RLDataForCL30_800.h5
--------------------------------------------------------------------------------
/models/RLDataForCL60D_4000.h5:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PVoodoo/RLDQTrading/HEAD/models/RLDataForCL60D_4000.h5
--------------------------------------------------------------------------------
/info/CL60D_evaluate_zoomed.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PVoodoo/RLDQTrading/HEAD/info/CL60D_evaluate_zoomed.PNG
--------------------------------------------------------------------------------
/models/RLDataForCL30_skaler.sav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PVoodoo/RLDQTrading/HEAD/models/RLDataForCL30_skaler.sav
--------------------------------------------------------------------------------
/info/CL60D_trainedinsidedata.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PVoodoo/RLDQTrading/HEAD/info/CL60D_trainedinsidedata.PNG
--------------------------------------------------------------------------------
/models/RLDataForCL60D_skaler.sav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PVoodoo/RLDQTrading/HEAD/models/RLDataForCL60D_skaler.sav
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2019 PVoodoo.com
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/PlotModel.py:
--------------------------------------------------------------------------------
1 | #
2 | # example copypaste down, see the models directory for existence of model .h5
3 | # python PlotModel.py RLDataForCL60D_2000
4 | # Programming marko.rantala@pvoodoo.com
5 | # v1.0.0.1 20190322
6 | # reason to make a separate PlotModel instead of adding couple lines to PVQEvaluate is that I think that graphviz can be sort of problematic!?
7 |
8 | import sys
9 | import keras
10 | import matplotlib.pyplot as plt
11 | from keras.models import load_model
12 | from keras.utils import plot_model
13 |
14 |
15 | if len(sys.argv) != 2:
16 | print("Usage: python PlotModel.py [model] ")
17 | exit()
18 |
19 | model_name = sys.argv[1]
20 | model = load_model("models/" + model_name +".h5") #
21 |
22 | plot_model(model, to_file='models/' + model_name + '.png', show_shapes=True)
23 |
24 | print("See the file: models/"+model_name + '.png')
25 |
26 | #feature_count = model.layers[0].input.shape.as_list()[1]
27 | #if Debug:
28 | # print(model.layers[0].input.shape.as_list())
29 |
30 |
31 | ##############################
32 | # Own ad: For NinjaTrader related stuff: check https://pvoodoo.com or blog: https://pvoodoo.blogspot.com/?view=flipcard
33 | ##############################
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # RLDQTrading
2 |
3 | Check RLDataExample now, just format and features of the written datafiles with MLWriteRLTrainData
4 | https://pvoodoo.blogspot.com/2019/03/writetraindata-tool-for-reinforcement.html
5 |
6 | If you wonder the special Bar type, MBT, it is actually a special adaptive bar type, which can switch to next bar at next minute line if range or volume has been high.. (blog has some info of the adaptive bar)
7 |
8 | Supervised models available too, check the blog.
9 |
10 |
11 | ## Files:
12 | Additional files coming step by step:
13 |
14 | PVQTrain.py = main train program, DayTrading model inside if D ..
15 |
16 | Usage: python PVQTrain.py [stockfile] [episodes] [timesteps]
17 |
18 | Example: python PVQTrain.py RLDataForCL60D 4000 4
19 |
20 | OR
21 | #import PVQTrain
22 |
23 | PVQTrain.main(stock_name, episodes, timesteps)
24 |
25 | 
26 |
27 |
28 | PVQEvaluate.py to show and predict trades, out of data too
29 |
30 | Usage: python PVQEvaluate.py [stockfile] [model]
31 |
32 | Example: python PVQEvaluate.py RLDataForCL60D RLDataForCL60D_4000
33 |
34 | 
35 |
36 | 
37 |
38 |
39 | PVAgent.py keras model and reinforcement learning setup, some setup moved to constant.py
40 |
41 | functions.py Actually have an important function, getNextPositionState as it defines how the predicted actions are handled
42 |
43 | constant.py Defines some important values like Comissions, need to be changed based to instrument
44 |
45 | PlotModel.py Draw the keras neural network model to a picture
46 |
47 | [Further info of files & directories at blog](https://pvoodoo.blogspot.com/2019/03/example-of-reinforcement-learning.html?view=flipcard)
48 | [Design Consepts](https://pvoodoo.blogspot.com/2019/03/rl-for-trading-part-2-design-consepts.html)
49 | [Test Results](https://pvoodoo.blogspot.com/2019/03/rl-for-trading-part-3.html)
50 | [Neural Network Model](https://pvoodoo.blogspot.com/2019/03/rl-for-trading-part-4-neural-network.html)
51 |
52 | ## Other:
53 |
54 | Probably some notebook formats added to use the whole system in colab.research.google.com (keras, GPU)
55 | FYI, No reason to run this with GPU as epoch = 1, faster with CPU model (data transfer do not delay)
56 |
57 | ## Resources:
58 |
59 | [Financial Trading as a Game: A Deep Reinforcement Learning Approach](https://arxiv.org/abs/1807.02787)
60 |
61 |
--------------------------------------------------------------------------------
/constant.py:
--------------------------------------------------------------------------------
1 | # use this file to set some common "variables", could be instrument wise too
2 | # 20190305 v1.0.0.1
3 | # v1.0.1.0 20190310 Start of
4 | # Programming marko.rantala@pvoodoo.com
5 | #
6 |
7 | # model parameters
8 | PositionStateWidth = 3 # use 3 instead of 4 so far ...
9 |
10 | # as many contract allowed together, FYI, current model trade those one by one ,
11 | # here, although some different models can be thought where this is not fixed but variable based to account value and so on...
12 | MAXCONTRACTS = 1
13 |
14 | # "Action " 0 can be either keep current position or make flat, different results expected , but probably better to stay with three action than take forth like (Keep, take long, take short, exit position)
15 | ACTIONZERO = 1 # active one, = exit current position with this action
16 | #ACTIONZERO = 0 # passive, keep current position , not implemented yet
17 |
18 | #eod handling, if state initialization at last bar, ignore !!!!, typical for day trading, do not take position at open of next day based to prev day info,
19 | #wait at least one bar
20 | IGNORE_EOD_ACTIVATION = True # = no new position at the beginning of the next day, although this might be otherwise too, calculate next days prediction totally based to prev date
21 | #IGNORE_EOD_ACTIVATION = False # or use this
22 |
23 | #actully previous MAXCONTRACTS could be implemented as
24 | #MAXLONGCONTRACTS = 1
25 | #and
26 | #MAXSHORTCONTRACTS = 1
27 | # but PVQEvaluate need additional changes then, not only the obvious, if either one is 0 , unbalanced easy
28 | # functions.py simple change would be enough
29 |
30 | # slippage is included to commission!, check the datafile as it has TickSize info, usually you should have a slippage at least 1 Tick as well for Commission
31 | # so set COMMISSION like 2*Ticksize mentioned in datafile, example, CL = TickSize 0.01 set COMMISSION 0.02
32 | # Pointvalue is as info in the datafile too
33 | COMMISSION = 0.0
34 |
35 | POINTVALUE = 1.0 # just to get right USD value for trades, example from CL POINTVALUE = 1000, Training side "PointValue" = 1 but to give final results right, so no effect to training
36 |
37 | # some important setups could be given given here , need to be implemented at getNextPositionState (now in functions.py)
38 | #STOPLOSS
39 | #TARGET
40 |
41 | Debug=True
42 |
43 | ##############################
44 | # own ad: For NinjaTrader related stuff: check https://pvoodoo.com or blog: https://pvoodoo.blogspot.com/?view=flipcard
45 | ##############################
46 |
--------------------------------------------------------------------------------
/RLDataExample.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | ```python
4 | import pandas as pd
5 | import numpy as np
6 |
7 | ```
8 |
9 |
10 | ```python
11 | df = pd.read_csv("RLDataForCL60.csv",sep=';', parse_dates=[0])
12 | ```
13 |
14 |
15 | ```python
16 | df.head()
17 | ```
18 |
19 |
20 |
21 |
22 |
23 |
36 |
37 |
38 |
39 | |
40 | UTC0 |
41 | Input0 |
42 | 134_0 |
43 | 76_0 |
44 | 125_0 (Info_to_ignore: TickSize: 0.01 PointValue: 1000) |
45 |
46 |
47 |
48 |
49 | | 0 |
50 | 2019-01-04 11:00:00 |
51 | 48.69 |
52 | 0.478261 |
53 | 71.577411 |
54 | 2.311410 |
55 |
56 |
57 | | 1 |
58 | 2019-01-04 12:00:00 |
59 | 48.88 |
60 | 0.434783 |
61 | 73.889657 |
62 | 2.710653 |
63 |
64 |
65 | | 2 |
66 | 2019-01-04 13:00:00 |
67 | 48.63 |
68 | 0.391304 |
69 | 66.252309 |
70 | 2.185333 |
71 |
72 |
73 | | 3 |
74 | 2019-01-04 13:47:00 |
75 | 48.79 |
76 | 0.357246 |
77 | 68.496609 |
78 | 2.521538 |
79 |
80 |
81 | | 4 |
82 | 2019-01-04 14:29:00 |
83 | 48.83 |
84 | 0.326812 |
85 | 69.050739 |
86 | 2.605589 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 | ```python
96 | df.dtypes
97 | ```
98 |
99 |
100 |
101 |
102 | UTC0 datetime64[ns]
103 | Input0 float64
104 | 134_0 float64
105 | 76_0 float64
106 | 125_0 (Info_to_ignore: TickSize: 0.01 PointValue: 1000) float64
107 | dtype: object
108 |
109 |
110 |
111 | Or use directly numpy as dates are not needed
112 |
113 |
114 | ```python
115 | data = np.genfromtxt("RLDataForCL60.csv",delimiter=';',skip_header=1, dtype="float_")[:,1:] # or use usecols=(1,2,3,..) and no [:,1:]
116 | ```
117 |
118 |
119 | ```python
120 | data[0:5]
121 | ```
122 |
123 |
124 |
125 |
126 | array([[48.69 , 0.47826087, 71.57741085, 2.31140996],
127 | [48.88 , 0.43478261, 73.88965726, 2.7106535 ],
128 | [48.63 , 0.39130435, 66.25230913, 2.18533305],
129 | [48.79 , 0.35724638, 68.49660906, 2.52153814],
130 | [48.83 , 0.32681159, 69.05073924, 2.60558941]])
131 |
132 |
133 |
134 | Scaling next, price not! which is used to calculate reward not a feature, if feature add separately MLIndicatorI 13 = Close
135 | Sacling can be other too like [-1 - 1]
136 |
137 |
138 | ```python
139 | from sklearn.preprocessing import MinMaxScaler
140 | scaler = MinMaxScaler(feature_range=(0.1, 1))
141 |
142 | ```
143 |
144 |
145 | ```python
146 | features = data[:,1:] # price removed, column 1
147 | ```
148 |
149 |
150 | ```python
151 | scaler.fit(features) # this need to be put to Dim 2 not to dim 3 values next
152 | scaledFeatures = scaler.transform(features)
153 | ```
154 |
155 |
156 | ```python
157 | scaledFeatures[0:5] # just head
158 | ```
159 |
160 |
161 |
162 |
163 | array([[0.54864048, 0.87527158, 0.71767151],
164 | [0.50785498, 0.90803152, 0.75684043],
165 | [0.46706949, 0.79982548, 0.70530238],
166 | [0.43512085, 0.83162275, 0.73828673],
167 | [0.406571 , 0.83947367, 0.74653282]])
168 |
169 |
170 |
171 |
172 | ```python
173 | import matplotlib.pyplot as plt
174 | %matplotlib inline
175 | ```
176 |
177 |
178 | ```python
179 | df.plot();
180 | ```
181 |
182 |
183 | 
184 |
185 |
186 |
187 | ```python
188 | plt.plot(scaledFeatures[:200]) # part
189 | plt.show()
190 | ```
191 |
192 |
193 | 
194 |
195 |
--------------------------------------------------------------------------------
/agent/PVAgent.py:
--------------------------------------------------------------------------------
1 | # mainly keras model to RLDQ model, some important settings here so far
2 | # Programming marko.rantala@pvoodoo.com
3 | # v1.0.0.1 20190305
4 | # 1.0.0.3 20190308 model changed
5 | # v1.0.1.0 20190310 Start of
6 | ##############################
7 | # own ad: For NinjaTrader related stuff: check https://pvoodoo.com or blog: https://pvoodoo.blogspot.com/?view=flipcard
8 | ##############################
9 |
10 | import keras
11 | from keras.models import Sequential
12 | from keras.models import load_model, Model
13 | from keras.layers import Dense, LSTM, Flatten, Input, concatenate
14 | from keras.optimizers import Adam
15 |
16 | import numpy as np
17 | import random
18 | from collections import deque
19 | import constant
20 |
21 | Debug=True # or constant.Debug
22 |
23 |
24 | class PVAgent:
25 | def __init__(self, time_steps, feature_count, is_eval=False, model_name=""):
26 | self.time_steps = time_steps # period
27 | self.feature_count = feature_count
28 | self.action_size = 3 # no_action, buy, sell, 1 is actually based to constant.py now, it is active GO FLAT > exit trade, maybe 4 actions needed [No action, Long, Short, Exit]
29 | self.memory = deque(maxlen=256) # according some new study, no need to be high at stock data .. but try 128,256,512 (DayTrading -> short is okay)
30 | self.inventory = []
31 | self.model_name = model_name
32 | self.is_eval = is_eval
33 |
34 | # next ones are actually quite important parameters here, try with different settings!, general guidance is available from the web
35 | self.gamma = 0.80 #
36 | self.epsilon = 1.0
37 | self.epsilon_min = 0.01
38 | self.epsilon_decay = 0.995
39 | self.learning_rate = 0.001 # actually a learning rate to Adam optimizer, this might be even smaller as some ..
40 |
41 | self.model = load_model("models/" + model_name + ".h5") if is_eval else self._model()
42 |
43 |
44 | # just a simple model first, add dropouts or batch normalization and experiment some dif shapes and sizes and activations (tanh?, but set scaler ?)
45 | def _model(self):
46 |
47 |
48 | feature_input = Input(shape=(self.time_steps, self.feature_count), name="Market_inputs") # 3D shape here.., actually market features, suitable directly to recurrent neural networks
49 |
50 | lstm = LSTM(32, return_sequences=True, activation="relu")(feature_input)
51 | flattened_features = LSTM(16, return_sequences=False, activation="relu")(lstm) # or without that but you need to set return sequences false at previous then to get flattened shape
52 |
53 | # flattened_price=lstm
54 | #flattened_price = Flatten()(feature_input) # 3D shape is/was meant to LSTMm, CONV, recurrent models, keep time_steps short otherwise, even 1 if reasonable feature match, try those recurrent ones too!!
55 |
56 | state_input = Input(shape=(constant.PositionStateWidth,), name="Position_inputs") # 2D [Flat no more => Long,Short,Current_PnL] anyway to merge this , position features
57 |
58 | state = Dense(8, activation="relu")(state_input)
59 | #state_input = Input() what if this is not connected ?, lets try
60 |
61 |
62 | merged = concatenate([flattened_features, state], axis=1) # the most simplest merged model now
63 |
64 | #merged = Dense(units=64, activation="relu")(merged)
65 | merged = Dense(units=16, activation="relu")(merged)
66 |
67 | preds = Dense(self.action_size, activation="softmax", name="Actions")(merged) # activation linear, softmax could be used as well?
68 |
69 | model = Model(inputs=[feature_input, state_input], outputs=preds)
70 | #model = Model(inputs=feature_input, outputs=preds)
71 |
72 | model.compile(optimizer=Adam(lr=self.learning_rate), loss="mse")
73 |
74 | # if Debug:
75 | # print("Model:")
76 | # print(model.layers[0].input.shape.as_list())
77 | # print(model)
78 |
79 | return model
80 |
81 | # next is/was identical, just for info , not used any more and don't even fit to input any more, if you prefer that way of building, but additional input will be added so previous one is easier to handle
82 | # model = Sequential()
83 | # model.add(Dense(units=64, input_shape=(self.feature_count,), activation="relu"))
84 | # model.add(Dense(units=8, activation="relu"))
85 | # model.add(Dense(self.action_size, activation="linear")) # or use softmax
86 | # model.compile(loss="mse", optimizer=Adam())
87 |
88 | # return model
89 |
90 | def act(self, state):
91 | if not self.is_eval and np.random.rand() <= self.epsilon:
92 | return random.randrange(self.action_size)
93 | #return np.argmax(np.random.multinomial(1, [0.6, 0.2, 0.2])) # see the distribution, so NO action is preferred to speed up training, maybe [0.8, 0.1, 0.1] could be used as well
94 | # here could be some restrictions too , new model, index 0 is active -> sell to exit, back to normal distribution
95 |
96 | options = self.model.predict(state) # modified with 0
97 | return np.argmax(options[0])
98 | #return options # or should it be options[0] to be same format
99 |
100 | def expReplay(self, batch_size):
101 | mini_batch = []
102 | l = len(self.memory)
103 | for i in range(l - batch_size + 1, l):
104 | mini_batch.append(self.memory.popleft())
105 |
106 | states0, states1, targets = [],[], []
107 | for state, action, reward, next_state, done in mini_batch:
108 | target = reward
109 | if not done:
110 | #if Debug:
111 | # print("expRep: shapes: ", next_state[0].shape, next_state[1].shape)
112 | target = reward + self.gamma * np.amax(self.model.predict(next_state)[0]) ## simple kartpole model next_state[0] to forget second input
113 |
114 |
115 | target_f = self.model.predict(state) #Modif with 0
116 | target_f[0][action] = target
117 |
118 | states0.append(state[0]) # modified state, only first , market_state
119 | states1.append(state[1]) # position_state, added as a list
120 | targets.append(target_f)
121 |
122 | self.model.fit([np.vstack(states0), np.vstack(states1)], [np.vstack(targets)], epochs=1, verbose=0)
123 |
124 | if self.epsilon > self.epsilon_min:
125 | self.epsilon *= self.epsilon_decay
126 |
127 | ##############################
128 | # own ad: For NinjaTrader related stuff: check https://pvoodoo.com or blog: https://pvoodoo.blogspot.com/?view=flipcard
129 | ##############################
130 |
--------------------------------------------------------------------------------
/PVQEvaluate.py:
--------------------------------------------------------------------------------
1 | # evaluate training results trained by PVQTrain.py
2 | # example copypaste down, see the models directory for existence of model .h5
3 | # python PVQEvaluate.py RLDataForCL30 RLDataForCL30_500
4 | # Programming marko.rantala@pvoodoo.com
5 | # v1.0.0.1 20190305
6 | # v1.0.0.2 20190307 eod
7 | # v1.0.1.0 20190310 Start of
8 | # v1.0.2.0 # state size 3
9 | ##############################
10 | # my own ad: For NinjaTrader related stuff: check https://pvoodoo.com or blog: https://pvoodoo.blogspot.com/?view=flipcard
11 | ##############################
12 |
13 |
14 | import keras
15 | import matplotlib.pyplot as plt
16 | from keras.models import load_model
17 |
18 | from agent.PVAgent import PVAgent
19 | from functions import *
20 | import sys
21 | import constant
22 |
23 | Debug=constant.Debug
24 |
25 | if len(sys.argv) != 3:
26 | print("Usage: python PVQEvaluate.py [stock] [model] ")
27 | exit()
28 |
29 | stock_name, model_name = sys.argv[1], sys.argv[2]
30 | model = load_model("models/" + model_name +".h5") # sort of duplicate just to get feature count!!, bad programming...
31 | #feature_count = model.layers[0].input.shape.as_list()[1]
32 | if Debug:
33 | print(model.layers[0].input.shape.as_list())
34 | timesteps = model.layers[0].input.shape.as_list()[1]
35 |
36 | dayTrading=False
37 | if stock_name[-1:] == 'D': # just to see if datafile is ending with D, writer program https://pvoodoo.blogspot.com/2019/03/writetraindata-tool-for-reinforcement.html is adding this automatically if DayTrading data generated
38 | dayTrading = True
39 |
40 | prices, data, eod = getStockDataVec(stock_name, timesteps, model_name=model_name, dayTrading=dayTrading)
41 | agent = PVAgent(data.shape[1], data.shape[2], is_eval=True, model_name=model_name)
42 |
43 | l = len(data) - 1
44 | batch_size = 32
45 |
46 | ignorePositionState = False # just for debugging purposes
47 | if Debug:
48 | print(prices.shape, data.shape, eod.shape)
49 |
50 |
51 | total_profit = 0.0
52 | agent.inventory = []
53 |
54 | market_state = getState(data, 0)
55 | #position_state = np.array([1,0,0,0.0]).reshape(1,4) # [Flat,Long,Short,PnL] what the hell is turning this ...
56 | position_state = np.zeros(constant.PositionStateWidth).reshape(1,constant.PositionStateWidth)
57 | state = [market_state, position_state]
58 |
59 |
60 | # all next ts_ only for illustration purposes, and some +1's to illustrate that easier
61 | ts_buy = []
62 | ts_sell = []
63 | ts_flat = []
64 | ts_eod = []
65 | ts_PnL = np.zeros(l)
66 | ts_CumPnL = np.zeros(l)
67 | ts_Action = np.zeros(l) # let's show that too what is proposed by nn
68 | numTrades = 0
69 |
70 | for t in range(l):
71 | action = agent.act(state)
72 | ts_Action[t] = -1.0 if action >=2 else action # just to show the action nicer , 2 = sell
73 | if int(eod[t]) == 1: # t or t + 1 ????????????????????????, t is right here, maybe the whole data should be sifted 1
74 | ts_eod.append(t)
75 |
76 | # if ignorePositionState:
77 | # state[1][0][0] = 1 # ok, think as a flat always ...
78 | # state[1][0][1] = 0
79 | # state[1][0][2] = 0
80 | # state[1][0][3] = 0
81 | # if int(eod[t+1]) == 1:
82 | # print(state[0])
83 |
84 | next_market_state = getState(data, t + 1)
85 |
86 |
87 | # only change places drawn to the priceline
88 | if (action == 1) and (state[1][0][0] < constant.MAXCONTRACTS): # and eod[t+1] < 1:# buy do not and if IGNORE_EOD_ACTIVATION, first action ignored , to be remembered
89 | ts_buy.append(t)
90 | numTrades +=1
91 | if Debug:
92 | print("Buy before, state",state[1][0])
93 | elif action == 2 and state[1][0][1] < constant.MAXCONTRACTS: # and eod[t+1] < 1: # sell
94 | ts_sell.append(t)
95 | numTrades +=1
96 | if Debug:
97 | print("Sell before, state", state[1][0])
98 | elif action == 0 and (state[1][0][0] > 0 or state[1][0][1] > 0): # flat, either active or passive, see constant
99 | ts_flat.append(t)
100 |
101 |
102 | next_position_state, immediate_reward, PnL = getNextPositionState(action, state[1][0], prices[t], prices[t+1], eod[t+1], eod[t])
103 | total_profit += PnL*constant.POINTVALUE
104 | #reward = immediate_reward + PnL
105 |
106 | if (Debug):
107 | if (action == 1) and (state[1][0][0] < constant.MAXCONTRACTS):# buy
108 | print("Buy after", next_position_state, PnL)
109 | elif action == 2 and state[1][0][1] < constant.MAXCONTRACTS: # sell
110 | print("Sell after", next_position_state, PnL)
111 | if int(eod[t+1]) == 1 :
112 | print(" ****************************************** EOD PNL:", PnL)
113 |
114 |
115 |
116 | if PnL != 0.0:
117 | ts_PnL[t] = PnL*constant.POINTVALUE
118 | ts_CumPnL[t] = total_profit
119 |
120 | done = True if t == l - 1 else False
121 | next_state = [next_market_state, next_position_state.reshape(1,constant.PositionStateWidth)]
122 |
123 | #agent.memory.append((state, action, reward, next_state, done))
124 | state = next_state
125 |
126 |
127 | if done:
128 | print("--------------------------------")
129 | print(stock_name + " Total Profit : ", total_profit, " tradeCount: ", numTrades )
130 | print("--------------------------------")
131 |
132 |
133 |
134 | # hi, matplot gurus, please help here :)
135 |
136 | data = np.array(prices)
137 | ts = np.arange(l).astype(int)
138 | ts_buy = np.array(ts_buy).astype(int)
139 | ts_sell = np.array(ts_sell).astype(int)
140 | ts_flat = np.array(ts_flat).astype(int)
141 |
142 | fig, ax1 = plt.subplots()
143 |
144 | ax2 = ax1.twinx()
145 |
146 | ax2.plot(ts, data[ts], zorder=3)
147 | ax2.scatter(ts_buy, data[ts_buy], c="g", label="Buy")
148 | ax2.scatter(ts_sell, data[ts_sell], c="r", label="Sell")
149 | ax2.scatter(ts_eod, data[ts_eod], color="magenta", label="EoD") # this could be written directly from eod
150 | ax2.scatter(ts_flat, data[ts_flat], color="gray", label="Flat")
151 | ax2.set_ylabel('Price')
152 |
153 | ax1.set_ylabel('PnL')
154 | ax1.bar(ts, ts_PnL, color="b", label="PnL", width=0.8, zorder=4)
155 | ax1.plot(ts, ts_CumPnL, color="c", label="Cumulative PnL", zorder=1)
156 | ax1.bar(ts, ts_Action, color="y", label="Action", width=1.0, zorder=2)
157 | ax1.axhline(0, color='gray', lw=1)
158 |
159 | plt.legend()
160 | fig.tight_layout()
161 | plt.show()
162 |
163 | ##############################
164 | # my own ad: For NinjaTrader related stuff: check https://pvoodoo.com or blog: https://pvoodoo.blogspot.com/?view=flipcard
165 | ##############################
--------------------------------------------------------------------------------
/PVQTrain.py:
--------------------------------------------------------------------------------
1 | # example of reinforcement learning train program for stock data, type of DQN or sort of DDQN with special two sided keras model
2 | # start training example copypaste
3 | # python PVQTrain.py RLDataForCL30 1000 4
4 | # 20190305
5 | # v1.0.0.1 initial revisio
6 | # v1.0.0.2 Daytrading mode added, eod
7 | # v1.0.0.3 plt
8 | # v1.0.1.0 20190310 Start of ..
9 | # v1.0.2.0 # state size 3
10 | # v1.0.3.0 main callable for ipynb usage
11 | # Programming marko.rantala@pvoodoo.com
12 | # Input data format, see https://pvoodoo.blogspot.com/2019/03/writetraindata-tool-for-reinforcement.html
13 | # The model is based very much to traditional cartpole example, added with some "smart"? ...
14 |
15 | ##############################
16 | # own ad: For NinjaTrader related stuff: check https://pvoodoo.com or blog: https://pvoodoo.blogspot.com/?view=flipcard
17 | ##############################
18 |
19 | # if input file (stockfile) ends with "D" before .csv, like RLDataForCL30D.csv , this expect it to have a day break info after price, 1 if last bar of session otherwise 0
20 | # and this use daytrading rules, Flat at end of session for day
21 | from agent.PVAgent import *
22 | from functions import *
23 | import constant
24 |
25 | import matplotlib.pyplot as plt
26 |
27 | def main(stock_name, episode_count=1000, timesteps=4):
28 |
29 | #from environment import SimpleTradeEnv, as this could be implemented as a gym type
30 |
31 | dayTrading=False
32 | if stock_name[-1:] == 'D': # just to see if datafile is ending with D, writer program https://pvoodoo.blogspot.com/2019/03/writetraindata-tool-for-reinforcement.html is adding this automatically if DayTrading data generated
33 | dayTrading = True
34 |
35 |
36 | batch_size = 32 # worth to check and check the memory length of agent replay memory
37 | #agent = Agent(timesteps)
38 |
39 | prices, market_data, eod = getStockDataVec(stock_name, timesteps, dayTrading=dayTrading)
40 | agent = PVAgent(timesteps, market_data.shape[2]) # feature size
41 | l = len(prices) - 1
42 |
43 | timer = Timer(episode_count)
44 | if Debug:
45 | print("DataLength: ", l)
46 | print("Features: ", market_data.shape[2])
47 | print("Timesteps to use: ", market_data.shape[1])
48 | #print("Eod: ", eod[-5:])
49 |
50 |
51 | pnl_track = []
52 |
53 |
54 | #position_state = np.array([1,0,0, 0.0 ]).reshape(1,4)
55 | position_state = np.zeros(constant.PositionStateWidth).reshape(1,constant.PositionStateWidth)
56 | best_profit = 0.0
57 |
58 | for e in range(episode_count + 1):
59 | if (Debug):
60 | print("Episode " + str(e) + "/" + str(episode_count))
61 | #state = getState(data, 0, timesteps + 1)
62 | market_state = getState(market_data, 0)
63 | #print(state)
64 |
65 | #position_state = np.array([1,0,0, 0.0 ]).reshape(1,4) # initialize flat [Flat,Long,Short,PnL] what the hell is turning this ... anyway , ints to float so maybe some extra check for nextposition state calculation
66 | position_state = np.zeros(constant.PositionStateWidth).reshape(1,constant.PositionStateWidth) # flat removed
67 | total_profit = 0
68 | agent.inventory = []
69 |
70 | state = [market_state, position_state]
71 |
72 | for t in range(l):
73 | action = agent.act(state) # lets add position state later to the state, needed!, calculate restrictions there or here?, that's reason not to combine those yet, maybe next version... combined!
74 | # State could be just a list of [market_state, position_state, ....] and so on... as it might be useful to have different type of nn to them
75 |
76 | # start from flat
77 |
78 | next_market_state = getState(market_data, t + 1) #
79 | reward = 0
80 |
81 | next_position_state, immediate_reward, PnL = getNextPositionState(action, state[1][0], prices[t], prices[t+1], eod[t+1], eod[t] ) # FYI, state[1] = position_state, lets think this eod t or t + 1 again!!!!!! t + 1 is correct, eof bar at next state!
82 | #print("after", next_position_state)
83 |
84 |
85 | # let's make a very special reward, immediate (=augmented) + long Term PNL at next flat , the REAL reward is the PnL
86 | # the immediate reward is the next step reward, which can be counted immediately, this might speed up calculations, but total profit is based to real PnL
87 | reward = immediate_reward + PnL
88 | #reward = PnL
89 |
90 | #reward = max(reward, 0) #is this needed ???????, help please and the reason???
91 | total_profit += PnL
92 |
93 | #if Debug:
94 | # if t % 200 == 0:
95 | # print(PnL, next_position_state, immediate_reward)
96 |
97 | done = True if t == l - 1 else False
98 | next_state = [next_market_state, next_position_state.reshape(1,constant.PositionStateWidth)]
99 | #print(state, next_state)
100 | agent.memory.append((state, action, reward, next_state, done))
101 | state = next_state
102 | #position_state = next_position_state
103 | #state = [next_market_state, next_position_state]
104 |
105 | if done:
106 | #print("--------------------------------")
107 | print("Total Profit (Points) : {0:.4f}".format(total_profit))
108 | print ("Training left: ", timer.remains(e+1))
109 | print("--------------------------------")
110 | pnl_track.append(total_profit)
111 |
112 | if len(agent.memory) > batch_size:
113 | agent.expReplay(batch_size)
114 |
115 | if e % 100 == 0 or total_profit > best_profit:
116 | agent.model.save("models/" + stock_name + "_" + str(e) + ".h5")
117 | best_profit = total_profit
118 |
119 | # save the final mode
120 | agent.model.save("models/" + stock_name + "_" + str(e) + ".h5")
121 |
122 | plt.plot(pnl_track)
123 | plt.xlabel('Episode')
124 | plt.ylabel('Profit')
125 | plt.show()
126 |
127 |
128 | #### here are the initialization, if called from command line
129 | if __name__ == '__main__':
130 | import sys
131 | from agent.PVAgent import *
132 | from functions import *
133 | import constant
134 | import matplotlib.pyplot as plt
135 |
136 | if len(sys.argv) <= 2:
137 | print("Usage: python PVQTrain.py [stockfile] [episodes] [timesteps] ")
138 | exit(1)
139 |
140 | stock_name = sys.argv[1]
141 |
142 | episode_count = 1000
143 | timesteps = 4
144 |
145 | if len(sys.argv) >= 3:
146 | episode_count = int(sys.argv[2])
147 |
148 | if len(sys.argv) >= 4:
149 | timesteps = max(int(sys.argv[3]), 1)
150 |
151 | main(stock_name, episode_count, timesteps)
152 |
153 | ##############################
154 | # own ad: For NinjaTrader related stuff: check https://pvoodoo.com or blog: https://pvoodoo.blogspot.com/?view=flipcard
155 | ##############################
156 |
--------------------------------------------------------------------------------
/Train.ipynb:
--------------------------------------------------------------------------------
1 | {"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"name":"Train.ipynb","version":"0.3.2","provenance":[{"file_id":"1cyt_u_KemDzutkPKES7zryIXSWABXnbK","timestamp":1551199064169}],"collapsed_sections":[]},"kernelspec":{"name":"python3","display_name":"Python 3"},"accelerator":"GPU"},"cells":[{"metadata":{"id":"fcPzxClx1dg6","colab_type":"text"},"cell_type":"markdown","source":["# **No MORE reasonable to run at colab, run at your own local machine, much faster, no need for GPU/TPU !!**\n","(or connect to your local runtime..)"]},{"metadata":{"id":"PM8IPU_hykHG","colab_type":"text"},"cell_type":"markdown","source":["*Set environment and download the data for computation\n","\n","Main steps:\n","\n","Make a directory somewhere in your google drive\n","\n","Copy files there\n","\n","Mount google drive so colab can see those files and directories\n","\n","run the train and so on...\n","\n","Quite few indeed\n","\n","*"]},{"metadata":{"id":"mTvWZegCNVNB","colab_type":"text"},"cell_type":"markdown","source":["Mount google drive , this will promt instructions and authorization code and so on...\n"]},{"metadata":{"id":"CQmz7QrQzynf","colab_type":"code","colab":{}},"cell_type":"code","source":["from google.colab import drive\n","drive.mount('/content/gdrive')"],"execution_count":0,"outputs":[]},{"metadata":{"id":"vO6-MlvwyTPp","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":34},"outputId":"f018c44d-ac27-4f35-cb9d-19afcdeb6126","executionInfo":{"status":"ok","timestamp":1553667299893,"user_tz":-120,"elapsed":2151,"user":{"displayName":"Marko Rantala","photoUrl":"https://lh4.googleusercontent.com/-bZTqYCNF3S4/AAAAAAAAAAI/AAAAAAAABos/n9ix2hgrLAQ/s64/photo.jpg","userId":"11566323552717189307"}}},"cell_type":"code","source":["!ls \n"],"execution_count":2,"outputs":[{"output_type":"stream","text":["gdrive\tsample_data\n"],"name":"stdout"}]},{"metadata":{"id":"C5aPQCztaXBV","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":34},"outputId":"543fd710-febd-4b98-fb57-16205f1a704b","executionInfo":{"status":"ok","timestamp":1553667303838,"user_tz":-120,"elapsed":704,"user":{"displayName":"Marko Rantala","photoUrl":"https://lh4.googleusercontent.com/-bZTqYCNF3S4/AAAAAAAAAAI/AAAAAAAABos/n9ix2hgrLAQ/s64/photo.jpg","userId":"11566323552717189307"}}},"cell_type":"code","source":["# change dir for what you used, next one is from my setup\n","root_path = 'gdrive/My Drive/RL/RLDQTrading'\n","%cd $root_path\n"],"execution_count":3,"outputs":[{"output_type":"stream","text":["/content/gdrive/My Drive/RL/RLDQTrading\n"],"name":"stdout"}]},{"metadata":{"id":"CUOq0XwLwUXN","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":85},"outputId":"d5c33380-a584-4af3-f682-111354869200","executionInfo":{"status":"ok","timestamp":1553667310722,"user_tz":-120,"elapsed":1988,"user":{"displayName":"Marko Rantala","photoUrl":"https://lh4.googleusercontent.com/-bZTqYCNF3S4/AAAAAAAAAAI/AAAAAAAABos/n9ix2hgrLAQ/s64/photo.jpg","userId":"11566323552717189307"}}},"cell_type":"code","source":["!ls"],"execution_count":4,"outputs":[{"output_type":"stream","text":["agent\t info\t\t PlotModel.py README.md\n","constant.py LICENSE\t\t PVQEvaluate.py RLDataExample.ipynb\n","data\t MLWriteRLTrainData.PNG PVQTrain.py RLDataExample.md\n","functions.py models\t\t __pycache__ Train.ipynb\n"],"name":"stdout"}]},{"metadata":{"id":"mqbz3uUVb_8h","colab_type":"code","colab":{}},"cell_type":"code","source":["import PVQTrain\n"],"execution_count":0,"outputs":[]},{"metadata":{"id":"7lhlcWBDiqrj","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":1577},"outputId":"bf9e3b09-ccc8-4594-9a84-eec24b331670","executionInfo":{"status":"error","timestamp":1553668538748,"user_tz":-120,"elapsed":1105664,"user":{"displayName":"Marko Rantala","photoUrl":"https://lh4.googleusercontent.com/-bZTqYCNF3S4/AAAAAAAAAAI/AAAAAAAABos/n9ix2hgrLAQ/s64/photo.jpg","userId":"11566323552717189307"}}},"cell_type":"code","source":["stock_name = \"RLDataFor18YM60D\"\n","PVQTrain.main(stock_name, 10000, 4) # change parameters .... "],"execution_count":8,"outputs":[{"output_type":"stream","text":["func Datashape: (8934, 8)\n","func Features shape: (8931, 4, 6) (8931,)\n","WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/op_def_library.py:263: colocate_with (from tensorflow.python.framework.ops) is deprecated and will be removed in a future version.\n","Instructions for updating:\n","Colocations handled automatically by placer.\n","DataLength: 8930\n","Features: 6\n","Timesteps to use: 4\n","Episode 0/10000\n","WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/math_ops.py:3066: to_int32 (from tensorflow.python.ops.math_ops) is deprecated and will be removed in a future version.\n","Instructions for updating:\n","Use tf.cast instead.\n","Total Profit (Points) : -653.0000\n","Training left: 496.14 hours\n","--------------------------------\n","Episode 1/10000\n","Total Profit (Points) : 628.0000\n","Training left: 525.46 hours\n","--------------------------------\n","Episode 2/10000\n","Total Profit (Points) : 18.0000\n","Training left: 538.53 hours\n","--------------------------------\n","Episode 3/10000\n","Total Profit (Points) : -805.0000\n","Training left: 544.26 hours\n","--------------------------------\n","Episode 4/10000\n","Total Profit (Points) : 259.0000\n","Training left: 547.35 hours\n","--------------------------------\n","Episode 5/10000\n"],"name":"stdout"},{"output_type":"error","ename":"KeyboardInterrupt","evalue":"ignored","traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)","\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0mstock_name\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m\"RLDataFor18YM60D\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mPVQTrain\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmain\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstock_name\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m10000\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m4\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# change parameters ....\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m","\u001b[0;32m/content/gdrive/My Drive/RL/RLDQTrading/PVQTrain.py\u001b[0m in \u001b[0;36mmain\u001b[0;34m(stock_name, episode_count, timesteps)\u001b[0m\n\u001b[1;32m 111\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 112\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0magent\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmemory\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0mbatch_size\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 113\u001b[0;31m \u001b[0magent\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexpReplay\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mbatch_size\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 114\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 115\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0me\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0;36m100\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m0\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0mtotal_profit\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0mbest_profit\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/content/gdrive/My Drive/RL/RLDQTrading/agent/PVAgent.py\u001b[0m in \u001b[0;36mexpReplay\u001b[0;34m(self, batch_size)\u001b[0m\n\u001b[1;32m 113\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 114\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 115\u001b[0;31m \u001b[0mtarget_f\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmodel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpredict\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstate\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m#Modif with 0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 116\u001b[0m \u001b[0mtarget_f\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0maction\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtarget\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 117\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/usr/local/lib/python3.6/dist-packages/keras/engine/training.py\u001b[0m in \u001b[0;36mpredict\u001b[0;34m(self, x, batch_size, verbose, steps)\u001b[0m\n\u001b[1;32m 1167\u001b[0m \u001b[0mbatch_size\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mbatch_size\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1168\u001b[0m \u001b[0mverbose\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mverbose\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1169\u001b[0;31m steps=steps)\n\u001b[0m\u001b[1;32m 1170\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1171\u001b[0m def train_on_batch(self, x, y,\n","\u001b[0;32m/usr/local/lib/python3.6/dist-packages/keras/engine/training_arrays.py\u001b[0m in \u001b[0;36mpredict_loop\u001b[0;34m(model, f, ins, batch_size, verbose, steps)\u001b[0m\n\u001b[1;32m 292\u001b[0m \u001b[0mins_batch\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mins_batch\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtoarray\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 293\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 294\u001b[0;31m \u001b[0mbatch_outs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mins_batch\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 295\u001b[0m \u001b[0mbatch_outs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mto_list\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mbatch_outs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 296\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mbatch_index\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, inputs)\u001b[0m\n\u001b[1;32m 2713\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_legacy_call\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minputs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2714\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2715\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_call\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minputs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2716\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2717\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mpy_any\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mis_tensor\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mx\u001b[0m \u001b[0;32min\u001b[0m \u001b[0minputs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py\u001b[0m in \u001b[0;36m_call\u001b[0;34m(self, inputs)\u001b[0m\n\u001b[1;32m 2673\u001b[0m \u001b[0mfetched\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_callable_fn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0marray_vals\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrun_metadata\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrun_metadata\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2674\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2675\u001b[0;31m \u001b[0mfetched\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_callable_fn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0marray_vals\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2676\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mfetched\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0moutputs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2677\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/usr/local/lib/python3.6/dist-packages/tensorflow/python/client/session.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1437\u001b[0m ret = tf_session.TF_SessionRunCallable(\n\u001b[1;32m 1438\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_session\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_session\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_handle\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstatus\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1439\u001b[0;31m run_metadata_ptr)\n\u001b[0m\u001b[1;32m 1440\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mrun_metadata\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1441\u001b[0m \u001b[0mproto_data\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtf_session\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mTF_GetBuffer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrun_metadata_ptr\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;31mKeyboardInterrupt\u001b[0m: "]}]},{"metadata":{"id":"EtvLShFczwNv","colab_type":"text"},"cell_type":"markdown","source":[""]}]}
--------------------------------------------------------------------------------
/data/RLTestDataSinSF.csv:
--------------------------------------------------------------------------------
1 | UTC0;151_0;134_0
2 | 2/6/2019 6:30:00 PM;-0.5877852523;0.152173913
3 | 2/6/2019 7:00:00 PM;-0.3090169944;0.1304347826
4 | 2/6/2019 7:30:00 PM;-4.89842541528951E-16;0.1086956522
5 | 2/6/2019 8:00:00 PM;0.3090169944;0.0869565217
6 | 2/6/2019 8:30:00 PM;0.5877852523;0.0652173913
7 | 2/6/2019 9:00:00 PM;0.8090169944;0.0434782609
8 | 2/6/2019 9:30:00 PM;0.9510565163;0.0217391304
9 | 2/6/2019 10:00:00 PM;1;0
10 | 2/6/2019 11:30:00 PM;0;0.9782608696
11 | 2/7/2019 12:00:00 AM;0.3090169944;0.9565217391
12 | 2/7/2019 12:30:00 AM;0.5877852523;0.9347826087
13 | 2/7/2019 1:00:00 AM;0.8090169944;0.9130434783
14 | 2/7/2019 1:30:00 AM;0.9510565163;0.8913043478
15 | 2/7/2019 2:00:00 AM;1;0.8695652174
16 | 2/7/2019 2:30:00 AM;0.9510565163;0.847826087
17 | 2/7/2019 3:00:00 AM;0.8090169944;0.8260869565
18 | 2/7/2019 3:30:00 AM;0.5877852523;0.8043478261
19 | 2/7/2019 4:00:00 AM;0.3090169944;0.7826086957
20 | 2/7/2019 4:30:00 AM;1.22460635382238E-16;0.7608695652
21 | 2/7/2019 5:00:00 AM;-0.3090169944;0.7391304348
22 | 2/7/2019 5:30:00 AM;-0.5877852523;0.7173913043
23 | 2/7/2019 6:00:00 AM;-0.8090169944;0.6956521739
24 | 2/7/2019 6:30:00 AM;-0.9510565163;0.6739130435
25 | 2/7/2019 7:00:00 AM;-1;0.652173913
26 | 2/7/2019 7:30:00 AM;-0.9510565163;0.6304347826
27 | 2/7/2019 8:00:00 AM;-0.8090169944;0.6086956522
28 | 2/7/2019 8:30:00 AM;-0.5877852523;0.5869565217
29 | 2/7/2019 9:00:00 AM;-0.3090169944;0.5652173913
30 | 2/7/2019 9:30:00 AM;-2.44921270764475E-16;0.5434782609
31 | 2/7/2019 10:00:00 AM;0.3090169944;0.5217391304
32 | 2/7/2019 10:30:00 AM;0.5877852523;0.5
33 | 2/7/2019 11:00:00 AM;0.8090169944;0.4782608696
34 | 2/7/2019 11:30:00 AM;0.9510565163;0.4565217391
35 | 2/7/2019 12:00:00 PM;1;0.4347826087
36 | 2/7/2019 12:30:00 PM;0.9510565163;0.4130434783
37 | 2/7/2019 1:00:00 PM;0.8090169944;0.3913043478
38 | 2/7/2019 1:30:00 PM;0.5877852523;0.3695652174
39 | 2/7/2019 2:00:00 PM;0.3090169944;0.347826087
40 | 2/7/2019 2:30:00 PM;3.67381906146713E-16;0.3260869565
41 | 2/7/2019 3:00:00 PM;-0.3090169944;0.3043478261
42 | 2/7/2019 3:30:00 PM;-0.5877852523;0.2826086957
43 | 2/7/2019 4:00:00 PM;-0.8090169944;0.2608695652
44 | 2/7/2019 4:30:00 PM;-0.9510565163;0.2391304348
45 | 2/7/2019 5:00:00 PM;-1;0.2173913043
46 | 2/7/2019 5:30:00 PM;-0.9510565163;0.1956521739
47 | 2/7/2019 6:00:00 PM;-0.8090169944;0.1739130435
48 | 2/7/2019 6:30:00 PM;-0.5877852523;0.152173913
49 | 2/7/2019 7:00:00 PM;-0.3090169944;0.1304347826
50 | 2/7/2019 7:30:00 PM;-4.89842541528951E-16;0.1086956522
51 | 2/7/2019 8:00:00 PM;0.3090169944;0.0869565217
52 | 2/7/2019 8:30:00 PM;0.5877852523;0.0652173913
53 | 2/7/2019 9:00:00 PM;0.8090169944;0.0434782609
54 | 2/7/2019 9:30:00 PM;0.9510565163;0.0217391304
55 | 2/7/2019 10:00:00 PM;1;0
56 | 2/7/2019 11:30:00 PM;0;0.9782608696
57 | 2/8/2019 12:00:00 AM;0.3090169944;0.9565217391
58 | 2/8/2019 12:30:00 AM;0.5877852523;0.9347826087
59 | 2/8/2019 1:00:00 AM;0.8090169944;0.9130434783
60 | 2/8/2019 1:30:00 AM;0.9510565163;0.8913043478
61 | 2/8/2019 2:00:00 AM;1;0.8695652174
62 | 2/8/2019 2:30:00 AM;0.9510565163;0.847826087
63 | 2/8/2019 3:00:00 AM;0.8090169944;0.8260869565
64 | 2/8/2019 3:30:00 AM;0.5877852523;0.8043478261
65 | 2/8/2019 4:00:00 AM;0.3090169944;0.7826086957
66 | 2/8/2019 4:30:00 AM;1.22460635382238E-16;0.7608695652
67 | 2/8/2019 5:00:00 AM;-0.3090169944;0.7391304348
68 | 2/8/2019 5:30:00 AM;-0.5877852523;0.7173913043
69 | 2/8/2019 6:00:00 AM;-0.8090169944;0.6956521739
70 | 2/8/2019 6:30:00 AM;-0.9510565163;0.6739130435
71 | 2/8/2019 7:00:00 AM;-1;0.652173913
72 | 2/8/2019 7:30:00 AM;-0.9510565163;0.6304347826
73 | 2/8/2019 8:00:00 AM;-0.8090169944;0.6086956522
74 | 2/8/2019 8:30:00 AM;-0.5877852523;0.5869565217
75 | 2/8/2019 9:00:00 AM;-0.3090169944;0.5652173913
76 | 2/8/2019 9:30:00 AM;-2.44921270764475E-16;0.5434782609
77 | 2/8/2019 10:00:00 AM;0.3090169944;0.5217391304
78 | 2/8/2019 10:30:00 AM;0.5877852523;0.5
79 | 2/8/2019 11:00:00 AM;0.8090169944;0.4782608696
80 | 2/8/2019 11:30:00 AM;0.9510565163;0.4565217391
81 | 2/8/2019 12:00:00 PM;1;0.4347826087
82 | 2/8/2019 12:30:00 PM;0.9510565163;0.4130434783
83 | 2/8/2019 1:00:00 PM;0.8090169944;0.3913043478
84 | 2/8/2019 1:30:00 PM;0.5877852523;0.3695652174
85 | 2/8/2019 2:00:00 PM;0.3090169944;0.347826087
86 | 2/8/2019 2:30:00 PM;3.67381906146713E-16;0.3260869565
87 | 2/8/2019 3:00:00 PM;-0.3090169944;0.3043478261
88 | 2/8/2019 3:30:00 PM;-0.5877852523;0.2826086957
89 | 2/8/2019 4:00:00 PM;-0.8090169944;0.2608695652
90 | 2/8/2019 4:30:00 PM;-0.9510565163;0.2391304348
91 | 2/8/2019 5:00:00 PM;-1;0.2173913043
92 | 2/8/2019 5:30:00 PM;-0.9510565163;0.1956521739
93 | 2/8/2019 6:00:00 PM;-0.8090169944;0.1739130435
94 | 2/8/2019 6:30:00 PM;-0.5877852523;0.152173913
95 | 2/8/2019 7:00:00 PM;-0.3090169944;0.1304347826
96 | 2/8/2019 7:30:00 PM;-4.89842541528951E-16;0.1086956522
97 | 2/8/2019 8:00:00 PM;0.3090169944;0.0869565217
98 | 2/8/2019 8:30:00 PM;0.5877852523;0.0652173913
99 | 2/8/2019 9:00:00 PM;0.8090169944;0.0434782609
100 | 2/8/2019 9:30:00 PM;0.9510565163;0.0217391304
101 | 2/8/2019 10:00:00 PM;1;0
102 | 2/10/2019 11:30:00 PM;0;0.9782608696
103 | 2/11/2019 12:00:00 AM;0.3090169944;0.9565217391
104 | 2/11/2019 12:30:00 AM;0.5877852523;0.9347826087
105 | 2/11/2019 1:00:00 AM;0.8090169944;0.9130434783
106 | 2/11/2019 1:30:00 AM;0.9510565163;0.8913043478
107 | 2/11/2019 2:00:00 AM;1;0.8695652174
108 | 2/11/2019 2:30:00 AM;0.9510565163;0.847826087
109 | 2/11/2019 3:00:00 AM;0.8090169944;0.8260869565
110 | 2/11/2019 3:30:00 AM;0.5877852523;0.8043478261
111 | 2/11/2019 4:00:00 AM;0.3090169944;0.7826086957
112 | 2/11/2019 4:30:00 AM;1.22460635382238E-16;0.7608695652
113 | 2/11/2019 5:00:00 AM;-0.3090169944;0.7391304348
114 | 2/11/2019 5:30:00 AM;-0.5877852523;0.7173913043
115 | 2/11/2019 6:00:00 AM;-0.8090169944;0.6956521739
116 | 2/11/2019 6:30:00 AM;-0.9510565163;0.6739130435
117 | 2/11/2019 7:00:00 AM;-1;0.652173913
118 | 2/11/2019 7:30:00 AM;-0.9510565163;0.6304347826
119 | 2/11/2019 8:00:00 AM;-0.8090169944;0.6086956522
120 | 2/11/2019 8:30:00 AM;-0.5877852523;0.5869565217
121 | 2/11/2019 9:00:00 AM;-0.3090169944;0.5652173913
122 | 2/11/2019 9:30:00 AM;-2.44921270764475E-16;0.5434782609
123 | 2/11/2019 10:00:00 AM;0.3090169944;0.5217391304
124 | 2/11/2019 10:30:00 AM;0.5877852523;0.5
125 | 2/11/2019 11:00:00 AM;0.8090169944;0.4782608696
126 | 2/11/2019 11:30:00 AM;0.9510565163;0.4565217391
127 | 2/11/2019 12:00:00 PM;1;0.4347826087
128 | 2/11/2019 12:30:00 PM;0.9510565163;0.4130434783
129 | 2/11/2019 1:00:00 PM;0.8090169944;0.3913043478
130 | 2/11/2019 1:30:00 PM;0.5877852523;0.3695652174
131 | 2/11/2019 2:00:00 PM;0.3090169944;0.347826087
132 | 2/11/2019 2:30:00 PM;3.67381906146713E-16;0.3260869565
133 | 2/11/2019 3:00:00 PM;-0.3090169944;0.3043478261
134 | 2/11/2019 3:30:00 PM;-0.5877852523;0.2826086957
135 | 2/11/2019 4:00:00 PM;-0.8090169944;0.2608695652
136 | 2/11/2019 4:30:00 PM;-0.9510565163;0.2391304348
137 | 2/11/2019 5:00:00 PM;-1;0.2173913043
138 | 2/11/2019 5:30:00 PM;-0.9510565163;0.1956521739
139 | 2/11/2019 6:00:00 PM;-0.8090169944;0.1739130435
140 | 2/11/2019 6:30:00 PM;-0.5877852523;0.152173913
141 | 2/11/2019 7:00:00 PM;-0.3090169944;0.1304347826
142 | 2/11/2019 7:30:00 PM;-4.89842541528951E-16;0.1086956522
143 | 2/11/2019 8:00:00 PM;0.3090169944;0.0869565217
144 | 2/11/2019 8:30:00 PM;0.5877852523;0.0652173913
145 | 2/11/2019 9:00:00 PM;0.8090169944;0.0434782609
146 | 2/11/2019 9:30:00 PM;0.9510565163;0.0217391304
147 | 2/11/2019 10:00:00 PM;1;0
148 | 2/11/2019 11:30:00 PM;0;0.9782608696
149 | 2/12/2019 12:00:00 AM;0.3090169944;0.9565217391
150 | 2/12/2019 12:30:00 AM;0.5877852523;0.9347826087
151 | 2/12/2019 1:00:00 AM;0.8090169944;0.9130434783
152 | 2/12/2019 1:30:00 AM;0.9510565163;0.8913043478
153 | 2/12/2019 2:00:00 AM;1;0.8695652174
154 | 2/12/2019 2:30:00 AM;0.9510565163;0.847826087
155 | 2/12/2019 3:00:00 AM;0.8090169944;0.8260869565
156 | 2/12/2019 3:30:00 AM;0.5877852523;0.8043478261
157 | 2/12/2019 4:00:00 AM;0.3090169944;0.7826086957
158 | 2/12/2019 4:30:00 AM;1.22460635382238E-16;0.7608695652
159 | 2/12/2019 5:00:00 AM;-0.3090169944;0.7391304348
160 | 2/12/2019 5:30:00 AM;-0.5877852523;0.7173913043
161 | 2/12/2019 6:00:00 AM;-0.8090169944;0.6956521739
162 | 2/12/2019 6:30:00 AM;-0.9510565163;0.6739130435
163 | 2/12/2019 7:00:00 AM;-1;0.652173913
164 | 2/12/2019 7:30:00 AM;-0.9510565163;0.6304347826
165 | 2/12/2019 8:00:00 AM;-0.8090169944;0.6086956522
166 | 2/12/2019 8:30:00 AM;-0.5877852523;0.5869565217
167 | 2/12/2019 9:00:00 AM;-0.3090169944;0.5652173913
168 | 2/12/2019 9:30:00 AM;-2.44921270764475E-16;0.5434782609
169 | 2/12/2019 10:00:00 AM;0.3090169944;0.5217391304
170 | 2/12/2019 10:30:00 AM;0.5877852523;0.5
171 | 2/12/2019 11:00:00 AM;0.8090169944;0.4782608696
172 | 2/12/2019 11:30:00 AM;0.9510565163;0.4565217391
173 | 2/12/2019 12:00:00 PM;1;0.4347826087
174 | 2/12/2019 12:30:00 PM;0.9510565163;0.4130434783
175 | 2/12/2019 1:00:00 PM;0.8090169944;0.3913043478
176 | 2/12/2019 1:30:00 PM;0.5877852523;0.3695652174
177 | 2/12/2019 2:00:00 PM;0.3090169944;0.347826087
178 | 2/12/2019 2:30:00 PM;3.67381906146713E-16;0.3260869565
179 | 2/12/2019 3:00:00 PM;-0.3090169944;0.3043478261
180 | 2/12/2019 3:30:00 PM;-0.5877852523;0.2826086957
181 | 2/12/2019 4:00:00 PM;-0.8090169944;0.2608695652
182 | 2/12/2019 4:30:00 PM;-0.9510565163;0.2391304348
183 | 2/12/2019 5:00:00 PM;-1;0.2173913043
184 | 2/12/2019 5:30:00 PM;-0.9510565163;0.1956521739
185 | 2/12/2019 6:00:00 PM;-0.8090169944;0.1739130435
186 | 2/12/2019 6:30:00 PM;-0.5877852523;0.152173913
187 | 2/12/2019 7:00:00 PM;-0.3090169944;0.1304347826
188 | 2/12/2019 7:30:00 PM;-4.89842541528951E-16;0.1086956522
189 | 2/12/2019 8:00:00 PM;0.3090169944;0.0869565217
190 | 2/12/2019 8:30:00 PM;0.5877852523;0.0652173913
191 | 2/12/2019 9:00:00 PM;0.8090169944;0.0434782609
192 | 2/12/2019 9:30:00 PM;0.9510565163;0.0217391304
193 | 2/12/2019 10:00:00 PM;1;0
194 | 2/12/2019 11:30:00 PM;0;0.9782608696
195 | 2/13/2019 12:00:00 AM;0.3090169944;0.9565217391
196 | 2/13/2019 12:30:00 AM;0.5877852523;0.9347826087
197 | 2/13/2019 1:00:00 AM;0.8090169944;0.9130434783
198 | 2/13/2019 1:30:00 AM;0.9510565163;0.8913043478
199 | 2/13/2019 2:00:00 AM;1;0.8695652174
200 | 2/13/2019 2:30:00 AM;0.9510565163;0.847826087
201 | 2/13/2019 3:00:00 AM;0.8090169944;0.8260869565
202 | 2/13/2019 3:30:00 AM;0.5877852523;0.8043478261
203 | 2/13/2019 4:00:00 AM;0.3090169944;0.7826086957
204 | 2/13/2019 4:30:00 AM;1.22460635382238E-16;0.7608695652
205 | 2/13/2019 5:00:00 AM;-0.3090169944;0.7391304348
206 | 2/13/2019 5:30:00 AM;-0.5877852523;0.7173913043
207 | 2/13/2019 6:00:00 AM;-0.8090169944;0.6956521739
208 | 2/13/2019 6:30:00 AM;-0.9510565163;0.6739130435
209 | 2/13/2019 7:00:00 AM;-1;0.652173913
210 | 2/13/2019 7:30:00 AM;-0.9510565163;0.6304347826
211 | 2/13/2019 8:00:00 AM;-0.8090169944;0.6086956522
212 | 2/13/2019 8:30:00 AM;-0.5877852523;0.5869565217
213 | 2/13/2019 9:00:00 AM;-0.3090169944;0.5652173913
214 | 2/13/2019 9:30:00 AM;-2.44921270764475E-16;0.5434782609
215 | 2/13/2019 10:00:00 AM;0.3090169944;0.5217391304
216 | 2/13/2019 10:30:00 AM;0.5877852523;0.5
217 | 2/13/2019 11:00:00 AM;0.8090169944;0.4782608696
218 | 2/13/2019 11:30:00 AM;0.9510565163;0.4565217391
219 | 2/13/2019 12:00:00 PM;1;0.4347826087
220 | 2/13/2019 12:30:00 PM;0.9510565163;0.4130434783
221 | 2/13/2019 1:00:00 PM;0.8090169944;0.3913043478
222 | 2/13/2019 1:30:00 PM;0.5877852523;0.3695652174
223 | 2/13/2019 2:00:00 PM;0.3090169944;0.347826087
224 | 2/13/2019 2:30:00 PM;3.67381906146713E-16;0.3260869565
225 | 2/13/2019 3:00:00 PM;-0.3090169944;0.3043478261
226 | 2/13/2019 3:30:00 PM;-0.5877852523;0.2826086957
227 | 2/13/2019 4:00:00 PM;-0.8090169944;0.2608695652
228 | 2/13/2019 4:30:00 PM;-0.9510565163;0.2391304348
229 | 2/13/2019 5:00:00 PM;-1;0.2173913043
230 | 2/13/2019 5:30:00 PM;-0.9510565163;0.1956521739
231 | 2/13/2019 6:00:00 PM;-0.8090169944;0.1739130435
232 | 2/13/2019 6:30:00 PM;-0.5877852523;0.152173913
233 | 2/13/2019 7:00:00 PM;-0.3090169944;0.1304347826
234 | 2/13/2019 7:30:00 PM;-4.89842541528951E-16;0.1086956522
235 | 2/13/2019 8:00:00 PM;0.3090169944;0.0869565217
236 | 2/13/2019 8:30:00 PM;0.5877852523;0.0652173913
237 | 2/13/2019 9:00:00 PM;0.8090169944;0.0434782609
238 | 2/13/2019 9:30:00 PM;0.9510565163;0.0217391304
239 | 2/13/2019 10:00:00 PM;1;0
240 | 2/13/2019 11:30:00 PM;0;0.9782608696
241 | 2/14/2019 12:00:00 AM;0.3090169944;0.9565217391
242 | 2/14/2019 12:30:00 AM;0.5877852523;0.9347826087
243 | 2/14/2019 1:00:00 AM;0.8090169944;0.9130434783
244 | 2/14/2019 1:30:00 AM;0.9510565163;0.8913043478
245 | 2/14/2019 2:00:00 AM;1;0.8695652174
246 | 2/14/2019 2:30:00 AM;0.9510565163;0.847826087
247 | 2/14/2019 3:00:00 AM;0.8090169944;0.8260869565
248 | 2/14/2019 3:30:00 AM;0.5877852523;0.8043478261
249 | 2/14/2019 4:00:00 AM;0.3090169944;0.7826086957
250 | 2/14/2019 4:30:00 AM;1.22460635382238E-16;0.7608695652
251 | 2/14/2019 5:00:00 AM;-0.3090169944;0.7391304348
252 | 2/14/2019 5:30:00 AM;-0.5877852523;0.7173913043
253 | 2/14/2019 6:00:00 AM;-0.8090169944;0.6956521739
254 | 2/14/2019 6:30:00 AM;-0.9510565163;0.6739130435
255 | 2/14/2019 7:00:00 AM;-1;0.652173913
256 | 2/14/2019 7:30:00 AM;-0.9510565163;0.6304347826
257 | 2/14/2019 8:00:00 AM;-0.8090169944;0.6086956522
258 | 2/14/2019 8:30:00 AM;-0.5877852523;0.5869565217
259 | 2/14/2019 9:00:00 AM;-0.3090169944;0.5652173913
260 | 2/14/2019 9:30:00 AM;-2.44921270764475E-16;0.5434782609
261 | 2/14/2019 10:00:00 AM;0.3090169944;0.5217391304
262 | 2/14/2019 10:30:00 AM;0.5877852523;0.5
263 | 2/14/2019 11:00:00 AM;0.8090169944;0.4782608696
264 | 2/14/2019 11:30:00 AM;0.9510565163;0.4565217391
265 | 2/14/2019 12:00:00 PM;1;0.4347826087
266 | 2/14/2019 12:30:00 PM;0.9510565163;0.4130434783
267 | 2/14/2019 1:00:00 PM;0.8090169944;0.3913043478
268 | 2/14/2019 1:30:00 PM;0.5877852523;0.3695652174
269 | 2/14/2019 2:00:00 PM;0.3090169944;0.347826087
270 | 2/14/2019 2:30:00 PM;3.67381906146713E-16;0.3260869565
271 | 2/14/2019 3:00:00 PM;-0.3090169944;0.3043478261
272 | 2/14/2019 3:30:00 PM;-0.5877852523;0.2826086957
273 | 2/14/2019 4:00:00 PM;-0.8090169944;0.2608695652
274 | 2/14/2019 4:30:00 PM;-0.9510565163;0.2391304348
275 | 2/14/2019 5:00:00 PM;-1;0.2173913043
276 | 2/14/2019 5:30:00 PM;-0.9510565163;0.1956521739
277 | 2/14/2019 6:00:00 PM;-0.8090169944;0.1739130435
278 | 2/14/2019 6:30:00 PM;-0.5877852523;0.152173913
279 | 2/14/2019 7:00:00 PM;-0.3090169944;0.1304347826
280 | 2/14/2019 7:30:00 PM;-4.89842541528951E-16;0.1086956522
281 | 2/14/2019 8:00:00 PM;0.3090169944;0.0869565217
282 | 2/14/2019 8:30:00 PM;0.5877852523;0.0652173913
283 | 2/14/2019 9:00:00 PM;0.8090169944;0.0434782609
284 | 2/14/2019 9:30:00 PM;0.9510565163;0.0217391304
285 | 2/14/2019 10:00:00 PM;1;0
286 | 2/14/2019 11:30:00 PM;0;0.9782608696
287 | 2/15/2019 12:00:00 AM;0.3090169944;0.9565217391
288 | 2/15/2019 12:30:00 AM;0.5877852523;0.9347826087
289 | 2/15/2019 1:00:00 AM;0.8090169944;0.9130434783
290 | 2/15/2019 1:30:00 AM;0.9510565163;0.8913043478
291 | 2/15/2019 2:00:00 AM;1;0.8695652174
292 | 2/15/2019 2:30:00 AM;0.9510565163;0.847826087
293 | 2/15/2019 3:00:00 AM;0.8090169944;0.8260869565
294 | 2/15/2019 3:30:00 AM;0.5877852523;0.8043478261
295 | 2/15/2019 4:00:00 AM;0.3090169944;0.7826086957
296 | 2/15/2019 4:30:00 AM;1.22460635382238E-16;0.7608695652
297 | 2/15/2019 5:00:00 AM;-0.3090169944;0.7391304348
298 | 2/15/2019 5:30:00 AM;-0.5877852523;0.7173913043
299 | 2/15/2019 6:00:00 AM;-0.8090169944;0.6956521739
300 | 2/15/2019 6:30:00 AM;-0.9510565163;0.6739130435
301 | 2/15/2019 7:00:00 AM;-1;0.652173913
302 | 2/15/2019 7:30:00 AM;-0.9510565163;0.6304347826
303 | 2/15/2019 8:00:00 AM;-0.8090169944;0.6086956522
304 | 2/15/2019 8:30:00 AM;-0.5877852523;0.5869565217
305 | 2/15/2019 9:00:00 AM;-0.3090169944;0.5652173913
306 | 2/15/2019 9:30:00 AM;-2.44921270764475E-16;0.5434782609
307 | 2/15/2019 10:00:00 AM;0.3090169944;0.5217391304
308 | 2/15/2019 10:30:00 AM;0.5877852523;0.5
309 | 2/15/2019 11:00:00 AM;0.8090169944;0.4782608696
310 | 2/15/2019 11:30:00 AM;0.9510565163;0.4565217391
311 | 2/15/2019 12:00:00 PM;1;0.4347826087
312 | 2/15/2019 12:30:00 PM;0.9510565163;0.4130434783
313 | 2/15/2019 1:00:00 PM;0.8090169944;0.3913043478
314 | 2/15/2019 1:30:00 PM;0.5877852523;0.3695652174
315 | 2/15/2019 2:00:00 PM;0.3090169944;0.347826087
316 | 2/15/2019 2:30:00 PM;3.67381906146713E-16;0.3260869565
317 | 2/15/2019 3:00:00 PM;-0.3090169944;0.3043478261
318 | 2/15/2019 3:30:00 PM;-0.5877852523;0.2826086957
319 | 2/15/2019 4:00:00 PM;-0.8090169944;0.2608695652
320 | 2/15/2019 4:30:00 PM;-0.9510565163;0.2391304348
321 | 2/15/2019 5:00:00 PM;-1;0.2173913043
322 | 2/15/2019 5:30:00 PM;-0.9510565163;0.1956521739
323 | 2/15/2019 6:00:00 PM;-0.8090169944;0.1739130435
324 | 2/15/2019 6:30:00 PM;-0.5877852523;0.152173913
325 | 2/15/2019 7:00:00 PM;-0.3090169944;0.1304347826
326 | 2/15/2019 7:30:00 PM;-4.89842541528951E-16;0.1086956522
327 | 2/15/2019 8:00:00 PM;0.3090169944;0.0869565217
328 | 2/15/2019 8:30:00 PM;0.5877852523;0.0652173913
329 | 2/15/2019 9:00:00 PM;0.8090169944;0.0434782609
330 | 2/15/2019 9:30:00 PM;0.9510565163;0.0217391304
331 | 2/15/2019 10:00:00 PM;1;0
332 | 2/17/2019 11:30:00 PM;0;0.9736842105
333 | 2/18/2019 12:00:00 AM;0.3090169944;0.9473684211
334 | 2/18/2019 12:30:00 AM;0.5877852523;0.9210526316
335 | 2/18/2019 1:00:00 AM;0.8090169944;0.8947368421
336 | 2/18/2019 1:30:00 AM;0.9510565163;0.8684210526
337 | 2/18/2019 2:00:00 AM;1;0.8421052632
338 | 2/18/2019 2:30:00 AM;0.9510565163;0.8157894737
339 | 2/18/2019 3:00:00 AM;0.8090169944;0.7894736842
340 | 2/18/2019 3:30:00 AM;0.5877852523;0.7631578947
341 | 2/18/2019 4:00:00 AM;0.3090169944;0.7368421053
342 | 2/18/2019 4:30:00 AM;1.22460635382238E-16;0.7105263158
343 | 2/18/2019 5:00:00 AM;-0.3090169944;0.6842105263
344 | 2/18/2019 5:30:00 AM;-0.5877852523;0.6578947368
345 | 2/18/2019 6:00:00 AM;-0.8090169944;0.6315789474
346 | 2/18/2019 6:30:00 AM;-0.9510565163;0.6052631579
347 | 2/18/2019 7:00:00 AM;-1;0.5789473684
348 | 2/18/2019 7:30:00 AM;-0.9510565163;0.5526315789
349 | 2/18/2019 8:00:00 AM;-0.8090169944;0.5263157895
350 | 2/18/2019 8:30:00 AM;-0.5877852523;0.5
351 | 2/18/2019 9:00:00 AM;-0.3090169944;0.4736842105
352 | 2/18/2019 9:30:00 AM;-2.44921270764475E-16;0.4473684211
353 | 2/18/2019 10:00:00 AM;0.3090169944;0.4210526316
354 | 2/18/2019 10:30:00 AM;0.5877852523;0.3947368421
355 | 2/18/2019 11:00:00 AM;0.8090169944;0.3684210526
356 | 2/18/2019 11:30:00 AM;0.9510565163;0.3421052632
357 | 2/18/2019 12:00:00 PM;1;0.3157894737
358 | 2/18/2019 12:30:00 PM;0.9510565163;0.2894736842
359 | 2/18/2019 1:00:00 PM;0.8090169944;0.2631578947
360 | 2/18/2019 1:30:00 PM;0.5877852523;0.2368421053
361 | 2/18/2019 2:00:00 PM;0.3090169944;0.2105263158
362 | 2/18/2019 2:30:00 PM;3.67381906146713E-16;0.1842105263
363 | 2/18/2019 3:00:00 PM;-0.3090169944;0.1578947368
364 | 2/18/2019 3:30:00 PM;-0.5877852523;0.1315789474
365 | 2/18/2019 4:00:00 PM;-0.8090169944;0.1052631579
366 | 2/18/2019 4:30:00 PM;-0.9510565163;0.0789473684
367 | 2/18/2019 5:00:00 PM;-1;0.0526315789
368 | 2/18/2019 5:30:00 PM;-0.9510565163;0.0263157895
369 | 2/18/2019 6:00:00 PM;-0.8090169944;0
370 | 2/18/2019 11:30:00 PM;0;0.9782608696
371 | 2/19/2019 12:00:00 AM;0.3090169944;0.9565217391
372 | 2/19/2019 12:30:00 AM;0.5877852523;0.9347826087
373 | 2/19/2019 1:00:00 AM;0.8090169944;0.9130434783
374 | 2/19/2019 1:30:00 AM;0.9510565163;0.8913043478
375 | 2/19/2019 2:00:00 AM;1;0.8695652174
376 | 2/19/2019 2:30:00 AM;0.9510565163;0.847826087
377 | 2/19/2019 3:00:00 AM;0.8090169944;0.8260869565
378 | 2/19/2019 3:30:00 AM;0.5877852523;0.8043478261
379 | 2/19/2019 4:00:00 AM;0.3090169944;0.7826086957
380 | 2/19/2019 4:30:00 AM;1.22460635382238E-16;0.7608695652
381 | 2/19/2019 5:00:00 AM;-0.3090169944;0.7391304348
382 | 2/19/2019 5:30:00 AM;-0.5877852523;0.7173913043
383 | 2/19/2019 6:00:00 AM;-0.8090169944;0.6956521739
384 | 2/19/2019 6:30:00 AM;-0.9510565163;0.6739130435
385 | 2/19/2019 7:00:00 AM;-1;0.652173913
386 | 2/19/2019 7:30:00 AM;-0.9510565163;0.6304347826
387 | 2/19/2019 8:00:00 AM;-0.8090169944;0.6086956522
388 | 2/19/2019 8:30:00 AM;-0.5877852523;0.5869565217
389 | 2/19/2019 9:00:00 AM;-0.3090169944;0.5652173913
390 | 2/19/2019 9:30:00 AM;-2.44921270764475E-16;0.5434782609
391 | 2/19/2019 10:00:00 AM;0.3090169944;0.5217391304
392 | 2/19/2019 10:30:00 AM;0.5877852523;0.5
393 | 2/19/2019 11:00:00 AM;0.8090169944;0.4782608696
394 | 2/19/2019 11:30:00 AM;0.9510565163;0.4565217391
395 | 2/19/2019 12:00:00 PM;1;0.4347826087
396 | 2/19/2019 12:30:00 PM;0.9510565163;0.4130434783
397 | 2/19/2019 1:00:00 PM;0.8090169944;0.3913043478
398 | 2/19/2019 1:30:00 PM;0.5877852523;0.3695652174
399 | 2/19/2019 2:00:00 PM;0.3090169944;0.347826087
400 | 2/19/2019 2:30:00 PM;3.67381906146713E-16;0.3260869565
401 | 2/19/2019 3:00:00 PM;-0.3090169944;0.3043478261
402 | 2/19/2019 3:30:00 PM;-0.5877852523;0.2826086957
403 | 2/19/2019 4:00:00 PM;-0.8090169944;0.2608695652
404 | 2/19/2019 4:30:00 PM;-0.9510565163;0.2391304348
405 | 2/19/2019 5:00:00 PM;-1;0.2173913043
406 | 2/19/2019 5:30:00 PM;-0.9510565163;0.1956521739
407 |
--------------------------------------------------------------------------------
/functions.py:
--------------------------------------------------------------------------------
1 | # some common functions, maybe getNextPositionState and run_flat should be somewhere else... in PVAgent, actually so small so no reimplememention
2 | # Programming marko.rantala@pvoodoo.com
3 | # v1.0.0.1 20190305
4 | # v1.0.0.2 20190307 eod
5 | # v1.0.1.0 20190310 Start of
6 | ##############################
7 | # own ad: For NinjaTrader related stuff: check https://pvoodoo.com or blog: https://pvoodoo.blogspot.com/?view=flipcard
8 | ##############################
9 |
10 | import numpy as np
11 | import math
12 | from sklearn.preprocessing import MinMaxScaler # save this scaler to model directory
13 | from sklearn.externals import joblib
14 | import constant
15 |
16 | Debug=True
17 |
18 | scaler = MinMaxScaler(feature_range=(0.1, 1))
19 |
20 | #constant.MAXCONTRACTS = 1 # maybe better place needed for this, Setup, same as for slippage and so on.. -> constant
21 | #constant.COMMISSION = 0.0 # Like one TickSize min should be right, see TickSize from InputFile, written there for your info
22 | # Slippage add to commission so maybe 2 TickSize together would be quite common.
23 |
24 | def make_timesteps_old(a, timesteps): ## lets do some additional timesteps backwards, this is not used any more, see next
25 | array = []
26 | for j in np.arange(len(a)):
27 | unit = []
28 | for i in range(timesteps):
29 | unit.append(np.roll(a, i, axis=0)[j]) # why this failed in one special case ? ...
30 | array.append(unit)
31 | return np.array(array[timesteps-1:]) ## see, the new array is no more full length if timesteps over 1, price vector need to be shortened as well
32 |
33 |
34 | # fast version from make_timesteps as that found from stackoverflow...
35 | def make_timesteps(inArr, L = 2):
36 | # INPUTS :
37 | # a : Input array
38 | # L : Length along rows to be cut to create per subarray
39 |
40 | #workaround to length 1 , to add 3D, added by mrr, and no need to cut
41 | if L == 1:
42 | return inArr.reshape(inArr.shape[0], 1, inArr.shape[1])
43 |
44 | # Append the last row to the start. It just helps in keeping a view output.
45 | a = np.vstack(( inArr[-L+1:], inArr ))
46 |
47 | # Store shape and strides info
48 | m,n = a.shape
49 | s0,s1 = a.strides
50 |
51 | # Length of 3D output array along its axis=0
52 | nd0 = m - L + 1
53 |
54 | strided = np.lib.stride_tricks.as_strided
55 | return strided(a[L-1:], shape=(nd0,L,n), strides=(s0,-s0,s1))[L-1:]
56 |
57 | import time
58 | import datetime
59 |
60 | class Timer(object):
61 | def __init__(self, total):
62 | self.start = datetime.datetime.now()
63 | self.total = total
64 |
65 | def remains(self, done):
66 | now = datetime.datetime.now()
67 | # print("Wall time used ", now-self.start) # elapsed time
68 | left = (self.total - done) * (now - self.start) / max(done, 1)
69 | secs = int(left.total_seconds())
70 | if secs > 3600:
71 | return "{0:.2f} hours".format(secs/3600)
72 | else:
73 | return "{0:.2f} minutes".format(secs/60)
74 |
75 |
76 | # prints formatted price, not used
77 | def formatPrice(n):
78 | return ("-$" if n < 0 else "$") + "{0:.2f}".format(abs(n))
79 |
80 | # returns the vector containing stock data, "prices and features" from a fixed file, scaling done for features
81 | # scaling is dumpped to model directory if new_scaling=true or tried to read from there if using existing one...
82 | def getStockDataVec(key, timesteps, model_name="", dayTrading=False):
83 |
84 | data = np.genfromtxt("data/"+ key + ".csv",delimiter=';',skip_header=1, dtype="float_")[:,1:] # date removed
85 | if Debug:
86 | print("func Datashape: ", data.shape)
87 | prices = data[:,0] # column 0 after date removed
88 |
89 | #eod = data[:,1] # column 1 after price (or some not used feature if not )
90 | startFeatures = 1 # normal mode
91 | if dayTrading:
92 | eod = data[:,1] # column 1 after price (or some not used feature if not )
93 | startFeatures = 2
94 | else:
95 | eod = np.zeros(len(data), dtype=int)
96 | eod[len(data)-1] = 1 # only last is marked, so take flat position there , maybe last DayTrading data should be marked as well! yes, if not session boundary, just remove ident here, or add now if not needed
97 |
98 | features = data[:,startFeatures:] # price removed, column 1 or 2 based to dayTrading
99 |
100 | scaler = MinMaxScaler(feature_range=(0.1, 1))
101 | if model_name=="": # expect training
102 | scaler.fit(features) # this need to be put to Dim 2 not to dim 3 values next
103 | # save scaler for later usage, if out of sample set read together with model .h5
104 | joblib.dump(scaler, "models/" +key+ "_skaler.sav")
105 | else: # use existing scaler, datafile can be different but model name should define model and scaling
106 | scaler = joblib.load("models/" +model_name.split("_")[0]+ "_skaler.sav") # split to cut number of epochs away ...
107 | # if this fails, a new fit could be thought here too
108 |
109 | scaledFeatures = scaler.transform(features)
110 |
111 | features3D = make_timesteps(scaledFeatures, timesteps) # non full feature sets removed
112 | prices = prices[timesteps-1:] # cut as well
113 | eod = eod[timesteps-1:] ##
114 |
115 | assert features3D.shape[0] != prices.shape, "Shape error"
116 |
117 | if Debug:
118 | print("func Features shape: ",features3D.shape, prices.shape)
119 |
120 | #vec = []
121 | #lines = open("data/" + key + ".csv", "r").read().splitlines()
122 |
123 | #for line in lines[1:]:
124 | # vec.append(float(line.split(",")[4]))
125 | return prices, features3D, eod
126 |
127 | # returns the sigmoid, no need here any more
128 | def sigmoid(x):
129 | return 1 / (1 + math.exp(-x))
130 |
131 | # returns an an state representation at time t, which is actually a feature set at n, this is a market data
132 | def getState(data, t):
133 |
134 | return data[t].reshape(1, data[t].shape[0], data[t].shape[1]) # actually the whole initial data should have been transformed to 4 D initially, now some extra reshaping here
135 |
136 |
137 | # here we could define important info for PnL calculations, slippage, commissions (slippage and commission can be a single one) , restrictions (how many contracts and so on)
138 | # max stoploss, target...
139 | # let's make a simple one first, only 1 contract allowed by buy/sell and so on
140 | # and should we take a reverse position from first reverse, now only make a flat ...
141 | # immediate reward for augmented calculations
142 | # or modify this that way that no short selling or what ever
143 |
144 | # position state [Flat,Long,Short, Pnl]
145 | def getNextPositionStateWrong(action, position_state, prev_price, price, eod): # or think it like current price and next_price !!!!!!!!!!!!!!!!!!!!!!
146 |
147 |
148 | price_diff = price - prev_price
149 | immediate_reward = 0.0
150 | full_pnl = 0.0
151 | comission_count = 0
152 |
153 |
154 | # make some type cast not to compare floats
155 | #F = int(position_state[0]) # Flat, either 0 or 1
156 | L = int(position_state[1]) # Long, how many contracts, stock_count or ..
157 | S = int(position_state[2]) # Short, how many ..
158 |
159 | #prev_state = position_state[1]
160 |
161 | if L > 0:
162 | immediate_reward = position_state[1]*price_diff
163 |
164 | if S > 0:
165 | immediate_reward = -1.0*position_state[2]*price_diff
166 |
167 | if eod == 1: # no new positions taken, although
168 | return run_flat(position_state, immediate_reward) # exit here tooo
169 |
170 | # position_state[3] += immediate_reward # full PnL , after action
171 |
172 | if action == 1: # buy
173 | if S >= 1: # sell opposite if exit or buy a new one
174 | position_state[2] -= 1 # sell
175 | comission_count += 1
176 | elif L < constant.MAXCONTRACTS:
177 | position_state[1] += 1
178 | comission_count += 1
179 |
180 | if action == 2: # sell
181 | if L >= 1: # sell opposite if exit or buy a new one
182 | position_state[1] -= 1
183 | comission_count += 1
184 | elif S < constant.MAXCONTRACTS:
185 | position_state[2] += 1
186 | comission_count += 1
187 |
188 | position_state[3] = position_state[3] + immediate_reward - comission_count*constant.COMMISSION #fullPNL , comission_count is max 1 here now but if diff turn policy implemented...
189 |
190 | if position_state[1] > np.finfo(float).eps or position_state[2] > np.finfo(float).eps: # should I compare to double.epsilon and not to 0, whats that in python...? let's find out..
191 | position_state[0] = 0
192 | else:
193 | position_state[0] = 1
194 | full_pnl = position_state[3] # this is where we return full pnl from previous trade !, it is already calculated here
195 | position_state[3] = 0.0
196 |
197 | #if position_state[0] == 1: # next two line moved to previous else: as we know now that position_state is 1 = Flat(or )
198 | # full_pnl = position_state[3] # this is where we return full pnl from previous trade !, it is already calculated here
199 | # position_state[3] = 0.0
200 |
201 | #if prev_state == 1 and position_state[1] > 0 and position_state[3] == 0:
202 | # print(price_diff, immediate_reward, full_pnl, comission_count )
203 |
204 | return position_state, immediate_reward, full_pnl # realize that position_state is not a new allocation, it points to prev np array where values has been changed
205 |
206 |
207 | def run_flat(position_state, immediate_reward):
208 |
209 | full_pnl = position_state[3] + immediate_reward - position_state[1]*constant.COMMISSION - position_state[2]*constant.COMMISSION # FYI either position_state[0 or 1] is zero or both
210 |
211 | # set flat
212 | position_state[0] = 1;
213 | position_state[1] = 0;
214 | position_state[2] = 0;
215 | position_state[3] = 0.0;
216 |
217 | return position_state, immediate_reward, full_pnl
218 | # not used
219 | def run_flat_3(position_state, immediate_reward):
220 |
221 | full_pnl = position_state[constant.PositionStateWidth - 1] + immediate_reward - position_state[1]*constant.COMMISSION - position_state[2]*constant.COMMISSION # FYI either position_state[0 or 1] is zero or both
222 |
223 | # set flat
224 | for i in range(constant.PositionStateWidth):
225 | position_state[i] = 0;
226 | #position_state[1] = 0;
227 | #position_state[2] = 0;
228 | #position_state[3] = 0.0;
229 |
230 | return position_state, immediate_reward, full_pnl
231 |
232 | # let's skip the flat position between states, take opposite position at opposite signal, simplified version
233 | # or actually different, should there be an additional action, exit => go Flat ???, yes , implemented with signal 0 (if active signal)
234 | def getNextPositionStateOldTwo(action, position_state, prev_price, price, eod, prev_eod): # or think it like current price and next_price !!!!!!!!!!!!!!!!!!!!!!
235 | # position state [Flat,Long,Short, Pnl]
236 |
237 |
238 | price_diff = price - prev_price
239 | immediate_reward = 0.0
240 | full_pnl = 0.0
241 | comission_count = 0
242 |
243 | if constant.IGNORE_EOD_ACTIVATION and prev_eod == 1: # no new state (should be okay after last bars flat set, BUT set anyway here again
244 | print ("prev eod, should be 0", position_state[3])
245 | position_state[0] = 1
246 | position_state[1] = 0
247 | position_state[2] = 0
248 | position_state[3] = 0.0
249 | return position_state, 0.0, 0.0
250 |
251 | if action == 0: # next one used anyway now # and constant.ACTIONZERO == 1:
252 | full_pnl = position_state[3] - position_state[1]*constant.COMMISSION - position_state[2]*constant.COMMISSION # either one [1],[2] or both are zero
253 | # immediate_reward = 0.0
254 | position_state[0] = 1
255 | position_state[1] = 0
256 | position_state[2] = 0
257 | position_state[3] = 0.0
258 | return position_state, immediate_reward, full_pnl #
259 |
260 |
261 | # make some type cast not to compare floats
262 | F = int(position_state[0]) # Flat, either 0 or 1
263 | LC = int(position_state[1]) # Long, how many contracts, stock_count or ..
264 | SC = int(position_state[2]) # Short, how many ..
265 |
266 |
267 | #prev_state = position_state[1]
268 |
269 | if action == 1: # buy
270 | if SC > 0:
271 | full_pnl = position_state[3] - SC*constant.COMMISSION
272 | position_state[3] = price_diff - constant.COMMISSION # one buy
273 | if LC < constant.MAXCONTRACTS:
274 | immediate_reward = price_diff - constant.COMMISSION # one buy, more
275 | position_state[1] += 1
276 | if LC > 0: # SC can't be positive then, no need to worry next at that point ,, CHECK LC == 0 and
277 | position_state[3] += (LC+1)*price_diff
278 |
279 | if LC == constant.MAXCONTRACTS:
280 | position_state[3] += LC*price_diff # and no immediate reward any more
281 | if F == 1:
282 | # immediate_reward = price_diff # already above at LC <
283 | position_state[1] == 1
284 | # position_state[2] == 0
285 | position_state[3] = price_diff - constant.COMMISSION
286 |
287 | position_state[0] = 0
288 | position_state[2] = 0
289 | # position_state[3] # should be calculated above to all possibilities
290 |
291 | if action == 2: # sell
292 | if LC > 0:
293 | full_pnl = position_state[3] - LC*constant.COMMISSION
294 | position_state[3] = -1.0*price_diff - constant.COMMISSION # one buy
295 | if SC < constant.MAXCONTRACTS:
296 | immediate_reward = -1.0*price_diff - constant.COMMISSION # one buy, more
297 | position_state[2] += 1
298 | if SC > 0: # SC can't be positive then, no need to worry next at that point ,, CHECK LC == 0 and
299 | position_state[3] += (LC+1)*-1*price_diff
300 | if SC == constant.MAXCONTRACTS:
301 | position_state[3] += -1.0*SC*price_diff # and no immediate reward any more
302 | if F == 1:
303 | # immediate_reward = price_diff # already above at LC <
304 | position_state[2] == 1
305 | # position_state[2] == 0
306 | position_state[3] = -1.0*price_diff - constant.COMMISSION
307 |
308 | position_state[0] = 0
309 | position_state[1] = 0
310 | # position_state[3] # should be calculated above to all possibilities
311 |
312 |
313 |
314 |
315 | if eod == 1: # make flat after this BUT important, either action 1 or 2 can have affect (calculated above) , so last bar action has a very special handling
316 | full_pnl = full_pnl - position_state[1]*constant.COMMISSION - position_state[2]*constant.COMMISSION + immediate_reward # either one [1],[2] or both are zero
317 | # full_pnl and immediate reward is calculated at action 1 and 2 above
318 | print("************************", full_pnl) # see, this is not zero all the time
319 | # immediate reward based to action above, if buy or sell
320 | position_state[0] = 1
321 | position_state[1] = 0
322 | position_state[2] = 0
323 | position_state[3] = 0.0
324 | return position_state, immediate_reward, full_pnl #
325 |
326 | return position_state, immediate_reward, full_pnl # realize that position_state is not a new allocation, it points to prev np array where values has been changed
327 |
328 |
329 | # let's skip the flat position between states, take opposite position at opposite signal, simplified version
330 | # or actually different, should there be an additional action, exit => go Flat ???, yes , implemented with signal 0 (if active signal)
331 | def getNextPositionState(action, position_state, prev_price, price, eod, prev_eod): # or think it like current price and next_price !!!!!!!!!!!!!!!!!!!!!!
332 | # position state [Long,Short, Pnl] # this way now !!!!!
333 |
334 |
335 | price_diff = price - prev_price
336 | immediate_reward = 0.0
337 | full_pnl = 0.0
338 | comission_count = 0
339 |
340 | if constant.IGNORE_EOD_ACTIVATION and prev_eod == 1: # no new state (should be okay after last bars flat set, BUT set anyway here again
341 | #print ("prev eod, should be 0", position_state[2])
342 | position_state[0] = 0
343 | position_state[1] = 0
344 | position_state[2] = 0
345 | #position_state[3] = 0.0
346 | return position_state, 0.0, 0.0
347 |
348 | if action == 0: # next one used anyway now # and constant.ACTIONZERO == 1:
349 | full_pnl = position_state[2] - position_state[0]*constant.COMMISSION - position_state[1]*constant.COMMISSION # either one [1],[2] or both are zero
350 | # immediate_reward = 0.0
351 | position_state[0] = 0
352 | position_state[1] = 0
353 | position_state[2] = 0
354 | #position_state[3] = 0.0
355 | return position_state, immediate_reward, full_pnl #
356 |
357 |
358 | # make some type cast not to compare floats
359 | #F = int(position_state[0]) # Flat, either 0 or 1
360 | LC = int(position_state[0]) # Long, how many contracts, stock_count or ..
361 | SC = int(position_state[1]) # Short, how many ..
362 | F = (LC == 0 and SC == 0) # to simple boolean
363 |
364 |
365 | #prev_state = position_state[1]
366 |
367 | if action == 1: # buy
368 | if SC > 0:
369 | full_pnl = position_state[2] - SC*constant.COMMISSION
370 | position_state[2] = price_diff - constant.COMMISSION # one buy
371 | if LC < constant.MAXCONTRACTS:
372 | immediate_reward = price_diff - constant.COMMISSION # one buy, more
373 | position_state[0] += 1
374 | if LC > 0: # SC can't be positive then, no need to worry next at that point ,, CHECK LC == 0 and
375 | position_state[2] += (LC+1)*price_diff
376 |
377 | if LC == constant.MAXCONTRACTS:
378 | position_state[2] += LC*price_diff # and no immediate reward any more
379 | if F :
380 | # immediate_reward = price_diff # already above at LC <
381 | position_state[0] == 1
382 | # position_state[2] == 0
383 | position_state[2] = price_diff - constant.COMMISSION
384 |
385 | #position_state[0] = 0
386 | position_state[1] = 0
387 | # position_state[3] # should be calculated above to all possibilities
388 |
389 | if action == 2: # sell
390 | if LC > 0:
391 | full_pnl = position_state[2] - LC*constant.COMMISSION
392 | position_state[2] = -1.0*price_diff - constant.COMMISSION # one buy
393 | if SC < constant.MAXCONTRACTS:
394 | immediate_reward = -1.0*price_diff - constant.COMMISSION # one buy, more
395 | position_state[1] += 1
396 | if SC > 0: # SC can't be positive then, no need to worry next at that point ,, CHECK LC == 0 and
397 | position_state[2] += (LC+1)*-1*price_diff
398 | if SC == constant.MAXCONTRACTS:
399 | position_state[2] += -1.0*SC*price_diff # and no immediate reward any more
400 | if F:
401 | # immediate_reward = price_diff # already above at LC <
402 | position_state[1] == 1
403 | # position_state[2] == 0
404 | position_state[2] = -1.0*price_diff - constant.COMMISSION
405 |
406 | #position_state[0] = 0
407 | position_state[0] = 0
408 | # position_state[3] # should be calculated above to all possibilities
409 |
410 |
411 |
412 |
413 | if eod == 1: # make flat after this BUT important, either action 1 or 2 can have affect (calculated above) , so last bar action has a very special handling
414 | full_pnl = full_pnl - position_state[0]*constant.COMMISSION - position_state[1]*constant.COMMISSION + immediate_reward # either one [1],[2] or both are zero
415 | # full_pnl and immediate reward is calculated at action 1 and 2 above
416 | #print("************************", full_pnl) # see, this is not zero all the time
417 | # immediate reward based to action above, if buy or sell
418 | #position_state[0] = 1
419 | position_state[0] = 0
420 | position_state[1] = 0
421 | position_state[2] = 0.0
422 | return position_state, immediate_reward, full_pnl #
423 |
424 | return position_state, immediate_reward, full_pnl # realize that position_state is not a new allocation, it points to prev np array where values has been changed
425 |
426 |
427 |
428 | ##############################
429 | # own ad: For NinjaTrader related stuff: check https://pvoodoo.com or blog: https://pvoodoo.blogspot.com/?view=flipcard
430 | ##############################
431 |
--------------------------------------------------------------------------------
/data/RLTestDataSinSFD.csv:
--------------------------------------------------------------------------------
1 | UTC0;151_0;136_0;134_0
2 | 2/6/2019 6:30:00 PM;-0.5877852523;0;0.152173913
3 | 2/6/2019 7:00:00 PM;-0.3090169944;0;0.1304347826
4 | 2/6/2019 7:30:00 PM;-4.89842541528951E-16;0;0.1086956522
5 | 2/6/2019 8:00:00 PM;0.3090169944;0;0.0869565217
6 | 2/6/2019 8:30:00 PM;0.5877852523;0;0.0652173913
7 | 2/6/2019 9:00:00 PM;0.8090169944;0;0.0434782609
8 | 2/6/2019 9:30:00 PM;0.9510565163;0;0.0217391304
9 | 2/6/2019 10:00:00 PM;1;1;0
10 | 2/6/2019 11:30:00 PM;0;0;0.9782608696
11 | 2/7/2019 12:00:00 AM;0.3090169944;0;0.9565217391
12 | 2/7/2019 12:30:00 AM;0.5877852523;0;0.9347826087
13 | 2/7/2019 1:00:00 AM;0.8090169944;0;0.9130434783
14 | 2/7/2019 1:30:00 AM;0.9510565163;0;0.8913043478
15 | 2/7/2019 2:00:00 AM;1;0;0.8695652174
16 | 2/7/2019 2:30:00 AM;0.9510565163;0;0.847826087
17 | 2/7/2019 3:00:00 AM;0.8090169944;0;0.8260869565
18 | 2/7/2019 3:30:00 AM;0.5877852523;0;0.8043478261
19 | 2/7/2019 4:00:00 AM;0.3090169944;0;0.7826086957
20 | 2/7/2019 4:30:00 AM;1.22460635382238E-16;0;0.7608695652
21 | 2/7/2019 5:00:00 AM;-0.3090169944;0;0.7391304348
22 | 2/7/2019 5:30:00 AM;-0.5877852523;0;0.7173913043
23 | 2/7/2019 6:00:00 AM;-0.8090169944;0;0.6956521739
24 | 2/7/2019 6:30:00 AM;-0.9510565163;0;0.6739130435
25 | 2/7/2019 7:00:00 AM;-1;0;0.652173913
26 | 2/7/2019 7:30:00 AM;-0.9510565163;0;0.6304347826
27 | 2/7/2019 8:00:00 AM;-0.8090169944;0;0.6086956522
28 | 2/7/2019 8:30:00 AM;-0.5877852523;0;0.5869565217
29 | 2/7/2019 9:00:00 AM;-0.3090169944;0;0.5652173913
30 | 2/7/2019 9:30:00 AM;-2.44921270764475E-16;0;0.5434782609
31 | 2/7/2019 10:00:00 AM;0.3090169944;0;0.5217391304
32 | 2/7/2019 10:30:00 AM;0.5877852523;0;0.5
33 | 2/7/2019 11:00:00 AM;0.8090169944;0;0.4782608696
34 | 2/7/2019 11:30:00 AM;0.9510565163;0;0.4565217391
35 | 2/7/2019 12:00:00 PM;1;0;0.4347826087
36 | 2/7/2019 12:30:00 PM;0.9510565163;0;0.4130434783
37 | 2/7/2019 1:00:00 PM;0.8090169944;0;0.3913043478
38 | 2/7/2019 1:30:00 PM;0.5877852523;0;0.3695652174
39 | 2/7/2019 2:00:00 PM;0.3090169944;0;0.347826087
40 | 2/7/2019 2:30:00 PM;3.67381906146713E-16;0;0.3260869565
41 | 2/7/2019 3:00:00 PM;-0.3090169944;0;0.3043478261
42 | 2/7/2019 3:30:00 PM;-0.5877852523;0;0.2826086957
43 | 2/7/2019 4:00:00 PM;-0.8090169944;0;0.2608695652
44 | 2/7/2019 4:30:00 PM;-0.9510565163;0;0.2391304348
45 | 2/7/2019 5:00:00 PM;-1;0;0.2173913043
46 | 2/7/2019 5:30:00 PM;-0.9510565163;0;0.1956521739
47 | 2/7/2019 6:00:00 PM;-0.8090169944;0;0.1739130435
48 | 2/7/2019 6:30:00 PM;-0.5877852523;0;0.152173913
49 | 2/7/2019 7:00:00 PM;-0.3090169944;0;0.1304347826
50 | 2/7/2019 7:30:00 PM;-4.89842541528951E-16;0;0.1086956522
51 | 2/7/2019 8:00:00 PM;0.3090169944;0;0.0869565217
52 | 2/7/2019 8:30:00 PM;0.5877852523;0;0.0652173913
53 | 2/7/2019 9:00:00 PM;0.8090169944;0;0.0434782609
54 | 2/7/2019 9:30:00 PM;0.9510565163;0;0.0217391304
55 | 2/7/2019 10:00:00 PM;1;1;0
56 | 2/7/2019 11:30:00 PM;0;0;0.9782608696
57 | 2/8/2019 12:00:00 AM;0.3090169944;0;0.9565217391
58 | 2/8/2019 12:30:00 AM;0.5877852523;0;0.9347826087
59 | 2/8/2019 1:00:00 AM;0.8090169944;0;0.9130434783
60 | 2/8/2019 1:30:00 AM;0.9510565163;0;0.8913043478
61 | 2/8/2019 2:00:00 AM;1;0;0.8695652174
62 | 2/8/2019 2:30:00 AM;0.9510565163;0;0.847826087
63 | 2/8/2019 3:00:00 AM;0.8090169944;0;0.8260869565
64 | 2/8/2019 3:30:00 AM;0.5877852523;0;0.8043478261
65 | 2/8/2019 4:00:00 AM;0.3090169944;0;0.7826086957
66 | 2/8/2019 4:30:00 AM;1.22460635382238E-16;0;0.7608695652
67 | 2/8/2019 5:00:00 AM;-0.3090169944;0;0.7391304348
68 | 2/8/2019 5:30:00 AM;-0.5877852523;0;0.7173913043
69 | 2/8/2019 6:00:00 AM;-0.8090169944;0;0.6956521739
70 | 2/8/2019 6:30:00 AM;-0.9510565163;0;0.6739130435
71 | 2/8/2019 7:00:00 AM;-1;0;0.652173913
72 | 2/8/2019 7:30:00 AM;-0.9510565163;0;0.6304347826
73 | 2/8/2019 8:00:00 AM;-0.8090169944;0;0.6086956522
74 | 2/8/2019 8:30:00 AM;-0.5877852523;0;0.5869565217
75 | 2/8/2019 9:00:00 AM;-0.3090169944;0;0.5652173913
76 | 2/8/2019 9:30:00 AM;-2.44921270764475E-16;0;0.5434782609
77 | 2/8/2019 10:00:00 AM;0.3090169944;0;0.5217391304
78 | 2/8/2019 10:30:00 AM;0.5877852523;0;0.5
79 | 2/8/2019 11:00:00 AM;0.8090169944;0;0.4782608696
80 | 2/8/2019 11:30:00 AM;0.9510565163;0;0.4565217391
81 | 2/8/2019 12:00:00 PM;1;0;0.4347826087
82 | 2/8/2019 12:30:00 PM;0.9510565163;0;0.4130434783
83 | 2/8/2019 1:00:00 PM;0.8090169944;0;0.3913043478
84 | 2/8/2019 1:30:00 PM;0.5877852523;0;0.3695652174
85 | 2/8/2019 2:00:00 PM;0.3090169944;0;0.347826087
86 | 2/8/2019 2:30:00 PM;3.67381906146713E-16;0;0.3260869565
87 | 2/8/2019 3:00:00 PM;-0.3090169944;0;0.3043478261
88 | 2/8/2019 3:30:00 PM;-0.5877852523;0;0.2826086957
89 | 2/8/2019 4:00:00 PM;-0.8090169944;0;0.2608695652
90 | 2/8/2019 4:30:00 PM;-0.9510565163;0;0.2391304348
91 | 2/8/2019 5:00:00 PM;-1;0;0.2173913043
92 | 2/8/2019 5:30:00 PM;-0.9510565163;0;0.1956521739
93 | 2/8/2019 6:00:00 PM;-0.8090169944;0;0.1739130435
94 | 2/8/2019 6:30:00 PM;-0.5877852523;0;0.152173913
95 | 2/8/2019 7:00:00 PM;-0.3090169944;0;0.1304347826
96 | 2/8/2019 7:30:00 PM;-4.89842541528951E-16;0;0.1086956522
97 | 2/8/2019 8:00:00 PM;0.3090169944;0;0.0869565217
98 | 2/8/2019 8:30:00 PM;0.5877852523;0;0.0652173913
99 | 2/8/2019 9:00:00 PM;0.8090169944;0;0.0434782609
100 | 2/8/2019 9:30:00 PM;0.9510565163;0;0.0217391304
101 | 2/8/2019 10:00:00 PM;1;1;0
102 | 2/10/2019 11:30:00 PM;0;0;0.9782608696
103 | 2/11/2019 12:00:00 AM;0.3090169944;0;0.9565217391
104 | 2/11/2019 12:30:00 AM;0.5877852523;0;0.9347826087
105 | 2/11/2019 1:00:00 AM;0.8090169944;0;0.9130434783
106 | 2/11/2019 1:30:00 AM;0.9510565163;0;0.8913043478
107 | 2/11/2019 2:00:00 AM;1;0;0.8695652174
108 | 2/11/2019 2:30:00 AM;0.9510565163;0;0.847826087
109 | 2/11/2019 3:00:00 AM;0.8090169944;0;0.8260869565
110 | 2/11/2019 3:30:00 AM;0.5877852523;0;0.8043478261
111 | 2/11/2019 4:00:00 AM;0.3090169944;0;0.7826086957
112 | 2/11/2019 4:30:00 AM;1.22460635382238E-16;0;0.7608695652
113 | 2/11/2019 5:00:00 AM;-0.3090169944;0;0.7391304348
114 | 2/11/2019 5:30:00 AM;-0.5877852523;0;0.7173913043
115 | 2/11/2019 6:00:00 AM;-0.8090169944;0;0.6956521739
116 | 2/11/2019 6:30:00 AM;-0.9510565163;0;0.6739130435
117 | 2/11/2019 7:00:00 AM;-1;0;0.652173913
118 | 2/11/2019 7:30:00 AM;-0.9510565163;0;0.6304347826
119 | 2/11/2019 8:00:00 AM;-0.8090169944;0;0.6086956522
120 | 2/11/2019 8:30:00 AM;-0.5877852523;0;0.5869565217
121 | 2/11/2019 9:00:00 AM;-0.3090169944;0;0.5652173913
122 | 2/11/2019 9:30:00 AM;-2.44921270764475E-16;0;0.5434782609
123 | 2/11/2019 10:00:00 AM;0.3090169944;0;0.5217391304
124 | 2/11/2019 10:30:00 AM;0.5877852523;0;0.5
125 | 2/11/2019 11:00:00 AM;0.8090169944;0;0.4782608696
126 | 2/11/2019 11:30:00 AM;0.9510565163;0;0.4565217391
127 | 2/11/2019 12:00:00 PM;1;0;0.4347826087
128 | 2/11/2019 12:30:00 PM;0.9510565163;0;0.4130434783
129 | 2/11/2019 1:00:00 PM;0.8090169944;0;0.3913043478
130 | 2/11/2019 1:30:00 PM;0.5877852523;0;0.3695652174
131 | 2/11/2019 2:00:00 PM;0.3090169944;0;0.347826087
132 | 2/11/2019 2:30:00 PM;3.67381906146713E-16;0;0.3260869565
133 | 2/11/2019 3:00:00 PM;-0.3090169944;0;0.3043478261
134 | 2/11/2019 3:30:00 PM;-0.5877852523;0;0.2826086957
135 | 2/11/2019 4:00:00 PM;-0.8090169944;0;0.2608695652
136 | 2/11/2019 4:30:00 PM;-0.9510565163;0;0.2391304348
137 | 2/11/2019 5:00:00 PM;-1;0;0.2173913043
138 | 2/11/2019 5:30:00 PM;-0.9510565163;0;0.1956521739
139 | 2/11/2019 6:00:00 PM;-0.8090169944;0;0.1739130435
140 | 2/11/2019 6:30:00 PM;-0.5877852523;0;0.152173913
141 | 2/11/2019 7:00:00 PM;-0.3090169944;0;0.1304347826
142 | 2/11/2019 7:30:00 PM;-4.89842541528951E-16;0;0.1086956522
143 | 2/11/2019 8:00:00 PM;0.3090169944;0;0.0869565217
144 | 2/11/2019 8:30:00 PM;0.5877852523;0;0.0652173913
145 | 2/11/2019 9:00:00 PM;0.8090169944;0;0.0434782609
146 | 2/11/2019 9:30:00 PM;0.9510565163;0;0.0217391304
147 | 2/11/2019 10:00:00 PM;1;1;0
148 | 2/11/2019 11:30:00 PM;0;0;0.9782608696
149 | 2/12/2019 12:00:00 AM;0.3090169944;0;0.9565217391
150 | 2/12/2019 12:30:00 AM;0.5877852523;0;0.9347826087
151 | 2/12/2019 1:00:00 AM;0.8090169944;0;0.9130434783
152 | 2/12/2019 1:30:00 AM;0.9510565163;0;0.8913043478
153 | 2/12/2019 2:00:00 AM;1;0;0.8695652174
154 | 2/12/2019 2:30:00 AM;0.9510565163;0;0.847826087
155 | 2/12/2019 3:00:00 AM;0.8090169944;0;0.8260869565
156 | 2/12/2019 3:30:00 AM;0.5877852523;0;0.8043478261
157 | 2/12/2019 4:00:00 AM;0.3090169944;0;0.7826086957
158 | 2/12/2019 4:30:00 AM;1.22460635382238E-16;0;0.7608695652
159 | 2/12/2019 5:00:00 AM;-0.3090169944;0;0.7391304348
160 | 2/12/2019 5:30:00 AM;-0.5877852523;0;0.7173913043
161 | 2/12/2019 6:00:00 AM;-0.8090169944;0;0.6956521739
162 | 2/12/2019 6:30:00 AM;-0.9510565163;0;0.6739130435
163 | 2/12/2019 7:00:00 AM;-1;0;0.652173913
164 | 2/12/2019 7:30:00 AM;-0.9510565163;0;0.6304347826
165 | 2/12/2019 8:00:00 AM;-0.8090169944;0;0.6086956522
166 | 2/12/2019 8:30:00 AM;-0.5877852523;0;0.5869565217
167 | 2/12/2019 9:00:00 AM;-0.3090169944;0;0.5652173913
168 | 2/12/2019 9:30:00 AM;-2.44921270764475E-16;0;0.5434782609
169 | 2/12/2019 10:00:00 AM;0.3090169944;0;0.5217391304
170 | 2/12/2019 10:30:00 AM;0.5877852523;0;0.5
171 | 2/12/2019 11:00:00 AM;0.8090169944;0;0.4782608696
172 | 2/12/2019 11:30:00 AM;0.9510565163;0;0.4565217391
173 | 2/12/2019 12:00:00 PM;1;0;0.4347826087
174 | 2/12/2019 12:30:00 PM;0.9510565163;0;0.4130434783
175 | 2/12/2019 1:00:00 PM;0.8090169944;0;0.3913043478
176 | 2/12/2019 1:30:00 PM;0.5877852523;0;0.3695652174
177 | 2/12/2019 2:00:00 PM;0.3090169944;0;0.347826087
178 | 2/12/2019 2:30:00 PM;3.67381906146713E-16;0;0.3260869565
179 | 2/12/2019 3:00:00 PM;-0.3090169944;0;0.3043478261
180 | 2/12/2019 3:30:00 PM;-0.5877852523;0;0.2826086957
181 | 2/12/2019 4:00:00 PM;-0.8090169944;0;0.2608695652
182 | 2/12/2019 4:30:00 PM;-0.9510565163;0;0.2391304348
183 | 2/12/2019 5:00:00 PM;-1;0;0.2173913043
184 | 2/12/2019 5:30:00 PM;-0.9510565163;0;0.1956521739
185 | 2/12/2019 6:00:00 PM;-0.8090169944;0;0.1739130435
186 | 2/12/2019 6:30:00 PM;-0.5877852523;0;0.152173913
187 | 2/12/2019 7:00:00 PM;-0.3090169944;0;0.1304347826
188 | 2/12/2019 7:30:00 PM;-4.89842541528951E-16;0;0.1086956522
189 | 2/12/2019 8:00:00 PM;0.3090169944;0;0.0869565217
190 | 2/12/2019 8:30:00 PM;0.5877852523;0;0.0652173913
191 | 2/12/2019 9:00:00 PM;0.8090169944;0;0.0434782609
192 | 2/12/2019 9:30:00 PM;0.9510565163;0;0.0217391304
193 | 2/12/2019 10:00:00 PM;1;1;0
194 | 2/12/2019 11:30:00 PM;0;0;0.9782608696
195 | 2/13/2019 12:00:00 AM;0.3090169944;0;0.9565217391
196 | 2/13/2019 12:30:00 AM;0.5877852523;0;0.9347826087
197 | 2/13/2019 1:00:00 AM;0.8090169944;0;0.9130434783
198 | 2/13/2019 1:30:00 AM;0.9510565163;0;0.8913043478
199 | 2/13/2019 2:00:00 AM;1;0;0.8695652174
200 | 2/13/2019 2:30:00 AM;0.9510565163;0;0.847826087
201 | 2/13/2019 3:00:00 AM;0.8090169944;0;0.8260869565
202 | 2/13/2019 3:30:00 AM;0.5877852523;0;0.8043478261
203 | 2/13/2019 4:00:00 AM;0.3090169944;0;0.7826086957
204 | 2/13/2019 4:30:00 AM;1.22460635382238E-16;0;0.7608695652
205 | 2/13/2019 5:00:00 AM;-0.3090169944;0;0.7391304348
206 | 2/13/2019 5:30:00 AM;-0.5877852523;0;0.7173913043
207 | 2/13/2019 6:00:00 AM;-0.8090169944;0;0.6956521739
208 | 2/13/2019 6:30:00 AM;-0.9510565163;0;0.6739130435
209 | 2/13/2019 7:00:00 AM;-1;0;0.652173913
210 | 2/13/2019 7:30:00 AM;-0.9510565163;0;0.6304347826
211 | 2/13/2019 8:00:00 AM;-0.8090169944;0;0.6086956522
212 | 2/13/2019 8:30:00 AM;-0.5877852523;0;0.5869565217
213 | 2/13/2019 9:00:00 AM;-0.3090169944;0;0.5652173913
214 | 2/13/2019 9:30:00 AM;-2.44921270764475E-16;0;0.5434782609
215 | 2/13/2019 10:00:00 AM;0.3090169944;0;0.5217391304
216 | 2/13/2019 10:30:00 AM;0.5877852523;0;0.5
217 | 2/13/2019 11:00:00 AM;0.8090169944;0;0.4782608696
218 | 2/13/2019 11:30:00 AM;0.9510565163;0;0.4565217391
219 | 2/13/2019 12:00:00 PM;1;0;0.4347826087
220 | 2/13/2019 12:30:00 PM;0.9510565163;0;0.4130434783
221 | 2/13/2019 1:00:00 PM;0.8090169944;0;0.3913043478
222 | 2/13/2019 1:30:00 PM;0.5877852523;0;0.3695652174
223 | 2/13/2019 2:00:00 PM;0.3090169944;0;0.347826087
224 | 2/13/2019 2:30:00 PM;3.67381906146713E-16;0;0.3260869565
225 | 2/13/2019 3:00:00 PM;-0.3090169944;0;0.3043478261
226 | 2/13/2019 3:30:00 PM;-0.5877852523;0;0.2826086957
227 | 2/13/2019 4:00:00 PM;-0.8090169944;0;0.2608695652
228 | 2/13/2019 4:30:00 PM;-0.9510565163;0;0.2391304348
229 | 2/13/2019 5:00:00 PM;-1;0;0.2173913043
230 | 2/13/2019 5:30:00 PM;-0.9510565163;0;0.1956521739
231 | 2/13/2019 6:00:00 PM;-0.8090169944;0;0.1739130435
232 | 2/13/2019 6:30:00 PM;-0.5877852523;0;0.152173913
233 | 2/13/2019 7:00:00 PM;-0.3090169944;0;0.1304347826
234 | 2/13/2019 7:30:00 PM;-4.89842541528951E-16;0;0.1086956522
235 | 2/13/2019 8:00:00 PM;0.3090169944;0;0.0869565217
236 | 2/13/2019 8:30:00 PM;0.5877852523;0;0.0652173913
237 | 2/13/2019 9:00:00 PM;0.8090169944;0;0.0434782609
238 | 2/13/2019 9:30:00 PM;0.9510565163;0;0.0217391304
239 | 2/13/2019 10:00:00 PM;1;1;0
240 | 2/13/2019 11:30:00 PM;0;0;0.9782608696
241 | 2/14/2019 12:00:00 AM;0.3090169944;0;0.9565217391
242 | 2/14/2019 12:30:00 AM;0.5877852523;0;0.9347826087
243 | 2/14/2019 1:00:00 AM;0.8090169944;0;0.9130434783
244 | 2/14/2019 1:30:00 AM;0.9510565163;0;0.8913043478
245 | 2/14/2019 2:00:00 AM;1;0;0.8695652174
246 | 2/14/2019 2:30:00 AM;0.9510565163;0;0.847826087
247 | 2/14/2019 3:00:00 AM;0.8090169944;0;0.8260869565
248 | 2/14/2019 3:30:00 AM;0.5877852523;0;0.8043478261
249 | 2/14/2019 4:00:00 AM;0.3090169944;0;0.7826086957
250 | 2/14/2019 4:30:00 AM;1.22460635382238E-16;0;0.7608695652
251 | 2/14/2019 5:00:00 AM;-0.3090169944;0;0.7391304348
252 | 2/14/2019 5:30:00 AM;-0.5877852523;0;0.7173913043
253 | 2/14/2019 6:00:00 AM;-0.8090169944;0;0.6956521739
254 | 2/14/2019 6:30:00 AM;-0.9510565163;0;0.6739130435
255 | 2/14/2019 7:00:00 AM;-1;0;0.652173913
256 | 2/14/2019 7:30:00 AM;-0.9510565163;0;0.6304347826
257 | 2/14/2019 8:00:00 AM;-0.8090169944;0;0.6086956522
258 | 2/14/2019 8:30:00 AM;-0.5877852523;0;0.5869565217
259 | 2/14/2019 9:00:00 AM;-0.3090169944;0;0.5652173913
260 | 2/14/2019 9:30:00 AM;-2.44921270764475E-16;0;0.5434782609
261 | 2/14/2019 10:00:00 AM;0.3090169944;0;0.5217391304
262 | 2/14/2019 10:30:00 AM;0.5877852523;0;0.5
263 | 2/14/2019 11:00:00 AM;0.8090169944;0;0.4782608696
264 | 2/14/2019 11:30:00 AM;0.9510565163;0;0.4565217391
265 | 2/14/2019 12:00:00 PM;1;0;0.4347826087
266 | 2/14/2019 12:30:00 PM;0.9510565163;0;0.4130434783
267 | 2/14/2019 1:00:00 PM;0.8090169944;0;0.3913043478
268 | 2/14/2019 1:30:00 PM;0.5877852523;0;0.3695652174
269 | 2/14/2019 2:00:00 PM;0.3090169944;0;0.347826087
270 | 2/14/2019 2:30:00 PM;3.67381906146713E-16;0;0.3260869565
271 | 2/14/2019 3:00:00 PM;-0.3090169944;0;0.3043478261
272 | 2/14/2019 3:30:00 PM;-0.5877852523;0;0.2826086957
273 | 2/14/2019 4:00:00 PM;-0.8090169944;0;0.2608695652
274 | 2/14/2019 4:30:00 PM;-0.9510565163;0;0.2391304348
275 | 2/14/2019 5:00:00 PM;-1;0;0.2173913043
276 | 2/14/2019 5:30:00 PM;-0.9510565163;0;0.1956521739
277 | 2/14/2019 6:00:00 PM;-0.8090169944;0;0.1739130435
278 | 2/14/2019 6:30:00 PM;-0.5877852523;0;0.152173913
279 | 2/14/2019 7:00:00 PM;-0.3090169944;0;0.1304347826
280 | 2/14/2019 7:30:00 PM;-4.89842541528951E-16;0;0.1086956522
281 | 2/14/2019 8:00:00 PM;0.3090169944;0;0.0869565217
282 | 2/14/2019 8:30:00 PM;0.5877852523;0;0.0652173913
283 | 2/14/2019 9:00:00 PM;0.8090169944;0;0.0434782609
284 | 2/14/2019 9:30:00 PM;0.9510565163;0;0.0217391304
285 | 2/14/2019 10:00:00 PM;1;1;0
286 | 2/14/2019 11:30:00 PM;0;0;0.9782608696
287 | 2/15/2019 12:00:00 AM;0.3090169944;0;0.9565217391
288 | 2/15/2019 12:30:00 AM;0.5877852523;0;0.9347826087
289 | 2/15/2019 1:00:00 AM;0.8090169944;0;0.9130434783
290 | 2/15/2019 1:30:00 AM;0.9510565163;0;0.8913043478
291 | 2/15/2019 2:00:00 AM;1;0;0.8695652174
292 | 2/15/2019 2:30:00 AM;0.9510565163;0;0.847826087
293 | 2/15/2019 3:00:00 AM;0.8090169944;0;0.8260869565
294 | 2/15/2019 3:30:00 AM;0.5877852523;0;0.8043478261
295 | 2/15/2019 4:00:00 AM;0.3090169944;0;0.7826086957
296 | 2/15/2019 4:30:00 AM;1.22460635382238E-16;0;0.7608695652
297 | 2/15/2019 5:00:00 AM;-0.3090169944;0;0.7391304348
298 | 2/15/2019 5:30:00 AM;-0.5877852523;0;0.7173913043
299 | 2/15/2019 6:00:00 AM;-0.8090169944;0;0.6956521739
300 | 2/15/2019 6:30:00 AM;-0.9510565163;0;0.6739130435
301 | 2/15/2019 7:00:00 AM;-1;0;0.652173913
302 | 2/15/2019 7:30:00 AM;-0.9510565163;0;0.6304347826
303 | 2/15/2019 8:00:00 AM;-0.8090169944;0;0.6086956522
304 | 2/15/2019 8:30:00 AM;-0.5877852523;0;0.5869565217
305 | 2/15/2019 9:00:00 AM;-0.3090169944;0;0.5652173913
306 | 2/15/2019 9:30:00 AM;-2.44921270764475E-16;0;0.5434782609
307 | 2/15/2019 10:00:00 AM;0.3090169944;0;0.5217391304
308 | 2/15/2019 10:30:00 AM;0.5877852523;0;0.5
309 | 2/15/2019 11:00:00 AM;0.8090169944;0;0.4782608696
310 | 2/15/2019 11:30:00 AM;0.9510565163;0;0.4565217391
311 | 2/15/2019 12:00:00 PM;1;0;0.4347826087
312 | 2/15/2019 12:30:00 PM;0.9510565163;0;0.4130434783
313 | 2/15/2019 1:00:00 PM;0.8090169944;0;0.3913043478
314 | 2/15/2019 1:30:00 PM;0.5877852523;0;0.3695652174
315 | 2/15/2019 2:00:00 PM;0.3090169944;0;0.347826087
316 | 2/15/2019 2:30:00 PM;3.67381906146713E-16;0;0.3260869565
317 | 2/15/2019 3:00:00 PM;-0.3090169944;0;0.3043478261
318 | 2/15/2019 3:30:00 PM;-0.5877852523;0;0.2826086957
319 | 2/15/2019 4:00:00 PM;-0.8090169944;0;0.2608695652
320 | 2/15/2019 4:30:00 PM;-0.9510565163;0;0.2391304348
321 | 2/15/2019 5:00:00 PM;-1;0;0.2173913043
322 | 2/15/2019 5:30:00 PM;-0.9510565163;0;0.1956521739
323 | 2/15/2019 6:00:00 PM;-0.8090169944;0;0.1739130435
324 | 2/15/2019 6:30:00 PM;-0.5877852523;0;0.152173913
325 | 2/15/2019 7:00:00 PM;-0.3090169944;0;0.1304347826
326 | 2/15/2019 7:30:00 PM;-4.89842541528951E-16;0;0.1086956522
327 | 2/15/2019 8:00:00 PM;0.3090169944;0;0.0869565217
328 | 2/15/2019 8:30:00 PM;0.5877852523;0;0.0652173913
329 | 2/15/2019 9:00:00 PM;0.8090169944;0;0.0434782609
330 | 2/15/2019 9:30:00 PM;0.9510565163;0;0.0217391304
331 | 2/15/2019 10:00:00 PM;1;1;0
332 | 2/17/2019 11:30:00 PM;0;0;0.9736842105
333 | 2/18/2019 12:00:00 AM;0.3090169944;0;0.9473684211
334 | 2/18/2019 12:30:00 AM;0.5877852523;0;0.9210526316
335 | 2/18/2019 1:00:00 AM;0.8090169944;0;0.8947368421
336 | 2/18/2019 1:30:00 AM;0.9510565163;0;0.8684210526
337 | 2/18/2019 2:00:00 AM;1;0;0.8421052632
338 | 2/18/2019 2:30:00 AM;0.9510565163;0;0.8157894737
339 | 2/18/2019 3:00:00 AM;0.8090169944;0;0.7894736842
340 | 2/18/2019 3:30:00 AM;0.5877852523;0;0.7631578947
341 | 2/18/2019 4:00:00 AM;0.3090169944;0;0.7368421053
342 | 2/18/2019 4:30:00 AM;1.22460635382238E-16;0;0.7105263158
343 | 2/18/2019 5:00:00 AM;-0.3090169944;0;0.6842105263
344 | 2/18/2019 5:30:00 AM;-0.5877852523;0;0.6578947368
345 | 2/18/2019 6:00:00 AM;-0.8090169944;0;0.6315789474
346 | 2/18/2019 6:30:00 AM;-0.9510565163;0;0.6052631579
347 | 2/18/2019 7:00:00 AM;-1;0;0.5789473684
348 | 2/18/2019 7:30:00 AM;-0.9510565163;0;0.5526315789
349 | 2/18/2019 8:00:00 AM;-0.8090169944;0;0.5263157895
350 | 2/18/2019 8:30:00 AM;-0.5877852523;0;0.5
351 | 2/18/2019 9:00:00 AM;-0.3090169944;0;0.4736842105
352 | 2/18/2019 9:30:00 AM;-2.44921270764475E-16;0;0.4473684211
353 | 2/18/2019 10:00:00 AM;0.3090169944;0;0.4210526316
354 | 2/18/2019 10:30:00 AM;0.5877852523;0;0.3947368421
355 | 2/18/2019 11:00:00 AM;0.8090169944;0;0.3684210526
356 | 2/18/2019 11:30:00 AM;0.9510565163;0;0.3421052632
357 | 2/18/2019 12:00:00 PM;1;0;0.3157894737
358 | 2/18/2019 12:30:00 PM;0.9510565163;0;0.2894736842
359 | 2/18/2019 1:00:00 PM;0.8090169944;0;0.2631578947
360 | 2/18/2019 1:30:00 PM;0.5877852523;0;0.2368421053
361 | 2/18/2019 2:00:00 PM;0.3090169944;0;0.2105263158
362 | 2/18/2019 2:30:00 PM;3.67381906146713E-16;0;0.1842105263
363 | 2/18/2019 3:00:00 PM;-0.3090169944;0;0.1578947368
364 | 2/18/2019 3:30:00 PM;-0.5877852523;0;0.1315789474
365 | 2/18/2019 4:00:00 PM;-0.8090169944;0;0.1052631579
366 | 2/18/2019 4:30:00 PM;-0.9510565163;0;0.0789473684
367 | 2/18/2019 5:00:00 PM;-1;0;0.0526315789
368 | 2/18/2019 5:30:00 PM;-0.9510565163;0;0.0263157895
369 | 2/18/2019 6:00:00 PM;-0.8090169944;1;0
370 | 2/18/2019 11:30:00 PM;0;0;0.9782608696
371 | 2/19/2019 12:00:00 AM;0.3090169944;0;0.9565217391
372 | 2/19/2019 12:30:00 AM;0.5877852523;0;0.9347826087
373 | 2/19/2019 1:00:00 AM;0.8090169944;0;0.9130434783
374 | 2/19/2019 1:30:00 AM;0.9510565163;0;0.8913043478
375 | 2/19/2019 2:00:00 AM;1;0;0.8695652174
376 | 2/19/2019 2:30:00 AM;0.9510565163;0;0.847826087
377 | 2/19/2019 3:00:00 AM;0.8090169944;0;0.8260869565
378 | 2/19/2019 3:30:00 AM;0.5877852523;0;0.8043478261
379 | 2/19/2019 4:00:00 AM;0.3090169944;0;0.7826086957
380 | 2/19/2019 4:30:00 AM;1.22460635382238E-16;0;0.7608695652
381 | 2/19/2019 5:00:00 AM;-0.3090169944;0;0.7391304348
382 | 2/19/2019 5:30:00 AM;-0.5877852523;0;0.7173913043
383 | 2/19/2019 6:00:00 AM;-0.8090169944;0;0.6956521739
384 | 2/19/2019 6:30:00 AM;-0.9510565163;0;0.6739130435
385 | 2/19/2019 7:00:00 AM;-1;0;0.652173913
386 | 2/19/2019 7:30:00 AM;-0.9510565163;0;0.6304347826
387 | 2/19/2019 8:00:00 AM;-0.8090169944;0;0.6086956522
388 | 2/19/2019 8:30:00 AM;-0.5877852523;0;0.5869565217
389 | 2/19/2019 9:00:00 AM;-0.3090169944;0;0.5652173913
390 | 2/19/2019 9:30:00 AM;-2.44921270764475E-16;0;0.5434782609
391 | 2/19/2019 10:00:00 AM;0.3090169944;0;0.5217391304
392 | 2/19/2019 10:30:00 AM;0.5877852523;0;0.5
393 | 2/19/2019 11:00:00 AM;0.8090169944;0;0.4782608696
394 | 2/19/2019 11:30:00 AM;0.9510565163;0;0.4565217391
395 | 2/19/2019 12:00:00 PM;1;0;0.4347826087
396 | 2/19/2019 12:30:00 PM;0.9510565163;0;0.4130434783
397 | 2/19/2019 1:00:00 PM;0.8090169944;0;0.3913043478
398 | 2/19/2019 1:30:00 PM;0.5877852523;0;0.3695652174
399 | 2/19/2019 2:00:00 PM;0.3090169944;0;0.347826087
400 | 2/19/2019 2:30:00 PM;3.67381906146713E-16;0;0.3260869565
401 | 2/19/2019 3:00:00 PM;-0.3090169944;0;0.3043478261
402 | 2/19/2019 3:30:00 PM;-0.5877852523;0;0.2826086957
403 | 2/19/2019 4:00:00 PM;-0.8090169944;0;0.2608695652
404 | 2/19/2019 4:30:00 PM;-0.9510565163;0;0.2391304348
405 | 2/19/2019 5:00:00 PM;-1;0;0.2173913043
406 | 2/19/2019 5:30:00 PM;-0.9510565163;0;0.1956521739
407 |
--------------------------------------------------------------------------------
/data/RLTestDataSin30.csv:
--------------------------------------------------------------------------------
1 | UTC0;151_0;134_0;125_0
2 | 2/6/2019 6:30:00 PM;-0.5877852523;0.152173913;0.0549299643
3 | 2/6/2019 7:00:00 PM;-0.3090169944;0.1304347826;0
4 | 2/6/2019 7:30:00 PM;-4.89842541528951E-16;0.1086956522;-0.0915499405
5 | 2/6/2019 8:00:00 PM;0.3090169944;0.0869565217;-0.0549299643
6 | 2/6/2019 8:30:00 PM;0.5877852523;0.0652173913;-0.009154994
7 | 2/6/2019 9:00:00 PM;0.8090169944;0.0434782609;0.009154994
8 | 2/6/2019 9:30:00 PM;0.9510565163;0.0217391304;-0.0366199762
9 | 2/6/2019 10:00:00 PM;1;0;-0.1098599286
10 | 2/6/2019 11:30:00 PM;0;0.9782608696;0.0275027503
11 | 2/7/2019 12:00:00 AM;0.3090169944;0.9565217391;0.0550055006
12 | 2/7/2019 12:30:00 AM;0.5877852523;0.9347826087;0.0183351669
13 | 2/7/2019 1:00:00 AM;0.8090169944;0.9130434783;-0.0091675834
14 | 2/7/2019 1:30:00 AM;0.9510565163;0.8913043478;-0.128346168
15 | 2/7/2019 2:00:00 AM;1;0.8695652174;-0.0825082508
16 | 2/7/2019 2:30:00 AM;0.9510565163;0.847826087;-0.064173084
17 | 2/7/2019 3:00:00 AM;0.8090169944;0.8260869565;-0.0825082508
18 | 2/7/2019 3:30:00 AM;0.5877852523;0.8043478261;-0.0733406674
19 | 2/7/2019 4:00:00 AM;0.3090169944;0.7826086957;-0.1008434177
20 | 2/7/2019 4:30:00 AM;1.22460635382238E-16;0.7608695652;-0.0733406674
21 | 2/7/2019 5:00:00 AM;-0.3090169944;0.7391304348;-0.128346168
22 | 2/7/2019 5:30:00 AM;-0.5877852523;0.7173913043;-0.1466813348
23 | 2/7/2019 6:00:00 AM;-0.8090169944;0.6956521739;-0.1100110011
24 | 2/7/2019 6:30:00 AM;-0.9510565163;0.6739130435;-0.1100110011
25 | 2/7/2019 7:00:00 AM;-1;0.652173913;-0.0916758343
26 | 2/7/2019 7:30:00 AM;-0.9510565163;0.6304347826;-0.1741840851
27 | 2/7/2019 8:00:00 AM;-0.8090169944;0.6086956522;-0.2200220022
28 | 2/7/2019 8:30:00 AM;-0.5877852523;0.5869565217;-0.1466813348
29 | 2/7/2019 9:00:00 AM;-0.3090169944;0.5652173913;-0.0916758343
30 | 2/7/2019 9:30:00 AM;-2.44921270764475E-16;0.5434782609;-0.1100110011
31 | 2/7/2019 10:00:00 AM;0.3090169944;0.5217391304;-0.0550055006
32 | 2/7/2019 10:30:00 AM;0.5877852523;0.5;-0.3850385039
33 | 2/7/2019 11:00:00 AM;0.8090169944;0.4782608696;-0.3850385039
34 | 2/7/2019 11:30:00 AM;0.9510565163;0.4565217391;-0.495049505
35 | 2/7/2019 12:00:00 PM;1;0.4347826087;-0.5500550055
36 | 2/7/2019 12:30:00 PM;0.9510565163;0.4130434783;-0.4858819215
37 | 2/7/2019 1:00:00 PM;0.8090169944;0.3913043478;-0.5592225889
38 | 2/7/2019 1:30:00 PM;0.5877852523;0.3695652174;-0.5317198387
39 | 2/7/2019 2:00:00 PM;0.3090169944;0.347826087;-0.4675467547
40 | 2/7/2019 2:30:00 PM;3.67381906146713E-16;0.3260869565;-0.5500550055
41 | 2/7/2019 3:00:00 PM;-0.3090169944;0.3043478261;-0.6142280895
42 | 2/7/2019 3:30:00 PM;-0.5877852523;0.2826086957;-0.4125412541
43 | 2/7/2019 4:00:00 PM;-0.8090169944;0.2608695652;-0.9350935094
44 | 2/7/2019 4:30:00 PM;-0.9510565163;0.2391304348;-1.1459479281
45 | 2/7/2019 5:00:00 PM;-1;0.2173913043;-1.4301430143
46 | 2/7/2019 5:30:00 PM;-0.9510565163;0.1956521739;-1.2834616795
47 | 2/7/2019 6:00:00 PM;-0.8090169944;0.1739130435;-1.4209754309
48 | 2/7/2019 6:30:00 PM;-0.5877852523;0.152173913;-1.1459479281
49 | 2/7/2019 7:00:00 PM;-0.3090169944;0.1304347826;-1.1092775944
50 | 2/7/2019 7:30:00 PM;-4.89842541528951E-16;0.1086956522;-1.0542720939
51 | 2/7/2019 8:00:00 PM;0.3090169944;0.0869565217;-1.1459479281
52 | 2/7/2019 8:30:00 PM;0.5877852523;0.0652173913;-1.1092775944
53 | 2/7/2019 9:00:00 PM;0.8090169944;0.0434782609;-0.8250825083
54 | 2/7/2019 9:30:00 PM;0.9510565163;0.0217391304;-0.8159149248
55 | 2/7/2019 10:00:00 PM;1;0;-0.8709204254
56 | 2/7/2019 11:30:00 PM;0;0.9782608696;-0.1017764619
57 | 2/8/2019 12:00:00 AM;0.3090169944;0.9565217391;-0.1665433013
58 | 2/8/2019 12:30:00 AM;0.5877852523;0.9347826087;-0.0832716506
59 | 2/8/2019 1:00:00 AM;0.8090169944;0.9130434783;-0.14803849
60 | 2/8/2019 1:30:00 AM;0.9510565163;0.8913043478;-0.2775721688
61 | 2/8/2019 2:00:00 AM;1;0.8695652174;-0.2868245744
62 | 2/8/2019 2:30:00 AM;0.9510565163;0.847826087;-0.3238341969
63 | 2/8/2019 3:00:00 AM;0.8090169944;0.8260869565;-0.2775721688
64 | 2/8/2019 3:30:00 AM;0.5877852523;0.8043478261;-0.3145817913
65 | 2/8/2019 4:00:00 AM;0.3090169944;0.7826086957;-0.3423390081
66 | 2/8/2019 4:30:00 AM;1.22460635382238E-16;0.7608695652;-0.3330866025
67 | 2/8/2019 5:00:00 AM;-0.3090169944;0.7391304348;-0.3793486306
68 | 2/8/2019 5:30:00 AM;-0.5877852523;0.7173913043;-0.370096225
69 | 2/8/2019 6:00:00 AM;-0.8090169944;0.6956521739;-0.3145817913
70 | 2/8/2019 6:30:00 AM;-0.9510565163;0.6739130435;-0.3423390081
71 | 2/8/2019 7:00:00 AM;-1;0.652173913;-0.3053293856
72 | 2/8/2019 7:30:00 AM;-0.9510565163;0.6304347826;-0.3053293856
73 | 2/8/2019 8:00:00 AM;-0.8090169944;0.6086956522;-0.3423390081
74 | 2/8/2019 8:30:00 AM;-0.5877852523;0.5869565217;-0.29607698
75 | 2/8/2019 9:00:00 AM;-0.3090169944;0.5652173913;-0.1757957069
76 | 2/8/2019 9:30:00 AM;-2.44921270764475E-16;0.5434782609;-0.1850481125
77 | 2/8/2019 10:00:00 AM;0.3090169944;0.5217391304;-0.2405625463
78 | 2/8/2019 10:30:00 AM;0.5877852523;0.5;-0.2128053294
79 | 2/8/2019 11:00:00 AM;0.8090169944;0.4782608696;-0.2683197631
80 | 2/8/2019 11:30:00 AM;0.9510565163;0.4565217391;-0.3053293856
81 | 2/8/2019 12:00:00 PM;1;0.4347826087;-0.4903774981
82 | 2/8/2019 12:30:00 PM;0.9510565163;0.4130434783;-0.4718726869
83 | 2/8/2019 1:00:00 PM;0.8090169944;0.3913043478;-0.518134715
84 | 2/8/2019 1:30:00 PM;0.5877852523;0.3695652174;-0.3886010363
85 | 2/8/2019 2:00:00 PM;0.3090169944;0.347826087;-0.44411547
86 | 2/8/2019 2:30:00 PM;3.67381906146713E-16;0.3260869565;-0.44411547
87 | 2/8/2019 3:00:00 PM;-0.3090169944;0.3043478261;-0.4811250925
88 | 2/8/2019 3:30:00 PM;-0.5877852523;0.2826086957;-0.518134715
89 | 2/8/2019 4:00:00 PM;-0.8090169944;0.2608695652;-0.59215396
90 | 2/8/2019 4:30:00 PM;-0.9510565163;0.2391304348;-0.6199111769
91 | 2/8/2019 5:00:00 PM;-1;0.2173913043;-0.4996299038
92 | 2/8/2019 5:30:00 PM;-0.9510565163;0.1956521739;-0.4903774981
93 | 2/8/2019 6:00:00 PM;-0.8090169944;0.1739130435;-0.4071058475
94 | 2/8/2019 6:30:00 PM;-0.5877852523;0.152173913;-0.3608438194
95 | 2/8/2019 7:00:00 PM;-0.3090169944;0.1304347826;-0.2498149519
96 | 2/8/2019 7:30:00 PM;-4.89842541528951E-16;0.1086956522;-0.0925240563
97 | 2/8/2019 8:00:00 PM;0.3090169944;0.0869565217;-0.1387860844
98 | 2/8/2019 8:30:00 PM;0.5877852523;0.0652173913;-0.0647668394
99 | 2/8/2019 9:00:00 PM;0.8090169944;0.0434782609;0.2035529238
100 | 2/8/2019 9:30:00 PM;0.9510565163;0.0217391304;0.14803849
101 | 2/8/2019 10:00:00 PM;1;0;0.222057735
102 | 2/10/2019 11:30:00 PM;0;0.9782608696;-0.0553352393
103 | 2/11/2019 12:00:00 AM;0.3090169944;0.9565217391;-0.166005718
104 | 2/11/2019 12:30:00 AM;0.5877852523;0.9347826087;-0.2305634972
105 | 2/11/2019 1:00:00 AM;0.8090169944;0.9130434783;-0.2582311168
106 | 2/11/2019 1:30:00 AM;0.9510565163;0.8913043478;-0.3227888961
107 | 2/11/2019 2:00:00 AM;1;0.8695652174;-0.3227888961
108 | 2/11/2019 2:30:00 AM;0.9510565163;0.847826087;-0.3135663562
109 | 2/11/2019 3:00:00 AM;0.8090169944;0.8260869565;-0.1936733376
110 | 2/11/2019 3:30:00 AM;0.5877852523;0.8043478261;-0.2121184174
111 | 2/11/2019 4:00:00 AM;0.3090169944;0.7826086957;-0.2213409573
112 | 2/11/2019 4:30:00 AM;1.22460635382238E-16;0.7608695652;-0.249008577
113 | 2/11/2019 5:00:00 AM;-0.3090169944;0.7391304348;-0.2305634972
114 | 2/11/2019 5:30:00 AM;-0.5877852523;0.7173913043;-0.2582311168
115 | 2/11/2019 6:00:00 AM;-0.8090169944;0.6956521739;-0.249008577
116 | 2/11/2019 6:30:00 AM;-0.9510565163;0.6739130435;-0.2213409573
117 | 2/11/2019 7:00:00 AM;-1;0.652173913;-0.1752282579
118 | 2/11/2019 7:30:00 AM;-0.9510565163;0.6304347826;-0.2397860371
119 | 2/11/2019 8:00:00 AM;-0.8090169944;0.6086956522;-0.1844507977
120 | 2/11/2019 8:30:00 AM;-0.5877852523;0.5869565217;-0.0737803191
121 | 2/11/2019 9:00:00 AM;-0.3090169944;0.5652173913;0.2213409573
122 | 2/11/2019 9:30:00 AM;-2.44921270764475E-16;0.5434782609;0.2305634972
123 | 2/11/2019 10:00:00 AM;0.3090169944;0.5217391304;0.2766761966
124 | 2/11/2019 10:30:00 AM;0.5877852523;0.5;0.2305634972
125 | 2/11/2019 11:00:00 AM;0.8090169944;0.4782608696;0.1844507977
126 | 2/11/2019 11:30:00 AM;0.9510565163;0.4565217391;0.1014479388
127 | 2/11/2019 12:00:00 PM;1;0.4347826087;0.083002859
128 | 2/11/2019 12:30:00 PM;0.9510565163;0.4130434783;0.1198930185
129 | 2/11/2019 1:00:00 PM;0.8090169944;0.3913043478;0.2028958775
130 | 2/11/2019 1:30:00 PM;0.5877852523;0.3695652174;0.2121184174
131 | 2/11/2019 2:00:00 PM;0.3090169944;0.347826087;0.1936733376
132 | 2/11/2019 2:30:00 PM;3.67381906146713E-16;0.3260869565;0.1383380983
133 | 2/11/2019 3:00:00 PM;-0.3090169944;0.3043478261;-0.0184450798
134 | 2/11/2019 3:30:00 PM;-0.5877852523;0.2826086957;-0.083002859
135 | 2/11/2019 4:00:00 PM;-0.8090169944;0.2608695652;-0.0645577792
136 | 2/11/2019 4:30:00 PM;-0.9510565163;0.2391304348;-0.0922253989
137 | 2/11/2019 5:00:00 PM;-1;0.2173913043;-0.1198930185
138 | 2/11/2019 5:30:00 PM;-0.9510565163;0.1956521739;-0.0092225399
139 | 2/11/2019 6:00:00 PM;-0.8090169944;0.1739130435;-0.0092225399
140 | 2/11/2019 6:30:00 PM;-0.5877852523;0.152173913;-0.1291155584
141 | 2/11/2019 7:00:00 PM;-0.3090169944;0.1304347826;-0.1291155584
142 | 2/11/2019 7:30:00 PM;-4.89842541528951E-16;0.1086956522;-0.166005718
143 | 2/11/2019 8:00:00 PM;0.3090169944;0.0869565217;-0.1936733376
144 | 2/11/2019 8:30:00 PM;0.5877852523;0.0652173913;-0.0553352393
145 | 2/11/2019 9:00:00 PM;0.8090169944;0.0434782609;-0.0645577792
146 | 2/11/2019 9:30:00 PM;0.9510565163;0.0217391304;-0.083002859
147 | 2/11/2019 10:00:00 PM;1;0;-0.1106704786
148 | 2/11/2019 11:30:00 PM;0;0.9782608696;-0.0092353158
149 | 2/12/2019 12:00:00 AM;0.3090169944;0.9565217391;0.0646472109
150 | 2/12/2019 12:30:00 AM;0.5877852523;0.9347826087;0.184706317
151 | 2/12/2019 1:00:00 AM;0.8090169944;0.9130434783;0.2585888437
152 | 2/12/2019 1:30:00 AM;0.9510565163;0.8913043478;0.2862947913
153 | 2/12/2019 2:00:00 AM;1;0.8695652174;0.4432951607
154 | 2/12/2019 2:30:00 AM;0.9510565163;0.847826087;0.3878832656
155 | 2/12/2019 3:00:00 AM;0.8090169944;0.8260869565;0.5633542667
156 | 2/12/2019 3:30:00 AM;0.5877852523;0.8043478261;0.5725895826
157 | 2/12/2019 4:00:00 AM;0.3090169944;0.7826086957;0.6280014777
158 | 2/12/2019 4:30:00 AM;1.22460635382238E-16;0.7608695652;0.5633542667
159 | 2/12/2019 5:00:00 AM;-0.3090169944;0.7391304348;0.5541189509
160 | 2/12/2019 5:30:00 AM;-0.5877852523;0.7173913043;0.5079423716
161 | 2/12/2019 6:00:00 AM;-0.8090169944;0.6956521739;0.5171776875
162 | 2/12/2019 6:30:00 AM;-0.9510565163;0.6739130435;0.544883635
163 | 2/12/2019 7:00:00 AM;-1;0.652173913;0.5633542667
164 | 2/12/2019 7:30:00 AM;-0.9510565163;0.6304347826;0.5541189509
165 | 2/12/2019 8:00:00 AM;-0.8090169944;0.6086956522;0.6464721093
166 | 2/12/2019 8:30:00 AM;-0.5877852523;0.5869565217;0.6002955301
167 | 2/12/2019 9:00:00 AM;-0.3090169944;0.5652173913;0.664942741
168 | 2/12/2019 9:30:00 AM;-2.44921270764475E-16;0.5434782609;0.5910602143
169 | 2/12/2019 10:00:00 AM;0.3090169944;0.5217391304;0.6002955301
170 | 2/12/2019 10:30:00 AM;0.5877852523;0.5;0.6834133727
171 | 2/12/2019 11:00:00 AM;0.8090169944;0.4782608696;0.7111193203
172 | 2/12/2019 11:30:00 AM;0.9510565163;0.4565217391;0.7480605837
173 | 2/12/2019 12:00:00 PM;1;0.4347826087;0.7850018471
174 | 2/12/2019 12:30:00 PM;0.9510565163;0.4130434783;0.7850018471
175 | 2/12/2019 1:00:00 PM;0.8090169944;0.3913043478;0.7388252678
176 | 2/12/2019 1:30:00 PM;0.5877852523;0.3695652174;0.7480605837
177 | 2/12/2019 2:00:00 PM;0.3090169944;0.347826087;0.7018840044
178 | 2/12/2019 2:30:00 PM;3.67381906146713E-16;0.3260869565;0.729589952
179 | 2/12/2019 3:00:00 PM;-0.3090169944;0.3043478261;0.9512375323
180 | 2/12/2019 3:30:00 PM;-0.5877852523;0.2826086957;0.9512375323
181 | 2/12/2019 4:00:00 PM;-0.8090169944;0.2608695652;1.154414481
182 | 2/12/2019 4:30:00 PM;-0.9510565163;0.2391304348;1.274473587
183 | 2/12/2019 5:00:00 PM;-1;0.2173913043;1.3483561138
184 | 2/12/2019 5:30:00 PM;-0.9510565163;0.1956521739;1.2467676395
185 | 2/12/2019 6:00:00 PM;-0.8090169944;0.1739130435;1.274473587
186 | 2/12/2019 6:30:00 PM;-0.5877852523;0.152173913;1.3852973772
187 | 2/12/2019 7:00:00 PM;-0.3090169944;0.1304347826;1.4961211673
188 | 2/12/2019 7:30:00 PM;-4.89842541528951E-16;0.1086956522;1.4499445881
189 | 2/12/2019 8:00:00 PM;0.3090169944;0.0869565217;1.3852973772
190 | 2/12/2019 8:30:00 PM;0.5877852523;0.0652173913;1.4684152198
191 | 2/12/2019 9:00:00 PM;0.8090169944;0.0434782609;1.3668267455
192 | 2/12/2019 9:30:00 PM;0.9510565163;0.0217391304;1.4130033247
193 | 2/12/2019 10:00:00 PM;1;0;1.394532693
194 | 2/12/2019 11:30:00 PM;0;0.9782608696;0.0728995808
195 | 2/13/2019 12:00:00 AM;0.3090169944;0.9565217391;0.1275742664
196 | 2/13/2019 12:30:00 AM;0.5877852523;0.9347826087;0.2642609805
197 | 2/13/2019 1:00:00 AM;0.8090169944;0.9130434783;0.2551485329
198 | 2/13/2019 1:30:00 AM;0.9510565163;0.8913043478;0.3098232185
199 | 2/13/2019 2:00:00 AM;1;0.8695652174;0.3736103517
200 | 2/13/2019 2:30:00 AM;0.9510565163;0.847826087;0.3644979041
201 | 2/13/2019 3:00:00 AM;0.8090169944;0.8260869565;0.3189356661
202 | 2/13/2019 3:30:00 AM;0.5877852523;0.8043478261;0.3827227993
203 | 2/13/2019 4:00:00 AM;0.3090169944;0.7826086957;0.3827227993
204 | 2/13/2019 4:30:00 AM;1.22460635382238E-16;0.7608695652;0.3644979041
205 | 2/13/2019 5:00:00 AM;-0.3090169944;0.7391304348;0.3553854565
206 | 2/13/2019 5:30:00 AM;-0.5877852523;0.7173913043;0.4100601422
207 | 2/13/2019 6:00:00 AM;-0.8090169944;0.6956521739;0.4009476946
208 | 2/13/2019 6:30:00 AM;-0.9510565163;0.6739130435;0.4465099326
209 | 2/13/2019 7:00:00 AM;-1;0.652173913;0.4191725898
210 | 2/13/2019 7:30:00 AM;-0.9510565163;0.6304347826;0.3918352469
211 | 2/13/2019 8:00:00 AM;-0.8090169944;0.6086956522;0.3553854565
212 | 2/13/2019 8:30:00 AM;-0.5877852523;0.5869565217;0.3371605613
213 | 2/13/2019 9:00:00 AM;-0.3090169944;0.5652173913;0.2642609805
214 | 2/13/2019 9:30:00 AM;-2.44921270764475E-16;0.5434782609;0.2460360853
215 | 2/13/2019 10:00:00 AM;0.3090169944;0.5217391304;0.1731365045
216 | 2/13/2019 10:30:00 AM;0.5877852523;0.5;0.1275742664
217 | 2/13/2019 11:00:00 AM;0.8090169944;0.4782608696;0.2186987425
218 | 2/13/2019 11:30:00 AM;0.9510565163;0.4565217391;0.2460360853
219 | 2/13/2019 12:00:00 PM;1;0.4347826087;0.3098232185
220 | 2/13/2019 12:30:00 PM;0.9510565163;0.4130434783;0.3007107709
221 | 2/13/2019 1:00:00 PM;0.8090169944;0.3913043478;0.2915983233
222 | 2/13/2019 1:30:00 PM;0.5877852523;0.3695652174;0.2733734281
223 | 2/13/2019 2:00:00 PM;0.3090169944;0.347826087;0.3736103517
224 | 2/13/2019 2:30:00 PM;3.67381906146713E-16;0.3260869565;0.3371605613
225 | 2/13/2019 3:00:00 PM;-0.3090169944;0.3043478261;0.5194095134
226 | 2/13/2019 3:30:00 PM;-0.5877852523;0.2826086957;0.528521961
227 | 2/13/2019 4:00:00 PM;-0.8090169944;0.2608695652;0.5467468562
228 | 2/13/2019 4:30:00 PM;-0.9510565163;0.2391304348;0.3189356661
229 | 2/13/2019 5:00:00 PM;-1;0.2173913043;0.3371605613
230 | 2/13/2019 5:30:00 PM;-0.9510565163;0.1956521739;0.2460360853
231 | 2/13/2019 6:00:00 PM;-0.8090169944;0.1739130435;0.2733734281
232 | 2/13/2019 6:30:00 PM;-0.5877852523;0.152173913;0.3462730089
233 | 2/13/2019 7:00:00 PM;-0.3090169944;0.1304347826;0.3189356661
234 | 2/13/2019 7:30:00 PM;-4.89842541528951E-16;0.1086956522;0.3827227993
235 | 2/13/2019 8:00:00 PM;0.3090169944;0.0869565217;0.482959723
236 | 2/13/2019 8:30:00 PM;0.5877852523;0.0652173913;0.528521961
237 | 2/13/2019 9:00:00 PM;0.8090169944;0.0434782609;0.3098232185
238 | 2/13/2019 9:30:00 PM;0.9510565163;0.0217391304;0.2278111901
239 | 2/13/2019 10:00:00 PM;1;0;0.2095862949
240 | 2/13/2019 11:30:00 PM;0;0.9782608696;0.0363735564
241 | 2/14/2019 12:00:00 AM;0.3090169944;0.9565217391;0.0454669455
242 | 2/14/2019 12:30:00 AM;0.5877852523;0.9347826087;-0.1273074475
243 | 2/14/2019 1:00:00 AM;0.8090169944;0.9130434783;-0.081840502
244 | 2/14/2019 1:30:00 AM;0.9510565163;0.8913043478;-0.0090933891
245 | 2/14/2019 2:00:00 AM;1;0.8695652174;0
246 | 2/14/2019 2:30:00 AM;0.9510565163;0.847826087;0.0090933891
247 | 2/14/2019 3:00:00 AM;0.8090169944;0.8260869565;-0.0454669455
248 | 2/14/2019 3:30:00 AM;0.5877852523;0.8043478261;0.0454669455
249 | 2/14/2019 4:00:00 AM;0.3090169944;0.7826086957;0.2091479494
250 | 2/14/2019 4:30:00 AM;1.22460635382238E-16;0.7608695652;0.1091206693
251 | 2/14/2019 5:00:00 AM;-0.3090169944;0.7391304348;0.1273074475
252 | 2/14/2019 5:30:00 AM;-0.5877852523;0.7173913043;0.1273074475
253 | 2/14/2019 6:00:00 AM;-0.8090169944;0.6956521739;0.1545876148
254 | 2/14/2019 6:30:00 AM;-0.9510565163;0.6739130435;0.2818950623
255 | 2/14/2019 7:00:00 AM;-1;0.652173913;0.2818950623
256 | 2/14/2019 7:30:00 AM;-0.9510565163;0.6304347826;0.3546421751
257 | 2/14/2019 8:00:00 AM;-0.8090169944;0.6086956522;0.4455760662
258 | 2/14/2019 8:30:00 AM;-0.5877852523;0.5869565217;0.3728289534
259 | 2/14/2019 9:00:00 AM;-0.3090169944;0.5652173913;0.2909884514
260 | 2/14/2019 9:30:00 AM;-2.44921270764475E-16;0.5434782609;0.3637355642
261 | 2/14/2019 10:00:00 AM;0.3090169944;0.5217391304;0.254614895
262 | 2/14/2019 10:30:00 AM;0.5877852523;0.5;0.2273347277
263 | 2/14/2019 11:00:00 AM;0.8090169944;0.4782608696;0.2728016732
264 | 2/14/2019 11:30:00 AM;0.9510565163;0.4565217391;0.3273620078
265 | 2/14/2019 12:00:00 PM;1;0.4347826087;0.3000818405
266 | 2/14/2019 12:30:00 PM;0.9510565163;0.4130434783;0.3364553969
267 | 2/14/2019 1:00:00 PM;0.8090169944;0.3913043478;0.3637355642
268 | 2/14/2019 1:30:00 PM;0.5877852523;0.3695652174;0.3637355642
269 | 2/14/2019 2:00:00 PM;0.3090169944;0.347826087;-0.2637082841
270 | 2/14/2019 2:30:00 PM;3.67381906146713E-16;0.3260869565;-0.3637355642
271 | 2/14/2019 3:00:00 PM;-0.3090169944;0.3043478261;-0.3637355642
272 | 2/14/2019 3:30:00 PM;-0.5877852523;0.2826086957;-0.1636810039
273 | 2/14/2019 4:00:00 PM;-0.8090169944;0.2608695652;-0.2728016732
274 | 2/14/2019 4:30:00 PM;-0.9510565163;0.2391304348;-0.3546421751
275 | 2/14/2019 5:00:00 PM;-1;0.2173913043;-0.1545876148
276 | 2/14/2019 5:30:00 PM;-0.9510565163;0.1956521739;0.1454942257
277 | 2/14/2019 6:00:00 PM;-0.8090169944;0.1739130435;0.1273074475
278 | 2/14/2019 6:30:00 PM;-0.5877852523;0.152173913;0.1182140584
279 | 2/14/2019 7:00:00 PM;-0.3090169944;0.1304347826;0.0727471128
280 | 2/14/2019 7:30:00 PM;-4.89842541528951E-16;0.1086956522;0.1364008366
281 | 2/14/2019 8:00:00 PM;0.3090169944;0.0869565217;0.0181867782
282 | 2/14/2019 8:30:00 PM;0.5877852523;0.0652173913;0.0363735564
283 | 2/14/2019 9:00:00 PM;0.8090169944;0.0434782609;-0.1364008366
284 | 2/14/2019 9:30:00 PM;0.9510565163;0.0217391304;-0.2000545603
285 | 2/14/2019 10:00:00 PM;1;0;-0.2909884514
286 | 2/14/2019 11:30:00 PM;0;0.9782608696;0.0729594163
287 | 2/15/2019 12:00:00 AM;0.3090169944;0.9565217391;0.0638394893
288 | 2/15/2019 12:30:00 AM;0.5877852523;0.9347826087;-0.0638394893
289 | 2/15/2019 1:00:00 AM;0.8090169944;0.9130434783;-0.1276789786
290 | 2/15/2019 1:30:00 AM;0.9510565163;0.8913043478;-0.0455996352
291 | 2/15/2019 2:00:00 AM;1;0.8695652174;-0.0820793434
292 | 2/15/2019 2:30:00 AM;0.9510565163;0.847826087;-0.218878249
293 | 2/15/2019 3:00:00 AM;0.8090169944;0.8260869565;-0.2735978112
294 | 2/15/2019 3:30:00 AM;0.5877852523;0.8043478261;-0.2553579571
295 | 2/15/2019 4:00:00 AM;0.3090169944;0.7826086957;-0.2462380301
296 | 2/15/2019 4:30:00 AM;1.22460635382238E-16;0.7608695652;-0.2462380301
297 | 2/15/2019 5:00:00 AM;-0.3090169944;0.7391304348;-0.2827177383
298 | 2/15/2019 5:30:00 AM;-0.5877852523;0.7173913043;-0.3465572275
299 | 2/15/2019 6:00:00 AM;-0.8090169944;0.6956521739;-0.2918376653
300 | 2/15/2019 6:30:00 AM;-0.9510565163;0.6739130435;-0.2918376653
301 | 2/15/2019 7:00:00 AM;-1;0.652173913;-0.3191974464
302 | 2/15/2019 7:30:00 AM;-0.9510565163;0.6304347826;-0.3647970816
303 | 2/15/2019 8:00:00 AM;-0.8090169944;0.6086956522;-0.3921568627
304 | 2/15/2019 8:30:00 AM;-0.5877852523;0.5869565217;-0.3100775194
305 | 2/15/2019 9:00:00 AM;-0.3090169944;0.5652173913;-0.2553579571
306 | 2/15/2019 9:30:00 AM;-2.44921270764475E-16;0.5434782609;-0.1641586867
307 | 2/15/2019 10:00:00 AM;0.3090169944;0.5217391304;-0.0455996352
308 | 2/15/2019 10:30:00 AM;0.5877852523;0.5;-0.1003191974
309 | 2/15/2019 11:00:00 AM;0.8090169944;0.4782608696;0.1367989056
310 | 2/15/2019 11:30:00 AM;0.9510565163;0.4565217391;0.2735978112
311 | 2/15/2019 12:00:00 PM;1;0.4347826087;0.1367989056
312 | 2/15/2019 12:30:00 PM;0.9510565163;0.4130434783;0.1550387597
313 | 2/15/2019 1:00:00 PM;0.8090169944;0.3913043478;0.3830369357
314 | 2/15/2019 1:30:00 PM;0.5877852523;0.3695652174;0.3647970816
315 | 2/15/2019 2:00:00 PM;0.3090169944;0.347826087;0.4924760602
316 | 2/15/2019 2:30:00 PM;3.67381906146713E-16;0.3260869565;0.8755129959
317 | 2/15/2019 3:00:00 PM;-0.3090169944;0.3043478261;0.9484724122
318 | 2/15/2019 3:30:00 PM;-0.5877852523;0.2826086957;1.0305517556
319 | 2/15/2019 4:00:00 PM;-0.8090169944;0.2608695652;0.9302325581
320 | 2/15/2019 4:30:00 PM;-0.9510565163;0.2391304348;0.9849521204
321 | 2/15/2019 5:00:00 PM;-1;0.2173913043;1.0031919745
322 | 2/15/2019 5:30:00 PM;-0.9510565163;0.1956521739;1.0123119015
323 | 2/15/2019 6:00:00 PM;-0.8090169944;0.1739130435;0.9667122663
324 | 2/15/2019 6:30:00 PM;-0.5877852523;0.152173913;0.8481532148
325 | 2/15/2019 7:00:00 PM;-0.3090169944;0.1304347826;0.9211126311
326 | 2/15/2019 7:30:00 PM;-4.89842541528951E-16;0.1086956522;0.9575923393
327 | 2/15/2019 8:00:00 PM;0.3090169944;0.0869565217;1.0852713178
328 | 2/15/2019 8:30:00 PM;0.5877852523;0.0652173913;0.9758321933
329 | 2/15/2019 9:00:00 PM;0.8090169944;0.0434782609;1.2585499316
330 | 2/15/2019 9:30:00 PM;0.9510565163;0.0217391304;1.3041495668
331 | 2/15/2019 10:00:00 PM;1;0;1.3315093479
332 | 2/17/2019 11:30:00 PM;0;0.9736842105;-0.0180050414
333 | 2/18/2019 12:00:00 AM;0.3090169944;0.9473684211;0.0630176449
334 | 2/18/2019 12:30:00 AM;0.5877852523;0.9210526316;-0.0630176449
335 | 2/18/2019 1:00:00 AM;0.8090169944;0.8947368421;-0.0720201656
336 | 2/18/2019 1:30:00 AM;0.9510565163;0.8684210526;-0.0540151242
337 | 2/18/2019 2:00:00 AM;1;0.8421052632;0
338 | 2/18/2019 2:30:00 AM;0.9510565163;0.8157894737;0.0360100828
339 | 2/18/2019 3:00:00 AM;0.8090169944;0.7894736842;0.0450126035
340 | 2/18/2019 3:30:00 AM;0.5877852523;0.7631578947;0.0720201656
341 | 2/18/2019 4:00:00 AM;0.3090169944;0.7368421053;0.0270075621
342 | 2/18/2019 4:30:00 AM;1.22460635382238E-16;0.7105263158;0.0090025207
343 | 2/18/2019 5:00:00 AM;-0.3090169944;0.6842105263;0.0180050414
344 | 2/18/2019 5:30:00 AM;-0.5877852523;0.6578947368;0.0270075621
345 | 2/18/2019 6:00:00 AM;-0.8090169944;0.6315789474;0
346 | 2/18/2019 6:30:00 AM;-0.9510565163;0.6052631579;-0.0090025207
347 | 2/18/2019 7:00:00 AM;-1;0.5789473684;0.0450126035
348 | 2/18/2019 7:30:00 AM;-0.9510565163;0.5526315789;0.0270075621
349 | 2/18/2019 8:00:00 AM;-0.8090169944;0.5263157895;0
350 | 2/18/2019 8:30:00 AM;-0.5877852523;0.5;-0.0360100828
351 | 2/18/2019 9:00:00 AM;-0.3090169944;0.4736842105;-0.0630176449
352 | 2/18/2019 9:30:00 AM;-2.44921270764475E-16;0.4473684211;-0.0900252071
353 | 2/18/2019 10:00:00 AM;0.3090169944;0.4210526316;-0.1170327692
354 | 2/18/2019 10:30:00 AM;0.5877852523;0.3947368421;-0.0540151242
355 | 2/18/2019 11:00:00 AM;0.8090169944;0.3684210526;-0.0090025207
356 | 2/18/2019 11:30:00 AM;0.9510565163;0.3421052632;-0.0540151242
357 | 2/18/2019 12:00:00 PM;1;0.3157894737;-0.0630176449
358 | 2/18/2019 12:30:00 PM;0.9510565163;0.2894736842;-0.0270075621
359 | 2/18/2019 1:00:00 PM;0.8090169944;0.2631578947;-0.0360100828
360 | 2/18/2019 1:30:00 PM;0.5877852523;0.2368421053;-0.0360100828
361 | 2/18/2019 2:00:00 PM;0.3090169944;0.2105263158;-0.0360100828
362 | 2/18/2019 2:30:00 PM;3.67381906146713E-16;0.1842105263;-0.0180050414
363 | 2/18/2019 3:00:00 PM;-0.3090169944;0.1578947368;0.0270075621
364 | 2/18/2019 3:30:00 PM;-0.5877852523;0.1315789474;0.0360100828
365 | 2/18/2019 4:00:00 PM;-0.8090169944;0.1052631579;-0.0090025207
366 | 2/18/2019 4:30:00 PM;-0.9510565163;0.0789473684;-0.0180050414
367 | 2/18/2019 5:00:00 PM;-1;0.0526315789;0
368 | 2/18/2019 5:30:00 PM;-0.9510565163;0.0263157895;-0.0090025207
369 | 2/18/2019 6:00:00 PM;-0.8090169944;0;0.0450126035
370 | 2/18/2019 11:30:00 PM;0;0.9782608696;-0.0090009001
371 | 2/19/2019 12:00:00 AM;0.3090169944;0.9565217391;-0.0630063006
372 | 2/19/2019 12:30:00 AM;0.5877852523;0.9347826087;-0.0270027003
373 | 2/19/2019 1:00:00 AM;0.8090169944;0.9130434783;-0.0360036004
374 | 2/19/2019 1:30:00 AM;0.9510565163;0.8913043478;-0.0270027003
375 | 2/19/2019 2:00:00 AM;1;0.8695652174;0.0360036004
376 | 2/19/2019 2:30:00 AM;0.9510565163;0.847826087;-0.0180018002
377 | 2/19/2019 3:00:00 AM;0.8090169944;0.8260869565;0.0360036004
378 | 2/19/2019 3:30:00 AM;0.5877852523;0.8043478261;0.0090009001
379 | 2/19/2019 4:00:00 AM;0.3090169944;0.7826086957;-0.0270027003
380 | 2/19/2019 4:30:00 AM;1.22460635382238E-16;0.7608695652;-0.0180018002
381 | 2/19/2019 5:00:00 AM;-0.3090169944;0.7391304348;-0.0360036004
382 | 2/19/2019 5:30:00 AM;-0.5877852523;0.7173913043;-0.0720072007
383 | 2/19/2019 6:00:00 AM;-0.8090169944;0.6956521739;-0.0540054005
384 | 2/19/2019 6:30:00 AM;-0.9510565163;0.6739130435;-0.0360036004
385 | 2/19/2019 7:00:00 AM;-1;0.652173913;-0.0450045005
386 | 2/19/2019 7:30:00 AM;-0.9510565163;0.6304347826;-0.0450045005
387 | 2/19/2019 8:00:00 AM;-0.8090169944;0.6086956522;-0.0720072007
388 | 2/19/2019 8:30:00 AM;-0.5877852523;0.5869565217;-0.0450045005
389 | 2/19/2019 9:00:00 AM;-0.3090169944;0.5652173913;-0.0270027003
390 | 2/19/2019 9:30:00 AM;-2.44921270764475E-16;0.5434782609;-0.198019802
391 | 2/19/2019 10:00:00 AM;0.3090169944;0.5217391304;-0.1800180018
392 | 2/19/2019 10:30:00 AM;0.5877852523;0.5;-0.198019802
393 | 2/19/2019 11:00:00 AM;0.8090169944;0.4782608696;-0.1620162016
394 | 2/19/2019 11:30:00 AM;0.9510565163;0.4565217391;-0.3330333033
395 | 2/19/2019 12:00:00 PM;1;0.4347826087;-0.3420342034
396 | 2/19/2019 12:30:00 PM;0.9510565163;0.4130434783;-0.3510351035
397 | 2/19/2019 1:00:00 PM;0.8090169944;0.3913043478;-0.2880288029
398 | 2/19/2019 1:30:00 PM;0.5877852523;0.3695652174;-0.297029703
399 | 2/19/2019 2:00:00 PM;0.3090169944;0.347826087;-0.3240324032
400 | 2/19/2019 2:30:00 PM;3.67381906146713E-16;0.3260869565;-0.4140414041
401 | 2/19/2019 3:00:00 PM;-0.3090169944;0.3043478261;-0.1080108011
402 | 2/19/2019 3:30:00 PM;-0.5877852523;0.2826086957;-0.0270027003
403 | 2/19/2019 4:00:00 PM;-0.8090169944;0.2608695652;-0.1530153015
404 | 2/19/2019 4:30:00 PM;-0.9510565163;0.2391304348;-0.1080108011
405 | 2/19/2019 5:00:00 PM;-1;0.2173913043;0.2250225023
406 | 2/19/2019 5:30:00 PM;-0.9510565163;0.1956521739;0.1620162016
407 |
--------------------------------------------------------------------------------
/data/RLTestDataSin30D.csv:
--------------------------------------------------------------------------------
1 | UTC0;151_0;136_0;134_0;125_0
2 | 2/6/2019 6:30:00 PM;-0.5877852523;0;0.152173913;0.0549299643
3 | 2/6/2019 7:00:00 PM;-0.3090169944;0;0.1304347826;0
4 | 2/6/2019 7:30:00 PM;-4.89842541528951E-16;0;0.1086956522;-0.0915499405
5 | 2/6/2019 8:00:00 PM;0.3090169944;0;0.0869565217;-0.0549299643
6 | 2/6/2019 8:30:00 PM;0.5877852523;0;0.0652173913;-0.009154994
7 | 2/6/2019 9:00:00 PM;0.8090169944;0;0.0434782609;0.009154994
8 | 2/6/2019 9:30:00 PM;0.9510565163;0;0.0217391304;-0.0366199762
9 | 2/6/2019 10:00:00 PM;1;1;0;-0.1098599286
10 | 2/6/2019 11:30:00 PM;0;0;0.9782608696;0.0275027503
11 | 2/7/2019 12:00:00 AM;0.3090169944;0;0.9565217391;0.0550055006
12 | 2/7/2019 12:30:00 AM;0.5877852523;0;0.9347826087;0.0183351669
13 | 2/7/2019 1:00:00 AM;0.8090169944;0;0.9130434783;-0.0091675834
14 | 2/7/2019 1:30:00 AM;0.9510565163;0;0.8913043478;-0.128346168
15 | 2/7/2019 2:00:00 AM;1;0;0.8695652174;-0.0825082508
16 | 2/7/2019 2:30:00 AM;0.9510565163;0;0.847826087;-0.064173084
17 | 2/7/2019 3:00:00 AM;0.8090169944;0;0.8260869565;-0.0825082508
18 | 2/7/2019 3:30:00 AM;0.5877852523;0;0.8043478261;-0.0733406674
19 | 2/7/2019 4:00:00 AM;0.3090169944;0;0.7826086957;-0.1008434177
20 | 2/7/2019 4:30:00 AM;1.22460635382238E-16;0;0.7608695652;-0.0733406674
21 | 2/7/2019 5:00:00 AM;-0.3090169944;0;0.7391304348;-0.128346168
22 | 2/7/2019 5:30:00 AM;-0.5877852523;0;0.7173913043;-0.1466813348
23 | 2/7/2019 6:00:00 AM;-0.8090169944;0;0.6956521739;-0.1100110011
24 | 2/7/2019 6:30:00 AM;-0.9510565163;0;0.6739130435;-0.1100110011
25 | 2/7/2019 7:00:00 AM;-1;0;0.652173913;-0.0916758343
26 | 2/7/2019 7:30:00 AM;-0.9510565163;0;0.6304347826;-0.1741840851
27 | 2/7/2019 8:00:00 AM;-0.8090169944;0;0.6086956522;-0.2200220022
28 | 2/7/2019 8:30:00 AM;-0.5877852523;0;0.5869565217;-0.1466813348
29 | 2/7/2019 9:00:00 AM;-0.3090169944;0;0.5652173913;-0.0916758343
30 | 2/7/2019 9:30:00 AM;-2.44921270764475E-16;0;0.5434782609;-0.1100110011
31 | 2/7/2019 10:00:00 AM;0.3090169944;0;0.5217391304;-0.0550055006
32 | 2/7/2019 10:30:00 AM;0.5877852523;0;0.5;-0.3850385039
33 | 2/7/2019 11:00:00 AM;0.8090169944;0;0.4782608696;-0.3850385039
34 | 2/7/2019 11:30:00 AM;0.9510565163;0;0.4565217391;-0.495049505
35 | 2/7/2019 12:00:00 PM;1;0;0.4347826087;-0.5500550055
36 | 2/7/2019 12:30:00 PM;0.9510565163;0;0.4130434783;-0.4858819215
37 | 2/7/2019 1:00:00 PM;0.8090169944;0;0.3913043478;-0.5592225889
38 | 2/7/2019 1:30:00 PM;0.5877852523;0;0.3695652174;-0.5317198387
39 | 2/7/2019 2:00:00 PM;0.3090169944;0;0.347826087;-0.4675467547
40 | 2/7/2019 2:30:00 PM;3.67381906146713E-16;0;0.3260869565;-0.5500550055
41 | 2/7/2019 3:00:00 PM;-0.3090169944;0;0.3043478261;-0.6142280895
42 | 2/7/2019 3:30:00 PM;-0.5877852523;0;0.2826086957;-0.4125412541
43 | 2/7/2019 4:00:00 PM;-0.8090169944;0;0.2608695652;-0.9350935094
44 | 2/7/2019 4:30:00 PM;-0.9510565163;0;0.2391304348;-1.1459479281
45 | 2/7/2019 5:00:00 PM;-1;0;0.2173913043;-1.4301430143
46 | 2/7/2019 5:30:00 PM;-0.9510565163;0;0.1956521739;-1.2834616795
47 | 2/7/2019 6:00:00 PM;-0.8090169944;0;0.1739130435;-1.4209754309
48 | 2/7/2019 6:30:00 PM;-0.5877852523;0;0.152173913;-1.1459479281
49 | 2/7/2019 7:00:00 PM;-0.3090169944;0;0.1304347826;-1.1092775944
50 | 2/7/2019 7:30:00 PM;-4.89842541528951E-16;0;0.1086956522;-1.0542720939
51 | 2/7/2019 8:00:00 PM;0.3090169944;0;0.0869565217;-1.1459479281
52 | 2/7/2019 8:30:00 PM;0.5877852523;0;0.0652173913;-1.1092775944
53 | 2/7/2019 9:00:00 PM;0.8090169944;0;0.0434782609;-0.8250825083
54 | 2/7/2019 9:30:00 PM;0.9510565163;0;0.0217391304;-0.8159149248
55 | 2/7/2019 10:00:00 PM;1;1;0;-0.8709204254
56 | 2/7/2019 11:30:00 PM;0;0;0.9782608696;-0.1017764619
57 | 2/8/2019 12:00:00 AM;0.3090169944;0;0.9565217391;-0.1665433013
58 | 2/8/2019 12:30:00 AM;0.5877852523;0;0.9347826087;-0.0832716506
59 | 2/8/2019 1:00:00 AM;0.8090169944;0;0.9130434783;-0.14803849
60 | 2/8/2019 1:30:00 AM;0.9510565163;0;0.8913043478;-0.2775721688
61 | 2/8/2019 2:00:00 AM;1;0;0.8695652174;-0.2868245744
62 | 2/8/2019 2:30:00 AM;0.9510565163;0;0.847826087;-0.3238341969
63 | 2/8/2019 3:00:00 AM;0.8090169944;0;0.8260869565;-0.2775721688
64 | 2/8/2019 3:30:00 AM;0.5877852523;0;0.8043478261;-0.3145817913
65 | 2/8/2019 4:00:00 AM;0.3090169944;0;0.7826086957;-0.3423390081
66 | 2/8/2019 4:30:00 AM;1.22460635382238E-16;0;0.7608695652;-0.3330866025
67 | 2/8/2019 5:00:00 AM;-0.3090169944;0;0.7391304348;-0.3793486306
68 | 2/8/2019 5:30:00 AM;-0.5877852523;0;0.7173913043;-0.370096225
69 | 2/8/2019 6:00:00 AM;-0.8090169944;0;0.6956521739;-0.3145817913
70 | 2/8/2019 6:30:00 AM;-0.9510565163;0;0.6739130435;-0.3423390081
71 | 2/8/2019 7:00:00 AM;-1;0;0.652173913;-0.3053293856
72 | 2/8/2019 7:30:00 AM;-0.9510565163;0;0.6304347826;-0.3053293856
73 | 2/8/2019 8:00:00 AM;-0.8090169944;0;0.6086956522;-0.3423390081
74 | 2/8/2019 8:30:00 AM;-0.5877852523;0;0.5869565217;-0.29607698
75 | 2/8/2019 9:00:00 AM;-0.3090169944;0;0.5652173913;-0.1757957069
76 | 2/8/2019 9:30:00 AM;-2.44921270764475E-16;0;0.5434782609;-0.1850481125
77 | 2/8/2019 10:00:00 AM;0.3090169944;0;0.5217391304;-0.2405625463
78 | 2/8/2019 10:30:00 AM;0.5877852523;0;0.5;-0.2128053294
79 | 2/8/2019 11:00:00 AM;0.8090169944;0;0.4782608696;-0.2683197631
80 | 2/8/2019 11:30:00 AM;0.9510565163;0;0.4565217391;-0.3053293856
81 | 2/8/2019 12:00:00 PM;1;0;0.4347826087;-0.4903774981
82 | 2/8/2019 12:30:00 PM;0.9510565163;0;0.4130434783;-0.4718726869
83 | 2/8/2019 1:00:00 PM;0.8090169944;0;0.3913043478;-0.518134715
84 | 2/8/2019 1:30:00 PM;0.5877852523;0;0.3695652174;-0.3886010363
85 | 2/8/2019 2:00:00 PM;0.3090169944;0;0.347826087;-0.44411547
86 | 2/8/2019 2:30:00 PM;3.67381906146713E-16;0;0.3260869565;-0.44411547
87 | 2/8/2019 3:00:00 PM;-0.3090169944;0;0.3043478261;-0.4811250925
88 | 2/8/2019 3:30:00 PM;-0.5877852523;0;0.2826086957;-0.518134715
89 | 2/8/2019 4:00:00 PM;-0.8090169944;0;0.2608695652;-0.59215396
90 | 2/8/2019 4:30:00 PM;-0.9510565163;0;0.2391304348;-0.6199111769
91 | 2/8/2019 5:00:00 PM;-1;0;0.2173913043;-0.4996299038
92 | 2/8/2019 5:30:00 PM;-0.9510565163;0;0.1956521739;-0.4903774981
93 | 2/8/2019 6:00:00 PM;-0.8090169944;0;0.1739130435;-0.4071058475
94 | 2/8/2019 6:30:00 PM;-0.5877852523;0;0.152173913;-0.3608438194
95 | 2/8/2019 7:00:00 PM;-0.3090169944;0;0.1304347826;-0.2498149519
96 | 2/8/2019 7:30:00 PM;-4.89842541528951E-16;0;0.1086956522;-0.0925240563
97 | 2/8/2019 8:00:00 PM;0.3090169944;0;0.0869565217;-0.1387860844
98 | 2/8/2019 8:30:00 PM;0.5877852523;0;0.0652173913;-0.0647668394
99 | 2/8/2019 9:00:00 PM;0.8090169944;0;0.0434782609;0.2035529238
100 | 2/8/2019 9:30:00 PM;0.9510565163;0;0.0217391304;0.14803849
101 | 2/8/2019 10:00:00 PM;1;1;0;0.222057735
102 | 2/10/2019 11:30:00 PM;0;0;0.9782608696;-0.0553352393
103 | 2/11/2019 12:00:00 AM;0.3090169944;0;0.9565217391;-0.166005718
104 | 2/11/2019 12:30:00 AM;0.5877852523;0;0.9347826087;-0.2305634972
105 | 2/11/2019 1:00:00 AM;0.8090169944;0;0.9130434783;-0.2582311168
106 | 2/11/2019 1:30:00 AM;0.9510565163;0;0.8913043478;-0.3227888961
107 | 2/11/2019 2:00:00 AM;1;0;0.8695652174;-0.3227888961
108 | 2/11/2019 2:30:00 AM;0.9510565163;0;0.847826087;-0.3135663562
109 | 2/11/2019 3:00:00 AM;0.8090169944;0;0.8260869565;-0.1936733376
110 | 2/11/2019 3:30:00 AM;0.5877852523;0;0.8043478261;-0.2121184174
111 | 2/11/2019 4:00:00 AM;0.3090169944;0;0.7826086957;-0.2213409573
112 | 2/11/2019 4:30:00 AM;1.22460635382238E-16;0;0.7608695652;-0.249008577
113 | 2/11/2019 5:00:00 AM;-0.3090169944;0;0.7391304348;-0.2305634972
114 | 2/11/2019 5:30:00 AM;-0.5877852523;0;0.7173913043;-0.2582311168
115 | 2/11/2019 6:00:00 AM;-0.8090169944;0;0.6956521739;-0.249008577
116 | 2/11/2019 6:30:00 AM;-0.9510565163;0;0.6739130435;-0.2213409573
117 | 2/11/2019 7:00:00 AM;-1;0;0.652173913;-0.1752282579
118 | 2/11/2019 7:30:00 AM;-0.9510565163;0;0.6304347826;-0.2397860371
119 | 2/11/2019 8:00:00 AM;-0.8090169944;0;0.6086956522;-0.1844507977
120 | 2/11/2019 8:30:00 AM;-0.5877852523;0;0.5869565217;-0.0737803191
121 | 2/11/2019 9:00:00 AM;-0.3090169944;0;0.5652173913;0.2213409573
122 | 2/11/2019 9:30:00 AM;-2.44921270764475E-16;0;0.5434782609;0.2305634972
123 | 2/11/2019 10:00:00 AM;0.3090169944;0;0.5217391304;0.2766761966
124 | 2/11/2019 10:30:00 AM;0.5877852523;0;0.5;0.2305634972
125 | 2/11/2019 11:00:00 AM;0.8090169944;0;0.4782608696;0.1844507977
126 | 2/11/2019 11:30:00 AM;0.9510565163;0;0.4565217391;0.1014479388
127 | 2/11/2019 12:00:00 PM;1;0;0.4347826087;0.083002859
128 | 2/11/2019 12:30:00 PM;0.9510565163;0;0.4130434783;0.1198930185
129 | 2/11/2019 1:00:00 PM;0.8090169944;0;0.3913043478;0.2028958775
130 | 2/11/2019 1:30:00 PM;0.5877852523;0;0.3695652174;0.2121184174
131 | 2/11/2019 2:00:00 PM;0.3090169944;0;0.347826087;0.1936733376
132 | 2/11/2019 2:30:00 PM;3.67381906146713E-16;0;0.3260869565;0.1383380983
133 | 2/11/2019 3:00:00 PM;-0.3090169944;0;0.3043478261;-0.0184450798
134 | 2/11/2019 3:30:00 PM;-0.5877852523;0;0.2826086957;-0.083002859
135 | 2/11/2019 4:00:00 PM;-0.8090169944;0;0.2608695652;-0.0645577792
136 | 2/11/2019 4:30:00 PM;-0.9510565163;0;0.2391304348;-0.0922253989
137 | 2/11/2019 5:00:00 PM;-1;0;0.2173913043;-0.1198930185
138 | 2/11/2019 5:30:00 PM;-0.9510565163;0;0.1956521739;-0.0092225399
139 | 2/11/2019 6:00:00 PM;-0.8090169944;0;0.1739130435;-0.0092225399
140 | 2/11/2019 6:30:00 PM;-0.5877852523;0;0.152173913;-0.1291155584
141 | 2/11/2019 7:00:00 PM;-0.3090169944;0;0.1304347826;-0.1291155584
142 | 2/11/2019 7:30:00 PM;-4.89842541528951E-16;0;0.1086956522;-0.166005718
143 | 2/11/2019 8:00:00 PM;0.3090169944;0;0.0869565217;-0.1936733376
144 | 2/11/2019 8:30:00 PM;0.5877852523;0;0.0652173913;-0.0553352393
145 | 2/11/2019 9:00:00 PM;0.8090169944;0;0.0434782609;-0.0645577792
146 | 2/11/2019 9:30:00 PM;0.9510565163;0;0.0217391304;-0.083002859
147 | 2/11/2019 10:00:00 PM;1;1;0;-0.1106704786
148 | 2/11/2019 11:30:00 PM;0;0;0.9782608696;-0.0092353158
149 | 2/12/2019 12:00:00 AM;0.3090169944;0;0.9565217391;0.0646472109
150 | 2/12/2019 12:30:00 AM;0.5877852523;0;0.9347826087;0.184706317
151 | 2/12/2019 1:00:00 AM;0.8090169944;0;0.9130434783;0.2585888437
152 | 2/12/2019 1:30:00 AM;0.9510565163;0;0.8913043478;0.2862947913
153 | 2/12/2019 2:00:00 AM;1;0;0.8695652174;0.4432951607
154 | 2/12/2019 2:30:00 AM;0.9510565163;0;0.847826087;0.3878832656
155 | 2/12/2019 3:00:00 AM;0.8090169944;0;0.8260869565;0.5633542667
156 | 2/12/2019 3:30:00 AM;0.5877852523;0;0.8043478261;0.5725895826
157 | 2/12/2019 4:00:00 AM;0.3090169944;0;0.7826086957;0.6280014777
158 | 2/12/2019 4:30:00 AM;1.22460635382238E-16;0;0.7608695652;0.5633542667
159 | 2/12/2019 5:00:00 AM;-0.3090169944;0;0.7391304348;0.5541189509
160 | 2/12/2019 5:30:00 AM;-0.5877852523;0;0.7173913043;0.5079423716
161 | 2/12/2019 6:00:00 AM;-0.8090169944;0;0.6956521739;0.5171776875
162 | 2/12/2019 6:30:00 AM;-0.9510565163;0;0.6739130435;0.544883635
163 | 2/12/2019 7:00:00 AM;-1;0;0.652173913;0.5633542667
164 | 2/12/2019 7:30:00 AM;-0.9510565163;0;0.6304347826;0.5541189509
165 | 2/12/2019 8:00:00 AM;-0.8090169944;0;0.6086956522;0.6464721093
166 | 2/12/2019 8:30:00 AM;-0.5877852523;0;0.5869565217;0.6002955301
167 | 2/12/2019 9:00:00 AM;-0.3090169944;0;0.5652173913;0.664942741
168 | 2/12/2019 9:30:00 AM;-2.44921270764475E-16;0;0.5434782609;0.5910602143
169 | 2/12/2019 10:00:00 AM;0.3090169944;0;0.5217391304;0.6002955301
170 | 2/12/2019 10:30:00 AM;0.5877852523;0;0.5;0.6834133727
171 | 2/12/2019 11:00:00 AM;0.8090169944;0;0.4782608696;0.7111193203
172 | 2/12/2019 11:30:00 AM;0.9510565163;0;0.4565217391;0.7480605837
173 | 2/12/2019 12:00:00 PM;1;0;0.4347826087;0.7850018471
174 | 2/12/2019 12:30:00 PM;0.9510565163;0;0.4130434783;0.7850018471
175 | 2/12/2019 1:00:00 PM;0.8090169944;0;0.3913043478;0.7388252678
176 | 2/12/2019 1:30:00 PM;0.5877852523;0;0.3695652174;0.7480605837
177 | 2/12/2019 2:00:00 PM;0.3090169944;0;0.347826087;0.7018840044
178 | 2/12/2019 2:30:00 PM;3.67381906146713E-16;0;0.3260869565;0.729589952
179 | 2/12/2019 3:00:00 PM;-0.3090169944;0;0.3043478261;0.9512375323
180 | 2/12/2019 3:30:00 PM;-0.5877852523;0;0.2826086957;0.9512375323
181 | 2/12/2019 4:00:00 PM;-0.8090169944;0;0.2608695652;1.154414481
182 | 2/12/2019 4:30:00 PM;-0.9510565163;0;0.2391304348;1.274473587
183 | 2/12/2019 5:00:00 PM;-1;0;0.2173913043;1.3483561138
184 | 2/12/2019 5:30:00 PM;-0.9510565163;0;0.1956521739;1.2467676395
185 | 2/12/2019 6:00:00 PM;-0.8090169944;0;0.1739130435;1.274473587
186 | 2/12/2019 6:30:00 PM;-0.5877852523;0;0.152173913;1.3852973772
187 | 2/12/2019 7:00:00 PM;-0.3090169944;0;0.1304347826;1.4961211673
188 | 2/12/2019 7:30:00 PM;-4.89842541528951E-16;0;0.1086956522;1.4499445881
189 | 2/12/2019 8:00:00 PM;0.3090169944;0;0.0869565217;1.3852973772
190 | 2/12/2019 8:30:00 PM;0.5877852523;0;0.0652173913;1.4684152198
191 | 2/12/2019 9:00:00 PM;0.8090169944;0;0.0434782609;1.3668267455
192 | 2/12/2019 9:30:00 PM;0.9510565163;0;0.0217391304;1.4130033247
193 | 2/12/2019 10:00:00 PM;1;1;0;1.394532693
194 | 2/12/2019 11:30:00 PM;0;0;0.9782608696;0.0728995808
195 | 2/13/2019 12:00:00 AM;0.3090169944;0;0.9565217391;0.1275742664
196 | 2/13/2019 12:30:00 AM;0.5877852523;0;0.9347826087;0.2642609805
197 | 2/13/2019 1:00:00 AM;0.8090169944;0;0.9130434783;0.2551485329
198 | 2/13/2019 1:30:00 AM;0.9510565163;0;0.8913043478;0.3098232185
199 | 2/13/2019 2:00:00 AM;1;0;0.8695652174;0.3736103517
200 | 2/13/2019 2:30:00 AM;0.9510565163;0;0.847826087;0.3644979041
201 | 2/13/2019 3:00:00 AM;0.8090169944;0;0.8260869565;0.3189356661
202 | 2/13/2019 3:30:00 AM;0.5877852523;0;0.8043478261;0.3827227993
203 | 2/13/2019 4:00:00 AM;0.3090169944;0;0.7826086957;0.3827227993
204 | 2/13/2019 4:30:00 AM;1.22460635382238E-16;0;0.7608695652;0.3644979041
205 | 2/13/2019 5:00:00 AM;-0.3090169944;0;0.7391304348;0.3553854565
206 | 2/13/2019 5:30:00 AM;-0.5877852523;0;0.7173913043;0.4100601422
207 | 2/13/2019 6:00:00 AM;-0.8090169944;0;0.6956521739;0.4009476946
208 | 2/13/2019 6:30:00 AM;-0.9510565163;0;0.6739130435;0.4465099326
209 | 2/13/2019 7:00:00 AM;-1;0;0.652173913;0.4191725898
210 | 2/13/2019 7:30:00 AM;-0.9510565163;0;0.6304347826;0.3918352469
211 | 2/13/2019 8:00:00 AM;-0.8090169944;0;0.6086956522;0.3553854565
212 | 2/13/2019 8:30:00 AM;-0.5877852523;0;0.5869565217;0.3371605613
213 | 2/13/2019 9:00:00 AM;-0.3090169944;0;0.5652173913;0.2642609805
214 | 2/13/2019 9:30:00 AM;-2.44921270764475E-16;0;0.5434782609;0.2460360853
215 | 2/13/2019 10:00:00 AM;0.3090169944;0;0.5217391304;0.1731365045
216 | 2/13/2019 10:30:00 AM;0.5877852523;0;0.5;0.1275742664
217 | 2/13/2019 11:00:00 AM;0.8090169944;0;0.4782608696;0.2186987425
218 | 2/13/2019 11:30:00 AM;0.9510565163;0;0.4565217391;0.2460360853
219 | 2/13/2019 12:00:00 PM;1;0;0.4347826087;0.3098232185
220 | 2/13/2019 12:30:00 PM;0.9510565163;0;0.4130434783;0.3007107709
221 | 2/13/2019 1:00:00 PM;0.8090169944;0;0.3913043478;0.2915983233
222 | 2/13/2019 1:30:00 PM;0.5877852523;0;0.3695652174;0.2733734281
223 | 2/13/2019 2:00:00 PM;0.3090169944;0;0.347826087;0.3736103517
224 | 2/13/2019 2:30:00 PM;3.67381906146713E-16;0;0.3260869565;0.3371605613
225 | 2/13/2019 3:00:00 PM;-0.3090169944;0;0.3043478261;0.5194095134
226 | 2/13/2019 3:30:00 PM;-0.5877852523;0;0.2826086957;0.528521961
227 | 2/13/2019 4:00:00 PM;-0.8090169944;0;0.2608695652;0.5467468562
228 | 2/13/2019 4:30:00 PM;-0.9510565163;0;0.2391304348;0.3189356661
229 | 2/13/2019 5:00:00 PM;-1;0;0.2173913043;0.3371605613
230 | 2/13/2019 5:30:00 PM;-0.9510565163;0;0.1956521739;0.2460360853
231 | 2/13/2019 6:00:00 PM;-0.8090169944;0;0.1739130435;0.2733734281
232 | 2/13/2019 6:30:00 PM;-0.5877852523;0;0.152173913;0.3462730089
233 | 2/13/2019 7:00:00 PM;-0.3090169944;0;0.1304347826;0.3189356661
234 | 2/13/2019 7:30:00 PM;-4.89842541528951E-16;0;0.1086956522;0.3827227993
235 | 2/13/2019 8:00:00 PM;0.3090169944;0;0.0869565217;0.482959723
236 | 2/13/2019 8:30:00 PM;0.5877852523;0;0.0652173913;0.528521961
237 | 2/13/2019 9:00:00 PM;0.8090169944;0;0.0434782609;0.3098232185
238 | 2/13/2019 9:30:00 PM;0.9510565163;0;0.0217391304;0.2278111901
239 | 2/13/2019 10:00:00 PM;1;1;0;0.2095862949
240 | 2/13/2019 11:30:00 PM;0;0;0.9782608696;0.0363735564
241 | 2/14/2019 12:00:00 AM;0.3090169944;0;0.9565217391;0.0454669455
242 | 2/14/2019 12:30:00 AM;0.5877852523;0;0.9347826087;-0.1273074475
243 | 2/14/2019 1:00:00 AM;0.8090169944;0;0.9130434783;-0.081840502
244 | 2/14/2019 1:30:00 AM;0.9510565163;0;0.8913043478;-0.0090933891
245 | 2/14/2019 2:00:00 AM;1;0;0.8695652174;0
246 | 2/14/2019 2:30:00 AM;0.9510565163;0;0.847826087;0.0090933891
247 | 2/14/2019 3:00:00 AM;0.8090169944;0;0.8260869565;-0.0454669455
248 | 2/14/2019 3:30:00 AM;0.5877852523;0;0.8043478261;0.0454669455
249 | 2/14/2019 4:00:00 AM;0.3090169944;0;0.7826086957;0.2091479494
250 | 2/14/2019 4:30:00 AM;1.22460635382238E-16;0;0.7608695652;0.1091206693
251 | 2/14/2019 5:00:00 AM;-0.3090169944;0;0.7391304348;0.1273074475
252 | 2/14/2019 5:30:00 AM;-0.5877852523;0;0.7173913043;0.1273074475
253 | 2/14/2019 6:00:00 AM;-0.8090169944;0;0.6956521739;0.1545876148
254 | 2/14/2019 6:30:00 AM;-0.9510565163;0;0.6739130435;0.2818950623
255 | 2/14/2019 7:00:00 AM;-1;0;0.652173913;0.2818950623
256 | 2/14/2019 7:30:00 AM;-0.9510565163;0;0.6304347826;0.3546421751
257 | 2/14/2019 8:00:00 AM;-0.8090169944;0;0.6086956522;0.4455760662
258 | 2/14/2019 8:30:00 AM;-0.5877852523;0;0.5869565217;0.3728289534
259 | 2/14/2019 9:00:00 AM;-0.3090169944;0;0.5652173913;0.2909884514
260 | 2/14/2019 9:30:00 AM;-2.44921270764475E-16;0;0.5434782609;0.3637355642
261 | 2/14/2019 10:00:00 AM;0.3090169944;0;0.5217391304;0.254614895
262 | 2/14/2019 10:30:00 AM;0.5877852523;0;0.5;0.2273347277
263 | 2/14/2019 11:00:00 AM;0.8090169944;0;0.4782608696;0.2728016732
264 | 2/14/2019 11:30:00 AM;0.9510565163;0;0.4565217391;0.3273620078
265 | 2/14/2019 12:00:00 PM;1;0;0.4347826087;0.3000818405
266 | 2/14/2019 12:30:00 PM;0.9510565163;0;0.4130434783;0.3364553969
267 | 2/14/2019 1:00:00 PM;0.8090169944;0;0.3913043478;0.3637355642
268 | 2/14/2019 1:30:00 PM;0.5877852523;0;0.3695652174;0.3637355642
269 | 2/14/2019 2:00:00 PM;0.3090169944;0;0.347826087;-0.2637082841
270 | 2/14/2019 2:30:00 PM;3.67381906146713E-16;0;0.3260869565;-0.3637355642
271 | 2/14/2019 3:00:00 PM;-0.3090169944;0;0.3043478261;-0.3637355642
272 | 2/14/2019 3:30:00 PM;-0.5877852523;0;0.2826086957;-0.1636810039
273 | 2/14/2019 4:00:00 PM;-0.8090169944;0;0.2608695652;-0.2728016732
274 | 2/14/2019 4:30:00 PM;-0.9510565163;0;0.2391304348;-0.3546421751
275 | 2/14/2019 5:00:00 PM;-1;0;0.2173913043;-0.1545876148
276 | 2/14/2019 5:30:00 PM;-0.9510565163;0;0.1956521739;0.1454942257
277 | 2/14/2019 6:00:00 PM;-0.8090169944;0;0.1739130435;0.1273074475
278 | 2/14/2019 6:30:00 PM;-0.5877852523;0;0.152173913;0.1182140584
279 | 2/14/2019 7:00:00 PM;-0.3090169944;0;0.1304347826;0.0727471128
280 | 2/14/2019 7:30:00 PM;-4.89842541528951E-16;0;0.1086956522;0.1364008366
281 | 2/14/2019 8:00:00 PM;0.3090169944;0;0.0869565217;0.0181867782
282 | 2/14/2019 8:30:00 PM;0.5877852523;0;0.0652173913;0.0363735564
283 | 2/14/2019 9:00:00 PM;0.8090169944;0;0.0434782609;-0.1364008366
284 | 2/14/2019 9:30:00 PM;0.9510565163;0;0.0217391304;-0.2000545603
285 | 2/14/2019 10:00:00 PM;1;1;0;-0.2909884514
286 | 2/14/2019 11:30:00 PM;0;0;0.9782608696;0.0729594163
287 | 2/15/2019 12:00:00 AM;0.3090169944;0;0.9565217391;0.0638394893
288 | 2/15/2019 12:30:00 AM;0.5877852523;0;0.9347826087;-0.0638394893
289 | 2/15/2019 1:00:00 AM;0.8090169944;0;0.9130434783;-0.1276789786
290 | 2/15/2019 1:30:00 AM;0.9510565163;0;0.8913043478;-0.0455996352
291 | 2/15/2019 2:00:00 AM;1;0;0.8695652174;-0.0820793434
292 | 2/15/2019 2:30:00 AM;0.9510565163;0;0.847826087;-0.218878249
293 | 2/15/2019 3:00:00 AM;0.8090169944;0;0.8260869565;-0.2735978112
294 | 2/15/2019 3:30:00 AM;0.5877852523;0;0.8043478261;-0.2553579571
295 | 2/15/2019 4:00:00 AM;0.3090169944;0;0.7826086957;-0.2462380301
296 | 2/15/2019 4:30:00 AM;1.22460635382238E-16;0;0.7608695652;-0.2462380301
297 | 2/15/2019 5:00:00 AM;-0.3090169944;0;0.7391304348;-0.2827177383
298 | 2/15/2019 5:30:00 AM;-0.5877852523;0;0.7173913043;-0.3465572275
299 | 2/15/2019 6:00:00 AM;-0.8090169944;0;0.6956521739;-0.2918376653
300 | 2/15/2019 6:30:00 AM;-0.9510565163;0;0.6739130435;-0.2918376653
301 | 2/15/2019 7:00:00 AM;-1;0;0.652173913;-0.3191974464
302 | 2/15/2019 7:30:00 AM;-0.9510565163;0;0.6304347826;-0.3647970816
303 | 2/15/2019 8:00:00 AM;-0.8090169944;0;0.6086956522;-0.3921568627
304 | 2/15/2019 8:30:00 AM;-0.5877852523;0;0.5869565217;-0.3100775194
305 | 2/15/2019 9:00:00 AM;-0.3090169944;0;0.5652173913;-0.2553579571
306 | 2/15/2019 9:30:00 AM;-2.44921270764475E-16;0;0.5434782609;-0.1641586867
307 | 2/15/2019 10:00:00 AM;0.3090169944;0;0.5217391304;-0.0455996352
308 | 2/15/2019 10:30:00 AM;0.5877852523;0;0.5;-0.1003191974
309 | 2/15/2019 11:00:00 AM;0.8090169944;0;0.4782608696;0.1367989056
310 | 2/15/2019 11:30:00 AM;0.9510565163;0;0.4565217391;0.2735978112
311 | 2/15/2019 12:00:00 PM;1;0;0.4347826087;0.1367989056
312 | 2/15/2019 12:30:00 PM;0.9510565163;0;0.4130434783;0.1550387597
313 | 2/15/2019 1:00:00 PM;0.8090169944;0;0.3913043478;0.3830369357
314 | 2/15/2019 1:30:00 PM;0.5877852523;0;0.3695652174;0.3647970816
315 | 2/15/2019 2:00:00 PM;0.3090169944;0;0.347826087;0.4924760602
316 | 2/15/2019 2:30:00 PM;3.67381906146713E-16;0;0.3260869565;0.8755129959
317 | 2/15/2019 3:00:00 PM;-0.3090169944;0;0.3043478261;0.9484724122
318 | 2/15/2019 3:30:00 PM;-0.5877852523;0;0.2826086957;1.0305517556
319 | 2/15/2019 4:00:00 PM;-0.8090169944;0;0.2608695652;0.9302325581
320 | 2/15/2019 4:30:00 PM;-0.9510565163;0;0.2391304348;0.9849521204
321 | 2/15/2019 5:00:00 PM;-1;0;0.2173913043;1.0031919745
322 | 2/15/2019 5:30:00 PM;-0.9510565163;0;0.1956521739;1.0123119015
323 | 2/15/2019 6:00:00 PM;-0.8090169944;0;0.1739130435;0.9667122663
324 | 2/15/2019 6:30:00 PM;-0.5877852523;0;0.152173913;0.8481532148
325 | 2/15/2019 7:00:00 PM;-0.3090169944;0;0.1304347826;0.9211126311
326 | 2/15/2019 7:30:00 PM;-4.89842541528951E-16;0;0.1086956522;0.9575923393
327 | 2/15/2019 8:00:00 PM;0.3090169944;0;0.0869565217;1.0852713178
328 | 2/15/2019 8:30:00 PM;0.5877852523;0;0.0652173913;0.9758321933
329 | 2/15/2019 9:00:00 PM;0.8090169944;0;0.0434782609;1.2585499316
330 | 2/15/2019 9:30:00 PM;0.9510565163;0;0.0217391304;1.3041495668
331 | 2/15/2019 10:00:00 PM;1;1;0;1.3315093479
332 | 2/17/2019 11:30:00 PM;0;0;0.9736842105;-0.0180050414
333 | 2/18/2019 12:00:00 AM;0.3090169944;0;0.9473684211;0.0630176449
334 | 2/18/2019 12:30:00 AM;0.5877852523;0;0.9210526316;-0.0630176449
335 | 2/18/2019 1:00:00 AM;0.8090169944;0;0.8947368421;-0.0720201656
336 | 2/18/2019 1:30:00 AM;0.9510565163;0;0.8684210526;-0.0540151242
337 | 2/18/2019 2:00:00 AM;1;0;0.8421052632;0
338 | 2/18/2019 2:30:00 AM;0.9510565163;0;0.8157894737;0.0360100828
339 | 2/18/2019 3:00:00 AM;0.8090169944;0;0.7894736842;0.0450126035
340 | 2/18/2019 3:30:00 AM;0.5877852523;0;0.7631578947;0.0720201656
341 | 2/18/2019 4:00:00 AM;0.3090169944;0;0.7368421053;0.0270075621
342 | 2/18/2019 4:30:00 AM;1.22460635382238E-16;0;0.7105263158;0.0090025207
343 | 2/18/2019 5:00:00 AM;-0.3090169944;0;0.6842105263;0.0180050414
344 | 2/18/2019 5:30:00 AM;-0.5877852523;0;0.6578947368;0.0270075621
345 | 2/18/2019 6:00:00 AM;-0.8090169944;0;0.6315789474;0
346 | 2/18/2019 6:30:00 AM;-0.9510565163;0;0.6052631579;-0.0090025207
347 | 2/18/2019 7:00:00 AM;-1;0;0.5789473684;0.0450126035
348 | 2/18/2019 7:30:00 AM;-0.9510565163;0;0.5526315789;0.0270075621
349 | 2/18/2019 8:00:00 AM;-0.8090169944;0;0.5263157895;0
350 | 2/18/2019 8:30:00 AM;-0.5877852523;0;0.5;-0.0360100828
351 | 2/18/2019 9:00:00 AM;-0.3090169944;0;0.4736842105;-0.0630176449
352 | 2/18/2019 9:30:00 AM;-2.44921270764475E-16;0;0.4473684211;-0.0900252071
353 | 2/18/2019 10:00:00 AM;0.3090169944;0;0.4210526316;-0.1170327692
354 | 2/18/2019 10:30:00 AM;0.5877852523;0;0.3947368421;-0.0540151242
355 | 2/18/2019 11:00:00 AM;0.8090169944;0;0.3684210526;-0.0090025207
356 | 2/18/2019 11:30:00 AM;0.9510565163;0;0.3421052632;-0.0540151242
357 | 2/18/2019 12:00:00 PM;1;0;0.3157894737;-0.0630176449
358 | 2/18/2019 12:30:00 PM;0.9510565163;0;0.2894736842;-0.0270075621
359 | 2/18/2019 1:00:00 PM;0.8090169944;0;0.2631578947;-0.0360100828
360 | 2/18/2019 1:30:00 PM;0.5877852523;0;0.2368421053;-0.0360100828
361 | 2/18/2019 2:00:00 PM;0.3090169944;0;0.2105263158;-0.0360100828
362 | 2/18/2019 2:30:00 PM;3.67381906146713E-16;0;0.1842105263;-0.0180050414
363 | 2/18/2019 3:00:00 PM;-0.3090169944;0;0.1578947368;0.0270075621
364 | 2/18/2019 3:30:00 PM;-0.5877852523;0;0.1315789474;0.0360100828
365 | 2/18/2019 4:00:00 PM;-0.8090169944;0;0.1052631579;-0.0090025207
366 | 2/18/2019 4:30:00 PM;-0.9510565163;0;0.0789473684;-0.0180050414
367 | 2/18/2019 5:00:00 PM;-1;0;0.0526315789;0
368 | 2/18/2019 5:30:00 PM;-0.9510565163;0;0.0263157895;-0.0090025207
369 | 2/18/2019 6:00:00 PM;-0.8090169944;1;0;0.0450126035
370 | 2/18/2019 11:30:00 PM;0;0;0.9782608696;-0.0090009001
371 | 2/19/2019 12:00:00 AM;0.3090169944;0;0.9565217391;-0.0630063006
372 | 2/19/2019 12:30:00 AM;0.5877852523;0;0.9347826087;-0.0270027003
373 | 2/19/2019 1:00:00 AM;0.8090169944;0;0.9130434783;-0.0360036004
374 | 2/19/2019 1:30:00 AM;0.9510565163;0;0.8913043478;-0.0270027003
375 | 2/19/2019 2:00:00 AM;1;0;0.8695652174;0.0360036004
376 | 2/19/2019 2:30:00 AM;0.9510565163;0;0.847826087;-0.0180018002
377 | 2/19/2019 3:00:00 AM;0.8090169944;0;0.8260869565;0.0360036004
378 | 2/19/2019 3:30:00 AM;0.5877852523;0;0.8043478261;0.0090009001
379 | 2/19/2019 4:00:00 AM;0.3090169944;0;0.7826086957;-0.0270027003
380 | 2/19/2019 4:30:00 AM;1.22460635382238E-16;0;0.7608695652;-0.0180018002
381 | 2/19/2019 5:00:00 AM;-0.3090169944;0;0.7391304348;-0.0360036004
382 | 2/19/2019 5:30:00 AM;-0.5877852523;0;0.7173913043;-0.0720072007
383 | 2/19/2019 6:00:00 AM;-0.8090169944;0;0.6956521739;-0.0540054005
384 | 2/19/2019 6:30:00 AM;-0.9510565163;0;0.6739130435;-0.0360036004
385 | 2/19/2019 7:00:00 AM;-1;0;0.652173913;-0.0450045005
386 | 2/19/2019 7:30:00 AM;-0.9510565163;0;0.6304347826;-0.0450045005
387 | 2/19/2019 8:00:00 AM;-0.8090169944;0;0.6086956522;-0.0720072007
388 | 2/19/2019 8:30:00 AM;-0.5877852523;0;0.5869565217;-0.0450045005
389 | 2/19/2019 9:00:00 AM;-0.3090169944;0;0.5652173913;-0.0270027003
390 | 2/19/2019 9:30:00 AM;-2.44921270764475E-16;0;0.5434782609;-0.198019802
391 | 2/19/2019 10:00:00 AM;0.3090169944;0;0.5217391304;-0.1800180018
392 | 2/19/2019 10:30:00 AM;0.5877852523;0;0.5;-0.198019802
393 | 2/19/2019 11:00:00 AM;0.8090169944;0;0.4782608696;-0.1620162016
394 | 2/19/2019 11:30:00 AM;0.9510565163;0;0.4565217391;-0.3330333033
395 | 2/19/2019 12:00:00 PM;1;0;0.4347826087;-0.3420342034
396 | 2/19/2019 12:30:00 PM;0.9510565163;0;0.4130434783;-0.3510351035
397 | 2/19/2019 1:00:00 PM;0.8090169944;0;0.3913043478;-0.2880288029
398 | 2/19/2019 1:30:00 PM;0.5877852523;0;0.3695652174;-0.297029703
399 | 2/19/2019 2:00:00 PM;0.3090169944;0;0.347826087;-0.3240324032
400 | 2/19/2019 2:30:00 PM;3.67381906146713E-16;0;0.3260869565;-0.4140414041
401 | 2/19/2019 3:00:00 PM;-0.3090169944;0;0.3043478261;-0.1080108011
402 | 2/19/2019 3:30:00 PM;-0.5877852523;0;0.2826086957;-0.0270027003
403 | 2/19/2019 4:00:00 PM;-0.8090169944;0;0.2608695652;-0.1530153015
404 | 2/19/2019 4:30:00 PM;-0.9510565163;0;0.2391304348;-0.1080108011
405 | 2/19/2019 5:00:00 PM;-1;0;0.2173913043;0.2250225023
406 | 2/19/2019 5:30:00 PM;-0.9510565163;0;0.1956521739;0.1620162016
407 |
--------------------------------------------------------------------------------