复制链接
克隆策略

    {"description":"实验创建于2017/8/26","graph":{"edges":[{"to_node_id":"-174:input_model","from_node_id":"-169:data"},{"to_node_id":"-189:trained_model","from_node_id":"-174:data"},{"to_node_id":"-214:input_1","from_node_id":"-189:data"},{"to_node_id":"-216:features","from_node_id":"-195:data"},{"to_node_id":"-223:features","from_node_id":"-195:data"},{"to_node_id":"-9248:features","from_node_id":"-195:data"},{"to_node_id":"-9255:features","from_node_id":"-195:data"},{"to_node_id":"-216:instruments","from_node_id":"-199:data"},{"to_node_id":"-289:instruments","from_node_id":"-199:data"},{"to_node_id":"-9248:instruments","from_node_id":"-207:data"},{"to_node_id":"-281:instruments","from_node_id":"-207:data"},{"to_node_id":"-223:input_data","from_node_id":"-216:data"},{"to_node_id":"-241:data2","from_node_id":"-223:data"},{"to_node_id":"-3665:input_data","from_node_id":"-241:data"},{"to_node_id":"-241:data1","from_node_id":"-289:data"},{"to_node_id":"-5712:input_data","from_node_id":"-3665:data"},{"to_node_id":"-438:input_1","from_node_id":"-5712:data"},{"to_node_id":"-436:input_2","from_node_id":"-6710:data"},{"to_node_id":"-9255:input_data","from_node_id":"-9248:data"},{"to_node_id":"-9264:input_data","from_node_id":"-9255:data"},{"to_node_id":"-9626:input_1","from_node_id":"-9264:data"},{"to_node_id":"-9274:input_data","from_node_id":"-9270:data"},{"to_node_id":"-214:input_3","from_node_id":"-9270:data"},{"to_node_id":"-189:input_data","from_node_id":"-9274:data"},{"to_node_id":"-214:input_2","from_node_id":"-9274:data"},{"to_node_id":"-281:options_data","from_node_id":"-214:data_1"},{"to_node_id":"-6710:features","from_node_id":"-9319:data"},{"to_node_id":"-9274:features","from_node_id":"-9319:data"},{"to_node_id":"-438:input_2","from_node_id":"-9319:data"},{"to_node_id":"-9626:input_2","from_node_id":"-9319:data"},{"to_node_id":"-174:training_data","from_node_id":"-436:data_1"},{"to_node_id":"-174:validation_data","from_node_id":"-436:data_2"},{"to_node_id":"-6710:input_data","from_node_id":"-438:data"},{"to_node_id":"-9270:input_data","from_node_id":"-9626:data"},{"to_node_id":"-403:inputs","from_node_id":"-210:data"},{"to_node_id":"-169:inputs","from_node_id":"-210:data"},{"to_node_id":"-14834:inputs","from_node_id":"-218:data"},{"to_node_id":"-169:outputs","from_node_id":"-259:data"},{"to_node_id":"-14841:inputs","from_node_id":"-14806:data"},{"to_node_id":"-14806:inputs","from_node_id":"-14834:data"},{"to_node_id":"-259:inputs","from_node_id":"-14841:data"},{"to_node_id":"-408:inputs","from_node_id":"-403:data"},{"to_node_id":"-446:inputs","from_node_id":"-408:data"},{"to_node_id":"-218:inputs","from_node_id":"-446:data"}],"nodes":[{"node_id":"-169","module_id":"BigQuantSpace.dl_model_init.dl_model_init-v1","parameters":[],"input_ports":[{"name":"inputs","node_id":"-169"},{"name":"outputs","node_id":"-169"}],"output_ports":[{"name":"data","node_id":"-169"}],"cacheable":false,"seq_num":8,"comment":"","comment_collapsed":true},{"node_id":"-174","module_id":"BigQuantSpace.dl_model_train.dl_model_train-v1","parameters":[{"name":"optimizer","value":"Adam","type":"Literal","bound_global_parameter":null},{"name":"user_optimizer","value":"","type":"Literal","bound_global_parameter":null},{"name":"loss","value":"binary_crossentropy","type":"Literal","bound_global_parameter":null},{"name":"user_loss","value":"","type":"Literal","bound_global_parameter":null},{"name":"metrics","value":"accuracy","type":"Literal","bound_global_parameter":null},{"name":"batch_size","value":"2048","type":"Literal","bound_global_parameter":null},{"name":"epochs","value":"10","type":"Literal","bound_global_parameter":null},{"name":"earlystop","value":"","type":"Literal","bound_global_parameter":null},{"name":"custom_objects","value":"# 用户的自定义层需要写到字典中,比如\n# {\n# \"MyLayer\": MyLayer\n# }\nbigquant_run = {\n \n}\n","type":"Literal","bound_global_parameter":null},{"name":"n_gpus","value":0,"type":"Literal","bound_global_parameter":null},{"name":"verbose","value":"2:每个epoch输出一行记录","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"input_model","node_id":"-174"},{"name":"training_data","node_id":"-174"},{"name":"validation_data","node_id":"-174"}],"output_ports":[{"name":"data","node_id":"-174"}],"cacheable":true,"seq_num":9,"comment":"","comment_collapsed":true},{"node_id":"-189","module_id":"BigQuantSpace.dl_model_predict.dl_model_predict-v1","parameters":[{"name":"batch_size","value":"10240","type":"Literal","bound_global_parameter":null},{"name":"n_gpus","value":0,"type":"Literal","bound_global_parameter":null},{"name":"verbose","value":"2:每个epoch输出一行记录","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"trained_model","node_id":"-189"},{"name":"input_data","node_id":"-189"}],"output_ports":[{"name":"data","node_id":"-189"}],"cacheable":true,"seq_num":10,"comment":"","comment_collapsed":true},{"node_id":"-195","module_id":"BigQuantSpace.input_features.input_features-v1","parameters":[{"name":"features","value":"# #号开始的表示注释,注释需单独一行\n# 多个特征,每行一个,可以包含基础特征和衍生特征,特征须为本平台特征\nconssts=list_days_0>365 #上市天数>365天\ncondssqs=ta_ema_5_0>ta_ema_20_0 #上升趋势的票\ncondhsl=avg_turn_10>0.05 #近10天平均换手率\ncondztcs=sum(price_limit_status_0==3,10)>1 #70:统计80天内 涨停板的次数大于5\n\nta_bias(close_0, 5) #5日乖离率\nclose_0/close_5 #5日收益率\nreturn_20 #20日收益率\navg_turn_10#46:平均10天的换手率\npe_ttm_0\n","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"features_ds","node_id":"-195"}],"output_ports":[{"name":"data","node_id":"-195"}],"cacheable":true,"seq_num":11,"comment":"","comment_collapsed":true},{"node_id":"-199","module_id":"BigQuantSpace.instruments.instruments-v2","parameters":[{"name":"start_date","value":"2019-12-01","type":"Literal","bound_global_parameter":null},{"name":"end_date","value":"2020-01-02","type":"Literal","bound_global_parameter":null},{"name":"market","value":"CN_STOCK_A","type":"Literal","bound_global_parameter":null},{"name":"instrument_list","value":"","type":"Literal","bound_global_parameter":null},{"name":"max_count","value":0,"type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"rolling_conf","node_id":"-199"}],"output_ports":[{"name":"data","node_id":"-199"}],"cacheable":true,"seq_num":12,"comment":"","comment_collapsed":true},{"node_id":"-207","module_id":"BigQuantSpace.instruments.instruments-v2","parameters":[{"name":"start_date","value":"2020-01-03","type":"Literal","bound_global_parameter":null},{"name":"end_date","value":"2020-01-4","type":"Literal","bound_global_parameter":null},{"name":"market","value":"CN_STOCK_A","type":"Literal","bound_global_parameter":null},{"name":"instrument_list","value":"","type":"Literal","bound_global_parameter":null},{"name":"max_count","value":0,"type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"rolling_conf","node_id":"-207"}],"output_ports":[{"name":"data","node_id":"-207"}],"cacheable":true,"seq_num":13,"comment":"","comment_collapsed":true},{"node_id":"-216","module_id":"BigQuantSpace.general_feature_extractor.general_feature_extractor-v7","parameters":[{"name":"start_date","value":"","type":"Literal","bound_global_parameter":null},{"name":"end_date","value":"","type":"Literal","bound_global_parameter":null},{"name":"before_start_days","value":90,"type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"instruments","node_id":"-216"},{"name":"features","node_id":"-216"}],"output_ports":[{"name":"data","node_id":"-216"}],"cacheable":true,"seq_num":14,"comment":"","comment_collapsed":true},{"node_id":"-223","module_id":"BigQuantSpace.derived_feature_extractor.derived_feature_extractor-v3","parameters":[{"name":"date_col","value":"date","type":"Literal","bound_global_parameter":null},{"name":"instrument_col","value":"instrument","type":"Literal","bound_global_parameter":null},{"name":"drop_na","value":"False","type":"Literal","bound_global_parameter":null},{"name":"remove_extra_columns","value":"False","type":"Literal","bound_global_parameter":null},{"name":"user_functions","value":"{}","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"input_data","node_id":"-223"},{"name":"features","node_id":"-223"}],"output_ports":[{"name":"data","node_id":"-223"}],"cacheable":true,"seq_num":15,"comment":"","comment_collapsed":true},{"node_id":"-241","module_id":"BigQuantSpace.join.join-v3","parameters":[{"name":"on","value":"date,instrument","type":"Literal","bound_global_parameter":null},{"name":"how","value":"inner","type":"Literal","bound_global_parameter":null},{"name":"sort","value":"False","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"data1","node_id":"-241"},{"name":"data2","node_id":"-241"}],"output_ports":[{"name":"data","node_id":"-241"}],"cacheable":true,"seq_num":17,"comment":"","comment_collapsed":true},{"node_id":"-289","module_id":"BigQuantSpace.advanced_auto_labeler.advanced_auto_labeler-v2","parameters":[{"name":"label_expr","value":"# #号开始的表示注释\n# 0. 每行一个,顺序执行,从第二个开始,可以使用label字段\n# 1. 可用数据字段见 https://bigquant.com/docs/data_history_data.html\n# 添加benchmark_前缀,可使用对应的benchmark数据\n# 2. 可用操作符和函数见 `表达式引擎 <https://bigquant.com/docs/big_expr.html>`_\n\n# 计算收益:2日收盘价(作为卖出价格)除以明日开盘价(作为买入价格)\nshift(close, -2) / shift(open, -1)-1\n\n# 极值处理:用1%和99%分位的值做clip\nclip(label, all_quantile(label, 0.01), all_quantile(label, 0.99))\n\nall_wbins(label, 20)\n\n# 过滤掉一字涨停的情况 (设置label为NaN,在后续处理和训练中会忽略NaN的label)\nwhere(shift(high, -1) == shift(low, -1), NaN, label)","type":"Literal","bound_global_parameter":null},{"name":"start_date","value":"","type":"Literal","bound_global_parameter":null},{"name":"end_date","value":"","type":"Literal","bound_global_parameter":null},{"name":"benchmark","value":"000300.SHA","type":"Literal","bound_global_parameter":null},{"name":"drop_na_label","value":"True","type":"Literal","bound_global_parameter":null},{"name":"cast_label_int","value":"True","type":"Literal","bound_global_parameter":null},{"name":"user_functions","value":"{}","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"instruments","node_id":"-289"}],"output_ports":[{"name":"data","node_id":"-289"}],"cacheable":true,"seq_num":16,"comment":"","comment_collapsed":true},{"node_id":"-3665","module_id":"BigQuantSpace.filter.filter-v3","parameters":[{"name":"expr","value":"conssts and condssqs and condhsl and condztcs","type":"Literal","bound_global_parameter":null},{"name":"output_left_data","value":"False","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"input_data","node_id":"-3665"}],"output_ports":[{"name":"data","node_id":"-3665"},{"name":"left_data","node_id":"-3665"}],"cacheable":true,"seq_num":18,"comment":"","comment_collapsed":true},{"node_id":"-5712","module_id":"BigQuantSpace.dropnan.dropnan-v2","parameters":[],"input_ports":[{"name":"input_data","node_id":"-5712"},{"name":"features","node_id":"-5712"}],"output_ports":[{"name":"data","node_id":"-5712"}],"cacheable":true,"seq_num":19,"comment":"","comment_collapsed":true},{"node_id":"-6710","module_id":"BigQuantSpace.dl_convert_to_bin.dl_convert_to_bin-v2","parameters":[{"name":"window_size","value":"50","type":"Literal","bound_global_parameter":null},{"name":"feature_clip","value":"5","type":"Literal","bound_global_parameter":null},{"name":"flatten","value":"True","type":"Literal","bound_global_parameter":null},{"name":"window_along_col","value":"instrument","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"input_data","node_id":"-6710"},{"name":"features","node_id":"-6710"}],"output_ports":[{"name":"data","node_id":"-6710"}],"cacheable":true,"seq_num":20,"comment":"","comment_collapsed":true},{"node_id":"-9248","module_id":"BigQuantSpace.general_feature_extractor.general_feature_extractor-v7","parameters":[{"name":"start_date","value":"","type":"Literal","bound_global_parameter":null},{"name":"end_date","value":"","type":"Literal","bound_global_parameter":null},{"name":"before_start_days","value":90,"type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"instruments","node_id":"-9248"},{"name":"features","node_id":"-9248"}],"output_ports":[{"name":"data","node_id":"-9248"}],"cacheable":true,"seq_num":22,"comment":"","comment_collapsed":true},{"node_id":"-9255","module_id":"BigQuantSpace.derived_feature_extractor.derived_feature_extractor-v3","parameters":[{"name":"date_col","value":"date","type":"Literal","bound_global_parameter":null},{"name":"instrument_col","value":"instrument","type":"Literal","bound_global_parameter":null},{"name":"drop_na","value":"False","type":"Literal","bound_global_parameter":null},{"name":"remove_extra_columns","value":"False","type":"Literal","bound_global_parameter":null},{"name":"user_functions","value":"{}","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"input_data","node_id":"-9255"},{"name":"features","node_id":"-9255"}],"output_ports":[{"name":"data","node_id":"-9255"}],"cacheable":true,"seq_num":23,"comment":"","comment_collapsed":true},{"node_id":"-9264","module_id":"BigQuantSpace.filter.filter-v3","parameters":[{"name":"expr","value":"conssts and condssqs and condhsl and condztcs","type":"Literal","bound_global_parameter":null},{"name":"output_left_data","value":"False","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"input_data","node_id":"-9264"}],"output_ports":[{"name":"data","node_id":"-9264"},{"name":"left_data","node_id":"-9264"}],"cacheable":true,"seq_num":24,"comment":"","comment_collapsed":true},{"node_id":"-9270","module_id":"BigQuantSpace.dropnan.dropnan-v2","parameters":[],"input_ports":[{"name":"input_data","node_id":"-9270"},{"name":"features","node_id":"-9270"}],"output_ports":[{"name":"data","node_id":"-9270"}],"cacheable":true,"seq_num":25,"comment":"","comment_collapsed":true},{"node_id":"-9274","module_id":"BigQuantSpace.dl_convert_to_bin.dl_convert_to_bin-v2","parameters":[{"name":"window_size","value":"50","type":"Literal","bound_global_parameter":null},{"name":"feature_clip","value":"5","type":"Literal","bound_global_parameter":null},{"name":"flatten","value":"True","type":"Literal","bound_global_parameter":null},{"name":"window_along_col","value":"instrument","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"input_data","node_id":"-9274"},{"name":"features","node_id":"-9274"}],"output_ports":[{"name":"data","node_id":"-9274"}],"cacheable":true,"seq_num":26,"comment":"","comment_collapsed":true},{"node_id":"-214","module_id":"BigQuantSpace.cached.cached-v3","parameters":[{"name":"run","value":"# Python 代码入口函数,input_1/2/3 对应三个输入端,data_1/2/3 对应三个输出端\ndef bigquant_run(input_1, input_2, input_3):\n\n test_data = input_2.read_pickle()\n pred_label = input_1.read_pickle()\n pred_result = pred_label.reshape(pred_label.shape[0]) \n dt = input_3.read_df()['date'][-1*len(pred_result):]\n pred_df = pd.Series(pred_result, index=dt)\n ds = DataSource.write_df(pred_df)\n \n return Outputs(data_1=ds)\n","type":"Literal","bound_global_parameter":null},{"name":"post_run","value":"# 后处理函数,可选。输入是主函数的输出,可以在这里对数据做处理,或者返回更友好的outputs数据格式。此函数输出不会被缓存。\ndef bigquant_run(outputs):\n return outputs\n","type":"Literal","bound_global_parameter":null},{"name":"input_ports","value":"","type":"Literal","bound_global_parameter":null},{"name":"params","value":"{}","type":"Literal","bound_global_parameter":null},{"name":"output_ports","value":"","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"input_1","node_id":"-214"},{"name":"input_2","node_id":"-214"},{"name":"input_3","node_id":"-214"}],"output_ports":[{"name":"data_1","node_id":"-214"},{"name":"data_2","node_id":"-214"},{"name":"data_3","node_id":"-214"}],"cacheable":true,"seq_num":27,"comment":"模型预测结果输出","comment_collapsed":true},{"node_id":"-281","module_id":"BigQuantSpace.trade.trade-v4","parameters":[{"name":"start_date","value":"","type":"Literal","bound_global_parameter":null},{"name":"end_date","value":"","type":"Literal","bound_global_parameter":null},{"name":"initialize","value":"# 回测引擎:初始化函数,只执行一次\ndef bigquant_run(context):\n # 加载预测数据\n context.prediction = context.options['data'].read_df()\n\n # 系统已经设置了默认的交易手续费和滑点,要修改手续费可使用如下函数\n context.set_commission(PerOrder(buy_cost=0.0003, sell_cost=0.0013, min_cost=5))","type":"Literal","bound_global_parameter":null},{"name":"handle_data","value":"# 回测引擎:每日数据处理函数,每天执行一次\ndef bigquant_run(context, data):\n # 按日期过滤得到今日的预测数据\n try:\n prediction = context.prediction[data.current_dt.strftime('%Y-%m-%d')]\n except KeyError as e:\n return\n \n instrument = context.instruments[0]\n sid = context.symbol(instrument)\n cur_position = context.portfolio.positions[sid].amount\n \n # 交易逻辑\n if prediction > 0.5 and cur_position == 0:\n context.order_target_percent(context.symbol(instrument), 1)\n print(data.current_dt, '买入!')\n \n elif prediction < 0.5 and cur_position > 0:\n context.order_target_percent(context.symbol(instrument), 0)\n print(data.current_dt, '卖出!')\n ","type":"Literal","bound_global_parameter":null},{"name":"prepare","value":"# 回测引擎:准备数据,只执行一次\ndef bigquant_run(context):\n pass\n","type":"Literal","bound_global_parameter":null},{"name":"before_trading_start","value":"# 回测引擎:每个单位时间开始前调用一次,即每日开盘前调用一次。\ndef bigquant_run(context, data):\n pass\n","type":"Literal","bound_global_parameter":null},{"name":"volume_limit","value":0.025,"type":"Literal","bound_global_parameter":null},{"name":"order_price_field_buy","value":"open","type":"Literal","bound_global_parameter":null},{"name":"order_price_field_sell","value":"close","type":"Literal","bound_global_parameter":null},{"name":"capital_base","value":1000000,"type":"Literal","bound_global_parameter":null},{"name":"auto_cancel_non_tradable_orders","value":"True","type":"Literal","bound_global_parameter":null},{"name":"data_frequency","value":"daily","type":"Literal","bound_global_parameter":null},{"name":"price_type","value":"真实价格","type":"Literal","bound_global_parameter":null},{"name":"product_type","value":"股票","type":"Literal","bound_global_parameter":null},{"name":"plot_charts","value":"True","type":"Literal","bound_global_parameter":null},{"name":"backtest_only","value":"False","type":"Literal","bound_global_parameter":null},{"name":"benchmark","value":"000300.HIX","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"instruments","node_id":"-281"},{"name":"options_data","node_id":"-281"},{"name":"history_ds","node_id":"-281"},{"name":"benchmark_ds","node_id":"-281"},{"name":"trading_calendar","node_id":"-281"}],"output_ports":[{"name":"raw_perf","node_id":"-281"}],"cacheable":false,"seq_num":28,"comment":"","comment_collapsed":true},{"node_id":"-9319","module_id":"BigQuantSpace.input_features.input_features-v1","parameters":[{"name":"features","value":"# #号开始的表示注释,注释需单独一行\n# 多个特征,每行一个,可以包含基础特征和衍生特征,特征须为本平台特征\nta_bias(close_0, 5) #5日乖离率\nclose_0/close_5 #5日收益率\nreturn_20 #20日收益率\navg_turn_10#46:平均10天的换手率\npe_ttm_0","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"features_ds","node_id":"-9319"}],"output_ports":[{"name":"data","node_id":"-9319"}],"cacheable":true,"seq_num":30,"comment":"","comment_collapsed":true},{"node_id":"-436","module_id":"BigQuantSpace.cached.cached-v3","parameters":[{"name":"run","value":"# Python 代码入口函数,input_1/2/3 对应三个输入端,data_1/2/3 对应三个输出端\ndef bigquant_run(input_1, input_2, input_3):\n # 示例代码如下。在这里编写您的代码\n from sklearn.model_selection import train_test_split\n data = input_2.read()\n x_train, x_val, y_train, y_val = train_test_split(data[\"x\"], data['y'])\n data_1 = DataSource.write_pickle({'x': x_train, 'y': y_train})\n data_2 = DataSource.write_pickle({'x': x_val, 'y': y_val})\n return Outputs(data_1=data_1, data_2=data_2, data_3=None)\n","type":"Literal","bound_global_parameter":null},{"name":"post_run","value":"# 后处理函数,可选。输入是主函数的输出,可以在这里对数据做处理,或者返回更友好的outputs数据格式。此函数输出不会被缓存。\ndef bigquant_run(outputs):\n return outputs\n","type":"Literal","bound_global_parameter":null},{"name":"input_ports","value":"","type":"Literal","bound_global_parameter":null},{"name":"params","value":"{}","type":"Literal","bound_global_parameter":null},{"name":"output_ports","value":"","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"input_1","node_id":"-436"},{"name":"input_2","node_id":"-436"},{"name":"input_3","node_id":"-436"}],"output_ports":[{"name":"data_1","node_id":"-436"},{"name":"data_2","node_id":"-436"},{"name":"data_3","node_id":"-436"}],"cacheable":true,"seq_num":31,"comment":"","comment_collapsed":true},{"node_id":"-438","module_id":"BigQuantSpace.standardlize.standardlize-v8","parameters":[{"name":"columns_input","value":"","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"input_1","node_id":"-438"},{"name":"input_2","node_id":"-438"}],"output_ports":[{"name":"data","node_id":"-438"}],"cacheable":true,"seq_num":21,"comment":"","comment_collapsed":true},{"node_id":"-9626","module_id":"BigQuantSpace.standardlize.standardlize-v8","parameters":[{"name":"columns_input","value":"","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"input_1","node_id":"-9626"},{"name":"input_2","node_id":"-9626"}],"output_ports":[{"name":"data","node_id":"-9626"}],"cacheable":true,"seq_num":29,"comment":"","comment_collapsed":true},{"node_id":"-210","module_id":"BigQuantSpace.dl_layer_input.dl_layer_input-v1","parameters":[{"name":"shape","value":"50,5","type":"Literal","bound_global_parameter":null},{"name":"batch_shape","value":"","type":"Literal","bound_global_parameter":null},{"name":"dtype","value":"float32","type":"Literal","bound_global_parameter":null},{"name":"sparse","value":"False","type":"Literal","bound_global_parameter":null},{"name":"name","value":"","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"inputs","node_id":"-210"}],"output_ports":[{"name":"data","node_id":"-210"}],"cacheable":false,"seq_num":34,"comment":"","comment_collapsed":true},{"node_id":"-218","module_id":"BigQuantSpace.dl_layer_lstm.dl_layer_lstm-v1","parameters":[{"name":"units","value":"32","type":"Literal","bound_global_parameter":null},{"name":"activation","value":"tanh","type":"Literal","bound_global_parameter":null},{"name":"user_activation","value":"","type":"Literal","bound_global_parameter":null},{"name":"recurrent_activation","value":"hard_sigmoid","type":"Literal","bound_global_parameter":null},{"name":"user_recurrent_activation","value":"","type":"Literal","bound_global_parameter":null},{"name":"use_bias","value":"True","type":"Literal","bound_global_parameter":null},{"name":"kernel_initializer","value":"glorot_uniform","type":"Literal","bound_global_parameter":null},{"name":"user_kernel_initializer","value":"","type":"Literal","bound_global_parameter":null},{"name":"recurrent_initializer","value":"Orthogonal","type":"Literal","bound_global_parameter":null},{"name":"user_recurrent_initializer","value":"","type":"Literal","bound_global_parameter":null},{"name":"bias_initializer","value":"Ones","type":"Literal","bound_global_parameter":null},{"name":"user_bias_initializer","value":"","type":"Literal","bound_global_parameter":null},{"name":"unit_forget_bias","value":"True","type":"Literal","bound_global_parameter":null},{"name":"kernel_regularizer","value":"None","type":"Literal","bound_global_parameter":null},{"name":"kernel_regularizer_l1","value":0,"type":"Literal","bound_global_parameter":null},{"name":"kernel_regularizer_l2","value":0,"type":"Literal","bound_global_parameter":null},{"name":"user_kernel_regularizer","value":"","type":"Literal","bound_global_parameter":null},{"name":"recurrent_regularizer","value":"None","type":"Literal","bound_global_parameter":null},{"name":"recurrent_regularizer_l1","value":0,"type":"Literal","bound_global_parameter":null},{"name":"recurrent_regularizer_l2","value":0,"type":"Literal","bound_global_parameter":null},{"name":"user_recurrent_regularizer","value":"","type":"Literal","bound_global_parameter":null},{"name":"bias_regularizer","value":"None","type":"Literal","bound_global_parameter":null},{"name":"bias_regularizer_l1","value":0,"type":"Literal","bound_global_parameter":null},{"name":"bias_regularizer_l2","value":0,"type":"Literal","bound_global_parameter":null},{"name":"user_bias_regularizer","value":"","type":"Literal","bound_global_parameter":null},{"name":"activity_regularizer","value":"None","type":"Literal","bound_global_parameter":null},{"name":"activity_regularizer_l1","value":0,"type":"Literal","bound_global_parameter":null},{"name":"activity_regularizer_l2","value":0,"type":"Literal","bound_global_parameter":null},{"name":"user_activity_regularizer","value":"","type":"Literal","bound_global_parameter":null},{"name":"kernel_constraint","value":"None","type":"Literal","bound_global_parameter":null},{"name":"user_kernel_constraint","value":"","type":"Literal","bound_global_parameter":null},{"name":"recurrent_constraint","value":"None","type":"Literal","bound_global_parameter":null},{"name":"user_recurrent_constraint","value":"","type":"Literal","bound_global_parameter":null},{"name":"bias_constraint","value":"None","type":"Literal","bound_global_parameter":null},{"name":"user_bias_constraint","value":"","type":"Literal","bound_global_parameter":null},{"name":"dropout","value":"0","type":"Literal","bound_global_parameter":null},{"name":"recurrent_dropout","value":0,"type":"Literal","bound_global_parameter":null},{"name":"return_sequences","value":"False","type":"Literal","bound_global_parameter":null},{"name":"implementation","value":"2","type":"Literal","bound_global_parameter":null},{"name":"name","value":"","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"inputs","node_id":"-218"}],"output_ports":[{"name":"data","node_id":"-218"}],"cacheable":false,"seq_num":35,"comment":"","comment_collapsed":true},{"node_id":"-259","module_id":"BigQuantSpace.dl_layer_dense.dl_layer_dense-v1","parameters":[{"name":"units","value":"1","type":"Literal","bound_global_parameter":null},{"name":"activation","value":"sigmoid","type":"Literal","bound_global_parameter":null},{"name":"user_activation","value":"","type":"Literal","bound_global_parameter":null},{"name":"use_bias","value":"True","type":"Literal","bound_global_parameter":null},{"name":"kernel_initializer","value":"glorot_uniform","type":"Literal","bound_global_parameter":null},{"name":"user_kernel_initializer","value":"","type":"Literal","bound_global_parameter":null},{"name":"bias_initializer","value":"Zeros","type":"Literal","bound_global_parameter":null},{"name":"user_bias_initializer","value":"","type":"Literal","bound_global_parameter":null},{"name":"kernel_regularizer","value":"None","type":"Literal","bound_global_parameter":null},{"name":"kernel_regularizer_l1","value":0,"type":"Literal","bound_global_parameter":null},{"name":"kernel_regularizer_l2","value":0,"type":"Literal","bound_global_parameter":null},{"name":"user_kernel_regularizer","value":"","type":"Literal","bound_global_parameter":null},{"name":"bias_regularizer","value":"None","type":"Literal","bound_global_parameter":null},{"name":"bias_regularizer_l1","value":0,"type":"Literal","bound_global_parameter":null},{"name":"bias_regularizer_l2","value":0,"type":"Literal","bound_global_parameter":null},{"name":"user_bias_regularizer","value":"","type":"Literal","bound_global_parameter":null},{"name":"activity_regularizer","value":"None","type":"Literal","bound_global_parameter":null},{"name":"activity_regularizer_l1","value":0,"type":"Literal","bound_global_parameter":null},{"name":"activity_regularizer_l2","value":0,"type":"Literal","bound_global_parameter":null},{"name":"user_activity_regularizer","value":"","type":"Literal","bound_global_parameter":null},{"name":"kernel_constraint","value":"None","type":"Literal","bound_global_parameter":null},{"name":"user_kernel_constraint","value":"","type":"Literal","bound_global_parameter":null},{"name":"bias_constraint","value":"None","type":"Literal","bound_global_parameter":null},{"name":"user_bias_constraint","value":"","type":"Literal","bound_global_parameter":null},{"name":"name","value":"","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"inputs","node_id":"-259"}],"output_ports":[{"name":"data","node_id":"-259"}],"cacheable":false,"seq_num":36,"comment":"","comment_collapsed":true},{"node_id":"-14806","module_id":"BigQuantSpace.dl_layer_dense.dl_layer_dense-v1","parameters":[{"name":"units","value":"32","type":"Literal","bound_global_parameter":null},{"name":"activation","value":"tanh","type":"Literal","bound_global_parameter":null},{"name":"user_activation","value":"","type":"Literal","bound_global_parameter":null},{"name":"use_bias","value":"True","type":"Literal","bound_global_parameter":null},{"name":"kernel_initializer","value":"glorot_uniform","type":"Literal","bound_global_parameter":null},{"name":"user_kernel_initializer","value":"","type":"Literal","bound_global_parameter":null},{"name":"bias_initializer","value":"Zeros","type":"Literal","bound_global_parameter":null},{"name":"user_bias_initializer","value":"","type":"Literal","bound_global_parameter":null},{"name":"kernel_regularizer","value":"None","type":"Literal","bound_global_parameter":null},{"name":"kernel_regularizer_l1","value":0,"type":"Literal","bound_global_parameter":null},{"name":"kernel_regularizer_l2","value":0,"type":"Literal","bound_global_parameter":null},{"name":"user_kernel_regularizer","value":"","type":"Literal","bound_global_parameter":null},{"name":"bias_regularizer","value":"None","type":"Literal","bound_global_parameter":null},{"name":"bias_regularizer_l1","value":0,"type":"Literal","bound_global_parameter":null},{"name":"bias_regularizer_l2","value":0,"type":"Literal","bound_global_parameter":null},{"name":"user_bias_regularizer","value":"","type":"Literal","bound_global_parameter":null},{"name":"activity_regularizer","value":"None","type":"Literal","bound_global_parameter":null},{"name":"activity_regularizer_l1","value":0,"type":"Literal","bound_global_parameter":null},{"name":"activity_regularizer_l2","value":0,"type":"Literal","bound_global_parameter":null},{"name":"user_activity_regularizer","value":"","type":"Literal","bound_global_parameter":null},{"name":"kernel_constraint","value":"None","type":"Literal","bound_global_parameter":null},{"name":"user_kernel_constraint","value":"","type":"Literal","bound_global_parameter":null},{"name":"bias_constraint","value":"None","type":"Literal","bound_global_parameter":null},{"name":"user_bias_constraint","value":"","type":"Literal","bound_global_parameter":null},{"name":"name","value":"","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"inputs","node_id":"-14806"}],"output_ports":[{"name":"data","node_id":"-14806"}],"cacheable":false,"seq_num":37,"comment":"","comment_collapsed":true},{"node_id":"-14834","module_id":"BigQuantSpace.dl_layer_dropout.dl_layer_dropout-v1","parameters":[{"name":"rate","value":"0.4","type":"Literal","bound_global_parameter":null},{"name":"noise_shape","value":"","type":"Literal","bound_global_parameter":null},{"name":"seed","value":"","type":"Literal","bound_global_parameter":null},{"name":"name","value":"","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"inputs","node_id":"-14834"}],"output_ports":[{"name":"data","node_id":"-14834"}],"cacheable":false,"seq_num":38,"comment":"","comment_collapsed":true},{"node_id":"-14841","module_id":"BigQuantSpace.dl_layer_dropout.dl_layer_dropout-v1","parameters":[{"name":"rate","value":"0.8","type":"Literal","bound_global_parameter":null},{"name":"noise_shape","value":"","type":"Literal","bound_global_parameter":null},{"name":"seed","value":"","type":"Literal","bound_global_parameter":null},{"name":"name","value":"","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"inputs","node_id":"-14841"}],"output_ports":[{"name":"data","node_id":"-14841"}],"cacheable":false,"seq_num":39,"comment":"","comment_collapsed":true},{"node_id":"-403","module_id":"BigQuantSpace.dl_layer_reshape.dl_layer_reshape-v1","parameters":[{"name":"target_shape","value":"50,5,1","type":"Literal","bound_global_parameter":null},{"name":"name","value":"","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"inputs","node_id":"-403"}],"output_ports":[{"name":"data","node_id":"-403"}],"cacheable":false,"seq_num":40,"comment":"","comment_collapsed":true},{"node_id":"-408","module_id":"BigQuantSpace.dl_layer_conv2d.dl_layer_conv2d-v1","parameters":[{"name":"filters","value":"32","type":"Literal","bound_global_parameter":null},{"name":"kernel_size","value":"3,5","type":"Literal","bound_global_parameter":null},{"name":"strides","value":"1,1","type":"Literal","bound_global_parameter":null},{"name":"padding","value":"valid","type":"Literal","bound_global_parameter":null},{"name":"data_format","value":"channels_last","type":"Literal","bound_global_parameter":null},{"name":"dilation_rate","value":"1,1","type":"Literal","bound_global_parameter":null},{"name":"activation","value":"relu","type":"Literal","bound_global_parameter":null},{"name":"user_activation","value":"","type":"Literal","bound_global_parameter":null},{"name":"use_bias","value":"True","type":"Literal","bound_global_parameter":null},{"name":"kernel_initializer","value":"glorot_uniform","type":"Literal","bound_global_parameter":null},{"name":"user_kernel_initializer","value":"","type":"Literal","bound_global_parameter":null},{"name":"bias_initializer","value":"Zeros","type":"Literal","bound_global_parameter":null},{"name":"user_bias_initializer","value":"","type":"Literal","bound_global_parameter":null},{"name":"kernel_regularizer","value":"None","type":"Literal","bound_global_parameter":null},{"name":"kernel_regularizer_l1","value":0,"type":"Literal","bound_global_parameter":null},{"name":"kernel_regularizer_l2","value":0,"type":"Literal","bound_global_parameter":null},{"name":"user_kernel_regularizer","value":"","type":"Literal","bound_global_parameter":null},{"name":"bias_regularizer","value":"None","type":"Literal","bound_global_parameter":null},{"name":"bias_regularizer_l1","value":0,"type":"Literal","bound_global_parameter":null},{"name":"bias_regularizer_l2","value":0,"type":"Literal","bound_global_parameter":null},{"name":"user_bias_regularizer","value":"","type":"Literal","bound_global_parameter":null},{"name":"activity_regularizer","value":"None","type":"Literal","bound_global_parameter":null},{"name":"activity_regularizer_l1","value":0,"type":"Literal","bound_global_parameter":null},{"name":"activity_regularizer_l2","value":0,"type":"Literal","bound_global_parameter":null},{"name":"user_activity_regularizer","value":"","type":"Literal","bound_global_parameter":null},{"name":"kernel_constraint","value":"None","type":"Literal","bound_global_parameter":null},{"name":"user_kernel_constraint","value":"","type":"Literal","bound_global_parameter":null},{"name":"bias_constraint","value":"None","type":"Literal","bound_global_parameter":null},{"name":"user_bias_constraint","value":"","type":"Literal","bound_global_parameter":null},{"name":"name","value":"","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"inputs","node_id":"-408"}],"output_ports":[{"name":"data","node_id":"-408"}],"cacheable":false,"seq_num":41,"comment":"","comment_collapsed":true},{"node_id":"-446","module_id":"BigQuantSpace.dl_layer_reshape.dl_layer_reshape-v1","parameters":[{"name":"target_shape","value":"48,32","type":"Literal","bound_global_parameter":null},{"name":"name","value":"","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"inputs","node_id":"-446"}],"output_ports":[{"name":"data","node_id":"-446"}],"cacheable":false,"seq_num":42,"comment":"","comment_collapsed":true}],"node_layout":"<node_postions><node_position Node='-169' Position='322,893,200,200'/><node_position Node='-174' Position='427,966,200,200'/><node_position Node='-189' Position='619,1042,200,200'/><node_position Node='-195' Position='1062,3,200,200'/><node_position Node='-199' Position='675,95,200,200'/><node_position Node='-207' Position='1324,83,200,200'/><node_position Node='-216' Position='816,186,200,200'/><node_position Node='-223' Position='812,284,200,200'/><node_position Node='-241' Position='695,365,200,200'/><node_position Node='-289' Position='517,232,200,200'/><node_position Node='-3665' Position='691,459,200,200'/><node_position Node='-5712' Position='688,557,200,200'/><node_position Node='-6710' Position='678,735,200,200'/><node_position Node='-9248' Position='1325,193,200,200'/><node_position Node='-9255' Position='1331,295,200,200'/><node_position Node='-9264' Position='1319,379,200,200'/><node_position Node='-9270' Position='1280,559,200,200'/><node_position Node='-9274' Position='1208,664,200,200'/><node_position Node='-214' Position='825,1120,200,200'/><node_position Node='-281' Position='963,1211,200,200'/><node_position Node='-9319' Position='1039,332,200,200'/><node_position Node='-436' Position='649,828,200,200'/><node_position Node='-438' Position='696,649,200,200'/><node_position Node='-9626' Position='1322,472,200,200'/><node_position Node='-210' Position='192.63221740722656,126.54884624481201,200,200'/><node_position Node='-218' Position='182.63221740722656,483.548846244812,200,200'/><node_position Node='-259' Position='186.63221740722656,801.548846244812,200,200'/><node_position Node='-14806' Position='184.63221740722656,625.548846244812,200,200'/><node_position Node='-14834' Position='184.63221740722656,560.548846244812,200,200'/><node_position Node='-14841' Position='187.63221740722656,715.548846244812,200,200'/><node_position Node='-403' Position='184.63221740722656,220.548846244812,200,200'/><node_position Node='-408' Position='185.63221740722656,307.548846244812,200,200'/><node_position Node='-446' Position='183.63221740722656,391.548846244812,200,200'/></node_postions>"},"nodes_readonly":false,"studio_version":"v2"}
    In [154]:
    # 本代码由可视化策略环境自动生成 2022年9月15日 18:04
    # 本代码单元只能在可视化模式下编辑。您也可以拷贝代码,粘贴到新建的代码单元或者策略,然后修改。
    
    
    # Python 代码入口函数,input_1/2/3 对应三个输入端,data_1/2/3 对应三个输出端
    def m31_run_bigquant_run(input_1, input_2, input_3):
        # 示例代码如下。在这里编写您的代码
        from sklearn.model_selection import train_test_split
        data = input_2.read()
        x_train, x_val, y_train, y_val = train_test_split(data["x"], data['y'])
        data_1 = DataSource.write_pickle({'x': x_train, 'y': y_train})
        data_2 = DataSource.write_pickle({'x': x_val, 'y': y_val})
        return Outputs(data_1=data_1, data_2=data_2, data_3=None)
    
    # 后处理函数,可选。输入是主函数的输出,可以在这里对数据做处理,或者返回更友好的outputs数据格式。此函数输出不会被缓存。
    def m31_post_run_bigquant_run(outputs):
        return outputs
    
    # 用户的自定义层需要写到字典中,比如
    # {
    #   "MyLayer": MyLayer
    # }
    m9_custom_objects_bigquant_run = {
        
    }
    
    # Python 代码入口函数,input_1/2/3 对应三个输入端,data_1/2/3 对应三个输出端
    def m27_run_bigquant_run(input_1, input_2, input_3):
    
        test_data = input_2.read_pickle()
        pred_label = input_1.read_pickle()
        pred_result = pred_label.reshape(pred_label.shape[0]) 
        dt = input_3.read_df()['date'][-1*len(pred_result):]
        pred_df = pd.Series(pred_result, index=dt)
        ds = DataSource.write_df(pred_df)
        
        return Outputs(data_1=ds)
    
    # 后处理函数,可选。输入是主函数的输出,可以在这里对数据做处理,或者返回更友好的outputs数据格式。此函数输出不会被缓存。
    def m27_post_run_bigquant_run(outputs):
        return outputs
    
    # 回测引擎:初始化函数,只执行一次
    def m28_initialize_bigquant_run(context):
        # 加载预测数据
        context.prediction = context.options['data'].read_df()
    
        # 系统已经设置了默认的交易手续费和滑点,要修改手续费可使用如下函数
        context.set_commission(PerOrder(buy_cost=0.0003, sell_cost=0.0013, min_cost=5))
    # 回测引擎:每日数据处理函数,每天执行一次
    def m28_handle_data_bigquant_run(context, data):
        # 按日期过滤得到今日的预测数据
        try:
            prediction = context.prediction[data.current_dt.strftime('%Y-%m-%d')]
        except KeyError as e:
            return
        
        instrument = context.instruments[0]
        sid = context.symbol(instrument)
        cur_position = context.portfolio.positions[sid].amount
        
        # 交易逻辑
        if prediction > 0.5 and cur_position == 0:
            context.order_target_percent(context.symbol(instrument), 1)
            print(data.current_dt, '买入!')
            
        elif prediction < 0.5 and cur_position > 0:
            context.order_target_percent(context.symbol(instrument), 0)
            print(data.current_dt, '卖出!')
        
    # 回测引擎:准备数据,只执行一次
    def m28_prepare_bigquant_run(context):
        pass
    
    # 回测引擎:每个单位时间开始前调用一次,即每日开盘前调用一次。
    def m28_before_trading_start_bigquant_run(context, data):
        pass
    
    
    m11 = M.input_features.v1(
        features="""# #号开始的表示注释,注释需单独一行
    # 多个特征,每行一个,可以包含基础特征和衍生特征,特征须为本平台特征
    conssts=list_days_0>365 #上市天数>365天
    condssqs=ta_ema_5_0>ta_ema_20_0 #上升趋势的票
    condhsl=avg_turn_10>0.05 #近10天平均换手率
    condztcs=sum(price_limit_status_0==3,10)>1  #70:统计80天内 涨停板的次数大于5
    
    ta_bias(close_0, 5) #5日乖离率
    close_0/close_5 #5日收益率
    return_20 #20日收益率
    avg_turn_10#46:平均10天的换手率
    pe_ttm_0
    """
    )
    
    m12 = M.instruments.v2(
        start_date='2019-12-01',
        end_date='2020-01-02',
        market='CN_STOCK_A',
        instrument_list='',
        max_count=0
    )
    
    m14 = M.general_feature_extractor.v7(
        instruments=m12.data,
        features=m11.data,
        start_date='',
        end_date='',
        before_start_days=90
    )
    
    m15 = M.derived_feature_extractor.v3(
        input_data=m14.data,
        features=m11.data,
        date_col='date',
        instrument_col='instrument',
        drop_na=False,
        remove_extra_columns=False,
        user_functions={}
    )
    
    m16 = M.advanced_auto_labeler.v2(
        instruments=m12.data,
        label_expr="""# #号开始的表示注释
    # 0. 每行一个,顺序执行,从第二个开始,可以使用label字段
    # 1. 可用数据字段见 https://bigquant.com/docs/data_history_data.html
    #   添加benchmark_前缀,可使用对应的benchmark数据
    # 2. 可用操作符和函数见 `表达式引擎 <https://bigquant.com/docs/big_expr.html>`_
    
    # 计算收益:2日收盘价(作为卖出价格)除以明日开盘价(作为买入价格)
    shift(close, -2) / shift(open, -1)-1
    
    # 极值处理:用1%和99%分位的值做clip
    clip(label, all_quantile(label, 0.01), all_quantile(label, 0.99))
    
    all_wbins(label, 20)
    
    # 过滤掉一字涨停的情况 (设置label为NaN,在后续处理和训练中会忽略NaN的label)
    where(shift(high, -1) == shift(low, -1), NaN, label)""",
        start_date='',
        end_date='',
        benchmark='000300.SHA',
        drop_na_label=True,
        cast_label_int=True,
        user_functions={}
    )
    
    m17 = M.join.v3(
        data1=m16.data,
        data2=m15.data,
        on='date,instrument',
        how='inner',
        sort=False
    )
    
    m18 = M.filter.v3(
        input_data=m17.data,
        expr='conssts and condssqs and condhsl and condztcs',
        output_left_data=False
    )
    
    m19 = M.dropnan.v2(
        input_data=m18.data
    )
    
    m13 = M.instruments.v2(
        start_date='2020-01-03',
        end_date='2020-01-4',
        market='CN_STOCK_A',
        instrument_list='',
        max_count=0
    )
    
    m22 = M.general_feature_extractor.v7(
        instruments=m13.data,
        features=m11.data,
        start_date='',
        end_date='',
        before_start_days=90
    )
    
    m23 = M.derived_feature_extractor.v3(
        input_data=m22.data,
        features=m11.data,
        date_col='date',
        instrument_col='instrument',
        drop_na=False,
        remove_extra_columns=False,
        user_functions={}
    )
    
    m24 = M.filter.v3(
        input_data=m23.data,
        expr='conssts and condssqs and condhsl and condztcs',
        output_left_data=False
    )
    
    m30 = M.input_features.v1(
        features="""# #号开始的表示注释,注释需单独一行
    # 多个特征,每行一个,可以包含基础特征和衍生特征,特征须为本平台特征
    ta_bias(close_0, 5) #5日乖离率
    close_0/close_5 #5日收益率
    return_20 #20日收益率
    avg_turn_10#46:平均10天的换手率
    pe_ttm_0"""
    )
    
    m21 = M.standardlize.v8(
        input_1=m19.data,
        input_2=m30.data,
        columns_input=''
    )
    
    m20 = M.dl_convert_to_bin.v2(
        input_data=m21.data,
        features=m30.data,
        window_size=50,
        feature_clip=5,
        flatten=True,
        window_along_col='instrument'
    )
    
    m31 = M.cached.v3(
        input_2=m20.data,
        run=m31_run_bigquant_run,
        post_run=m31_post_run_bigquant_run,
        input_ports='',
        params='{}',
        output_ports=''
    )
    
    m29 = M.standardlize.v8(
        input_1=m24.data,
        input_2=m30.data,
        columns_input=''
    )
    
    m25 = M.dropnan.v2(
        input_data=m29.data
    )
    
    m26 = M.dl_convert_to_bin.v2(
        input_data=m25.data,
        features=m30.data,
        window_size=50,
        feature_clip=5,
        flatten=True,
        window_along_col='instrument'
    )
    
    m34 = M.dl_layer_input.v1(
        shape='50,5',
        batch_shape='',
        dtype='float32',
        sparse=False,
        name=''
    )
    
    m40 = M.dl_layer_reshape.v1(
        inputs=m34.data,
        target_shape='50,5,1',
        name=''
    )
    
    m41 = M.dl_layer_conv2d.v1(
        inputs=m40.data,
        filters=32,
        kernel_size='3,5',
        strides='1,1',
        padding='valid',
        data_format='channels_last',
        dilation_rate='1,1',
        activation='relu',
        use_bias=True,
        kernel_initializer='glorot_uniform',
        bias_initializer='Zeros',
        kernel_regularizer='None',
        kernel_regularizer_l1=0,
        kernel_regularizer_l2=0,
        bias_regularizer='None',
        bias_regularizer_l1=0,
        bias_regularizer_l2=0,
        activity_regularizer='None',
        activity_regularizer_l1=0,
        activity_regularizer_l2=0,
        kernel_constraint='None',
        bias_constraint='None',
        name=''
    )
    
    m42 = M.dl_layer_reshape.v1(
        inputs=m41.data,
        target_shape='48,32',
        name=''
    )
    
    m35 = M.dl_layer_lstm.v1(
        inputs=m42.data,
        units=32,
        activation='tanh',
        recurrent_activation='hard_sigmoid',
        use_bias=True,
        kernel_initializer='glorot_uniform',
        recurrent_initializer='Orthogonal',
        bias_initializer='Ones',
        unit_forget_bias=True,
        kernel_regularizer='None',
        kernel_regularizer_l1=0,
        kernel_regularizer_l2=0,
        recurrent_regularizer='None',
        recurrent_regularizer_l1=0,
        recurrent_regularizer_l2=0,
        bias_regularizer='None',
        bias_regularizer_l1=0,
        bias_regularizer_l2=0,
        activity_regularizer='None',
        activity_regularizer_l1=0,
        activity_regularizer_l2=0,
        kernel_constraint='None',
        recurrent_constraint='None',
        bias_constraint='None',
        dropout=0,
        recurrent_dropout=0,
        return_sequences=False,
        implementation='2',
        name=''
    )
    
    m38 = M.dl_layer_dropout.v1(
        inputs=m35.data,
        rate=0.4,
        noise_shape='',
        name=''
    )
    
    m37 = M.dl_layer_dense.v1(
        inputs=m38.data,
        units=32,
        activation='tanh',
        use_bias=True,
        kernel_initializer='glorot_uniform',
        bias_initializer='Zeros',
        kernel_regularizer='None',
        kernel_regularizer_l1=0,
        kernel_regularizer_l2=0,
        bias_regularizer='None',
        bias_regularizer_l1=0,
        bias_regularizer_l2=0,
        activity_regularizer='None',
        activity_regularizer_l1=0,
        activity_regularizer_l2=0,
        kernel_constraint='None',
        bias_constraint='None',
        name=''
    )
    
    m39 = M.dl_layer_dropout.v1(
        inputs=m37.data,
        rate=0.8,
        noise_shape='',
        name=''
    )
    
    m36 = M.dl_layer_dense.v1(
        inputs=m39.data,
        units=1,
        activation='sigmoid',
        use_bias=True,
        kernel_initializer='glorot_uniform',
        bias_initializer='Zeros',
        kernel_regularizer='None',
        kernel_regularizer_l1=0,
        kernel_regularizer_l2=0,
        bias_regularizer='None',
        bias_regularizer_l1=0,
        bias_regularizer_l2=0,
        activity_regularizer='None',
        activity_regularizer_l1=0,
        activity_regularizer_l2=0,
        kernel_constraint='None',
        bias_constraint='None',
        name=''
    )
    
    m8 = M.dl_model_init.v1(
        inputs=m34.data,
        outputs=m36.data
    )
    
    m9 = M.dl_model_train.v1(
        input_model=m8.data,
        training_data=m31.data_1,
        validation_data=m31.data_2,
        optimizer='Adam',
        loss='binary_crossentropy',
        metrics='accuracy',
        batch_size=2048,
        epochs=10,
        custom_objects=m9_custom_objects_bigquant_run,
        n_gpus=0,
        verbose='2:每个epoch输出一行记录'
    )
    
    m10 = M.dl_model_predict.v1(
        trained_model=m9.data,
        input_data=m26.data,
        batch_size=10240,
        n_gpus=0,
        verbose='2:每个epoch输出一行记录'
    )
    
    m27 = M.cached.v3(
        input_1=m10.data,
        input_2=m26.data,
        input_3=m25.data,
        run=m27_run_bigquant_run,
        post_run=m27_post_run_bigquant_run,
        input_ports='',
        params='{}',
        output_ports=''
    )
    
    m28 = M.trade.v4(
        instruments=m13.data,
        options_data=m27.data_1,
        start_date='',
        end_date='',
        initialize=m28_initialize_bigquant_run,
        handle_data=m28_handle_data_bigquant_run,
        prepare=m28_prepare_bigquant_run,
        before_trading_start=m28_before_trading_start_bigquant_run,
        volume_limit=0.025,
        order_price_field_buy='open',
        order_price_field_sell='close',
        capital_base=1000000,
        auto_cancel_non_tradable_orders=True,
        data_frequency='daily',
        price_type='真实价格',
        product_type='股票',
        plot_charts=True,
        backtest_only=False,
        benchmark='000300.HIX'
    )
    
    Epoch 1/10
    
    ---------------------------------------------------------------------------
    ValueError                                Traceback (most recent call last)
    <ipython-input-154-8a03ba6cc90b> in <module>
        369 )
        370 
    --> 371 m9 = M.dl_model_train.v1(
        372     input_model=m8.data,
        373     training_data=m31.data_1,
    
    ValueError: in user code:
    
        /usr/local/python3/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py:805 train_function  *
            return step_function(self, iterator)
        /usr/local/python3/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py:795 step_function  **
            outputs = model.distribute_strategy.run(run_step, args=(data,))
        /usr/local/python3/lib/python3.8/site-packages/tensorflow/python/distribute/distribute_lib.py:1259 run
            return self._extended.call_for_each_replica(fn, args=args, kwargs=kwargs)
        /usr/local/python3/lib/python3.8/site-packages/tensorflow/python/distribute/distribute_lib.py:2730 call_for_each_replica
            return self._call_for_each_replica(fn, args, kwargs)
        /usr/local/python3/lib/python3.8/site-packages/tensorflow/python/distribute/distribute_lib.py:3417 _call_for_each_replica
            return fn(*args, **kwargs)
        /usr/local/python3/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py:788 run_step  **
            outputs = model.train_step(data)
        /usr/local/python3/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py:754 train_step
            y_pred = self(x, training=True)
        /usr/local/python3/lib/python3.8/site-packages/tensorflow/python/keras/engine/base_layer.py:998 __call__
            input_spec.assert_input_compatibility(self.input_spec, inputs, self.name)
        /usr/local/python3/lib/python3.8/site-packages/tensorflow/python/keras/engine/input_spec.py:271 assert_input_compatibility
            raise ValueError('Input ' + str(input_index) +
    
        ValueError: Input 0 is incompatible with layer BigQuantDL: expected shape=(None, 50, 5), found shape=(None, 250)