init
This commit is contained in:
615
main_model.py
Normal file
615
main_model.py
Normal file
@@ -0,0 +1,615 @@
|
||||
import os
|
||||
import sys
|
||||
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
|
||||
import tensorflow as tf
|
||||
import numpy as np
|
||||
import matplotlib.animation as animation
|
||||
import matplotlib.pyplot as plt
|
||||
import seaborn as sns
|
||||
import pandas as pd
|
||||
from sklearn.preprocessing import MinMaxScaler
|
||||
from datetime import datetime
|
||||
from datetime import timedelta
|
||||
from tqdm import tqdm
|
||||
sns.set()
|
||||
import json
|
||||
tf.compat.v1.random.set_random_seed(1234)
|
||||
from matplotlib import style
|
||||
# import matplotlib.backends.backend_qt5agg
|
||||
# %matplotlib qt
|
||||
style.use('ggplot')
|
||||
import math
|
||||
import yfinance as yf
|
||||
import time
|
||||
from datetime import date, timedelta
|
||||
os.environ["CUDA_VISIBLE_DEVICES"] = "-1"
|
||||
tf.compat.v1.logging.set_verbosity(tf.compat.v1.logging.ERROR)
|
||||
import cProfile
|
||||
import pstats
|
||||
|
||||
# In[34]:
|
||||
|
||||
tf.compat.v1.disable_eager_execution()
|
||||
# INITIAL VARS
|
||||
test_size = 14
|
||||
simulation_size = 1
|
||||
|
||||
# MODEL VARS
|
||||
num_layers = 2
|
||||
size_layer = 128
|
||||
timestamp = 7
|
||||
epoch = 20
|
||||
dropout_rate = 0.8
|
||||
prediction_gap = sys.argv[2]
|
||||
future_day = test_size
|
||||
learning_rate = 0.01
|
||||
graph_loss = []
|
||||
|
||||
# In[35]:
|
||||
# Necessary Dirs
|
||||
# def date_manage(date1,date2=None):
|
||||
# if date2 is None:
|
||||
# date2=date1+timedelta(days=365)
|
||||
# date_col=[]
|
||||
# for n in range(int ((date2 - date1).days)+1):
|
||||
# date_col.append(date1 + timedelta(n))
|
||||
# weekdays = [5,6]
|
||||
# date_result=[]
|
||||
# for dt in date_col:
|
||||
# if dt.weekday() not in weekdays:
|
||||
# dt.strftime("%Y-%m-%d")
|
||||
# return date_result
|
||||
|
||||
|
||||
# In[36]:
|
||||
def loss_animate(ax, i):
|
||||
json_loss = pd.DataFrame(total_loss)
|
||||
ax.plot(i)
|
||||
return ax
|
||||
|
||||
|
||||
def loader(symbol,test_size,date):
|
||||
# dateparse = lambda dates : pd.datetime.strptime(dates,'%Y-%m')
|
||||
# df = pd.read_csv('../dataset/IBMCUT.csv',parse_dates=['Date'], index_col = 'Date', date_parser=dateparse)
|
||||
|
||||
df=yf.Ticker(symbol)
|
||||
# df=df.history(period="1y",interval="1d")
|
||||
# df=df.history(start=date-timedelta(days=365),end=date,interval="1d")
|
||||
df=df.history(start=date-timedelta(days=365*3),end=date,interval="1d")
|
||||
df=df.reset_index(level=0)
|
||||
|
||||
# df=df.drop(columns=['Dividends'], axis=1)
|
||||
df=df.drop(columns=['Stock Splits'], axis=1)
|
||||
|
||||
df['Up'] = df['High'].ewm(span=6,adjust=False).mean() + 2* df['High'].rolling(window=6).std()
|
||||
df['Down']= df['Low'].ewm(span=8,adjust=False).mean() - 2* df['Low'].rolling(window=8).std()
|
||||
|
||||
df=df.dropna()
|
||||
df=df.drop(df.tail(7).index)
|
||||
|
||||
date_ori = pd.to_datetime(df.iloc[:, 0]).tolist()
|
||||
# for i in range(test_size):
|
||||
# #date_ori.append(date_ori[-1] + timedelta(days = 1))
|
||||
# add=1
|
||||
# while ((date_ori[-1]) + timedelta(days = add)).weekday() in [5,6]:
|
||||
# add=add+1
|
||||
# date_ori.append(date_ori[-1] + timedelta(days = add))
|
||||
date_ori = pd.Series(date_ori).dt.strftime(date_format = '%Y-%m-%d').tolist()
|
||||
print(len(df),len(date_ori))
|
||||
return df,date_ori
|
||||
|
||||
def trueloader(symbol,test_size,date):
|
||||
#df2 = pd.read_csv(symbol)
|
||||
#print("LENDF2:",len(df2))
|
||||
|
||||
df2 = yf.Ticker(symbol)
|
||||
# df2 = df2.history(start=date-timedelta(days=365),end=date,interval="1d")
|
||||
df2 = df2.history(start=date-timedelta(days=365*3),end=date,interval="1d")
|
||||
df2 = df2.reset_index(level=0)
|
||||
df2 = df2.drop(columns=['Dividends'], axis=1)
|
||||
df2 = df2.drop(columns=['Stock Splits'], axis=1)
|
||||
df2 = df2.drop(df2.head(7).index)
|
||||
# df2 = df2.drop(df2.tail(test_size).index)
|
||||
|
||||
return df2
|
||||
|
||||
# In[38]:
|
||||
|
||||
def preproc(df):
|
||||
minmax = MinMaxScaler().fit(df.iloc[:,1:9].astype('float32')) # Close, Volume, and all
|
||||
df_log = minmax.transform(df.iloc[:, 1:9].astype('float32')) # Close, Volume, and all
|
||||
df_log = pd.DataFrame(df_log)
|
||||
df_log.head()
|
||||
return df_log,minmax
|
||||
|
||||
|
||||
# In[39]:
|
||||
|
||||
|
||||
class Model:
|
||||
def __init__(
|
||||
self,
|
||||
learning_rate,
|
||||
num_layers,
|
||||
size,
|
||||
size_layer,
|
||||
output_size,
|
||||
forget_bias = 0.1,
|
||||
):
|
||||
def lstm_cell(size_layer):
|
||||
#print("ASDasdasdasd",len(tf.compat.v1.nn.rnn_cell.LSTMCell(size_layer, state_is_tuple = False))
|
||||
return tf.compat.v1.nn.rnn_cell.LSTMCell(size_layer, state_is_tuple = False)
|
||||
|
||||
rnn_cells = tf.compat.v1.nn.rnn_cell.MultiRNNCell(
|
||||
[lstm_cell(size_layer) for _ in range(num_layers)],
|
||||
state_is_tuple = False,
|
||||
)
|
||||
self.X = tf.compat.v1.placeholder(tf.float32, (None, None, size))
|
||||
self.Y = tf.compat.v1.placeholder(tf.float32, (None, output_size))
|
||||
# self.X = tf.keras.Input((None, size),dtype=tf.float32)
|
||||
# self.Y = tf.keras.Input((output_size),dtype=tf.float32)
|
||||
drop = tf.compat.v1.nn.rnn_cell.DropoutWrapper(
|
||||
rnn_cells, output_keep_prob = forget_bias
|
||||
)
|
||||
# print("XXXX:",self.X)
|
||||
# print("XXXX:",self.X.shape)
|
||||
# print("XXXX:",self.Y)
|
||||
# print("XXXX:",self.Y.shape)
|
||||
#print("LOOOASDSDASD")
|
||||
self.hidden_layer = tf.compat.v1.placeholder(
|
||||
tf.float32, (None, num_layers * 2 * size_layer)
|
||||
)
|
||||
self.outputs, self.last_state = tf.compat.v1.nn.dynamic_rnn(
|
||||
drop, self.X, initial_state = self.hidden_layer, dtype = tf.float32
|
||||
)
|
||||
#rint("INIDIA",self.outputs)
|
||||
self.logits = tf.compat.v1.layers.dense(self.outputs[-1], output_size)
|
||||
self.cost = tf.reduce_mean(tf.square(self.Y - self.logits))
|
||||
self.optimizer = tf.compat.v1.train.AdamOptimizer(learning_rate).minimize(
|
||||
self.cost
|
||||
)
|
||||
#print("cost:",self.cost)
|
||||
#print("cost:",self.optimizer)
|
||||
|
||||
def calculate_accuracy(real, predict):
|
||||
real = np.array(real) + 1
|
||||
predict = np.array(predict) + 1
|
||||
percentage = 1 - np.sqrt(np.mean(np.square((real - predict) / real)))
|
||||
return percentage * 100
|
||||
|
||||
def anchor(signal, weight):
|
||||
buffer = []
|
||||
last = signal[0]
|
||||
for i in signal:
|
||||
smoothed_val = last * weight + (1 - weight) * i
|
||||
buffer.append(smoothed_val)
|
||||
last = smoothed_val
|
||||
return buffer
|
||||
|
||||
|
||||
# In[40]:
|
||||
def main_train(df_beta, df_train, df, minmax):
|
||||
|
||||
modelnn = Model(
|
||||
learning_rate, num_layers, df_beta.shape[1], size_layer, df_beta.shape[1], dropout_rate
|
||||
)
|
||||
sess = tf.compat.v1.Session()
|
||||
sess = tf.compat.v1.Session(config=tf.compat.v1.ConfigProto(intra_op_parallelism_threads=64,inter_op_parallelism_threads=64))
|
||||
sess.run(tf.compat.v1.global_variables_initializer())
|
||||
pbar = tqdm(range(500), desc = 'Main train loop')
|
||||
for i in pbar:
|
||||
init_value = np.zeros((1, num_layers * 2 * size_layer))
|
||||
total_loss, total_acc = [], []
|
||||
for k in range(0, df_train.shape[0] - 1, timestamp):
|
||||
index = min(k + timestamp, df_train.shape[0] - 1)
|
||||
batch_x = np.expand_dims(
|
||||
df_train.iloc[k : index, :].values, axis = 0
|
||||
)
|
||||
|
||||
batch_y = df_train.iloc[k + 1 : index + 1, :].values
|
||||
#print("BATCH_X:",batch_x)
|
||||
#print("BATCH_Y:",batch_y)
|
||||
logits, last_state,__,loss = sess.run(
|
||||
[modelnn.logits, modelnn.last_state,modelnn.optimizer, modelnn.cost],
|
||||
feed_dict = {
|
||||
modelnn.X: batch_x,
|
||||
modelnn.Y: batch_y,
|
||||
modelnn.hidden_layer: init_value,
|
||||
},
|
||||
)
|
||||
init_value = last_state
|
||||
total_loss.append(loss)
|
||||
total_acc.append(calculate_accuracy(batch_y[:, 0], logits[:, 0]))
|
||||
# json_loss.to_json("./loss.json")
|
||||
graph_loss.append(np.mean(total_loss))
|
||||
|
||||
np.save(loss_file, np.array(graph_loss))
|
||||
pbar.set_postfix(cost = np.mean(total_loss), min_acc = np.min(total_acc), mean_acc=np.mean(total_acc))
|
||||
|
||||
|
||||
def forecast(df_beta,df_train,df,minmax):
|
||||
# print("DF_BETA:",df_beta)
|
||||
# print("DF_TRAIN:",df_train)
|
||||
# tf.compat.v1.variable_scope("AAA", reuse=True)
|
||||
tf.compat.v1.reset_default_graph()
|
||||
modelnn = Model(
|
||||
learning_rate, num_layers, df_beta.shape[1], size_layer, df_beta.shape[1], dropout_rate
|
||||
)
|
||||
# print("MODELX: ",modelnn.X)
|
||||
# print("MODELY: ",modelnn.Y)
|
||||
# print("MODELLayer: ",modelnn.hidden_layer)
|
||||
sess = tf.compat.v1.Session()
|
||||
sess = tf.compat.v1.Session(config=tf.compat.v1.ConfigProto(intra_op_parallelism_threads=64,inter_op_parallelism_threads=64))
|
||||
sess.run(tf.compat.v1.global_variables_initializer())
|
||||
date_ori = pd.to_datetime(df.iloc[:, 0]).tolist()
|
||||
# print("INI___!:",df_train.shape[0] - 1, timestamp)
|
||||
# print(df_train.shape[0])
|
||||
pbar = tqdm(range(epoch), desc = 'train loop')
|
||||
for i in pbar:
|
||||
# init_value = np.zeros((1, num_layers * 2 * size_layer))
|
||||
total_loss, total_acc = [], []
|
||||
for k in range(0, df_train.shape[0] - 1, timestamp):
|
||||
init_value = np.zeros((1, num_layers * 2 * size_layer))
|
||||
index = min(k + timestamp, df_train.shape[0] - 1)
|
||||
batch_x = np.expand_dims(
|
||||
df_train.iloc[k : index, :].values, axis = 0
|
||||
)
|
||||
|
||||
batch_y = df_train.iloc[k + 1 : index + 1, :].values
|
||||
#print("BATCH_X:",batch_x)
|
||||
#print("BATCH_Y:",batch_y)
|
||||
logits, last_state,__,loss = sess.run(
|
||||
[modelnn.logits, modelnn.last_state,modelnn.optimizer, modelnn.cost],
|
||||
feed_dict = {
|
||||
modelnn.X: batch_x,
|
||||
modelnn.Y: batch_y,
|
||||
modelnn.hidden_layer: init_value,
|
||||
},
|
||||
)
|
||||
#print("BATCHX:",batch_x)
|
||||
# print("MODELX: ",modelnn.X)
|
||||
# print("MODELY: ",modelnn.Y)
|
||||
# print("MODELLayer: ",modelnn.hidden_layer)
|
||||
#print("OUTSSS:",len(outs))
|
||||
#print("opt:",opt)
|
||||
#print("outs1",batch_x[0])
|
||||
#print("outs2",outs[1])
|
||||
#print("outs3",outs[2])
|
||||
#print("outs4",outs[3])
|
||||
#input()
|
||||
init_value = last_state
|
||||
total_loss.append(loss)
|
||||
#print("LOGITS:",logits[:, 0])
|
||||
total_acc.append(calculate_accuracy(batch_y[:, 0], logits[:, 0]))
|
||||
# json_loss.to_json("./loss.json")
|
||||
graph_loss.append(np.mean(total_loss))
|
||||
|
||||
np.save(loss_file, np.array(graph_loss))
|
||||
pbar.set_postfix(cost = np.mean(total_loss), min_acc = np.min(total_acc), mean_acc=np.mean(total_acc))
|
||||
future_day = test_size
|
||||
|
||||
output_predict = np.zeros((df_train.shape[0] + future_day, df_train.shape[1]))
|
||||
output_predict[0] = df_train.iloc[0]
|
||||
upper_b = (df_train.shape[0] // timestamp) * timestamp
|
||||
init_value = np.zeros((1, num_layers * 2 * size_layer))
|
||||
|
||||
for k in range(0, (df_train.shape[0] // timestamp) * timestamp, timestamp):
|
||||
out_logits, last_state = sess.run(
|
||||
[modelnn.logits, modelnn.last_state],
|
||||
feed_dict = {
|
||||
modelnn.X: np.expand_dims(
|
||||
df_train.iloc[k : k + timestamp], axis = 0
|
||||
),
|
||||
modelnn.hidden_layer: init_value,
|
||||
},
|
||||
)
|
||||
init_value = last_state
|
||||
output_predict[k + 1 : k + timestamp + 1] = out_logits
|
||||
|
||||
if upper_b != df_train.shape[0]:
|
||||
out_logits, last_state = sess.run(
|
||||
[modelnn.logits, modelnn.last_state],
|
||||
feed_dict = {
|
||||
modelnn.X: np.expand_dims(df_train.iloc[upper_b:], axis = 0),
|
||||
modelnn.hidden_layer: init_value,
|
||||
},
|
||||
)
|
||||
output_predict[upper_b + 1 : df_train.shape[0] + 1] = out_logits
|
||||
future_day -= 1
|
||||
date_ori.append(date_ori[-1] + timedelta(days = 1))
|
||||
|
||||
init_value = last_state
|
||||
|
||||
for i in range(future_day):
|
||||
o = output_predict[-future_day - timestamp + i:-future_day + i]
|
||||
out_logits, last_state = sess.run(
|
||||
[modelnn.logits, modelnn.last_state],
|
||||
feed_dict = {
|
||||
modelnn.X: np.expand_dims(o, axis = 0),
|
||||
modelnn.hidden_layer: init_value,
|
||||
},
|
||||
)
|
||||
init_value = last_state
|
||||
output_predict[-future_day + i] = out_logits[-1]
|
||||
date_ori.append(date_ori[-1] + timedelta(days = 1))
|
||||
|
||||
output_predict = minmax.inverse_transform(output_predict)
|
||||
deep_future = anchor(output_predict[:, 0], 0.3)
|
||||
sess.close()
|
||||
sess.__del__()
|
||||
return deep_future
|
||||
|
||||
|
||||
# In[41]:
|
||||
|
||||
|
||||
def newaccuration(accepted_results,truetrend):
|
||||
hasilutama=0
|
||||
indexbagus=0
|
||||
truest=0
|
||||
predictest=0
|
||||
for i,x in enumerate(accepted_results):
|
||||
a=x[-(test_size+2):]
|
||||
|
||||
#a=x[:((test_size+2)/2)]
|
||||
print("a",a)
|
||||
b=truetrend[-(test_size+1):]
|
||||
#print("b",b)
|
||||
hasil=0
|
||||
true=[]
|
||||
predict=[]
|
||||
for xy in range(1,len((a))):
|
||||
if a[xy]<a[xy-1]:
|
||||
predict.append("Down")
|
||||
else:
|
||||
predict.append("Up")
|
||||
if b[xy]<b[xy-1]:
|
||||
|
||||
true.append("Down")
|
||||
else:
|
||||
true.append("Up")
|
||||
|
||||
print(true)
|
||||
print(predict)
|
||||
for xz in range(len(true)):
|
||||
if true[xz]==predict[xz]:
|
||||
hasil=hasil+1
|
||||
if hasil > hasilutama:
|
||||
hasilutama=hasil
|
||||
indexbagus=i
|
||||
truest=true
|
||||
predictest=predict
|
||||
salah=[]
|
||||
for xz in range(len(truest)):
|
||||
if truest[xz]!=predictest[xz]:
|
||||
salah.append(xz)
|
||||
#if xz!=0:
|
||||
#salah.append(xz-1)
|
||||
#print("INI:",b)
|
||||
print("TRUEST",truest)
|
||||
print("predictest",predictest)
|
||||
return hasilutama,indexbagus,salah
|
||||
|
||||
# In[42]:
|
||||
|
||||
|
||||
def betaforecast(simulationsize,dfx,dftrain,df,df2,minmax):
|
||||
results = []
|
||||
for i in range(simulationsize):
|
||||
forecast_res = forecast(df,dftrain,dfx,minmax)
|
||||
results.append(forecast_res)
|
||||
accepted_results = []
|
||||
|
||||
while not (np.array(results[0][-test_size:]) < np.min(dfx['Close'])).sum() == 0 and (np.array(results[0][-test_size:]) > np.max(dfx['Close']) * 2).sum() == 0:
|
||||
print("++++++++++++++++++++++++")
|
||||
print("Forecast Recalled...")
|
||||
results[0]=forecast(df,dftrain,dfx,minmax)
|
||||
return results[0]
|
||||
|
||||
|
||||
# In[43]:
|
||||
|
||||
|
||||
def interval(p1,p2):
|
||||
return abs((p1) - (p2))
|
||||
|
||||
|
||||
# In[44]:
|
||||
|
||||
|
||||
def checkaccuracy2(true):
|
||||
avg=[]
|
||||
for x in range(len(true)-7):
|
||||
avg.append(interval(true[x],true[x+1]))
|
||||
average=sum(avg) / len(avg)
|
||||
return average
|
||||
|
||||
|
||||
|
||||
# In[45]:
|
||||
|
||||
|
||||
def checkaccuracy(predict,true,filterx, test_size):
|
||||
print("True Length: ",len(true))
|
||||
print("Predict Length: ",len(predict))
|
||||
|
||||
# avg=[]
|
||||
|
||||
# for x in range(len(true)-5):
|
||||
# avg.append(interval(true[x],predict[x]))
|
||||
# average=sum(avg) / len(avg)
|
||||
# print("AVG1:",average)
|
||||
# print("AVG2:",threshold)
|
||||
|
||||
temp_predict=predict[-test_size:]
|
||||
temp_true=true[-test_size:]
|
||||
|
||||
# avg2=interval(max(predict),min(predict))
|
||||
count=0
|
||||
print("------------------------------------")
|
||||
for x in range(test_size):
|
||||
# acc_var1 = temp_true[x]-(1/filterx*temp_true[x])
|
||||
acc_var1 = temp_true[x]-(filterx/10)
|
||||
acc_var2 = temp_predict[x]
|
||||
# acc_var3 = temp_true[x]+(1/filterx*temp_true[x])
|
||||
acc_var3 = temp_true[x]+(filterx/10)
|
||||
acc_condition = acc_var1 <= acc_var2 <= acc_var3
|
||||
# print("Var 1 : ",acc_var1)
|
||||
# print("Var 2 : ",acc_var2)
|
||||
# print("Var 3 : ",acc_var3)
|
||||
# print("Day "+str(x+1)+" "+str(int(acc_var1))+" "+str(int(acc_var2))+" "+str(int(acc_var3))+" : ",acc_condition)
|
||||
print("Day "+str(x+1)+", Price : "+str(int(temp_true[x]))+" ,Gap = "+str(int(abs(temp_predict[x]-temp_true[x])))+" : ",acc_condition)
|
||||
if (acc_condition):
|
||||
count=count+1
|
||||
print("------------------------------------")
|
||||
if count>7:
|
||||
print("Result True")
|
||||
return True
|
||||
else:
|
||||
print("Result False")
|
||||
return False
|
||||
|
||||
# if average>threshold:
|
||||
# return False
|
||||
# else:
|
||||
# return True
|
||||
|
||||
|
||||
# In[46]:
|
||||
|
||||
|
||||
def findthreshold(simulationsize,dfx,dftrain,df,df2,minmax):
|
||||
results=[]
|
||||
for i in range(simulationsize):
|
||||
results.append(forecast(df,dftrain,dfx,minmax))
|
||||
accepted_results = []
|
||||
|
||||
for r in results:
|
||||
|
||||
if (np.array(r[-test_size:]) < np.min(dfx['Close'])).sum() == 0 and (np.array(r[-test_size:]) > np.max(dfx['Close']) * 2).sum() == 0:
|
||||
accepted_results.append(r)
|
||||
|
||||
finalavg=999999
|
||||
for o in accepted_results:
|
||||
avg=[]
|
||||
for x in range(len(o)-5):
|
||||
avg.append(interval(o[x],df2[x]))
|
||||
average=sum(avg) / len(avg)
|
||||
if average<=finalavg:
|
||||
finalavg=average
|
||||
|
||||
return finalavg
|
||||
|
||||
def temp_data(date, xi, resultfinal, df2, date_col,x):
|
||||
print("Called . . . ")
|
||||
if os.path.isdir("TempData/") == False:
|
||||
os.mkdir("TempData/")
|
||||
if os.path.isdir("TempData/%s"%x) == False:
|
||||
os.mkdir("TempData/%s"%x)
|
||||
if os.path.isdir("TempData/%s/"%x+str(date)) == False:
|
||||
os.mkdir("TempData/%s/"%x+str(date))
|
||||
with open("TempData/%s/"%x+str(date)+"/"+x+str(xi)+".vezpal2","w+") as oop:
|
||||
main=[]
|
||||
main.append(resultfinal) #prediction
|
||||
main.append(list(df2['Close']))
|
||||
main.append(date_col)
|
||||
# main.append(3)
|
||||
# main.append([0])
|
||||
json.dump(main,oop)
|
||||
|
||||
def automaton(simulationsize,date):
|
||||
|
||||
# symbols=["AAPL"]
|
||||
# symbols = sys.argv[1:]
|
||||
symbols = []
|
||||
symbols.append(sys.argv[1])
|
||||
times=[]
|
||||
for x in symbols:
|
||||
temp_time=[]
|
||||
temp_time.append(x)
|
||||
counter=0
|
||||
validity=0
|
||||
df,date_col=loader(x,test_size,date)
|
||||
#print(type(df))
|
||||
dfx=df
|
||||
#print("ASDSAD")
|
||||
df2=trueloader(x,test_size,date)
|
||||
df,minmax=preproc(df)
|
||||
dftrain=df
|
||||
wrong=[1,2,3,4,5]
|
||||
#avg=checkaccuracy2(list(df2["Close"]))
|
||||
#start=time.time()
|
||||
#avg=findthreshold(50,dfx,dftrain,df,list(df2["Close"]),minmax)
|
||||
#temp_time.append(time.time()-start)
|
||||
start=time.time()
|
||||
filterx = int(prediction_gap)
|
||||
able=False
|
||||
print("============== || Initial Train || =============")
|
||||
main_train(df,dftrain,dfx,minmax)
|
||||
for xi in range(5):
|
||||
decision=False
|
||||
while (decision==False):
|
||||
print()
|
||||
print("====== [ Foreacasting Attempt : "+str(counter+1)+" ] ===========")
|
||||
print("====== [ Progress : "+str(xi)+"/5 ] ")
|
||||
resultfinal=betaforecast(simulationsize,dfx,dftrain,df,df2,minmax)
|
||||
#validity=valid
|
||||
decision=checkaccuracy(resultfinal,list(df2["Close"]),filterx, test_size)
|
||||
#wrong=invalid
|
||||
if decision==True:
|
||||
able=True
|
||||
print("ABLE")
|
||||
print(str(filterx))
|
||||
if counter > 100 and decision != True:
|
||||
counter = 0
|
||||
filterx=filterx+1
|
||||
print("Filter X reduced to : "+str(filterx))
|
||||
print("Decision Status : ", decision)
|
||||
print("**************************************")
|
||||
# avg=avg+(1/3*avg)
|
||||
if filterx>1000:
|
||||
print("====== [ GG, we gave up] =====")
|
||||
continue
|
||||
counter=counter+1
|
||||
temp_data(date, xi, resultfinal, df2, date_col, x)
|
||||
print("[ Loop : "+x+" done ] =========================")
|
||||
print()
|
||||
|
||||
if os.path.isdir("Samples/") == False:
|
||||
os.mkdir("Samples/")
|
||||
if os.path.isdir("Samples/%s"%x) == False:
|
||||
os.mkdir("Samples/%s"%x)
|
||||
if os.path.isdir("Samples/%s/"%x+str(date)) == False:
|
||||
os.mkdir("Samples/%s/"%x+str(date))
|
||||
with open("Samples/%s/"%x+str(date)+"/"+x+str(xi)+".vezpal2","w+") as oop:
|
||||
main=[]
|
||||
main.append(resultfinal) #prediction
|
||||
main.append(list(df2['Close']))
|
||||
main.append(date_col)
|
||||
# main.append(3)
|
||||
# main.append([0])
|
||||
json.dump(main,oop)
|
||||
print("Time for %s :"%x,time.time()-start)
|
||||
temp_time.append(time.time()-start)
|
||||
times.append(temp_time)
|
||||
return times
|
||||
|
||||
|
||||
|
||||
|
||||
current_date=date.today()
|
||||
if os.path.isdir("Loss/") == False:
|
||||
os.mkdir("Loss/")
|
||||
if os.path.isdir("Loss/"+str(current_date)) == False:
|
||||
os.mkdir("Loss/"+str(current_date))
|
||||
|
||||
loss_file = time.strftime("%Y%m%d-%H%M%S")
|
||||
loss_file = "Loss/"+str(date.today())+"/"+loss_file
|
||||
global_start = time.time()
|
||||
profile = cProfile.Profile()
|
||||
main_func = "automaton(simulation_size,current_date)"
|
||||
|
||||
ps = pstats.Stats(profile.run(main_func))
|
||||
print("Overall time consumption ", str(time.time()-global_start))
|
||||
ps.dump_stats("./Cprofile_model_01.ps")
|
||||
|
||||
Reference in New Issue
Block a user