# 读取配置 from config_jingbo import * from lib.tools import * from lib.dataread import * from models.nerulforcastmodels import ex_Model,model_losss,brent_export_pdf from models.lstmmodels import ex_Lstm_M,ex_Lstm from models.grumodels import ex_GRU import glob import torch torch.set_float32_matmul_precision("high") if __name__ == '__main__': signature = BinanceAPI(APPID, SECRET) # 遍历参数训练模型 input_size_list = [14] horizon_list = [7] train_steps_list = [500,1000,1500,2000] k_list = [10,18,25,50,100] end_time_list = ['2024-07-03'] is_debug = False is_fivemodels = False # 是否使用之前保存的最佳的5个模型 delweekenday = True # 组合上面三个参数 for i in range(len(input_size_list)): for h in range(len(horizon_list)): for j in range(len(train_steps_list)): for k in range(len(k_list)): for end_time in end_time_list: input_size = input_size_list[i] horizons = horizon_list[h] train_steps = train_steps_list[j] K = k_list[k] settings = f'{input_size}-{horizon_list[h]}-{train_steps}-{K}-{data_set}-{end_time}-{y}' logger.info(f'当前配置:{settings}') # 获取数据 if is_eta: etadata = EtaReader(signature=signature, classifylisturl = classifylisturl, classifyidlisturl=classifyidlisturl, edbcodedataurl=edbcodedataurl, edbcodelist=edbcodelist ) df = etadata.get_eta_api_data(data_set=data_set,dataset=dataset) # 原始数据,未处理 else: filename = os.path.join(dataset,data_set) logger.info(f'未启用Eta数据,将读取本地数据{filename}') df = pd.read_excel(filename,sheet_name='指标数据') # 数据处理 df = datachuli(df=df,dataset=dataset,end_time=end_time,y=y,delweekenday=delweekenday) if is_timefurture: df = addtimecharacteristics(df=df,dataset=dataset) # 更改预测列名称 df.rename(columns={y:'y'},inplace=True) logger.info(f"开始训练模型...") row,col = df.shape logger.info(f'当前配置:{settings}') # 获取日期时间 计算今天日期 %Y-%m-%d-%H-%M-%S from datetime import datetime now = datetime.now().strftime('%Y-%m-%d-%H-%M-%S') ex_Model(df, horizon=horizon, input_size=input_size, train_steps=train_steps, val_check_steps=val_check_steps, early_stop_patience_steps=early_stop_patience_steps, is_debug=is_debug, dataset=dataset, is_train=is_train, is_fivemodels=is_fivemodels, val_size=val_size, test_size=test_size, settings=settings, now=now ) # 模型评估 model_results3 = model_losss(df,dataset=dataset,horizon=horizon) # 模型报告 reportname = f'{settings}--{now}-预测报告.pdf' # 报告文件名 reportname = reportname.replace(':', '-') # 替换冒号 title = f'{settings}--{now}-预测报告' # 报告标题 brent_export_pdf(dataset=dataset,num_models = 5 if is_fivemodels else 22,time=end_time, reportname=reportname), # 发送邮件 m = SendMail( username=username, passwd=passwd, recv=recv, title=title, content=content, file=max(glob.glob(os.path.join(dataset,reportname)), key=os.path.getctime), ssl=ssl, ) # m.send_mail() # # LSTM 单变量模型 # ex_Lstm(df,input_seq_len=input_size,output_seq_len=horizon,is_debug=is_debug,dataset=dataset) # # lstm 多变量模型 # ex_Lstm_M(df,n_days=input_size,out_days=horizon,is_debug=is_debug,datasetpath=dataset) # # GRU 模型 # # ex_GRU(df) # 发送邮件 # m = SendMail( # username=username, # passwd=passwd, # recv=recv, # title=title, # content=content, # file=max(glob.glob(os.path.join(dataset,'*.pdf')), key=os.path.getctime), # ssl=ssl, # ) # m.send_mail()