├── 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 | ![Output:](info/CL60D_train.PNG) 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 | ![Output:](info/CL60D_evaluate.PNG) 35 | 36 | ![Zoomed Output:](info/CL60D_evaluate_zoomed.PNG) 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 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 |
UTC0Input0134_076_0125_0 (Info_to_ignore: TickSize: 0.01 PointValue: 1000)
02019-01-04 11:00:0048.690.47826171.5774112.311410
12019-01-04 12:00:0048.880.43478373.8896572.710653
22019-01-04 13:00:0048.630.39130466.2523092.185333
32019-01-04 13:47:0048.790.35724668.4966092.521538
42019-01-04 14:29:0048.830.32681269.0507392.605589
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 | ![png](output_13_0.png) 184 | 185 | 186 | 187 | ```python 188 | plt.plot(scaledFeatures[:200]) # part 189 | plt.show() 190 | ``` 191 | 192 | 193 | ![png](output_14_0.png) 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 | --------------------------------------------------------------------------------