问答交流

【代码报错】关于滚动训练报错这件事

由pupil_space2021创建,最终由small_q 被浏览 19 用户

问题

策略的报错{w:100}{w:100}{w:100}我的滚动训练报错了 不知道怎么修 看代码似乎调用了一个叫做cached的模块

报错2:

{w:100}{w:100}{w:100}如何修改滚动训练代码?

评论
  • 你参数错了 小于号不能用
  • 噢噢 蟹蟹
  • 噢噢 蟹蟹
  • 噢噢 蟹蟹
  • ```python 请问是哪里错了呢?我的代码是: def m22_run_bigquant_run( bq_graph, inputs, trading_days_market='CN', # 使用那个市场的交易日历, TODO train_instruments_mid='m1', # 训练数据 证券代码列表 模块id test_instruments_mid='m9', # 测试数据 证券代码列表 模块id predict_mid='m8', # 预测 模块id trade_mid='m12', # 回测 模块id start_date='2014-01-01', # 数据开始日期 end_date=T.live_run_param('trading_date', '2022-01-01'), # 数据结束日期 train_update_days=22, # 更新周期,按交易日计算,每多少天更新一次 train_update_days_for_live=None, #模拟实盘模式下的更新周期,按交易日计算,每多少天更新一次。如果需要在模拟实盘阶段使用不同的模型更新周期,可以设置这个参数 train_data_min_days=250, # 最小数据天数,按交易日计算,所以第一个滚动的结束日期是 从开始日期到开始日期+最小数据天数 train_data_max_days=250, # 最大数据天数,按交易日计算,0,表示没有限制,否则每一个滚动的开始日期=max(此滚动的结束日期-最大数据天数, 开始日期 rolling_count_for_live=2, #实盘模式下滚动次数,模拟实盘模式下,取最后多少次滚动。一般在模拟实盘模式下,只用到最后一次滚动训练的模型,这里可以设置为1;如果你的滚动训练数据时间段很短,以至于期间可能没有训练数据,这里可以设置大一点。0表示没有限制 ): def merge_datasources(input_1): df_list = [ds[0].read_df().set_index('date').loc[ds[1]:].reset_index() for ds in input_1] df = pd.concat(df_list) instrument_data = { 'start_date': df['date'].min().strftime('%Y-%m-%d'), 'end_date': df['date'].max().strftime('%Y-%m-%d'), 'instruments': list(set(df['instrument'])), } return Outputs(data=DataSource.write_df(df), instrument_data=DataSource.write_pickle(instrument_data)) def gen_rolling_dates(trading_days_market, start_date, end_date, train_update_days, train_update_days_for_live, train_data_min_days, train_data_max_days, rolling_count_for_live): # 是否实盘模式 tdays = list(D.trading_days(market=trading_days_market, start_date=start_date, end_date=end_date)['date']) is_live_run = T.live_run_param('trading_date', None) is not None if is_live_run and train_update_days_for_live: train_update_days = train_update_days_for_live rollings = [] train_end_date = train_data_min_days while train_end_date < len(tdays): if train_data_max_days is not None and train_data_max_days > 0: train_start_date = max(train_end_date - train_data_max_days, 0) else: train_start_date = 0 rollings.append({ 'train_start_date': tdays[train_start_date].strftime('%Y-%m-%d'), 'train_end_date': tdays[train_end_date - 1].strftime('%Y-%m-%d'), 'test_start_date': tdays[train_end_date].strftime('%Y-%m-%d'), 'test_end_date': tdays[min(train_end_date + train_update_days, len(tdays)) - 1].strftime('%Y-%m-%d'), }) train_end_date += train_update_days if not rollings: raise Exception('没有滚动需要执行,请检查配置') if is_live_run and rolling_count_for_live: rollings = rollings[-rolling_count_for_live:] return rollings g = bq_graph rolling_dates = gen_rolling_dates( trading_days_market, start_date, end_date, train_update_days, train_update_days_for_live, train_data_min_days, train_data_max_days, rolling_count_for_live) # 训练和预测 results = [] for rolling in rolling_dates: parameters = {} # 先禁用回测 parameters[trade_mid + '.__enabled__'] = False parameters[train_instruments_mid + '.start_date'] = rolling['train_start_date'] parameters[train_instruments_mid + '.end_date'] = rolling['train_end_date'] parameters[test_instruments_mid + '.start_date'] = rolling['test_start_date'] parameters[test_instruments_mid + '.end_date'] = rolling['test_end_date'] # print('------ rolling_train:', parameters) results.append(g.run(parameters)) # 合并预测结果并回测 mx = M.cached.v3(run=merge_datasources, input_1=[[result[predict_mid].predictions, result[test_instruments_mid].data.read_pickle()['start_date']] for result in results]) parameters = {} parameters['*.__enabled__'] = False parameters[trade_mid + '.__enabled__'] = True parameters[trade_mid + '.instruments'] = mx.instrument_data parameters[trade_mid + '.options_data'] = mx.data trade = g.run(parameters) return {'rollings': results, 'trade': trade} m22 = M.hyper_rolling_train.v1( run=m22_run_bigquant_run, run_now=True, bq_graph=g ) ``` \
{link}