复制链接
克隆策略

\

策略简介

因子:样例因子(18个)

因子是否标准化:是

标注:未来5日收益(不做离散化)

算法:LSTM

类型:回归问题

训练集:10-16年

测试集:16-19年

选股依据:根据预测值降序排序买入

持股数:30

持仓天数:5

    {"description":"实验创建于2017/8/26","graph":{"edges":[{"to_node_id":"-773:input_1","from_node_id":"287d2cb0-f53c-4101-bdf8-104b137c8601-15:data"},{"to_node_id":"-768:input_2","from_node_id":"287d2cb0-f53c-4101-bdf8-104b137c8601-24:data"},{"to_node_id":"-778:input_2","from_node_id":"287d2cb0-f53c-4101-bdf8-104b137c8601-24:data"},{"to_node_id":"-243:features","from_node_id":"287d2cb0-f53c-4101-bdf8-104b137c8601-24:data"},{"to_node_id":"-251:features","from_node_id":"287d2cb0-f53c-4101-bdf8-104b137c8601-24:data"},{"to_node_id":"-3895:input_2","from_node_id":"287d2cb0-f53c-4101-bdf8-104b137c8601-24:data"},{"to_node_id":"-3907:input_2","from_node_id":"287d2cb0-f53c-4101-bdf8-104b137c8601-24:data"},{"to_node_id":"-4847:features_ds","from_node_id":"287d2cb0-f53c-4101-bdf8-104b137c8601-24:data"},{"to_node_id":"-498:input_data","from_node_id":"287d2cb0-f53c-4101-bdf8-104b137c8601-53:data"},{"to_node_id":"-122:instruments","from_node_id":"287d2cb0-f53c-4101-bdf8-104b137c8601-62:data"},{"to_node_id":"-6175:instruments","from_node_id":"287d2cb0-f53c-4101-bdf8-104b137c8601-62:data"},{"to_node_id":"-113:input_data","from_node_id":"-106:data"},{"to_node_id":"-910:input_data","from_node_id":"-113:data"},{"to_node_id":"-129:input_data","from_node_id":"-122:data"},{"to_node_id":"-6480:input_data","from_node_id":"-129:data"},{"to_node_id":"-3880:inputs","from_node_id":"-160:data"},{"to_node_id":"-1607:inputs","from_node_id":"-160:data"},{"to_node_id":"-1540:trained_model","from_node_id":"-1098:data"},{"to_node_id":"-2431:input_1","from_node_id":"-1540:data"},{"to_node_id":"-6175:options_data","from_node_id":"-2431:data_1"},{"to_node_id":"287d2cb0-f53c-4101-bdf8-104b137c8601-53:data2","from_node_id":"-768:data"},{"to_node_id":"287d2cb0-f53c-4101-bdf8-104b137c8601-53:data1","from_node_id":"-773:data"},{"to_node_id":"-502:input_data","from_node_id":"-778:data"},{"to_node_id":"-3895:input_1","from_node_id":"-243:data"},{"to_node_id":"-3907:input_1","from_node_id":"-251:data"},{"to_node_id":"-1098:input_model","from_node_id":"-3880:data"},{"to_node_id":"-1098:training_data","from_node_id":"-3895:data_1"},{"to_node_id":"-1540:input_data","from_node_id":"-3907:data_1"},{"to_node_id":"-460:inputs","from_node_id":"-356:data"},{"to_node_id":"-412:inputs","from_node_id":"-567:data"},{"to_node_id":"-574:inputs","from_node_id":"-412:data"},{"to_node_id":"-12012:inputs","from_node_id":"-574:data"},{"to_node_id":"-3880:outputs","from_node_id":"-440:data"},{"to_node_id":"-408:inputs","from_node_id":"-1607:data"},{"to_node_id":"-453:inputs","from_node_id":"-408:data"},{"to_node_id":"-356:inputs","from_node_id":"-453:data"},{"to_node_id":"-455:input_data","from_node_id":"-1356:data"},{"to_node_id":"-459:input_data","from_node_id":"-38928:data"},{"to_node_id":"-1356:input_data","from_node_id":"-498:data"},{"to_node_id":"-38928:input_data","from_node_id":"-502:data"},{"to_node_id":"-7814:inputs","from_node_id":"-417:data"},{"to_node_id":"-417:inputs","from_node_id":"-460:data"},{"to_node_id":"-106:features","from_node_id":"-4847:data"},{"to_node_id":"-113:features","from_node_id":"-4847:data"},{"to_node_id":"-122:features","from_node_id":"-4847:data"},{"to_node_id":"-129:features","from_node_id":"-4847:data"},{"to_node_id":"-768:input_1","from_node_id":"-910:data"},{"to_node_id":"-778:input_1","from_node_id":"-6480:data"},{"to_node_id":"-243:input_data","from_node_id":"-455:data"},{"to_node_id":"-2431:input_2","from_node_id":"-459:data"},{"to_node_id":"-251:input_data","from_node_id":"-459:data"},{"to_node_id":"-12040:inputs","from_node_id":"-12012:data"},{"to_node_id":"-7448:inputs","from_node_id":"-12040:data"},{"to_node_id":"-7819:inputs","from_node_id":"-7814:data"},{"to_node_id":"-567:inputs","from_node_id":"-7819:data"},{"to_node_id":"-440:inputs","from_node_id":"-7448:data"},{"to_node_id":"287d2cb0-f53c-4101-bdf8-104b137c8601-15:instruments","from_node_id":"-4357:data"},{"to_node_id":"-106:instruments","from_node_id":"-4357:data"}],"nodes":[{"node_id":"287d2cb0-f53c-4101-bdf8-104b137c8601-15","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# 计算收益:5日收盘价(作为卖出价格)除以明日开盘价(作为买入价格)\n(shift(close, -5) / shift(open, -1) - 1)*10\n\n# 极值处理:用1%和99%分位的值做clip\nclip(label, all_quantile(label, 0.01), all_quantile(label, 0.99))\n\n# 过滤掉一字涨停的情况 (设置label为NaN,在后续处理和训练中会忽略NaN的label)\nwhere(shift(high, -1) == shift(low, -1), NaN, label)\n","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":"False","type":"Literal","bound_global_parameter":null},{"name":"user_functions","value":"","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"instruments","node_id":"287d2cb0-f53c-4101-bdf8-104b137c8601-15"}],"output_ports":[{"name":"data","node_id":"287d2cb0-f53c-4101-bdf8-104b137c8601-15"}],"cacheable":true,"seq_num":2,"comment":"","comment_collapsed":true},{"node_id":"287d2cb0-f53c-4101-bdf8-104b137c8601-24","module_id":"BigQuantSpace.input_features.input_features-v1","parameters":[{"name":"features","value":"\nmean(where(close_0>open_0, ((close_0-low_0)/(high_0-low_0))*(turn_0/avg_turn_5), -1*((high_0-close_0)/(high_0-low_0))*(turn_0/avg_turn_5)),5) #-4/25///47 \n","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"features_ds","node_id":"287d2cb0-f53c-4101-bdf8-104b137c8601-24"}],"output_ports":[{"name":"data","node_id":"287d2cb0-f53c-4101-bdf8-104b137c8601-24"}],"cacheable":true,"seq_num":3,"comment":"","comment_collapsed":true},{"node_id":"287d2cb0-f53c-4101-bdf8-104b137c8601-53","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":"287d2cb0-f53c-4101-bdf8-104b137c8601-53"},{"name":"data2","node_id":"287d2cb0-f53c-4101-bdf8-104b137c8601-53"}],"output_ports":[{"name":"data","node_id":"287d2cb0-f53c-4101-bdf8-104b137c8601-53"}],"cacheable":true,"seq_num":7,"comment":"","comment_collapsed":true},{"node_id":"287d2cb0-f53c-4101-bdf8-104b137c8601-62","module_id":"BigQuantSpace.instruments.instruments-v2","parameters":[{"name":"start_date","value":"2017-01-01","type":"Literal","bound_global_parameter":null},{"name":"end_date","value":"2019-12-31","type":"Literal","bound_global_parameter":"交易日期"},{"name":"market","value":"CN_STOCK_A","type":"Literal","bound_global_parameter":null},{"name":"instrument_list","value":"000008.SZA\n000009.SZA\n000012.SZA\n000021.SZA\n000027.SZA\n000028.SZA\n000031.SZA\n000039.SZA\n000046.SZA\n000050.SZA\n000060.SZA\n000061.SZA\n000062.SZA\n000078.SZA\n000089.SZA\n000090.SZA\n000156.SZA\n000158.SZA\n000301.SZA\n000400.SZA\n000401.SZA\n000402.SZA\n000415.SZA\n000488.SZA\n000501.SZA\n000513.SZA\n000519.SZA\n000528.SZA\n000537.SZA\n000540.SZA\n000543.SZA\n000547.SZA\n000553.SZA\n000559.SZA\n000563.SZA\n000564.SZA\n000581.SZA\n000598.SZA\n000600.SZA\n000623.SZA\n000629.SZA\n000630.SZA\n000636.SZA\n000681.SZA\n000685.SZA\n000686.SZA\n000690.SZA\n000709.SZA\n000717.SZA\n000718.SZA\n000729.SZA\n000732.SZA\n000738.SZA\n000739.SZA\n000750.SZA\n000758.SZA\n000778.SZA\n000807.SZA\n000813.SZA\n000825.SZA\n000826.SZA\n000830.SZA\n000869.SZA\n000877.SZA\n000878.SZA\n000883.SZA\n000887.SZA\n000898.SZA\n000930.SZA\n000932.SZA\n000937.SZA\n000959.SZA\n000960.SZA\n000967.SZA\n000970.SZA\n000975.SZA\n000983.SZA\n000988.SZA\n000990.SZA\n000997.SZA\n000998.SZA\n000999.SZA\n001872.SZA\n001914.SZA\n002002.SZA\n002004.SZA\n002010.SZA\n002013.SZA\n002019.SZA\n002028.SZA\n002030.SZA\n002038.SZA\n002048.SZA\n002051.SZA\n002056.SZA\n002064.SZA\n002074.SZA\n002075.SZA\n002078.SZA\n002080.SZA\n002081.SZA\n002085.SZA\n002092.SZA\n002093.SZA\n002110.SZA\n002124.SZA\n002128.SZA\n002131.SZA\n002138.SZA\n002152.SZA\n002155.SZA\n002156.SZA\n002174.SZA\n002183.SZA\n002185.SZA\n002191.SZA\n002195.SZA\n002203.SZA\n002212.SZA\n002217.SZA\n002221.SZA\n002223.SZA\n002233.SZA\n002242.SZA\n002244.SZA\n002249.SZA\n002250.SZA\n002266.SZA\n002268.SZA\n002273.SZA\n002281.SZA\n002294.SZA\n002299.SZA\n002302.SZA\n002317.SZA\n002340.SZA\n002353.SZA\n002368.SZA\n002372.SZA\n002373.SZA\n002375.SZA\n002382.SZA\n002385.SZA\n002387.SZA\n002390.SZA\n002396.SZA\n002399.SZA\n002408.SZA\n002416.SZA\n002419.SZA\n002423.SZA\n002424.SZA\n002429.SZA\n002434.SZA\n002440.SZA\n002444.SZA\n002458.SZA\n002465.SZA\n002468.SZA\n002500.SZA\n002503.SZA\n002505.SZA\n002506.SZA\n002507.SZA\n002511.SZA\n002544.SZA\n002557.SZA\n002563.SZA\n002568.SZA\n002572.SZA\n002583.SZA\n002589.SZA\n002595.SZA\n002603.SZA\n002625.SZA\n002635.SZA\n002640.SZA\n002648.SZA\n002653.SZA\n002670.SZA\n002683.SZA\n002690.SZA\n002701.SZA\n002705.SZA\n002709.SZA\n002745.SZA\n002791.SZA\n002797.SZA\n002807.SZA\n002815.SZA\n002818.SZA\n002831.SZA\n002839.SZA\n002867.SZA\n002901.SZA\n002920.SZA\n002925.SZA\n002926.SZA\n002936.SZA\n002941.SZA\n002946.SZA\n002948.SZA\n002957.SZA\n002966.SZA\n002985.SZA\n300001.SZA\n300002.SZA\n300009.SZA\n300010.SZA\n300012.SZA\n300017.SZA\n300024.SZA\n300026.SZA\n300058.SZA\n300070.SZA\n300072.SZA\n300088.SZA\n300113.SZA\n300115.SZA\n300133.SZA\n300134.SZA\n300146.SZA\n300166.SZA\n300168.SZA\n300180.SZA\n300182.SZA\n300207.SZA\n300212.SZA\n300223.SZA\n300244.SZA\n300257.SZA\n300271.SZA\n300274.SZA\n300285.SZA\n300296.SZA\n300315.SZA\n300316.SZA\n300324.SZA\n300357.SZA\n300376.SZA\n300418.SZA\n300459.SZA\n300463.SZA\n300474.SZA\n300482.SZA\n300496.SZA\n300595.SZA\n300618.SZA\n300630.SZA\n300699.SZA\n600006.SHA\n600008.SHA\n600021.SHA\n600022.SHA\n600026.SHA\n600037.SHA\n600038.SHA\n600039.SHA\n600053.SHA\n600056.SHA\n600060.SHA\n600062.SHA\n600064.SHA\n600073.SHA\n600079.SHA\n600089.SHA\n600094.SHA\n600120.SHA\n600126.SHA\n600131.SHA\n600132.SHA\n600141.SHA\n600143.SHA\n600153.SHA\n600155.SHA\n600158.SHA\n600160.SHA\n600166.SHA\n600167.SHA\n600170.SHA\n600171.SHA\n600188.SHA\n600195.SHA\n600201.SHA\n600216.SHA\n600219.SHA\n600256.SHA\n600258.SHA\n600259.SHA\n600260.SHA\n600266.SHA\n600273.SHA\n600277.SHA\n600282.SHA\n600291.SHA\n600307.SHA\n600312.SHA\n600315.SHA\n600316.SHA\n600325.SHA\n600329.SHA\n600338.SHA\n600339.SHA\n600348.SHA\n600350.SHA\n600372.SHA\n600373.SHA\n600376.SHA\n600380.SHA\n600388.SHA\n600392.SHA\n600398.SHA\n600409.SHA\n600410.SHA\n600415.SHA\n600418.SHA\n600426.SHA\n600435.SHA\n600446.SHA\n600460.SHA\n600466.SHA\n600486.SHA\n600497.SHA\n600500.SHA\n600507.SHA\n600511.SHA\n600515.SHA\n600516.SHA\n600517.SHA\n600528.SHA\n600529.SHA\n600535.SHA\n600545.SHA\n600546.SHA\n600549.SHA\n600556.SHA\n600563.SHA\n600566.SHA\n600567.SHA\n600572.SHA\n600575.SHA\n600580.SHA\n600582.SHA\n600597.SHA\n600598.SHA\n600623.SHA\n600633.SHA\n600639.SHA\n600640.SHA\n600642.SHA\n600643.SHA\n600645.SHA\n600648.SHA\n600649.SHA\n600657.SHA\n600664.SHA\n600667.SHA\n600673.SHA\n600675.SHA\n600699.SHA\n600704.SHA\n600707.SHA\n600717.SHA\n600718.SHA\n600728.SHA\n600729.SHA\n600733.SHA\n600737.SHA\n600739.SHA\n600748.SHA\n600754.SHA\n600755.SHA\n600765.SHA\n600776.SHA\n600779.SHA\n600782.SHA\n600787.SHA\n600801.SHA\n600804.SHA\n600808.SHA\n600811.SHA\n600820.SHA\n600823.SHA\n600827.SHA\n600835.SHA\n600839.SHA\n600859.SHA\n600862.SHA\n600863.SHA\n600867.SHA\n600869.SHA\n600871.SHA\n600875.SHA\n600879.SHA\n600881.SHA\n600884.SHA\n600885.SHA\n600895.SHA\n600901.SHA\n600903.SHA\n600908.SHA\n600909.SHA\n600917.SHA\n600928.SHA\n600959.SHA\n600967.SHA\n600968.SHA\n600970.SHA\n600985.SHA\n601000.SHA\n601003.SHA\n601005.SHA\n601016.SHA\n601068.SHA\n601098.SHA\n601099.SHA\n601106.SHA\n601118.SHA\n601127.SHA\n601128.SHA\n601139.SHA\n601168.SHA\n601179.SHA\n601200.SHA\n601228.SHA\n601233.SHA\n601298.SHA\n601333.SHA\n601456.SHA\n601512.SHA\n601598.SHA\n601608.SHA\n601611.SHA\n601615.SHA\n601689.SHA\n601699.SHA\n601717.SHA\n601718.SHA\n601778.SHA\n601799.SHA\n601801.SHA\n601828.SHA\n601860.SHA\n601865.SHA\n601866.SHA\n601869.SHA\n601880.SHA\n601928.SHA\n601958.SHA\n601966.SHA\n601969.SHA\n601975.SHA\n601992.SHA\n601997.SHA\n603000.SHA\n603056.SHA\n603077.SHA\n603198.SHA\n603225.SHA\n603228.SHA\n603256.SHA\n603260.SHA\n603290.SHA\n603317.SHA\n603328.SHA\n603338.SHA\n603345.SHA\n603355.SHA\n603377.SHA\n603379.SHA\n603444.SHA\n603486.SHA\n603515.SHA\n603568.SHA\n603589.SHA\n603605.SHA\n603638.SHA\n603650.SHA\n603708.SHA\n603712.SHA\n603719.SHA\n603737.SHA\n603786.SHA\n603806.SHA\n603816.SHA\n603858.SHA\n603866.SHA\n603868.SHA\n603882.SHA\n603883.SHA\n603885.SHA\n603888.SHA\n603893.SHA\n603927.SHA\n603983.SHA\n688002.SHA\n688029.SHA\n688088.SHA\n688099.SHA\n688321.SHA","type":"Literal","bound_global_parameter":null},{"name":"max_count","value":"0","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"rolling_conf","node_id":"287d2cb0-f53c-4101-bdf8-104b137c8601-62"}],"output_ports":[{"name":"data","node_id":"287d2cb0-f53c-4101-bdf8-104b137c8601-62"}],"cacheable":true,"seq_num":9,"comment":"预测数据,用于回测和模拟","comment_collapsed":false},{"node_id":"-106","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":"-106"},{"name":"features","node_id":"-106"}],"output_ports":[{"name":"data","node_id":"-106"}],"cacheable":true,"seq_num":15,"comment":"","comment_collapsed":true},{"node_id":"-113","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":"True","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":"-113"},{"name":"features","node_id":"-113"}],"output_ports":[{"name":"data","node_id":"-113"}],"cacheable":true,"seq_num":16,"comment":"","comment_collapsed":true},{"node_id":"-122","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":"-122"},{"name":"features","node_id":"-122"}],"output_ports":[{"name":"data","node_id":"-122"}],"cacheable":true,"seq_num":17,"comment":"","comment_collapsed":true},{"node_id":"-129","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":"True","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":"-129"},{"name":"features","node_id":"-129"}],"output_ports":[{"name":"data","node_id":"-129"}],"cacheable":true,"seq_num":18,"comment":"","comment_collapsed":true},{"node_id":"-160","module_id":"BigQuantSpace.dl_layer_input.dl_layer_input-v1","parameters":[{"name":"shape","value":"1,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":"-160"}],"output_ports":[{"name":"data","node_id":"-160"}],"cacheable":false,"seq_num":6,"comment":"","comment_collapsed":true},{"node_id":"-1098","module_id":"BigQuantSpace.dl_model_train.dl_model_train-v1","parameters":[{"name":"optimizer","value":"自定义","type":"Literal","bound_global_parameter":null},{"name":"user_optimizer","value":"from tensorflow.keras import optimizers \nbigquant_run=optimizers.Adam(lr=0.00085)","type":"Literal","bound_global_parameter":null},{"name":"loss","value":"mean_squared_error","type":"Literal","bound_global_parameter":null},{"name":"user_loss","value":"","type":"Literal","bound_global_parameter":null},{"name":"metrics","value":"mae","type":"Literal","bound_global_parameter":null},{"name":"batch_size","value":"2048","type":"Literal","bound_global_parameter":null},{"name":"epochs","value":"1","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":"-1098"},{"name":"training_data","node_id":"-1098"},{"name":"validation_data","node_id":"-1098"}],"output_ports":[{"name":"data","node_id":"-1098"}],"cacheable":true,"seq_num":5,"comment":"","comment_collapsed":true},{"node_id":"-1540","module_id":"BigQuantSpace.dl_model_predict.dl_model_predict-v1","parameters":[{"name":"batch_size","value":"1024","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":"-1540"},{"name":"input_data","node_id":"-1540"}],"output_ports":[{"name":"data","node_id":"-1540"}],"cacheable":true,"seq_num":11,"comment":"","comment_collapsed":true},{"node_id":"-2431","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 pred_label = input_1.read_pickle()\n df = input_2.read_df()\n df = pd.DataFrame({'pred_label':pred_label[:,0], 'instrument':df.instrument, 'date':df.date})\n df.sort_values(['date','pred_label'],inplace=True, ascending=[True,False])\n return Outputs(data_1=DataSource.write_df(df), data_2=None, 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":"-2431"},{"name":"input_2","node_id":"-2431"},{"name":"input_3","node_id":"-2431"}],"output_ports":[{"name":"data_1","node_id":"-2431"},{"name":"data_2","node_id":"-2431"},{"name":"data_3","node_id":"-2431"}],"cacheable":true,"seq_num":24,"comment":"","comment_collapsed":true},{"node_id":"-768","module_id":"BigQuantSpace.standardlize.standardlize-v8","parameters":[{"name":"columns_input","value":"[]","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"input_1","node_id":"-768"},{"name":"input_2","node_id":"-768"}],"output_ports":[{"name":"data","node_id":"-768"}],"cacheable":true,"seq_num":14,"comment":"","comment_collapsed":true},{"node_id":"-773","module_id":"BigQuantSpace.standardlize.standardlize-v8","parameters":[{"name":"columns_input","value":"label","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"input_1","node_id":"-773"},{"name":"input_2","node_id":"-773"}],"output_ports":[{"name":"data","node_id":"-773"}],"cacheable":true,"seq_num":13,"comment":"","comment_collapsed":true},{"node_id":"-778","module_id":"BigQuantSpace.standardlize.standardlize-v8","parameters":[{"name":"columns_input","value":"[]","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"input_1","node_id":"-778"},{"name":"input_2","node_id":"-778"}],"output_ports":[{"name":"data","node_id":"-778"}],"cacheable":true,"seq_num":25,"comment":"","comment_collapsed":true},{"node_id":"-243","module_id":"BigQuantSpace.dl_convert_to_bin.dl_convert_to_bin-v2","parameters":[{"name":"window_size","value":"5","type":"Literal","bound_global_parameter":null},{"name":"feature_clip","value":"3","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":"-243"},{"name":"features","node_id":"-243"}],"output_ports":[{"name":"data","node_id":"-243"}],"cacheable":true,"seq_num":26,"comment":"","comment_collapsed":true},{"node_id":"-251","module_id":"BigQuantSpace.dl_convert_to_bin.dl_convert_to_bin-v2","parameters":[{"name":"window_size","value":"5","type":"Literal","bound_global_parameter":null},{"name":"feature_clip","value":"3","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":"-251"},{"name":"features","node_id":"-251"}],"output_ports":[{"name":"data","node_id":"-251"}],"cacheable":true,"seq_num":27,"comment":"","comment_collapsed":true},{"node_id":"-3880","module_id":"BigQuantSpace.dl_model_init.dl_model_init-v1","parameters":[],"input_ports":[{"name":"inputs","node_id":"-3880"},{"name":"outputs","node_id":"-3880"}],"output_ports":[{"name":"data","node_id":"-3880"}],"cacheable":false,"seq_num":34,"comment":"","comment_collapsed":true},{"node_id":"-3895","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 df = input_1.read_pickle()\n feature_len = len(input_2.read_pickle())\n \n \n df['x'] = df['x'].reshape(df['x'].shape[0], int(feature_len), int(df['x'].shape[1]/feature_len))\n \n data_1 = DataSource.write_pickle(df)\n return Outputs(data_1=data_1)\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":"-3895"},{"name":"input_2","node_id":"-3895"},{"name":"input_3","node_id":"-3895"}],"output_ports":[{"name":"data_1","node_id":"-3895"},{"name":"data_2","node_id":"-3895"},{"name":"data_3","node_id":"-3895"}],"cacheable":true,"seq_num":4,"comment":"","comment_collapsed":true},{"node_id":"-3907","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 df = input_1.read_pickle()\n feature_len = len(input_2.read_pickle())\n \n \n df['x'] = df['x'].reshape(df['x'].shape[0], int(feature_len), int(df['x'].shape[1]/feature_len))\n \n data_1 = DataSource.write_pickle(df)\n return Outputs(data_1=data_1)\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":"-3907"},{"name":"input_2","node_id":"-3907"},{"name":"input_3","node_id":"-3907"}],"output_ports":[{"name":"data_1","node_id":"-3907"},{"name":"data_2","node_id":"-3907"},{"name":"data_3","node_id":"-3907"}],"cacheable":true,"seq_num":8,"comment":"","comment_collapsed":true},{"node_id":"-356","module_id":"BigQuantSpace.dl_layer_lstm.dl_layer_lstm-v1","parameters":[{"name":"units","value":"1","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":"Zeros","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.01","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":"","type":"Literal","bound_global_parameter":null},{"name":"activity_regularizer_l2","value":"0.01","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.5","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":"-356"}],"output_ports":[{"name":"data","node_id":"-356"}],"cacheable":false,"seq_num":10,"comment":"","comment_collapsed":true},{"node_id":"-567","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":"dropout1","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"inputs","node_id":"-567"}],"output_ports":[{"name":"data","node_id":"-567"}],"cacheable":false,"seq_num":12,"comment":"","comment_collapsed":true},{"node_id":"-412","module_id":"BigQuantSpace.dl_layer_dense.dl_layer_dense-v1","parameters":[{"name":"units","value":"80","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":"L1L2","type":"Literal","bound_global_parameter":null},{"name":"activity_regularizer_l1","value":"0.005","type":"Literal","bound_global_parameter":null},{"name":"activity_regularizer_l2","value":"0.005","type":"Literal","bound_global_parameter":null},{"name":"user_activity_regularizer","value":"def bigquant_run(weight_matrix): \n from tensorflow.keras.constraints import maxnorm\n return 0.01 * K.sum(K.abs(weight_matrix))","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":"-412"}],"output_ports":[{"name":"data","node_id":"-412"}],"cacheable":false,"seq_num":20,"comment":"","comment_collapsed":true},{"node_id":"-574","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":"dropout2","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"inputs","node_id":"-574"}],"output_ports":[{"name":"data","node_id":"-574"}],"cacheable":false,"seq_num":21,"comment":"","comment_collapsed":true},{"node_id":"-440","module_id":"BigQuantSpace.dl_layer_dense.dl_layer_dense-v1","parameters":[{"name":"units","value":"1","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.003","type":"Literal","bound_global_parameter":null},{"name":"kernel_regularizer_l2","value":"0.003","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":"L1L2","type":"Literal","bound_global_parameter":null},{"name":"activity_regularizer_l1","value":"0.005","type":"Literal","bound_global_parameter":null},{"name":"activity_regularizer_l2","value":"0.005","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":"-440"}],"output_ports":[{"name":"data","node_id":"-440"}],"cacheable":false,"seq_num":22,"comment":"","comment_collapsed":true},{"node_id":"-1607","module_id":"BigQuantSpace.dl_layer_reshape.dl_layer_reshape-v1","parameters":[{"name":"target_shape","value":"1,5,1","type":"Literal","bound_global_parameter":null},{"name":"name","value":"","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"inputs","node_id":"-1607"}],"output_ports":[{"name":"data","node_id":"-1607"}],"cacheable":false,"seq_num":23,"comment":"","comment_collapsed":true},{"node_id":"-408","module_id":"BigQuantSpace.dl_layer_conv2d.dl_layer_conv2d-v1","parameters":[{"name":"filters","value":"40","type":"Literal","bound_global_parameter":null},{"name":"kernel_size","value":"1,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":28,"comment":"","comment_collapsed":true},{"node_id":"-453","module_id":"BigQuantSpace.dl_layer_reshape.dl_layer_reshape-v1","parameters":[{"name":"target_shape","value":"1,40","type":"Literal","bound_global_parameter":null},{"name":"name","value":"","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"inputs","node_id":"-453"}],"output_ports":[{"name":"data","node_id":"-453"}],"cacheable":false,"seq_num":29,"comment":"","comment_collapsed":true},{"node_id":"-1356","module_id":"BigQuantSpace.chinaa_stock_filter.chinaa_stock_filter-v1","parameters":[{"name":"index_constituent_cond","value":"%7B%22enumItems%22%3A%5B%7B%22value%22%3A%22%E5%85%A8%E9%83%A8%22%2C%22displayValue%22%3A%22%E5%85%A8%E9%83%A8%22%2C%22selected%22%3Atrue%7D%2C%7B%22value%22%3A%22%E4%B8%8A%E8%AF%8150%22%2C%22displayValue%22%3A%22%E4%B8%8A%E8%AF%8150%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E6%B2%AA%E6%B7%B1300%22%2C%22displayValue%22%3A%22%E6%B2%AA%E6%B7%B1300%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E4%B8%AD%E8%AF%81500%22%2C%22displayValue%22%3A%22%E4%B8%AD%E8%AF%81500%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E4%B8%AD%E8%AF%81800%22%2C%22displayValue%22%3A%22%E4%B8%AD%E8%AF%81800%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E4%B8%8A%E8%AF%81180%22%2C%22displayValue%22%3A%22%E4%B8%8A%E8%AF%81180%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E4%B8%AD%E8%AF%81100%22%2C%22displayValue%22%3A%22%E4%B8%AD%E8%AF%81100%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E6%B7%B1%E8%AF%81100%22%2C%22displayValue%22%3A%22%E6%B7%B1%E8%AF%81100%22%2C%22selected%22%3Afalse%7D%5D%7D","type":"Literal","bound_global_parameter":null},{"name":"board_cond","value":"%7B%22enumItems%22%3A%5B%7B%22value%22%3A%22%E5%85%A8%E9%83%A8%22%2C%22displayValue%22%3A%22%E5%85%A8%E9%83%A8%22%2C%22selected%22%3Atrue%7D%2C%7B%22value%22%3A%22%E4%B8%8A%E8%AF%81%E4%B8%BB%E6%9D%BF%22%2C%22displayValue%22%3A%22%E4%B8%8A%E8%AF%81%E4%B8%BB%E6%9D%BF%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E6%B7%B1%E8%AF%81%E4%B8%BB%E6%9D%BF%22%2C%22displayValue%22%3A%22%E6%B7%B1%E8%AF%81%E4%B8%BB%E6%9D%BF%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E5%88%9B%E4%B8%9A%E6%9D%BF%22%2C%22displayValue%22%3A%22%E5%88%9B%E4%B8%9A%E6%9D%BF%22%2C%22selected%22%3Afalse%7D%5D%7D","type":"Literal","bound_global_parameter":null},{"name":"industry_cond","value":"%7B%22enumItems%22%3A%5B%7B%22value%22%3A%22%E5%85%A8%E9%83%A8%22%2C%22displayValue%22%3A%22%E5%85%A8%E9%83%A8%22%2C%22selected%22%3Atrue%7D%2C%7B%22value%22%3A%22%E4%BA%A4%E9%80%9A%E8%BF%90%E8%BE%93%22%2C%22displayValue%22%3A%22%E4%BA%A4%E9%80%9A%E8%BF%90%E8%BE%93%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E4%BC%91%E9%97%B2%E6%9C%8D%E5%8A%A1%22%2C%22displayValue%22%3A%22%E4%BC%91%E9%97%B2%E6%9C%8D%E5%8A%A1%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E4%BC%A0%E5%AA%92%2F%E4%BF%A1%E6%81%AF%E6%9C%8D%E5%8A%A1%22%2C%22displayValue%22%3A%22%E4%BC%A0%E5%AA%92%2F%E4%BF%A1%E6%81%AF%E6%9C%8D%E5%8A%A1%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E5%85%AC%E7%94%A8%E4%BA%8B%E4%B8%9A%22%2C%22displayValue%22%3A%22%E5%85%AC%E7%94%A8%E4%BA%8B%E4%B8%9A%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E5%86%9C%E6%9E%97%E7%89%A7%E6%B8%94%22%2C%22displayValue%22%3A%22%E5%86%9C%E6%9E%97%E7%89%A7%E6%B8%94%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E5%8C%96%E5%B7%A5%22%2C%22displayValue%22%3A%22%E5%8C%96%E5%B7%A5%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E5%8C%BB%E8%8D%AF%E7%94%9F%E7%89%A9%22%2C%22displayValue%22%3A%22%E5%8C%BB%E8%8D%AF%E7%94%9F%E7%89%A9%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E5%95%86%E4%B8%9A%E8%B4%B8%E6%98%93%22%2C%22displayValue%22%3A%22%E5%95%86%E4%B8%9A%E8%B4%B8%E6%98%93%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E5%9B%BD%E9%98%B2%E5%86%9B%E5%B7%A5%22%2C%22displayValue%22%3A%22%E5%9B%BD%E9%98%B2%E5%86%9B%E5%B7%A5%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E5%AE%B6%E7%94%A8%E7%94%B5%E5%99%A8%22%2C%22displayValue%22%3A%22%E5%AE%B6%E7%94%A8%E7%94%B5%E5%99%A8%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E5%BB%BA%E7%AD%91%E6%9D%90%E6%96%99%2F%E5%BB%BA%E7%AD%91%E5%BB%BA%E6%9D%90%22%2C%22displayValue%22%3A%22%E5%BB%BA%E7%AD%91%E6%9D%90%E6%96%99%2F%E5%BB%BA%E7%AD%91%E5%BB%BA%E6%9D%90%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E5%BB%BA%E7%AD%91%E8%A3%85%E9%A5%B0%22%2C%22displayValue%22%3A%22%E5%BB%BA%E7%AD%91%E8%A3%85%E9%A5%B0%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E6%88%BF%E5%9C%B0%E4%BA%A7%22%2C%22displayValue%22%3A%22%E6%88%BF%E5%9C%B0%E4%BA%A7%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E6%9C%89%E8%89%B2%E9%87%91%E5%B1%9E%22%2C%22displayValue%22%3A%22%E6%9C%89%E8%89%B2%E9%87%91%E5%B1%9E%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E6%9C%BA%E6%A2%B0%E8%AE%BE%E5%A4%87%22%2C%22displayValue%22%3A%22%E6%9C%BA%E6%A2%B0%E8%AE%BE%E5%A4%87%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E6%B1%BD%E8%BD%A6%2F%E4%BA%A4%E8%BF%90%E8%AE%BE%E5%A4%87%22%2C%22displayValue%22%3A%22%E6%B1%BD%E8%BD%A6%2F%E4%BA%A4%E8%BF%90%E8%AE%BE%E5%A4%87%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E7%94%B5%E5%AD%90%22%2C%22displayValue%22%3A%22%E7%94%B5%E5%AD%90%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E7%94%B5%E6%B0%94%E8%AE%BE%E5%A4%87%22%2C%22displayValue%22%3A%22%E7%94%B5%E6%B0%94%E8%AE%BE%E5%A4%87%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E7%BA%BA%E7%BB%87%E6%9C%8D%E8%A3%85%22%2C%22displayValue%22%3A%22%E7%BA%BA%E7%BB%87%E6%9C%8D%E8%A3%85%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E7%BB%BC%E5%90%88%22%2C%22displayValue%22%3A%22%E7%BB%BC%E5%90%88%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E8%AE%A1%E7%AE%97%E6%9C%BA%22%2C%22displayValue%22%3A%22%E8%AE%A1%E7%AE%97%E6%9C%BA%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E8%BD%BB%E5%B7%A5%E5%88%B6%E9%80%A0%22%2C%22displayValue%22%3A%22%E8%BD%BB%E5%B7%A5%E5%88%B6%E9%80%A0%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E9%80%9A%E4%BF%A1%22%2C%22displayValue%22%3A%22%E9%80%9A%E4%BF%A1%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E9%87%87%E6%8E%98%22%2C%22displayValue%22%3A%22%E9%87%87%E6%8E%98%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E9%92%A2%E9%93%81%22%2C%22displayValue%22%3A%22%E9%92%A2%E9%93%81%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E9%93%B6%E8%A1%8C%22%2C%22displayValue%22%3A%22%E9%93%B6%E8%A1%8C%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E9%9D%9E%E9%93%B6%E9%87%91%E8%9E%8D%22%2C%22displayValue%22%3A%22%E9%9D%9E%E9%93%B6%E9%87%91%E8%9E%8D%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E9%A3%9F%E5%93%81%E9%A5%AE%E6%96%99%22%2C%22displayValue%22%3A%22%E9%A3%9F%E5%93%81%E9%A5%AE%E6%96%99%22%2C%22selected%22%3Afalse%7D%5D%7D","type":"Literal","bound_global_parameter":null},{"name":"st_cond","value":"%7B%22enumItems%22%3A%5B%7B%22value%22%3A%22%E5%85%A8%E9%83%A8%22%2C%22displayValue%22%3A%22%E5%85%A8%E9%83%A8%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E6%AD%A3%E5%B8%B8%22%2C%22displayValue%22%3A%22%E6%AD%A3%E5%B8%B8%22%2C%22selected%22%3Atrue%7D%2C%7B%22value%22%3A%22ST%22%2C%22displayValue%22%3A%22ST%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22*ST%22%2C%22displayValue%22%3A%22*ST%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E6%9A%82%E5%81%9C%E4%B8%8A%E5%B8%82%22%2C%22displayValue%22%3A%22%E6%9A%82%E5%81%9C%E4%B8%8A%E5%B8%82%22%2C%22selected%22%3Afalse%7D%5D%7D","type":"Literal","bound_global_parameter":null},{"name":"delist_cond","value":"%7B%22enumItems%22%3A%5B%7B%22value%22%3A%22%E5%85%A8%E9%83%A8%22%2C%22displayValue%22%3A%22%E5%85%A8%E9%83%A8%22%2C%22selected%22%3Atrue%7D%2C%7B%22value%22%3A%22%E9%80%80%E5%B8%82%22%2C%22displayValue%22%3A%22%E9%80%80%E5%B8%82%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E9%9D%9E%E9%80%80%E5%B8%82%22%2C%22displayValue%22%3A%22%E9%9D%9E%E9%80%80%E5%B8%82%22%2C%22selected%22%3Afalse%7D%5D%7D","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":"-1356"}],"output_ports":[{"name":"data","node_id":"-1356"},{"name":"left_data","node_id":"-1356"}],"cacheable":true,"seq_num":33,"comment":"","comment_collapsed":true},{"node_id":"-38928","module_id":"BigQuantSpace.chinaa_stock_filter.chinaa_stock_filter-v1","parameters":[{"name":"index_constituent_cond","value":"%7B%22enumItems%22%3A%5B%7B%22value%22%3A%22%E5%85%A8%E9%83%A8%22%2C%22displayValue%22%3A%22%E5%85%A8%E9%83%A8%22%2C%22selected%22%3Atrue%7D%2C%7B%22value%22%3A%22%E4%B8%8A%E8%AF%8150%22%2C%22displayValue%22%3A%22%E4%B8%8A%E8%AF%8150%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E6%B2%AA%E6%B7%B1300%22%2C%22displayValue%22%3A%22%E6%B2%AA%E6%B7%B1300%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E4%B8%AD%E8%AF%81500%22%2C%22displayValue%22%3A%22%E4%B8%AD%E8%AF%81500%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E4%B8%AD%E8%AF%81800%22%2C%22displayValue%22%3A%22%E4%B8%AD%E8%AF%81800%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E4%B8%8A%E8%AF%81180%22%2C%22displayValue%22%3A%22%E4%B8%8A%E8%AF%81180%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E4%B8%AD%E8%AF%81100%22%2C%22displayValue%22%3A%22%E4%B8%AD%E8%AF%81100%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E6%B7%B1%E8%AF%81100%22%2C%22displayValue%22%3A%22%E6%B7%B1%E8%AF%81100%22%2C%22selected%22%3Afalse%7D%5D%7D","type":"Literal","bound_global_parameter":null},{"name":"board_cond","value":"%7B%22enumItems%22%3A%5B%7B%22value%22%3A%22%E5%85%A8%E9%83%A8%22%2C%22displayValue%22%3A%22%E5%85%A8%E9%83%A8%22%2C%22selected%22%3Atrue%7D%2C%7B%22value%22%3A%22%E4%B8%8A%E8%AF%81%E4%B8%BB%E6%9D%BF%22%2C%22displayValue%22%3A%22%E4%B8%8A%E8%AF%81%E4%B8%BB%E6%9D%BF%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E6%B7%B1%E8%AF%81%E4%B8%BB%E6%9D%BF%22%2C%22displayValue%22%3A%22%E6%B7%B1%E8%AF%81%E4%B8%BB%E6%9D%BF%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E5%88%9B%E4%B8%9A%E6%9D%BF%22%2C%22displayValue%22%3A%22%E5%88%9B%E4%B8%9A%E6%9D%BF%22%2C%22selected%22%3Afalse%7D%5D%7D","type":"Literal","bound_global_parameter":null},{"name":"industry_cond","value":"%7B%22enumItems%22%3A%5B%7B%22value%22%3A%22%E5%85%A8%E9%83%A8%22%2C%22displayValue%22%3A%22%E5%85%A8%E9%83%A8%22%2C%22selected%22%3Atrue%7D%2C%7B%22value%22%3A%22%E4%BA%A4%E9%80%9A%E8%BF%90%E8%BE%93%22%2C%22displayValue%22%3A%22%E4%BA%A4%E9%80%9A%E8%BF%90%E8%BE%93%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E4%BC%91%E9%97%B2%E6%9C%8D%E5%8A%A1%22%2C%22displayValue%22%3A%22%E4%BC%91%E9%97%B2%E6%9C%8D%E5%8A%A1%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E4%BC%A0%E5%AA%92%2F%E4%BF%A1%E6%81%AF%E6%9C%8D%E5%8A%A1%22%2C%22displayValue%22%3A%22%E4%BC%A0%E5%AA%92%2F%E4%BF%A1%E6%81%AF%E6%9C%8D%E5%8A%A1%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E5%85%AC%E7%94%A8%E4%BA%8B%E4%B8%9A%22%2C%22displayValue%22%3A%22%E5%85%AC%E7%94%A8%E4%BA%8B%E4%B8%9A%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E5%86%9C%E6%9E%97%E7%89%A7%E6%B8%94%22%2C%22displayValue%22%3A%22%E5%86%9C%E6%9E%97%E7%89%A7%E6%B8%94%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E5%8C%96%E5%B7%A5%22%2C%22displayValue%22%3A%22%E5%8C%96%E5%B7%A5%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E5%8C%BB%E8%8D%AF%E7%94%9F%E7%89%A9%22%2C%22displayValue%22%3A%22%E5%8C%BB%E8%8D%AF%E7%94%9F%E7%89%A9%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E5%95%86%E4%B8%9A%E8%B4%B8%E6%98%93%22%2C%22displayValue%22%3A%22%E5%95%86%E4%B8%9A%E8%B4%B8%E6%98%93%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E5%9B%BD%E9%98%B2%E5%86%9B%E5%B7%A5%22%2C%22displayValue%22%3A%22%E5%9B%BD%E9%98%B2%E5%86%9B%E5%B7%A5%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E5%AE%B6%E7%94%A8%E7%94%B5%E5%99%A8%22%2C%22displayValue%22%3A%22%E5%AE%B6%E7%94%A8%E7%94%B5%E5%99%A8%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E5%BB%BA%E7%AD%91%E6%9D%90%E6%96%99%2F%E5%BB%BA%E7%AD%91%E5%BB%BA%E6%9D%90%22%2C%22displayValue%22%3A%22%E5%BB%BA%E7%AD%91%E6%9D%90%E6%96%99%2F%E5%BB%BA%E7%AD%91%E5%BB%BA%E6%9D%90%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E5%BB%BA%E7%AD%91%E8%A3%85%E9%A5%B0%22%2C%22displayValue%22%3A%22%E5%BB%BA%E7%AD%91%E8%A3%85%E9%A5%B0%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E6%88%BF%E5%9C%B0%E4%BA%A7%22%2C%22displayValue%22%3A%22%E6%88%BF%E5%9C%B0%E4%BA%A7%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E6%9C%89%E8%89%B2%E9%87%91%E5%B1%9E%22%2C%22displayValue%22%3A%22%E6%9C%89%E8%89%B2%E9%87%91%E5%B1%9E%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E6%9C%BA%E6%A2%B0%E8%AE%BE%E5%A4%87%22%2C%22displayValue%22%3A%22%E6%9C%BA%E6%A2%B0%E8%AE%BE%E5%A4%87%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E6%B1%BD%E8%BD%A6%2F%E4%BA%A4%E8%BF%90%E8%AE%BE%E5%A4%87%22%2C%22displayValue%22%3A%22%E6%B1%BD%E8%BD%A6%2F%E4%BA%A4%E8%BF%90%E8%AE%BE%E5%A4%87%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E7%94%B5%E5%AD%90%22%2C%22displayValue%22%3A%22%E7%94%B5%E5%AD%90%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E7%94%B5%E6%B0%94%E8%AE%BE%E5%A4%87%22%2C%22displayValue%22%3A%22%E7%94%B5%E6%B0%94%E8%AE%BE%E5%A4%87%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E7%BA%BA%E7%BB%87%E6%9C%8D%E8%A3%85%22%2C%22displayValue%22%3A%22%E7%BA%BA%E7%BB%87%E6%9C%8D%E8%A3%85%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E7%BB%BC%E5%90%88%22%2C%22displayValue%22%3A%22%E7%BB%BC%E5%90%88%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E8%AE%A1%E7%AE%97%E6%9C%BA%22%2C%22displayValue%22%3A%22%E8%AE%A1%E7%AE%97%E6%9C%BA%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E8%BD%BB%E5%B7%A5%E5%88%B6%E9%80%A0%22%2C%22displayValue%22%3A%22%E8%BD%BB%E5%B7%A5%E5%88%B6%E9%80%A0%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E9%80%9A%E4%BF%A1%22%2C%22displayValue%22%3A%22%E9%80%9A%E4%BF%A1%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E9%87%87%E6%8E%98%22%2C%22displayValue%22%3A%22%E9%87%87%E6%8E%98%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E9%92%A2%E9%93%81%22%2C%22displayValue%22%3A%22%E9%92%A2%E9%93%81%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E9%93%B6%E8%A1%8C%22%2C%22displayValue%22%3A%22%E9%93%B6%E8%A1%8C%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E9%9D%9E%E9%93%B6%E9%87%91%E8%9E%8D%22%2C%22displayValue%22%3A%22%E9%9D%9E%E9%93%B6%E9%87%91%E8%9E%8D%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E9%A3%9F%E5%93%81%E9%A5%AE%E6%96%99%22%2C%22displayValue%22%3A%22%E9%A3%9F%E5%93%81%E9%A5%AE%E6%96%99%22%2C%22selected%22%3Afalse%7D%5D%7D","type":"Literal","bound_global_parameter":null},{"name":"st_cond","value":"%7B%22enumItems%22%3A%5B%7B%22value%22%3A%22%E5%85%A8%E9%83%A8%22%2C%22displayValue%22%3A%22%E5%85%A8%E9%83%A8%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E6%AD%A3%E5%B8%B8%22%2C%22displayValue%22%3A%22%E6%AD%A3%E5%B8%B8%22%2C%22selected%22%3Atrue%7D%2C%7B%22value%22%3A%22ST%22%2C%22displayValue%22%3A%22ST%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22*ST%22%2C%22displayValue%22%3A%22*ST%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E6%9A%82%E5%81%9C%E4%B8%8A%E5%B8%82%22%2C%22displayValue%22%3A%22%E6%9A%82%E5%81%9C%E4%B8%8A%E5%B8%82%22%2C%22selected%22%3Afalse%7D%5D%7D","type":"Literal","bound_global_parameter":null},{"name":"delist_cond","value":"%7B%22enumItems%22%3A%5B%7B%22value%22%3A%22%E5%85%A8%E9%83%A8%22%2C%22displayValue%22%3A%22%E5%85%A8%E9%83%A8%22%2C%22selected%22%3Atrue%7D%2C%7B%22value%22%3A%22%E9%80%80%E5%B8%82%22%2C%22displayValue%22%3A%22%E9%80%80%E5%B8%82%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E9%9D%9E%E9%80%80%E5%B8%82%22%2C%22displayValue%22%3A%22%E9%9D%9E%E9%80%80%E5%B8%82%22%2C%22selected%22%3Afalse%7D%5D%7D","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":"-38928"}],"output_ports":[{"name":"data","node_id":"-38928"},{"name":"left_data","node_id":"-38928"}],"cacheable":true,"seq_num":35,"comment":"","comment_collapsed":true},{"node_id":"-498","module_id":"BigQuantSpace.aa.aa-v5","parameters":[{"name":"day_number","value":"150","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"input_data","node_id":"-498"}],"output_ports":[{"name":"data","node_id":"-498"}],"cacheable":true,"seq_num":36,"comment":"","comment_collapsed":true},{"node_id":"-502","module_id":"BigQuantSpace.aa.aa-v5","parameters":[{"name":"day_number","value":"150","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"input_data","node_id":"-502"}],"output_ports":[{"name":"data","node_id":"-502"}],"cacheable":true,"seq_num":37,"comment":"","comment_collapsed":true},{"node_id":"-417","module_id":"BigQuantSpace.dl_layer_lstm.dl_layer_lstm-v1","parameters":[{"name":"units","value":"1","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":"Zeros","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.005","type":"Literal","bound_global_parameter":null},{"name":"kernel_regularizer_l2","value":"0.005","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.01","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":"","type":"Literal","bound_global_parameter":null},{"name":"activity_regularizer_l2","value":"0.01","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.5","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":"-417"}],"output_ports":[{"name":"data","node_id":"-417"}],"cacheable":false,"seq_num":39,"comment":"","comment_collapsed":true},{"node_id":"-460","module_id":"BigQuantSpace.dl_layer_reshape.dl_layer_reshape-v1","parameters":[{"name":"target_shape","value":"1,1","type":"Literal","bound_global_parameter":null},{"name":"name","value":"","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"inputs","node_id":"-460"}],"output_ports":[{"name":"data","node_id":"-460"}],"cacheable":false,"seq_num":41,"comment":"","comment_collapsed":true},{"node_id":"-4847","module_id":"BigQuantSpace.input_features.input_features-v1","parameters":[{"name":"features","value":"market_cap_0","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"features_ds","node_id":"-4847"}],"output_ports":[{"name":"data","node_id":"-4847"}],"cacheable":true,"seq_num":43,"comment":"","comment_collapsed":true},{"node_id":"-910","module_id":"BigQuantSpace.filter.filter-v3","parameters":[{"name":"expr","value":"market_cap_0>2000000000","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":"-910"}],"output_ports":[{"name":"data","node_id":"-910"},{"name":"left_data","node_id":"-910"}],"cacheable":true,"seq_num":44,"comment":"","comment_collapsed":true},{"node_id":"-6480","module_id":"BigQuantSpace.filter.filter-v3","parameters":[{"name":"expr","value":"market_cap_0>2000000000","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":"-6480"}],"output_ports":[{"name":"data","node_id":"-6480"},{"name":"left_data","node_id":"-6480"}],"cacheable":true,"seq_num":45,"comment":"","comment_collapsed":true},{"node_id":"-455","module_id":"BigQuantSpace.dropnan.dropnan-v2","parameters":[],"input_ports":[{"name":"input_data","node_id":"-455"},{"name":"features","node_id":"-455"}],"output_ports":[{"name":"data","node_id":"-455"}],"cacheable":true,"seq_num":54,"comment":"","comment_collapsed":true},{"node_id":"-459","module_id":"BigQuantSpace.dropnan.dropnan-v2","parameters":[],"input_ports":[{"name":"input_data","node_id":"-459"},{"name":"features","node_id":"-459"}],"output_ports":[{"name":"data","node_id":"-459"}],"cacheable":true,"seq_num":55,"comment":"","comment_collapsed":true},{"node_id":"-12012","module_id":"BigQuantSpace.dl_layer_dense.dl_layer_dense-v1","parameters":[{"name":"units","value":"60","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.001","type":"Literal","bound_global_parameter":null},{"name":"kernel_regularizer_l2","value":"0.001","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":"L1L2","type":"Literal","bound_global_parameter":null},{"name":"activity_regularizer_l1","value":"0.005","type":"Literal","bound_global_parameter":null},{"name":"activity_regularizer_l2","value":"0.005","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":"-12012"}],"output_ports":[{"name":"data","node_id":"-12012"}],"cacheable":false,"seq_num":30,"comment":"","comment_collapsed":true},{"node_id":"-12040","module_id":"BigQuantSpace.dl_layer_dropout.dl_layer_dropout-v1","parameters":[{"name":"rate","value":"0.3","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":"dropout2","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"inputs","node_id":"-12040"}],"output_ports":[{"name":"data","node_id":"-12040"}],"cacheable":false,"seq_num":56,"comment":"","comment_collapsed":true},{"node_id":"-7814","module_id":"BigQuantSpace.dl_layer_reshape.dl_layer_reshape-v1","parameters":[{"name":"target_shape","value":"1,1","type":"Literal","bound_global_parameter":null},{"name":"name","value":"","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"inputs","node_id":"-7814"}],"output_ports":[{"name":"data","node_id":"-7814"}],"cacheable":false,"seq_num":38,"comment":"","comment_collapsed":true},{"node_id":"-7819","module_id":"BigQuantSpace.dl_layer_lstm.dl_layer_lstm-v1","parameters":[{"name":"units","value":"1","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":"Zeros","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.005","type":"Literal","bound_global_parameter":null},{"name":"kernel_regularizer_l2","value":"0.005","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.01","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":"","type":"Literal","bound_global_parameter":null},{"name":"activity_regularizer_l2","value":"0.01","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.5","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":"-7819"}],"output_ports":[{"name":"data","node_id":"-7819"}],"cacheable":false,"seq_num":57,"comment":"","comment_collapsed":true},{"node_id":"-613","module_id":"BigQuantSpace.hyper_rolling_train.hyper_rolling_train-v1","parameters":[{"name":"run","value":"def bigquant_run(\n bq_graph,\n inputs,\n trading_days_market='CN', # 使用那个市场的交易日历\n train_instruments_mid='m31', # 训练数据 证券代码列表 模块id\n test_instruments_mid='m9', # 测试数据 证券代码列表 模块id\n predict_mid='m24', # 预测 模块id\n trade_mid='m40', # 回测 模块id\n start_date='2017-08-01', # 数据开始日期\n end_date=T.live_run_param('trading_date', '2018-12-31'), # 数据结束日期\n train_update_days=30, # 更新周期,按交易日计算,每多少天更新一次\n train_update_days_for_live=30, #模拟实盘模式下的更新周期,按交易日计算,每多少天更新一次。如果需要在模拟实盘阶段使用不同的模型更新周期,可以设置这个参数\n train_data_min_days=125, # 最小数据天数,按交易日计算,所以第一个滚动的结束日期是 从开始日期到开始日期+最小数据天数\n train_data_max_days=125, # 最大数据天数,按交易日计算,0,表示没有限制,否则每一个滚动的开始日期=max(此滚动的结束日期-最大数据天数, 开始日期\n rolling_count_for_live=1, #实盘模式下滚动次数,模拟实盘模式下,取最后多少次滚动。一般在模拟实盘模式下,只用到最后一次滚动训练的模型,这里可以设置为1;如果你的滚动训练数据时间段很短,以至于期间可能没有训练数据,这里可以设置大一点。0表示没有限制\n):\n def merge_datasources(input_1):\n df_list = [ds.read_df() for ds in input_1]\n df = pd.concat(df_list)\n instrument_data = {\n 'start_date': df['date'].min().strftime('%Y-%m-%d'),\n 'end_date': df['date'].max().strftime('%Y-%m-%d'),\n 'instruments': list(set(df['instrument'])),\n }\n return Outputs(data=DataSource.write_df(df), instrument_data=DataSource.write_pickle(instrument_data))\n\n 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):\n # 是否实盘模式\n tdays = list(D.trading_days(market=trading_days_market, start_date=start_date, end_date=end_date)['date'])\n is_live_run = T.live_run_param('trading_date', None) is not None\n\n if is_live_run and train_update_days_for_live:\n train_update_days = train_update_days_for_live\n\n rollings = []\n train_end_date = train_data_min_days\n while train_end_date < len(tdays):\n if train_data_max_days is not None:\n train_start_date = max(train_end_date - train_data_max_days, 0)\n else:\n train_start_date = start_date\n rollings.append({\n 'train_start_date': tdays[train_start_date].strftime('%Y-%m-%d'),\n 'train_end_date': tdays[train_end_date - 1].strftime('%Y-%m-%d'),\n 'test_start_date': tdays[train_end_date].strftime('%Y-%m-%d'),\n 'test_end_date': tdays[min(train_end_date + train_update_days, len(tdays)) - 1].strftime('%Y-%m-%d'),\n })\n train_end_date += train_update_days\n\n if not rollings:\n raise Exception('没有滚动需要执行,请检查配置')\n\n if is_live_run and rolling_count_for_live:\n rollings = rollings[-rolling_count_for_live:]\n\n return rollings\n\n g = bq_graph\n\n rolling_dates = gen_rolling_dates(\n 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)\n\n # 训练和预测\n results = []\n for rolling in rolling_dates:\n parameters = {}\n # 先禁用回测\n parameters[trade_mid + '.__enabled__'] = False\n parameters[train_instruments_mid + '.start_date'] = rolling['train_start_date']\n parameters[train_instruments_mid + '.end_date'] = rolling['train_end_date']\n parameters[test_instruments_mid + '.start_date'] = rolling['test_start_date']\n parameters[test_instruments_mid + '.end_date'] = rolling['test_end_date']\n # print('------ rolling_train:', parameters)\n results.append(g.run(parameters))\n\n # 合并预测结果并回测\n mx = M.cached.v3(run=merge_datasources, input_1=[result[predict_mid].data_1 for result in results])\n parameters = {}\n parameters['*.__enabled__'] = False\n parameters[trade_mid + '.__enabled__'] = True\n parameters[trade_mid + '.instruments'] = mx.instrument_data\n parameters[trade_mid + '.options_data'] = mx.data\n\n trade = g.run(parameters)\n\n return {'rollings': results, 'trade': trade}\n","type":"Literal","bound_global_parameter":null},{"name":"run_now","value":"True","type":"Literal","bound_global_parameter":null},{"name":"bq_graph","value":"True","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"bq_graph_port","node_id":"-613"},{"name":"input_1","node_id":"-613"},{"name":"input_2","node_id":"-613"},{"name":"input_3","node_id":"-613"}],"output_ports":[{"name":"result","node_id":"-613"}],"cacheable":false,"seq_num":42,"comment":"","comment_collapsed":true},{"node_id":"-7448","module_id":"BigQuantSpace.dl_layer_dense.dl_layer_dense-v1","parameters":[{"name":"units","value":"40","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.001","type":"Literal","bound_global_parameter":null},{"name":"kernel_regularizer_l2","value":"0.001","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":"L1L2","type":"Literal","bound_global_parameter":null},{"name":"activity_regularizer_l1","value":"0.005","type":"Literal","bound_global_parameter":null},{"name":"activity_regularizer_l2","value":"0.005","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":"-7448"}],"output_ports":[{"name":"data","node_id":"-7448"}],"cacheable":false,"seq_num":59,"comment":"","comment_collapsed":true},{"node_id":"-4357","module_id":"BigQuantSpace.instruments.instruments-v2","parameters":[{"name":"start_date","value":"2014-01-01","type":"Literal","bound_global_parameter":null},{"name":"end_date","value":"2016-12-31","type":"Literal","bound_global_parameter":null},{"name":"market","value":"CN_STOCK_A","type":"Literal","bound_global_parameter":null},{"name":"instrument_list","value":"000008.SZA\n000009.SZA\n000012.SZA\n000021.SZA\n000027.SZA\n000028.SZA\n000031.SZA\n000039.SZA\n000046.SZA\n000050.SZA\n000060.SZA\n000061.SZA\n000062.SZA\n000078.SZA\n000089.SZA\n000090.SZA\n000156.SZA\n000158.SZA\n000301.SZA\n000400.SZA\n000401.SZA\n000402.SZA\n000415.SZA\n000488.SZA\n000501.SZA\n000513.SZA\n000519.SZA\n000528.SZA\n000537.SZA\n000540.SZA\n000543.SZA\n000547.SZA\n000553.SZA\n000559.SZA\n000563.SZA\n000564.SZA\n000581.SZA\n000598.SZA\n000600.SZA\n000623.SZA\n000629.SZA\n000630.SZA\n000636.SZA\n000681.SZA\n000685.SZA\n000686.SZA\n000690.SZA\n000709.SZA\n000717.SZA\n000718.SZA\n000729.SZA\n000732.SZA\n000738.SZA\n000739.SZA\n000750.SZA\n000758.SZA\n000778.SZA\n000807.SZA\n000813.SZA\n000825.SZA\n000826.SZA\n000830.SZA\n000869.SZA\n000877.SZA\n000878.SZA\n000883.SZA\n000887.SZA\n000898.SZA\n000930.SZA\n000932.SZA\n000937.SZA\n000959.SZA\n000960.SZA\n000967.SZA\n000970.SZA\n000975.SZA\n000983.SZA\n000988.SZA\n000990.SZA\n000997.SZA\n000998.SZA\n000999.SZA\n001872.SZA\n001914.SZA\n002002.SZA\n002004.SZA\n002010.SZA\n002013.SZA\n002019.SZA\n002028.SZA\n002030.SZA\n002038.SZA\n002048.SZA\n002051.SZA\n002056.SZA\n002064.SZA\n002074.SZA\n002075.SZA\n002078.SZA\n002080.SZA\n002081.SZA\n002085.SZA\n002092.SZA\n002093.SZA\n002110.SZA\n002124.SZA\n002128.SZA\n002131.SZA\n002138.SZA\n002152.SZA\n002155.SZA\n002156.SZA\n002174.SZA\n002183.SZA\n002185.SZA\n002191.SZA\n002195.SZA\n002203.SZA\n002212.SZA\n002217.SZA\n002221.SZA\n002223.SZA\n002233.SZA\n002242.SZA\n002244.SZA\n002249.SZA\n002250.SZA\n002266.SZA\n002268.SZA\n002273.SZA\n002281.SZA\n002294.SZA\n002299.SZA\n002302.SZA\n002317.SZA\n002340.SZA\n002353.SZA\n002368.SZA\n002372.SZA\n002373.SZA\n002375.SZA\n002382.SZA\n002385.SZA\n002387.SZA\n002390.SZA\n002396.SZA\n002399.SZA\n002408.SZA\n002416.SZA\n002419.SZA\n002423.SZA\n002424.SZA\n002429.SZA\n002434.SZA\n002440.SZA\n002444.SZA\n002458.SZA\n002465.SZA\n002468.SZA\n002500.SZA\n002503.SZA\n002505.SZA\n002506.SZA\n002507.SZA\n002511.SZA\n002544.SZA\n002557.SZA\n002563.SZA\n002568.SZA\n002572.SZA\n002583.SZA\n002589.SZA\n002595.SZA\n002603.SZA\n002625.SZA\n002635.SZA\n002640.SZA\n002648.SZA\n002653.SZA\n002670.SZA\n002683.SZA\n002690.SZA\n002701.SZA\n002705.SZA\n002709.SZA\n002745.SZA\n002791.SZA\n002797.SZA\n002807.SZA\n002815.SZA\n002818.SZA\n002831.SZA\n002839.SZA\n002867.SZA\n002901.SZA\n002920.SZA\n002925.SZA\n002926.SZA\n002936.SZA\n002941.SZA\n002946.SZA\n002948.SZA\n002957.SZA\n002966.SZA\n002985.SZA\n300001.SZA\n300002.SZA\n300009.SZA\n300010.SZA\n300012.SZA\n300017.SZA\n300024.SZA\n300026.SZA\n300058.SZA\n300070.SZA\n300072.SZA\n300088.SZA\n300113.SZA\n300115.SZA\n300133.SZA\n300134.SZA\n300146.SZA\n300166.SZA\n300168.SZA\n300180.SZA\n300182.SZA\n300207.SZA\n300212.SZA\n300223.SZA\n300244.SZA\n300257.SZA\n300271.SZA\n300274.SZA\n300285.SZA\n300296.SZA\n300315.SZA\n300316.SZA\n300324.SZA\n300357.SZA\n300376.SZA\n300418.SZA\n300459.SZA\n300463.SZA\n300474.SZA\n300482.SZA\n300496.SZA\n300595.SZA\n300618.SZA\n300630.SZA\n300699.SZA\n600006.SHA\n600008.SHA\n600021.SHA\n600022.SHA\n600026.SHA\n600037.SHA\n600038.SHA\n600039.SHA\n600053.SHA\n600056.SHA\n600060.SHA\n600062.SHA\n600064.SHA\n600073.SHA\n600079.SHA\n600089.SHA\n600094.SHA\n600120.SHA\n600126.SHA\n600131.SHA\n600132.SHA\n600141.SHA\n600143.SHA\n600153.SHA\n600155.SHA\n600158.SHA\n600160.SHA\n600166.SHA\n600167.SHA\n600170.SHA\n600171.SHA\n600188.SHA\n600195.SHA\n600201.SHA\n600216.SHA\n600219.SHA\n600256.SHA\n600258.SHA\n600259.SHA\n600260.SHA\n600266.SHA\n600273.SHA\n600277.SHA\n600282.SHA\n600291.SHA\n600307.SHA\n600312.SHA\n600315.SHA\n600316.SHA\n600325.SHA\n600329.SHA\n600338.SHA\n600339.SHA\n600348.SHA\n600350.SHA\n600372.SHA\n600373.SHA\n600376.SHA\n600380.SHA\n600388.SHA\n600392.SHA\n600398.SHA\n600409.SHA\n600410.SHA\n600415.SHA\n600418.SHA\n600426.SHA\n600435.SHA\n600446.SHA\n600460.SHA\n600466.SHA\n600486.SHA\n600497.SHA\n600500.SHA\n600507.SHA\n600511.SHA\n600515.SHA\n600516.SHA\n600517.SHA\n600528.SHA\n600529.SHA\n600535.SHA\n600545.SHA\n600546.SHA\n600549.SHA\n600556.SHA\n600563.SHA\n600566.SHA\n600567.SHA\n600572.SHA\n600575.SHA\n600580.SHA\n600582.SHA\n600597.SHA\n600598.SHA\n600623.SHA\n600633.SHA\n600639.SHA\n600640.SHA\n600642.SHA\n600643.SHA\n600645.SHA\n600648.SHA\n600649.SHA\n600657.SHA\n600664.SHA\n600667.SHA\n600673.SHA\n600675.SHA\n600699.SHA\n600704.SHA\n600707.SHA\n600717.SHA\n600718.SHA\n600728.SHA\n600729.SHA\n600733.SHA\n600737.SHA\n600739.SHA\n600748.SHA\n600754.SHA\n600755.SHA\n600765.SHA\n600776.SHA\n600779.SHA\n600782.SHA\n600787.SHA\n600801.SHA\n600804.SHA\n600808.SHA\n600811.SHA\n600820.SHA\n600823.SHA\n600827.SHA\n600835.SHA\n600839.SHA\n600859.SHA\n600862.SHA\n600863.SHA\n600867.SHA\n600869.SHA\n600871.SHA\n600875.SHA\n600879.SHA\n600881.SHA\n600884.SHA\n600885.SHA\n600895.SHA\n600901.SHA\n600903.SHA\n600908.SHA\n600909.SHA\n600917.SHA\n600928.SHA\n600959.SHA\n600967.SHA\n600968.SHA\n600970.SHA\n600985.SHA\n601000.SHA\n601003.SHA\n601005.SHA\n601016.SHA\n601068.SHA\n601098.SHA\n601099.SHA\n601106.SHA\n601118.SHA\n601127.SHA\n601128.SHA\n601139.SHA\n601168.SHA\n601179.SHA\n601200.SHA\n601228.SHA\n601233.SHA\n601298.SHA\n601333.SHA\n601456.SHA\n601512.SHA\n601598.SHA\n601608.SHA\n601611.SHA\n601615.SHA\n601689.SHA\n601699.SHA\n601717.SHA\n601718.SHA\n601778.SHA\n601799.SHA\n601801.SHA\n601828.SHA\n601860.SHA\n601865.SHA\n601866.SHA\n601869.SHA\n601880.SHA\n601928.SHA\n601958.SHA\n601966.SHA\n601969.SHA\n601975.SHA\n601992.SHA\n601997.SHA\n603000.SHA\n603056.SHA\n603077.SHA\n603198.SHA\n603225.SHA\n603228.SHA\n603256.SHA\n603260.SHA\n603290.SHA\n603317.SHA\n603328.SHA\n603338.SHA\n603345.SHA\n603355.SHA\n603377.SHA\n603379.SHA\n603444.SHA\n603486.SHA\n603515.SHA\n603568.SHA\n603589.SHA\n603605.SHA\n603638.SHA\n603650.SHA\n603708.SHA\n603712.SHA\n603719.SHA\n603737.SHA\n603786.SHA\n603806.SHA\n603816.SHA\n603858.SHA\n603866.SHA\n603868.SHA\n603882.SHA\n603883.SHA\n603885.SHA\n603888.SHA\n603893.SHA\n603927.SHA\n603983.SHA\n688002.SHA\n688029.SHA\n688088.SHA\n688099.SHA\n688321.SHA","type":"Literal","bound_global_parameter":null},{"name":"max_count","value":"0","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"rolling_conf","node_id":"-4357"}],"output_ports":[{"name":"data","node_id":"-4357"}],"cacheable":true,"seq_num":31,"comment":"","comment_collapsed":true},{"node_id":"-6175","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.ranker_prediction = context.options['data'].read_df()\n\n # 系统已经设置了默认的交易手续费和滑点,要修改手续费可使用如下函数\n context.set_commission(PerOrder(buy_cost=0.0003, sell_cost=0.0013, min_cost=5))\n \n from zipline.finance.slippage import SlippageModel\n class FixedPriceSlippage(SlippageModel):\n # 指定初始化函数\n def __init__(self, spreads, price_field_buy, price_field_sell):\n self.spreads = spreads\n self._price_field_buy = price_field_buy\n self._price_field_sell = price_field_sell\n def process_order(self, data, order, bar_volume=0, trigger_check_price=0):\n if order.limit is None:\n price_field = self._price_field_buy if order.amount > 0 else self._price_field_sell\n price_base = data.current(order.asset, price_field)\n # 买单的下单价格向上偏移 spreads百分比 , 卖单的下单价格向下偏移 spreads百分比\n price = price_base * (1.0 + self.spreads) if order.amount > 0 else price_base * (1.0 - self.spreads)\n else:\n price = order.limit\n # 返回希望成交的价格和数量\n return (price, order.amount)\n # 设置滑点模型\n fix_slippage = FixedPriceSlippage(price_field_buy='open', price_field_sell='close',spreads=0)\n context.set_slippage(us_equities=fix_slippage) \n \n \n \n # 预测数据,通过options传入进来,使用 read_df 函数,加载到内存 (DataFrame)\n # 设置买入的股票数量,这里买入预测股票列表排名靠前的5只\n stock_count = 10\n # 每只的股票的权重,如下的权重分配会使得靠前的股票分配多一点的资金,[0.339160, 0.213986, 0.169580, ..]\n context.stock_weights = T.norm([1 / math.log(i + 2) for i in range(0, stock_count)])\n \n #改为等权重配置\n #context.stock_weights = [1 / stock_count for i in range(0, stock_count)]\n \n # 设置每只股票占用的最大资金比例\n context.max_cash_per_instrument = 0.1\n context.options['hold_days'] = 4","type":"Literal","bound_global_parameter":null},{"name":"handle_data","value":"# 回测引擎:每日数据处理函数,每天执行一次\ndef bigquant_run(context, data):\n #-------------------大盘风控代码---------------------------#\n #获取当日日期\n today = data.current_dt.strftime('%Y-%m-%d')\n stock_hold_now = [equity.symbol for equity in context.portfolio.positions ]\n #大盘风控模块,读取风控数据 \n #benckmark_risk=context.benckmark_risk.ix[today]\n #当risk为1时,市场有风险,全部平仓,不再执行其它操作\n #if benckmark_risk > 0:\n #for instrument in stock_hold_now:\n #context.order_target(symbol(instrument), 0)\n #print(today,'大盘风控止损触发,全仓卖出')\n #return\n #-------------------大盘风控代码---------------------------#\n # 按日期过滤得到今日的预测数据\n ranker_prediction = context.ranker_prediction[\n context.ranker_prediction.date == data.current_dt.strftime('%Y-%m-%d')]\n\n # 1. 资金分配\n # 平均持仓时间是hold_days,每日都将买入股票,每日预期使用 1/hold_days 的资金\n # 实际操作中,会存在一定的买入误差,所以在前hold_days天,等量使用资金;之后,尽量使用剩余资金(这里设置最多用等量的1.5倍)\n is_staging = context.trading_day_index < context.options['hold_days'] # 是否在建仓期间(前 hold_days 天)\n cash_avg = context.portfolio.portfolio_value / context.options['hold_days']\n cash_for_buy = min(context.portfolio.cash, (1 if is_staging else 1.5) * cash_avg)\n cash_for_sell = cash_avg - (context.portfolio.cash - cash_for_buy)\n positions = {e.symbol: p.amount * p.last_sale_price\n for e, p in context.perf_tracker.position_tracker.positions.items()}\n \n \n #---------------------------START:止赢止损模块(含建仓期)--------------------\n # 新建当日止赢止损股票列表是为了handle_data 策略逻辑部分不再对该股票进行判断\n current_stopwin_stock=[]\n current_stoploss_stock = [] \n today_date = data.current_dt.strftime('%Y-%m-%d')\n positions_stop={e.symbol:p.cost_basis \n for e,p in context.portfolio.positions.items()}\n if len(positions_stop)>0:\n for i in positions_stop.keys():\n stock_cost=positions_stop[i] \n stock_market_price=data.current(context.symbol(i),'price') \n # 赚20%且为可交易状态就止盈\n if stock_market_price/stock_cost-1>0.25 and data.can_trade(context.symbol(i)) and not context.has_unfinished_sell_order(i):\n context.order_target_percent(context.symbol(i),0) \n current_stopwin_stock.append(i)\n # 亏10%并且为可交易状态就止损\n if stock_market_price/stock_cost-1 <= -0.1 and data.can_trade(context.symbol(i)) and not context.has_unfinished_sell_order(i): \n context.order_target_percent(context.symbol(i),0) \n current_stoploss_stock.append(i)\n if len(current_stopwin_stock)>0:\n print(today_date,'止盈股票列表',current_stopwin_stock)\n if len(current_stoploss_stock)>0:\n print(today_date,'止损股票列表',current_stoploss_stock)\n #--------------------------END: 止赢止损模块-----------------------------\n \n\n # 2. 生成卖出订单:hold_days天之后才开始卖出;对持仓的股票,按机器学习算法预测的排序末位淘汰\n if not is_staging and cash_for_sell > 0:\n equities = {e.symbol: e for e, p in context.perf_tracker.position_tracker.positions.items()}\n instruments = list(reversed(list(ranker_prediction.instrument[ranker_prediction.instrument.apply(\n lambda x: x in equities and not context.has_unfinished_sell_order(equities[x]))])))\n # print('rank order for sell %s' % instruments)\n for instrument in instruments:\n context.order_target(context.symbol(instrument), 0)\n cash_for_sell -= positions[instrument]\n if cash_for_sell <= 0:\n break\n\n # 3. 生成买入订单:按机器学习算法预测的排序,买入前面的stock_count只股票\n buy_cash_weights = context.stock_weights\n buy_instruments = list(ranker_prediction.instrument[:len(buy_cash_weights)])\n max_cash_per_instrument = context.portfolio.portfolio_value * context.max_cash_per_instrument\n for i, instrument in enumerate(buy_instruments):\n cash = cash_for_buy * buy_cash_weights[i]\n if cash > max_cash_per_instrument - positions.get(instrument, 0):\n # 确保股票持仓量不会超过每次股票最大的占用资金量\n cash = max_cash_per_instrument - positions.get(instrument, 0)\n if cash > 0:\n context.order_value(context.symbol(instrument), cash)\n","type":"Literal","bound_global_parameter":null},{"name":"prepare","value":"# 回测引擎:准备数据,只执行一次\n#def bigquant_run(context):\n# pass\n# 回测引擎:准备数据,只执行一次\ndef bigquant_run(context):\n #在数据准备函数中一次性计算每日的大盘风控条件相比于在handle中每日计算风控条件可以提高回测速度\n # 多取50天的数据便于计算均值(保证回测的第一天均值不为Nan值),\n # 其中context.start_date和context.end_date是回测指定的起始时间和终止时间\n start_date= (pd.to_datetime(context.start_date) - datetime.timedelta(days=50)).strftime('%Y-%m-%d') \n \n df=DataSource('bar1d_index_CN_STOCK_A').read(start_date=start_date,end_date=context.end_date,fields=['close'])\n\n #这里以上证指数000001.HIX为例\n benckmark_data=df[df.instrument=='000001.HIX']\n #计算上证指数5日涨幅\n benckmark_data['ret5']=4*benckmark_data['close']/(benckmark_data['close'].shift(4)+benckmark_data['close'].shift(3)+benckmark_data['close'].shift(2)+benckmark_data['close'].shift(1))-1\n #计算大盘风控条件,如果5日涨幅小于-10%则设置风险状态risk为1,否则为0\n benckmark_data['risk'] = np.where(benckmark_data['ret5']<-0.02,1,0)\n #设置日期为索引\n benckmark_data.set_index('date',inplace=True)\n #把风控序列输出给全局变量context.benckmark_risk\n context.benckmark_risk=benckmark_data['risk']\n ","type":"Literal","bound_global_parameter":null},{"name":"before_trading_start","value":"","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":"5000000","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":"000905.SHA","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"instruments","node_id":"-6175"},{"name":"options_data","node_id":"-6175"},{"name":"history_ds","node_id":"-6175"},{"name":"benchmark_ds","node_id":"-6175"},{"name":"trading_calendar","node_id":"-6175"}],"output_ports":[{"name":"raw_perf","node_id":"-6175"}],"cacheable":false,"seq_num":40,"comment":"","comment_collapsed":true},{"node_id":"-530","module_id":"BigQuantSpace.input_features.input_features-v1","parameters":[{"name":"features","value":"mf_net_pct_s_0 ##8/33\n#mean(where(close_0>open_0, ((close_0-low_0)/(high_0-low_0))*(turn_0/avg_turn_5), -1*((high_0-close_0)/(high_0-low_0))*(turn_0/avg_turn_5)),5) #-4/25///47 \n(close_0-low_0)/close_0 ##4/24//42\n(high_0-close_0)/close_0 ##21/\n(open_0-close_0)/close_0 #3/14//36\\\\\\\\72\n#(high_0-low_0)/close_0 #0/25\\\\\\\\\\69\n\nsqrt(high_0*low_0)-amount_0/volume_0*adjust_factor_0 ##2/22///47////54\nrank_volatility_5_0 ##-8/19///47\\\\\\77\n\n#(high_0-close_0)/(high_0-low_0)#-4/19//37///46\\55\n#sum(where(close_0>open_0, ((close_0-low_0)/(high_0-low_0))*(turn_0/avg_turn_5), -1*((high_0-close_0)/(high_0-low_0))*(turn_0/avg_turn_5)),5) #-4/16\n\n#ta_bbands_u(close_0, 5) #-10/17\nstd(turn_0,5) ##1/18//36///53\n\n#(high_0-open_0)/close_0 #-1/18/36///46\n(open_0-low_0)/close_0 ##5/16\\\\67\\\\\\\\\\69\n#(close_0-ts_min(close_0, 5))/close_0 #-6/27/\n\n#(close_0-ts_min(low_0, 5))/close_0 #-5/20///50\\61\n#(close_0-open_4)/close_0 #-1/12\n#(ts_max(high_0, 5)-close_0)/close_0 #8/23///50\n(ts_max(high_0, 5)-ts_min(low_0, 5))/close_0 ##-1/18//37///50\\72\n\n#(ts_max(high_0, 5)-open_4)/close_0 #-4/20\n#(open_4-ts_min(low_0, 5))/close_0 #4/21\n\n\n\n\n\n","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"features_ds","node_id":"-530"}],"output_ports":[{"name":"data","node_id":"-530"}],"cacheable":true,"seq_num":1,"comment":"","comment_collapsed":true},{"node_id":"-533","module_id":"BigQuantSpace.input_features.input_features-v1","parameters":[{"name":"features","value":"mf_net_pct_s_0 ##8/33\n#mean(where(close_0>open_0, ((close_0-low_0)/(high_0-low_0))*(turn_0/avg_turn_5), -1*((high_0-close_0)/(high_0-low_0))*(turn_0/avg_turn_5)),5) #-4/25///47 \n(close_0-low_0)/close_0 ##4/24//42\n(high_0-close_0)/close_0 ##21/\n(open_0-close_0)/close_0 #3/14//36\\\\\\\\72\n(high_0-low_0)/close_0 #0/25\\\\\\\\\\73\n\nsqrt(high_0*low_0)-amount_0/volume_0*adjust_factor_0 ##2/22///47////54\nrank_volatility_5_0 ##-8/19///47\\\\\\77\n\n#(high_0-close_0)/(high_0-low_0)#-4/19//37\n#sum(where(close_0>open_0, ((close_0-low_0)/(high_0-low_0))*(turn_0/avg_turn_5), -1*((high_0-close_0)/(high_0-low_0))*(turn_0/avg_turn_5)),5) #-4/16\n\n#ta_bbands_u(close_0, 5) #-10/17\nstd(turn_0,5) ##1/18//36///53\n\n#(high_0-open_0)/close_0 #-1/18/36///46\n(open_0-low_0)/close_0 ##5/16\\\\67\n#(close_0-ts_min(close_0, 5))/close_0 #-6/27/\n\n(close_0-ts_min(low_0, 5))/close_0 #-5/20///50\\\\\\\\\\73\n#(close_0-open_4)/close_0 #-1/12\n#(ts_max(high_0, 5)-close_0)/close_0 #8/23///50\n(ts_max(high_0, 5)-ts_min(low_0, 5))/close_0 ##-1/18//37///50\\72\n\n#(ts_max(high_0, 5)-open_4)/close_0 #-4/20\n#(open_4-ts_min(low_0, 5))/close_0 #4/21\n\n\n\n\n\n","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"features_ds","node_id":"-533"}],"output_ports":[{"name":"data","node_id":"-533"}],"cacheable":true,"seq_num":19,"comment":"","comment_collapsed":true}],"node_layout":"<node_postions><node_position Node='287d2cb0-f53c-4101-bdf8-104b137c8601-15' Position='168,98,200,200'/><node_position Node='287d2cb0-f53c-4101-bdf8-104b137c8601-24' Position='648,-165,200,200'/><node_position Node='287d2cb0-f53c-4101-bdf8-104b137c8601-53' Position='302,338,200,200'/><node_position Node='287d2cb0-f53c-4101-bdf8-104b137c8601-62' Position='1059,-36,200,200'/><node_position Node='-106' Position='510,116,200,200'/><node_position Node='-113' Position='516,220,200,200'/><node_position Node='-122' Position='1054,117,200,200'/><node_position Node='-129' Position='1044,204,200,200'/><node_position Node='-160' Position='-170,-313,200,200'/><node_position Node='-1098' Position='136,636,200,200'/><node_position Node='-1540' Position='203,731,200,200'/><node_position Node='-2431' Position='286,827,200,200'/><node_position Node='-768' Position='590,300,200,200'/><node_position Node='-773' Position='198,233,200,200'/><node_position Node='-778' Position='1049,289,200,200'/><node_position Node='-243' Position='360,506,200,200'/><node_position Node='-251' Position='1061,508,200,200'/><node_position Node='-3880' Position='-135,516,200,200'/><node_position Node='-3895' Position='385,588,200,200'/><node_position Node='-3907' Position='1056,590,200,200'/><node_position Node='-356' Position='-269,46,200,200'/><node_position Node='-567' Position='-272,129,200,200'/><node_position Node='-412' Position='-269,219,200,200'/><node_position Node='-574' Position='-263,302,200,200'/><node_position Node='-440' Position='-269,420,200,200'/><node_position Node='-1607' Position='-246,-209,200,200'/><node_position Node='-408' Position='-279,-135,200,200'/><node_position Node='-453' Position='-269,-45,200,200'/><node_position Node='-1356' Position='656,465,200,200'/><node_position Node='-38928' Position='1344,394,200,200'/><node_position Node='-498' Position='655,387,200,200'/><node_position Node='-502' Position='1355,301,200,200'/><node_position Node='-417' Position='-616,116,200,200'/><node_position Node='-460' Position='-622.9338989257812,18.132232666015625,200,200'/><node_position Node='-4847' Position='729,17,200,200'/><node_position Node='-910' Position='841,251,200,200'/><node_position Node='-6480' Position='1422,156,200,200'/><node_position Node='-455' Position='323,424,200,200'/><node_position Node='-459' Position='1026,397,200,200'/><node_position Node='-12012' Position='-661,374,200,200'/><node_position Node='-12040' Position='-660,464,200,200'/><node_position Node='-7814' Position='-613,190,200,200'/><node_position Node='-7819' Position='-615.0661010742188,275,200,200'/><node_position Node='-613' Position='22,-106,200,200'/><node_position Node='-7448' Position='-666,561,200,200'/><node_position Node='-4357' Position='371,-33,200,200'/><node_position Node='-6175' Position='388,920,200,200'/><node_position Node='-530' Position='472,-252,200,200'/><node_position Node='-533' Position='965,-269,200,200'/></node_postions>"},"nodes_readonly":false,"studio_version":"v2"}
    In [1]:
    # 本代码由可视化策略环境自动生成 2022年8月9日 18:44
    # 本代码单元只能在可视化模式下编辑。您也可以拷贝代码,粘贴到新建的代码单元或者策略,然后修改。
    
    
    # Python 代码入口函数,input_1/2/3 对应三个输入端,data_1/2/3 对应三个输出端
    def m8_run_bigquant_run(input_1, input_2, input_3):
        # 示例代码如下。在这里编写您的代码
        df =  input_1.read_pickle()
        feature_len = len(input_2.read_pickle())
        
        
        df['x'] = df['x'].reshape(df['x'].shape[0], int(feature_len), int(df['x'].shape[1]/feature_len))
        
        data_1 = DataSource.write_pickle(df)
        return Outputs(data_1=data_1)
    
    # 后处理函数,可选。输入是主函数的输出,可以在这里对数据做处理,或者返回更友好的outputs数据格式。此函数输出不会被缓存。
    def m8_post_run_bigquant_run(outputs):
        return outputs
    
    def m20_user_activity_regularizer_bigquant_run(weight_matrix): 
        from tensorflow.keras.constraints import maxnorm
        return 0.01 * K.sum(K.abs(weight_matrix))
    # Python 代码入口函数,input_1/2/3 对应三个输入端,data_1/2/3 对应三个输出端
    def m4_run_bigquant_run(input_1, input_2, input_3):
        # 示例代码如下。在这里编写您的代码
        df =  input_1.read_pickle()
        feature_len = len(input_2.read_pickle())
        
        
        df['x'] = df['x'].reshape(df['x'].shape[0], int(feature_len), int(df['x'].shape[1]/feature_len))
        
        data_1 = DataSource.write_pickle(df)
        return Outputs(data_1=data_1)
    
    # 后处理函数,可选。输入是主函数的输出,可以在这里对数据做处理,或者返回更友好的outputs数据格式。此函数输出不会被缓存。
    def m4_post_run_bigquant_run(outputs):
        return outputs
    
    from tensorflow.keras import optimizers 
    m5_user_optimizer_bigquant_run=optimizers.Adam(lr=0.00085)
    # 用户的自定义层需要写到字典中,比如
    # {
    #   "MyLayer": MyLayer
    # }
    m5_custom_objects_bigquant_run = {
        
    }
    
    # Python 代码入口函数,input_1/2/3 对应三个输入端,data_1/2/3 对应三个输出端
    def m24_run_bigquant_run(input_1, input_2, input_3):
        # 示例代码如下。在这里编写您的代码
        pred_label = input_1.read_pickle()
        df = input_2.read_df()
        df = pd.DataFrame({'pred_label':pred_label[:,0], 'instrument':df.instrument, 'date':df.date})
        df.sort_values(['date','pred_label'],inplace=True, ascending=[True,False])
        return Outputs(data_1=DataSource.write_df(df), data_2=None, data_3=None)
    
    # 后处理函数,可选。输入是主函数的输出,可以在这里对数据做处理,或者返回更友好的outputs数据格式。此函数输出不会被缓存。
    def m24_post_run_bigquant_run(outputs):
        return outputs
    
    # 回测引擎:初始化函数,只执行一次
    def m40_initialize_bigquant_run(context):
        # 加载预测数据
        context.ranker_prediction = context.options['data'].read_df()
    
        # 系统已经设置了默认的交易手续费和滑点,要修改手续费可使用如下函数
        context.set_commission(PerOrder(buy_cost=0.0003, sell_cost=0.0013, min_cost=5))
        
        from zipline.finance.slippage import SlippageModel
        class FixedPriceSlippage(SlippageModel):
            # 指定初始化函数
            def __init__(self, spreads, price_field_buy, price_field_sell):
                self.spreads = spreads
                self._price_field_buy = price_field_buy
                self._price_field_sell = price_field_sell
            def process_order(self, data, order, bar_volume=0, trigger_check_price=0):
                if order.limit is None:
                    price_field = self._price_field_buy if order.amount > 0 else self._price_field_sell
                    price_base = data.current(order.asset, price_field)
                   # 买单的下单价格向上偏移 spreads百分比 , 卖单的下单价格向下偏移 spreads百分比
                    price = price_base * (1.0 + self.spreads) if order.amount > 0 else price_base * (1.0 - self.spreads)
                else:
                    price = order.limit
                    # 返回希望成交的价格和数量
                return (price, order.amount)
        # 设置滑点模型
        fix_slippage = FixedPriceSlippage(price_field_buy='open', price_field_sell='close',spreads=0)
        context.set_slippage(us_equities=fix_slippage)  
        
        
        
        # 预测数据,通过options传入进来,使用 read_df 函数,加载到内存 (DataFrame)
        # 设置买入的股票数量,这里买入预测股票列表排名靠前的5只
        stock_count = 10
        # 每只的股票的权重,如下的权重分配会使得靠前的股票分配多一点的资金,[0.339160, 0.213986, 0.169580, ..]
        context.stock_weights = T.norm([1 / math.log(i + 2) for i in range(0, stock_count)])
        
        #改为等权重配置
        #context.stock_weights = [1 / stock_count for i in range(0, stock_count)]
        
        # 设置每只股票占用的最大资金比例
        context.max_cash_per_instrument = 0.1
        context.options['hold_days'] = 4
    # 回测引擎:每日数据处理函数,每天执行一次
    def m40_handle_data_bigquant_run(context, data):
         #-------------------大盘风控代码---------------------------#
        #获取当日日期
        today = data.current_dt.strftime('%Y-%m-%d')
        stock_hold_now = [equity.symbol for equity in context.portfolio.positions ]
        #大盘风控模块,读取风控数据    
        #benckmark_risk=context.benckmark_risk.ix[today]
        #当risk为1时,市场有风险,全部平仓,不再执行其它操作
        #if benckmark_risk > 0:
            #for instrument in stock_hold_now:
                #context.order_target(symbol(instrument), 0)
            #print(today,'大盘风控止损触发,全仓卖出')
            #return
        #-------------------大盘风控代码---------------------------#
        # 按日期过滤得到今日的预测数据
        ranker_prediction = context.ranker_prediction[
            context.ranker_prediction.date == data.current_dt.strftime('%Y-%m-%d')]
    
        # 1. 资金分配
        # 平均持仓时间是hold_days,每日都将买入股票,每日预期使用 1/hold_days 的资金
        # 实际操作中,会存在一定的买入误差,所以在前hold_days天,等量使用资金;之后,尽量使用剩余资金(这里设置最多用等量的1.5倍)
        is_staging = context.trading_day_index < context.options['hold_days'] # 是否在建仓期间(前 hold_days 天)
        cash_avg = context.portfolio.portfolio_value / context.options['hold_days']
        cash_for_buy = min(context.portfolio.cash, (1 if is_staging else 1.5) * cash_avg)
        cash_for_sell = cash_avg - (context.portfolio.cash - cash_for_buy)
        positions = {e.symbol: p.amount * p.last_sale_price
                     for e, p in context.perf_tracker.position_tracker.positions.items()}
        
        
        #---------------------------START:止赢止损模块(含建仓期)--------------------
        # 新建当日止赢止损股票列表是为了handle_data 策略逻辑部分不再对该股票进行判断
        current_stopwin_stock=[]
        current_stoploss_stock = []   
        today_date = data.current_dt.strftime('%Y-%m-%d')
        positions_stop={e.symbol:p.cost_basis 
        for e,p in context.portfolio.positions.items()}
        if len(positions_stop)>0:
            for i in positions_stop.keys():
                stock_cost=positions_stop[i]  
                stock_market_price=data.current(context.symbol(i),'price')  
                # 赚20%且为可交易状态就止盈
                if stock_market_price/stock_cost-1>0.25 and data.can_trade(context.symbol(i)) and not context.has_unfinished_sell_order(i):
                    context.order_target_percent(context.symbol(i),0)      
                    current_stopwin_stock.append(i)
                # 亏10%并且为可交易状态就止损
                if stock_market_price/stock_cost-1 <= -0.1 and data.can_trade(context.symbol(i)) and not context.has_unfinished_sell_order(i):   
                    context.order_target_percent(context.symbol(i),0)     
                    current_stoploss_stock.append(i)
            if len(current_stopwin_stock)>0:
                print(today_date,'止盈股票列表',current_stopwin_stock)
            if len(current_stoploss_stock)>0:
                print(today_date,'止损股票列表',current_stoploss_stock)
        #--------------------------END: 止赢止损模块-----------------------------
        
    
        # 2. 生成卖出订单:hold_days天之后才开始卖出;对持仓的股票,按机器学习算法预测的排序末位淘汰
        if not is_staging and cash_for_sell > 0:
            equities = {e.symbol: e for e, p in context.perf_tracker.position_tracker.positions.items()}
            instruments = list(reversed(list(ranker_prediction.instrument[ranker_prediction.instrument.apply(
                    lambda x: x in equities and not context.has_unfinished_sell_order(equities[x]))])))
            # print('rank order for sell %s' % instruments)
            for instrument in instruments:
                context.order_target(context.symbol(instrument), 0)
                cash_for_sell -= positions[instrument]
                if cash_for_sell <= 0:
                    break
    
        # 3. 生成买入订单:按机器学习算法预测的排序,买入前面的stock_count只股票
        buy_cash_weights = context.stock_weights
        buy_instruments = list(ranker_prediction.instrument[:len(buy_cash_weights)])
        max_cash_per_instrument = context.portfolio.portfolio_value * context.max_cash_per_instrument
        for i, instrument in enumerate(buy_instruments):
            cash = cash_for_buy * buy_cash_weights[i]
            if cash > max_cash_per_instrument - positions.get(instrument, 0):
                # 确保股票持仓量不会超过每次股票最大的占用资金量
                cash = max_cash_per_instrument - positions.get(instrument, 0)
            if cash > 0:
                context.order_value(context.symbol(instrument), cash)
    
    # 回测引擎:准备数据,只执行一次
    #def m40_prepare_bigquant_run(context):
    #    pass
    # 回测引擎:准备数据,只执行一次
    def m40_prepare_bigquant_run(context):
        #在数据准备函数中一次性计算每日的大盘风控条件相比于在handle中每日计算风控条件可以提高回测速度
        # 多取50天的数据便于计算均值(保证回测的第一天均值不为Nan值),
        # 其中context.start_date和context.end_date是回测指定的起始时间和终止时间
        start_date= (pd.to_datetime(context.start_date) - datetime.timedelta(days=50)).strftime('%Y-%m-%d') 
        
        df=DataSource('bar1d_index_CN_STOCK_A').read(start_date=start_date,end_date=context.end_date,fields=['close'])
    
        #这里以上证指数000001.HIX为例
        benckmark_data=df[df.instrument=='000001.HIX']
        #计算上证指数5日涨幅
        benckmark_data['ret5']=4*benckmark_data['close']/(benckmark_data['close'].shift(4)+benckmark_data['close'].shift(3)+benckmark_data['close'].shift(2)+benckmark_data['close'].shift(1))-1
        #计算大盘风控条件,如果5日涨幅小于-10%则设置风险状态risk为1,否则为0
        benckmark_data['risk'] = np.where(benckmark_data['ret5']<-0.02,1,0)
        #设置日期为索引
        benckmark_data.set_index('date',inplace=True)
        #把风控序列输出给全局变量context.benckmark_risk
        context.benckmark_risk=benckmark_data['risk']
        
    
    g = T.Graph({
    
        'm3': 'M.input_features.v1',
        'm3.features': """
    mean(where(close_0>open_0, ((close_0-low_0)/(high_0-low_0))*(turn_0/avg_turn_5), -1*((high_0-close_0)/(high_0-low_0))*(turn_0/avg_turn_5)),5) #-4/25///47      
    """,
    
        'm43': 'M.input_features.v1',
        'm43.features_ds': T.Graph.OutputPort('m3.data'),
        'm43.features': 'market_cap_0',
    
        'm9': 'M.instruments.v2',
        'm9.start_date': '2017-01-01',
        'm9.end_date': T.live_run_param('trading_date', '2019-12-31'),
        'm9.market': 'CN_STOCK_A',
        'm9.instrument_list': """000008.SZA
    000009.SZA
    000012.SZA
    000021.SZA
    000027.SZA
    000028.SZA
    000031.SZA
    000039.SZA
    000046.SZA
    000050.SZA
    000060.SZA
    000061.SZA
    000062.SZA
    000078.SZA
    000089.SZA
    000090.SZA
    000156.SZA
    000158.SZA
    000301.SZA
    000400.SZA
    000401.SZA
    000402.SZA
    000415.SZA
    000488.SZA
    000501.SZA
    000513.SZA
    000519.SZA
    000528.SZA
    000537.SZA
    000540.SZA
    000543.SZA
    000547.SZA
    000553.SZA
    000559.SZA
    000563.SZA
    000564.SZA
    000581.SZA
    000598.SZA
    000600.SZA
    000623.SZA
    000629.SZA
    000630.SZA
    000636.SZA
    000681.SZA
    000685.SZA
    000686.SZA
    000690.SZA
    000709.SZA
    000717.SZA
    000718.SZA
    000729.SZA
    000732.SZA
    000738.SZA
    000739.SZA
    000750.SZA
    000758.SZA
    000778.SZA
    000807.SZA
    000813.SZA
    000825.SZA
    000826.SZA
    000830.SZA
    000869.SZA
    000877.SZA
    000878.SZA
    000883.SZA
    000887.SZA
    000898.SZA
    000930.SZA
    000932.SZA
    000937.SZA
    000959.SZA
    000960.SZA
    000967.SZA
    000970.SZA
    000975.SZA
    000983.SZA
    000988.SZA
    000990.SZA
    000997.SZA
    000998.SZA
    000999.SZA
    001872.SZA
    001914.SZA
    002002.SZA
    002004.SZA
    002010.SZA
    002013.SZA
    002019.SZA
    002028.SZA
    002030.SZA
    002038.SZA
    002048.SZA
    002051.SZA
    002056.SZA
    002064.SZA
    002074.SZA
    002075.SZA
    002078.SZA
    002080.SZA
    002081.SZA
    002085.SZA
    002092.SZA
    002093.SZA
    002110.SZA
    002124.SZA
    002128.SZA
    002131.SZA
    002138.SZA
    002152.SZA
    002155.SZA
    002156.SZA
    002174.SZA
    002183.SZA
    002185.SZA
    002191.SZA
    002195.SZA
    002203.SZA
    002212.SZA
    002217.SZA
    002221.SZA
    002223.SZA
    002233.SZA
    002242.SZA
    002244.SZA
    002249.SZA
    002250.SZA
    002266.SZA
    002268.SZA
    002273.SZA
    002281.SZA
    002294.SZA
    002299.SZA
    002302.SZA
    002317.SZA
    002340.SZA
    002353.SZA
    002368.SZA
    002372.SZA
    002373.SZA
    002375.SZA
    002382.SZA
    002385.SZA
    002387.SZA
    002390.SZA
    002396.SZA
    002399.SZA
    002408.SZA
    002416.SZA
    002419.SZA
    002423.SZA
    002424.SZA
    002429.SZA
    002434.SZA
    002440.SZA
    002444.SZA
    002458.SZA
    002465.SZA
    002468.SZA
    002500.SZA
    002503.SZA
    002505.SZA
    002506.SZA
    002507.SZA
    002511.SZA
    002544.SZA
    002557.SZA
    002563.SZA
    002568.SZA
    002572.SZA
    002583.SZA
    002589.SZA
    002595.SZA
    002603.SZA
    002625.SZA
    002635.SZA
    002640.SZA
    002648.SZA
    002653.SZA
    002670.SZA
    002683.SZA
    002690.SZA
    002701.SZA
    002705.SZA
    002709.SZA
    002745.SZA
    002791.SZA
    002797.SZA
    002807.SZA
    002815.SZA
    002818.SZA
    002831.SZA
    002839.SZA
    002867.SZA
    002901.SZA
    002920.SZA
    002925.SZA
    002926.SZA
    002936.SZA
    002941.SZA
    002946.SZA
    002948.SZA
    002957.SZA
    002966.SZA
    002985.SZA
    300001.SZA
    300002.SZA
    300009.SZA
    300010.SZA
    300012.SZA
    300017.SZA
    300024.SZA
    300026.SZA
    300058.SZA
    300070.SZA
    300072.SZA
    300088.SZA
    300113.SZA
    300115.SZA
    300133.SZA
    300134.SZA
    300146.SZA
    300166.SZA
    300168.SZA
    300180.SZA
    300182.SZA
    300207.SZA
    300212.SZA
    300223.SZA
    300244.SZA
    300257.SZA
    300271.SZA
    300274.SZA
    300285.SZA
    300296.SZA
    300315.SZA
    300316.SZA
    300324.SZA
    300357.SZA
    300376.SZA
    300418.SZA
    300459.SZA
    300463.SZA
    300474.SZA
    300482.SZA
    300496.SZA
    300595.SZA
    300618.SZA
    300630.SZA
    300699.SZA
    600006.SHA
    600008.SHA
    600021.SHA
    600022.SHA
    600026.SHA
    600037.SHA
    600038.SHA
    600039.SHA
    600053.SHA
    600056.SHA
    600060.SHA
    600062.SHA
    600064.SHA
    600073.SHA
    600079.SHA
    600089.SHA
    600094.SHA
    600120.SHA
    600126.SHA
    600131.SHA
    600132.SHA
    600141.SHA
    600143.SHA
    600153.SHA
    600155.SHA
    600158.SHA
    600160.SHA
    600166.SHA
    600167.SHA
    600170.SHA
    600171.SHA
    600188.SHA
    600195.SHA
    600201.SHA
    600216.SHA
    600219.SHA
    600256.SHA
    600258.SHA
    600259.SHA
    600260.SHA
    600266.SHA
    600273.SHA
    600277.SHA
    600282.SHA
    600291.SHA
    600307.SHA
    600312.SHA
    600315.SHA
    600316.SHA
    600325.SHA
    600329.SHA
    600338.SHA
    600339.SHA
    600348.SHA
    600350.SHA
    600372.SHA
    600373.SHA
    600376.SHA
    600380.SHA
    600388.SHA
    600392.SHA
    600398.SHA
    600409.SHA
    600410.SHA
    600415.SHA
    600418.SHA
    600426.SHA
    600435.SHA
    600446.SHA
    600460.SHA
    600466.SHA
    600486.SHA
    600497.SHA
    600500.SHA
    600507.SHA
    600511.SHA
    600515.SHA
    600516.SHA
    600517.SHA
    600528.SHA
    600529.SHA
    600535.SHA
    600545.SHA
    600546.SHA
    600549.SHA
    600556.SHA
    600563.SHA
    600566.SHA
    600567.SHA
    600572.SHA
    600575.SHA
    600580.SHA
    600582.SHA
    600597.SHA
    600598.SHA
    600623.SHA
    600633.SHA
    600639.SHA
    600640.SHA
    600642.SHA
    600643.SHA
    600645.SHA
    600648.SHA
    600649.SHA
    600657.SHA
    600664.SHA
    600667.SHA
    600673.SHA
    600675.SHA
    600699.SHA
    600704.SHA
    600707.SHA
    600717.SHA
    600718.SHA
    600728.SHA
    600729.SHA
    600733.SHA
    600737.SHA
    600739.SHA
    600748.SHA
    600754.SHA
    600755.SHA
    600765.SHA
    600776.SHA
    600779.SHA
    600782.SHA
    600787.SHA
    600801.SHA
    600804.SHA
    600808.SHA
    600811.SHA
    600820.SHA
    600823.SHA
    600827.SHA
    600835.SHA
    600839.SHA
    600859.SHA
    600862.SHA
    600863.SHA
    600867.SHA
    600869.SHA
    600871.SHA
    600875.SHA
    600879.SHA
    600881.SHA
    600884.SHA
    600885.SHA
    600895.SHA
    600901.SHA
    600903.SHA
    600908.SHA
    600909.SHA
    600917.SHA
    600928.SHA
    600959.SHA
    600967.SHA
    600968.SHA
    600970.SHA
    600985.SHA
    601000.SHA
    601003.SHA
    601005.SHA
    601016.SHA
    601068.SHA
    601098.SHA
    601099.SHA
    601106.SHA
    601118.SHA
    601127.SHA
    601128.SHA
    601139.SHA
    601168.SHA
    601179.SHA
    601200.SHA
    601228.SHA
    601233.SHA
    601298.SHA
    601333.SHA
    601456.SHA
    601512.SHA
    601598.SHA
    601608.SHA
    601611.SHA
    601615.SHA
    601689.SHA
    601699.SHA
    601717.SHA
    601718.SHA
    601778.SHA
    601799.SHA
    601801.SHA
    601828.SHA
    601860.SHA
    601865.SHA
    601866.SHA
    601869.SHA
    601880.SHA
    601928.SHA
    601958.SHA
    601966.SHA
    601969.SHA
    601975.SHA
    601992.SHA
    601997.SHA
    603000.SHA
    603056.SHA
    603077.SHA
    603198.SHA
    603225.SHA
    603228.SHA
    603256.SHA
    603260.SHA
    603290.SHA
    603317.SHA
    603328.SHA
    603338.SHA
    603345.SHA
    603355.SHA
    603377.SHA
    603379.SHA
    603444.SHA
    603486.SHA
    603515.SHA
    603568.SHA
    603589.SHA
    603605.SHA
    603638.SHA
    603650.SHA
    603708.SHA
    603712.SHA
    603719.SHA
    603737.SHA
    603786.SHA
    603806.SHA
    603816.SHA
    603858.SHA
    603866.SHA
    603868.SHA
    603882.SHA
    603883.SHA
    603885.SHA
    603888.SHA
    603893.SHA
    603927.SHA
    603983.SHA
    688002.SHA
    688029.SHA
    688088.SHA
    688099.SHA
    688321.SHA""",
        'm9.max_count': 0,
    
        'm17': 'M.general_feature_extractor.v7',
        'm17.instruments': T.Graph.OutputPort('m9.data'),
        'm17.features': T.Graph.OutputPort('m43.data'),
        'm17.start_date': '',
        'm17.end_date': '',
        'm17.before_start_days': 90,
    
        'm18': 'M.derived_feature_extractor.v3',
        'm18.input_data': T.Graph.OutputPort('m17.data'),
        'm18.features': T.Graph.OutputPort('m43.data'),
        'm18.date_col': 'date',
        'm18.instrument_col': 'instrument',
        'm18.drop_na': True,
        'm18.remove_extra_columns': False,
    
        'm45': 'M.filter.v3',
        'm45.input_data': T.Graph.OutputPort('m18.data'),
        'm45.expr': 'market_cap_0>2000000000',
        'm45.output_left_data': False,
    
        'm25': 'M.standardlize.v8',
        'm25.input_1': T.Graph.OutputPort('m45.data'),
        'm25.input_2': T.Graph.OutputPort('m3.data'),
        'm25.columns_input': '[]',
    
        'm37': 'M.aa.v5',
        'm37.input_data': T.Graph.OutputPort('m25.data'),
        'm37.day_number': 150,
    
        'm35': 'M.chinaa_stock_filter.v1',
        'm35.input_data': T.Graph.OutputPort('m37.data'),
        'm35.index_constituent_cond': ['全部'],
        'm35.board_cond': ['全部'],
        'm35.industry_cond': ['全部'],
        'm35.st_cond': ['正常'],
        'm35.delist_cond': ['全部'],
        'm35.output_left_data': False,
    
        'm55': 'M.dropnan.v2',
        'm55.input_data': T.Graph.OutputPort('m35.data'),
    
        'm27': 'M.dl_convert_to_bin.v2',
        'm27.input_data': T.Graph.OutputPort('m55.data'),
        'm27.features': T.Graph.OutputPort('m3.data'),
        'm27.window_size': 5,
        'm27.feature_clip': 3,
        'm27.flatten': True,
        'm27.window_along_col': 'instrument',
    
        'm8': 'M.cached.v3',
        'm8.input_1': T.Graph.OutputPort('m27.data'),
        'm8.input_2': T.Graph.OutputPort('m3.data'),
        'm8.run': m8_run_bigquant_run,
        'm8.post_run': m8_post_run_bigquant_run,
        'm8.input_ports': '',
        'm8.params': '{}',
        'm8.output_ports': '',
    
        'm6': 'M.dl_layer_input.v1',
        'm6.shape': '1,5',
        'm6.batch_shape': '',
        'm6.dtype': 'float32',
        'm6.sparse': False,
        'm6.name': '',
    
        'm23': 'M.dl_layer_reshape.v1',
        'm23.inputs': T.Graph.OutputPort('m6.data'),
        'm23.target_shape': '1,5,1',
        'm23.name': '',
    
        'm28': 'M.dl_layer_conv2d.v1',
        'm28.inputs': T.Graph.OutputPort('m23.data'),
        'm28.filters': 40,
        'm28.kernel_size': '1,5',
        'm28.strides': '1,1',
        'm28.padding': 'valid',
        'm28.data_format': 'channels_last',
        'm28.dilation_rate': '1,1',
        'm28.activation': 'relu',
        'm28.use_bias': True,
        'm28.kernel_initializer': 'glorot_uniform',
        'm28.bias_initializer': 'Zeros',
        'm28.kernel_regularizer': 'None',
        'm28.kernel_regularizer_l1': 0,
        'm28.kernel_regularizer_l2': 0,
        'm28.bias_regularizer': 'None',
        'm28.bias_regularizer_l1': 0,
        'm28.bias_regularizer_l2': 0,
        'm28.activity_regularizer': 'None',
        'm28.activity_regularizer_l1': 0,
        'm28.activity_regularizer_l2': 0,
        'm28.kernel_constraint': 'None',
        'm28.bias_constraint': 'None',
        'm28.name': '',
    
        'm29': 'M.dl_layer_reshape.v1',
        'm29.inputs': T.Graph.OutputPort('m28.data'),
        'm29.target_shape': '1,40',
        'm29.name': '',
    
        'm10': 'M.dl_layer_lstm.v1',
        'm10.inputs': T.Graph.OutputPort('m29.data'),
        'm10.units': 1,
        'm10.activation': 'tanh',
        'm10.recurrent_activation': 'hard_sigmoid',
        'm10.use_bias': True,
        'm10.kernel_initializer': 'glorot_uniform',
        'm10.recurrent_initializer': 'Orthogonal',
        'm10.bias_initializer': 'Zeros',
        'm10.unit_forget_bias': True,
        'm10.kernel_regularizer': 'None',
        'm10.kernel_regularizer_l1': 0,
        'm10.kernel_regularizer_l2': 0,
        'm10.recurrent_regularizer': 'None',
        'm10.recurrent_regularizer_l1': 0,
        'm10.recurrent_regularizer_l2': 0.01,
        'm10.bias_regularizer': 'None',
        'm10.bias_regularizer_l1': 0,
        'm10.bias_regularizer_l2': 0,
        'm10.activity_regularizer': 'None',
        'm10.activity_regularizer_l2': 0.01,
        'm10.kernel_constraint': 'None',
        'm10.recurrent_constraint': 'None',
        'm10.bias_constraint': 'None',
        'm10.dropout': 0,
        'm10.recurrent_dropout': 0.5,
        'm10.return_sequences': False,
        'm10.implementation': '2',
        'm10.name': '',
    
        'm41': 'M.dl_layer_reshape.v1',
        'm41.inputs': T.Graph.OutputPort('m10.data'),
        'm41.target_shape': '1,1',
        'm41.name': '',
    
        'm39': 'M.dl_layer_lstm.v1',
        'm39.inputs': T.Graph.OutputPort('m41.data'),
        'm39.units': 1,
        'm39.activation': 'tanh',
        'm39.recurrent_activation': 'hard_sigmoid',
        'm39.use_bias': True,
        'm39.kernel_initializer': 'glorot_uniform',
        'm39.recurrent_initializer': 'Orthogonal',
        'm39.bias_initializer': 'Zeros',
        'm39.unit_forget_bias': True,
        'm39.kernel_regularizer': 'None',
        'm39.kernel_regularizer_l1': 0.005,
        'm39.kernel_regularizer_l2': 0.005,
        'm39.recurrent_regularizer': 'None',
        'm39.recurrent_regularizer_l1': 0,
        'm39.recurrent_regularizer_l2': 0.01,
        'm39.bias_regularizer': 'None',
        'm39.bias_regularizer_l1': 0,
        'm39.bias_regularizer_l2': 0,
        'm39.activity_regularizer': 'None',
        'm39.activity_regularizer_l2': 0.01,
        'm39.kernel_constraint': 'None',
        'm39.recurrent_constraint': 'None',
        'm39.bias_constraint': 'None',
        'm39.dropout': 0,
        'm39.recurrent_dropout': 0.5,
        'm39.return_sequences': False,
        'm39.implementation': '2',
        'm39.name': '',
    
        'm38': 'M.dl_layer_reshape.v1',
        'm38.inputs': T.Graph.OutputPort('m39.data'),
        'm38.target_shape': '1,1',
        'm38.name': '',
    
        'm57': 'M.dl_layer_lstm.v1',
        'm57.inputs': T.Graph.OutputPort('m38.data'),
        'm57.units': 1,
        'm57.activation': 'tanh',
        'm57.recurrent_activation': 'hard_sigmoid',
        'm57.use_bias': True,
        'm57.kernel_initializer': 'glorot_uniform',
        'm57.recurrent_initializer': 'Orthogonal',
        'm57.bias_initializer': 'Zeros',
        'm57.unit_forget_bias': True,
        'm57.kernel_regularizer': 'None',
        'm57.kernel_regularizer_l1': 0.005,
        'm57.kernel_regularizer_l2': 0.005,
        'm57.recurrent_regularizer': 'None',
        'm57.recurrent_regularizer_l1': 0,
        'm57.recurrent_regularizer_l2': 0.01,
        'm57.bias_regularizer': 'None',
        'm57.bias_regularizer_l1': 0,
        'm57.bias_regularizer_l2': 0,
        'm57.activity_regularizer': 'None',
        'm57.activity_regularizer_l2': 0.01,
        'm57.kernel_constraint': 'None',
        'm57.recurrent_constraint': 'None',
        'm57.bias_constraint': 'None',
        'm57.dropout': 0,
        'm57.recurrent_dropout': 0.5,
        'm57.return_sequences': False,
        'm57.implementation': '2',
        'm57.name': '',
    
        'm12': 'M.dl_layer_dropout.v1',
        'm12.inputs': T.Graph.OutputPort('m57.data'),
        'm12.rate': 0.4,
        'm12.noise_shape': '',
        'm12.name': 'dropout1',
    
        'm20': 'M.dl_layer_dense.v1',
        'm20.inputs': T.Graph.OutputPort('m12.data'),
        'm20.units': 80,
        'm20.activation': 'tanh',
        'm20.use_bias': True,
        'm20.kernel_initializer': 'glorot_uniform',
        'm20.bias_initializer': 'Zeros',
        'm20.kernel_regularizer': 'None',
        'm20.kernel_regularizer_l1': 0,
        'm20.kernel_regularizer_l2': 0,
        'm20.bias_regularizer': 'None',
        'm20.bias_regularizer_l1': 0,
        'm20.bias_regularizer_l2': 0,
        'm20.activity_regularizer': 'L1L2',
        'm20.activity_regularizer_l1': 0.005,
        'm20.activity_regularizer_l2': 0.005,
        'm20.user_activity_regularizer': m20_user_activity_regularizer_bigquant_run,
        'm20.kernel_constraint': 'None',
        'm20.bias_constraint': 'None',
        'm20.name': '',
    
        'm21': 'M.dl_layer_dropout.v1',
        'm21.inputs': T.Graph.OutputPort('m20.data'),
        'm21.rate': 0.4,
        'm21.noise_shape': '',
        'm21.name': 'dropout2',
    
        'm30': 'M.dl_layer_dense.v1',
        'm30.inputs': T.Graph.OutputPort('m21.data'),
        'm30.units': 60,
        'm30.activation': 'tanh',
        'm30.use_bias': True,
        'm30.kernel_initializer': 'glorot_uniform',
        'm30.bias_initializer': 'Zeros',
        'm30.kernel_regularizer': 'None',
        'm30.kernel_regularizer_l1': 0.001,
        'm30.kernel_regularizer_l2': 0.001,
        'm30.bias_regularizer': 'None',
        'm30.bias_regularizer_l1': 0,
        'm30.bias_regularizer_l2': 0,
        'm30.activity_regularizer': 'L1L2',
        'm30.activity_regularizer_l1': 0.005,
        'm30.activity_regularizer_l2': 0.005,
        'm30.kernel_constraint': 'None',
        'm30.bias_constraint': 'None',
        'm30.name': '',
    
        'm56': 'M.dl_layer_dropout.v1',
        'm56.inputs': T.Graph.OutputPort('m30.data'),
        'm56.rate': 0.3,
        'm56.noise_shape': '',
        'm56.name': 'dropout2',
    
        'm59': 'M.dl_layer_dense.v1',
        'm59.inputs': T.Graph.OutputPort('m56.data'),
        'm59.units': 40,
        'm59.activation': 'tanh',
        'm59.use_bias': True,
        'm59.kernel_initializer': 'glorot_uniform',
        'm59.bias_initializer': 'Zeros',
        'm59.kernel_regularizer': 'None',
        'm59.kernel_regularizer_l1': 0.001,
        'm59.kernel_regularizer_l2': 0.001,
        'm59.bias_regularizer': 'None',
        'm59.bias_regularizer_l1': 0,
        'm59.bias_regularizer_l2': 0,
        'm59.activity_regularizer': 'L1L2',
        'm59.activity_regularizer_l1': 0.005,
        'm59.activity_regularizer_l2': 0.005,
        'm59.kernel_constraint': 'None',
        'm59.bias_constraint': 'None',
        'm59.name': '',
    
        'm22': 'M.dl_layer_dense.v1',
        'm22.inputs': T.Graph.OutputPort('m59.data'),
        'm22.units': 1,
        'm22.activation': 'tanh',
        'm22.use_bias': True,
        'm22.kernel_initializer': 'glorot_uniform',
        'm22.bias_initializer': 'Zeros',
        'm22.kernel_regularizer': 'None',
        'm22.kernel_regularizer_l1': 0.003,
        'm22.kernel_regularizer_l2': 0.003,
        'm22.bias_regularizer': 'None',
        'm22.bias_regularizer_l1': 0,
        'm22.bias_regularizer_l2': 0,
        'm22.activity_regularizer': 'L1L2',
        'm22.activity_regularizer_l1': 0.005,
        'm22.activity_regularizer_l2': 0.005,
        'm22.kernel_constraint': 'None',
        'm22.bias_constraint': 'None',
        'm22.name': '',
    
        'm34': 'M.dl_model_init.v1',
        'm34.inputs': T.Graph.OutputPort('m6.data'),
        'm34.outputs': T.Graph.OutputPort('m22.data'),
    
        'm31': 'M.instruments.v2',
        'm31.start_date': '2014-01-01',
        'm31.end_date': '2016-12-31',
        'm31.market': 'CN_STOCK_A',
        'm31.instrument_list': """000008.SZA
    000009.SZA
    000012.SZA
    000021.SZA
    000027.SZA
    000028.SZA
    000031.SZA
    000039.SZA
    000046.SZA
    000050.SZA
    000060.SZA
    000061.SZA
    000062.SZA
    000078.SZA
    000089.SZA
    000090.SZA
    000156.SZA
    000158.SZA
    000301.SZA
    000400.SZA
    000401.SZA
    000402.SZA
    000415.SZA
    000488.SZA
    000501.SZA
    000513.SZA
    000519.SZA
    000528.SZA
    000537.SZA
    000540.SZA
    000543.SZA
    000547.SZA
    000553.SZA
    000559.SZA
    000563.SZA
    000564.SZA
    000581.SZA
    000598.SZA
    000600.SZA
    000623.SZA
    000629.SZA
    000630.SZA
    000636.SZA
    000681.SZA
    000685.SZA
    000686.SZA
    000690.SZA
    000709.SZA
    000717.SZA
    000718.SZA
    000729.SZA
    000732.SZA
    000738.SZA
    000739.SZA
    000750.SZA
    000758.SZA
    000778.SZA
    000807.SZA
    000813.SZA
    000825.SZA
    000826.SZA
    000830.SZA
    000869.SZA
    000877.SZA
    000878.SZA
    000883.SZA
    000887.SZA
    000898.SZA
    000930.SZA
    000932.SZA
    000937.SZA
    000959.SZA
    000960.SZA
    000967.SZA
    000970.SZA
    000975.SZA
    000983.SZA
    000988.SZA
    000990.SZA
    000997.SZA
    000998.SZA
    000999.SZA
    001872.SZA
    001914.SZA
    002002.SZA
    002004.SZA
    002010.SZA
    002013.SZA
    002019.SZA
    002028.SZA
    002030.SZA
    002038.SZA
    002048.SZA
    002051.SZA
    002056.SZA
    002064.SZA
    002074.SZA
    002075.SZA
    002078.SZA
    002080.SZA
    002081.SZA
    002085.SZA
    002092.SZA
    002093.SZA
    002110.SZA
    002124.SZA
    002128.SZA
    002131.SZA
    002138.SZA
    002152.SZA
    002155.SZA
    002156.SZA
    002174.SZA
    002183.SZA
    002185.SZA
    002191.SZA
    002195.SZA
    002203.SZA
    002212.SZA
    002217.SZA
    002221.SZA
    002223.SZA
    002233.SZA
    002242.SZA
    002244.SZA
    002249.SZA
    002250.SZA
    002266.SZA
    002268.SZA
    002273.SZA
    002281.SZA
    002294.SZA
    002299.SZA
    002302.SZA
    002317.SZA
    002340.SZA
    002353.SZA
    002368.SZA
    002372.SZA
    002373.SZA
    002375.SZA
    002382.SZA
    002385.SZA
    002387.SZA
    002390.SZA
    002396.SZA
    002399.SZA
    002408.SZA
    002416.SZA
    002419.SZA
    002423.SZA
    002424.SZA
    002429.SZA
    002434.SZA
    002440.SZA
    002444.SZA
    002458.SZA
    002465.SZA
    002468.SZA
    002500.SZA
    002503.SZA
    002505.SZA
    002506.SZA
    002507.SZA
    002511.SZA
    002544.SZA
    002557.SZA
    002563.SZA
    002568.SZA
    002572.SZA
    002583.SZA
    002589.SZA
    002595.SZA
    002603.SZA
    002625.SZA
    002635.SZA
    002640.SZA
    002648.SZA
    002653.SZA
    002670.SZA
    002683.SZA
    002690.SZA
    002701.SZA
    002705.SZA
    002709.SZA
    002745.SZA
    002791.SZA
    002797.SZA
    002807.SZA
    002815.SZA
    002818.SZA
    002831.SZA
    002839.SZA
    002867.SZA
    002901.SZA
    002920.SZA
    002925.SZA
    002926.SZA
    002936.SZA
    002941.SZA
    002946.SZA
    002948.SZA
    002957.SZA
    002966.SZA
    002985.SZA
    300001.SZA
    300002.SZA
    300009.SZA
    300010.SZA
    300012.SZA
    300017.SZA
    300024.SZA
    300026.SZA
    300058.SZA
    300070.SZA
    300072.SZA
    300088.SZA
    300113.SZA
    300115.SZA
    300133.SZA
    300134.SZA
    300146.SZA
    300166.SZA
    300168.SZA
    300180.SZA
    300182.SZA
    300207.SZA
    300212.SZA
    300223.SZA
    300244.SZA
    300257.SZA
    300271.SZA
    300274.SZA
    300285.SZA
    300296.SZA
    300315.SZA
    300316.SZA
    300324.SZA
    300357.SZA
    300376.SZA
    300418.SZA
    300459.SZA
    300463.SZA
    300474.SZA
    300482.SZA
    300496.SZA
    300595.SZA
    300618.SZA
    300630.SZA
    300699.SZA
    600006.SHA
    600008.SHA
    600021.SHA
    600022.SHA
    600026.SHA
    600037.SHA
    600038.SHA
    600039.SHA
    600053.SHA
    600056.SHA
    600060.SHA
    600062.SHA
    600064.SHA
    600073.SHA
    600079.SHA
    600089.SHA
    600094.SHA
    600120.SHA
    600126.SHA
    600131.SHA
    600132.SHA
    600141.SHA
    600143.SHA
    600153.SHA
    600155.SHA
    600158.SHA
    600160.SHA
    600166.SHA
    600167.SHA
    600170.SHA
    600171.SHA
    600188.SHA
    600195.SHA
    600201.SHA
    600216.SHA
    600219.SHA
    600256.SHA
    600258.SHA
    600259.SHA
    600260.SHA
    600266.SHA
    600273.SHA
    600277.SHA
    600282.SHA
    600291.SHA
    600307.SHA
    600312.SHA
    600315.SHA
    600316.SHA
    600325.SHA
    600329.SHA
    600338.SHA
    600339.SHA
    600348.SHA
    600350.SHA
    600372.SHA
    600373.SHA
    600376.SHA
    600380.SHA
    600388.SHA
    600392.SHA
    600398.SHA
    600409.SHA
    600410.SHA
    600415.SHA
    600418.SHA
    600426.SHA
    600435.SHA
    600446.SHA
    600460.SHA
    600466.SHA
    600486.SHA
    600497.SHA
    600500.SHA
    600507.SHA
    600511.SHA
    600515.SHA
    600516.SHA
    600517.SHA
    600528.SHA
    600529.SHA
    600535.SHA
    600545.SHA
    600546.SHA
    600549.SHA
    600556.SHA
    600563.SHA
    600566.SHA
    600567.SHA
    600572.SHA
    600575.SHA
    600580.SHA
    600582.SHA
    600597.SHA
    600598.SHA
    600623.SHA
    600633.SHA
    600639.SHA
    600640.SHA
    600642.SHA
    600643.SHA
    600645.SHA
    600648.SHA
    600649.SHA
    600657.SHA
    600664.SHA
    600667.SHA
    600673.SHA
    600675.SHA
    600699.SHA
    600704.SHA
    600707.SHA
    600717.SHA
    600718.SHA
    600728.SHA
    600729.SHA
    600733.SHA
    600737.SHA
    600739.SHA
    600748.SHA
    600754.SHA
    600755.SHA
    600765.SHA
    600776.SHA
    600779.SHA
    600782.SHA
    600787.SHA
    600801.SHA
    600804.SHA
    600808.SHA
    600811.SHA
    600820.SHA
    600823.SHA
    600827.SHA
    600835.SHA
    600839.SHA
    600859.SHA
    600862.SHA
    600863.SHA
    600867.SHA
    600869.SHA
    600871.SHA
    600875.SHA
    600879.SHA
    600881.SHA
    600884.SHA
    600885.SHA
    600895.SHA
    600901.SHA
    600903.SHA
    600908.SHA
    600909.SHA
    600917.SHA
    600928.SHA
    600959.SHA
    600967.SHA
    600968.SHA
    600970.SHA
    600985.SHA
    601000.SHA
    601003.SHA
    601005.SHA
    601016.SHA
    601068.SHA
    601098.SHA
    601099.SHA
    601106.SHA
    601118.SHA
    601127.SHA
    601128.SHA
    601139.SHA
    601168.SHA
    601179.SHA
    601200.SHA
    601228.SHA
    601233.SHA
    601298.SHA
    601333.SHA
    601456.SHA
    601512.SHA
    601598.SHA
    601608.SHA
    601611.SHA
    601615.SHA
    601689.SHA
    601699.SHA
    601717.SHA
    601718.SHA
    601778.SHA
    601799.SHA
    601801.SHA
    601828.SHA
    601860.SHA
    601865.SHA
    601866.SHA
    601869.SHA
    601880.SHA
    601928.SHA
    601958.SHA
    601966.SHA
    601969.SHA
    601975.SHA
    601992.SHA
    601997.SHA
    603000.SHA
    603056.SHA
    603077.SHA
    603198.SHA
    603225.SHA
    603228.SHA
    603256.SHA
    603260.SHA
    603290.SHA
    603317.SHA
    603328.SHA
    603338.SHA
    603345.SHA
    603355.SHA
    603377.SHA
    603379.SHA
    603444.SHA
    603486.SHA
    603515.SHA
    603568.SHA
    603589.SHA
    603605.SHA
    603638.SHA
    603650.SHA
    603708.SHA
    603712.SHA
    603719.SHA
    603737.SHA
    603786.SHA
    603806.SHA
    603816.SHA
    603858.SHA
    603866.SHA
    603868.SHA
    603882.SHA
    603883.SHA
    603885.SHA
    603888.SHA
    603893.SHA
    603927.SHA
    603983.SHA
    688002.SHA
    688029.SHA
    688088.SHA
    688099.SHA
    688321.SHA""",
        'm31.max_count': 0,
    
        'm2': 'M.advanced_auto_labeler.v2',
        'm2.instruments': T.Graph.OutputPort('m31.data'),
        'm2.label_expr': """# #号开始的表示注释
    # 0. 每行一个,顺序执行,从第二个开始,可以使用label字段
    # 1. 可用数据字段见 https://bigquant.com/docs/data_history_data.html
    #   添加benchmark_前缀,可使用对应的benchmark数据
    # 2. 可用操作符和函数见 `表达式引擎 <https://bigquant.com/docs/big_expr.html>`_
    
    # 计算收益:5日收盘价(作为卖出价格)除以明日开盘价(作为买入价格)
    (shift(close, -5) / shift(open, -1) - 1)*10
    
    # 极值处理:用1%和99%分位的值做clip
    clip(label, all_quantile(label, 0.01), all_quantile(label, 0.99))
    
    # 过滤掉一字涨停的情况 (设置label为NaN,在后续处理和训练中会忽略NaN的label)
    where(shift(high, -1) == shift(low, -1), NaN, label)
    """,
        'm2.start_date': '',
        'm2.end_date': '',
        'm2.benchmark': '000300.SHA',
        'm2.drop_na_label': True,
        'm2.cast_label_int': False,
    
        'm13': 'M.standardlize.v8',
        'm13.input_1': T.Graph.OutputPort('m2.data'),
        'm13.columns_input': 'label',
    
        'm15': 'M.general_feature_extractor.v7',
        'm15.instruments': T.Graph.OutputPort('m31.data'),
        'm15.features': T.Graph.OutputPort('m43.data'),
        'm15.start_date': '',
        'm15.end_date': '',
        'm15.before_start_days': 90,
    
        'm16': 'M.derived_feature_extractor.v3',
        'm16.input_data': T.Graph.OutputPort('m15.data'),
        'm16.features': T.Graph.OutputPort('m43.data'),
        'm16.date_col': 'date',
        'm16.instrument_col': 'instrument',
        'm16.drop_na': True,
        'm16.remove_extra_columns': False,
    
        'm44': 'M.filter.v3',
        'm44.input_data': T.Graph.OutputPort('m16.data'),
        'm44.expr': 'market_cap_0>2000000000',
        'm44.output_left_data': False,
    
        'm14': 'M.standardlize.v8',
        'm14.input_1': T.Graph.OutputPort('m44.data'),
        'm14.input_2': T.Graph.OutputPort('m3.data'),
        'm14.columns_input': '[]',
    
        'm7': 'M.join.v3',
        'm7.data1': T.Graph.OutputPort('m13.data'),
        'm7.data2': T.Graph.OutputPort('m14.data'),
        'm7.on': 'date,instrument',
        'm7.how': 'inner',
        'm7.sort': False,
    
        'm36': 'M.aa.v5',
        'm36.input_data': T.Graph.OutputPort('m7.data'),
        'm36.day_number': 150,
    
        'm33': 'M.chinaa_stock_filter.v1',
        'm33.input_data': T.Graph.OutputPort('m36.data'),
        'm33.index_constituent_cond': ['全部'],
        'm33.board_cond': ['全部'],
        'm33.industry_cond': ['全部'],
        'm33.st_cond': ['正常'],
        'm33.delist_cond': ['全部'],
        'm33.output_left_data': False,
    
        'm54': 'M.dropnan.v2',
        'm54.input_data': T.Graph.OutputPort('m33.data'),
    
        'm26': 'M.dl_convert_to_bin.v2',
        'm26.input_data': T.Graph.OutputPort('m54.data'),
        'm26.features': T.Graph.OutputPort('m3.data'),
        'm26.window_size': 5,
        'm26.feature_clip': 3,
        'm26.flatten': True,
        'm26.window_along_col': 'instrument',
    
        'm4': 'M.cached.v3',
        'm4.input_1': T.Graph.OutputPort('m26.data'),
        'm4.input_2': T.Graph.OutputPort('m3.data'),
        'm4.run': m4_run_bigquant_run,
        'm4.post_run': m4_post_run_bigquant_run,
        'm4.input_ports': '',
        'm4.params': '{}',
        'm4.output_ports': '',
    
        'm5': 'M.dl_model_train.v1',
        'm5.input_model': T.Graph.OutputPort('m34.data'),
        'm5.training_data': T.Graph.OutputPort('m4.data_1'),
        'm5.optimizer': '自定义',
        'm5.user_optimizer': m5_user_optimizer_bigquant_run,
        'm5.loss': 'mean_squared_error',
        'm5.metrics': 'mae',
        'm5.batch_size': 2048,
        'm5.epochs': 1,
        'm5.custom_objects': m5_custom_objects_bigquant_run,
        'm5.n_gpus': 0,
        'm5.verbose': '2:每个epoch输出一行记录',
    
        'm11': 'M.dl_model_predict.v1',
        'm11.trained_model': T.Graph.OutputPort('m5.data'),
        'm11.input_data': T.Graph.OutputPort('m8.data_1'),
        'm11.batch_size': 1024,
        'm11.n_gpus': 0,
        'm11.verbose': '2:每个epoch输出一行记录',
    
        'm24': 'M.cached.v3',
        'm24.input_1': T.Graph.OutputPort('m11.data'),
        'm24.input_2': T.Graph.OutputPort('m55.data'),
        'm24.run': m24_run_bigquant_run,
        'm24.post_run': m24_post_run_bigquant_run,
        'm24.input_ports': '',
        'm24.params': '{}',
        'm24.output_ports': '',
    
        'm40': 'M.trade.v4',
        'm40.instruments': T.Graph.OutputPort('m9.data'),
        'm40.options_data': T.Graph.OutputPort('m24.data_1'),
        'm40.start_date': '',
        'm40.end_date': '',
        'm40.initialize': m40_initialize_bigquant_run,
        'm40.handle_data': m40_handle_data_bigquant_run,
        'm40.prepare': m40_prepare_bigquant_run,
        'm40.volume_limit': 0.025,
        'm40.order_price_field_buy': 'open',
        'm40.order_price_field_sell': 'close',
        'm40.capital_base': 5000000,
        'm40.auto_cancel_non_tradable_orders': True,
        'm40.data_frequency': 'daily',
        'm40.price_type': '真实价格',
        'm40.product_type': '股票',
        'm40.plot_charts': True,
        'm40.backtest_only': False,
        'm40.benchmark': '000905.SHA',
    
        'm1': 'M.input_features.v1',
        'm1.features': """mf_net_pct_s_0                 ##8/33
    #mean(where(close_0>open_0, ((close_0-low_0)/(high_0-low_0))*(turn_0/avg_turn_5), -1*((high_0-close_0)/(high_0-low_0))*(turn_0/avg_turn_5)),5) #-4/25///47      
    (close_0-low_0)/close_0        ##4/24//42
    (high_0-close_0)/close_0       ##21/
    (open_0-close_0)/close_0       #3/14//36\\\\72
    #(high_0-low_0)/close_0         #0/25\\\\\69
    
    sqrt(high_0*low_0)-amount_0/volume_0*adjust_factor_0 ##2/22///47////54
    rank_volatility_5_0            ##-8/19///47\\\77
    
    #(high_0-close_0)/(high_0-low_0)#-4/19//37///46\55
    #sum(where(close_0>open_0, ((close_0-low_0)/(high_0-low_0))*(turn_0/avg_turn_5), -1*((high_0-close_0)/(high_0-low_0))*(turn_0/avg_turn_5)),5)  #-4/16
    
    #ta_bbands_u(close_0, 5)                    #-10/17
    std(turn_0,5)                              ##1/18//36///53
    
    #(high_0-open_0)/close_0        #-1/18/36///46
    (open_0-low_0)/close_0         ##5/16\\67\\\\\69
    #(close_0-ts_min(close_0, 5))/close_0      #-6/27/
    
    #(close_0-ts_min(low_0, 5))/close_0              #-5/20///50\61
    #(close_0-open_4)/close_0                        #-1/12
    #(ts_max(high_0, 5)-close_0)/close_0             #8/23///50
    (ts_max(high_0, 5)-ts_min(low_0, 5))/close_0    ##-1/18//37///50\72
    
    #(ts_max(high_0, 5)-open_4)/close_0              #-4/20
    #(open_4-ts_min(low_0, 5))/close_0               #4/21
    
    
    
    
    
    """,
    
        'm19': 'M.input_features.v1',
        'm19.features': """mf_net_pct_s_0                 ##8/33
    #mean(where(close_0>open_0, ((close_0-low_0)/(high_0-low_0))*(turn_0/avg_turn_5), -1*((high_0-close_0)/(high_0-low_0))*(turn_0/avg_turn_5)),5) #-4/25///47      
    (close_0-low_0)/close_0        ##4/24//42
    (high_0-close_0)/close_0       ##21/
    (open_0-close_0)/close_0       #3/14//36\\\\72
    (high_0-low_0)/close_0         #0/25\\\\\73
    
    sqrt(high_0*low_0)-amount_0/volume_0*adjust_factor_0 ##2/22///47////54
    rank_volatility_5_0            ##-8/19///47\\\77
    
    #(high_0-close_0)/(high_0-low_0)#-4/19//37
    #sum(where(close_0>open_0, ((close_0-low_0)/(high_0-low_0))*(turn_0/avg_turn_5), -1*((high_0-close_0)/(high_0-low_0))*(turn_0/avg_turn_5)),5)  #-4/16
    
    #ta_bbands_u(close_0, 5)                    #-10/17
    std(turn_0,5)                              ##1/18//36///53
    
    #(high_0-open_0)/close_0        #-1/18/36///46
    (open_0-low_0)/close_0         ##5/16\\67
    #(close_0-ts_min(close_0, 5))/close_0      #-6/27/
    
    (close_0-ts_min(low_0, 5))/close_0              #-5/20///50\\\\\73
    #(close_0-open_4)/close_0                        #-1/12
    #(ts_max(high_0, 5)-close_0)/close_0             #8/23///50
    (ts_max(high_0, 5)-ts_min(low_0, 5))/close_0    ##-1/18//37///50\72
    
    #(ts_max(high_0, 5)-open_4)/close_0              #-4/20
    #(open_4-ts_min(low_0, 5))/close_0               #4/21
    
    
    
    
    
    """,
    })
    
    # g.run({})
    
    
    def m42_run_bigquant_run(
        bq_graph,
        inputs,
        trading_days_market='CN', # 使用那个市场的交易日历
        train_instruments_mid='m31', # 训练数据 证券代码列表 模块id
        test_instruments_mid='m9', # 测试数据 证券代码列表 模块id
        predict_mid='m24', # 预测 模块id
        trade_mid='m40', # 回测 模块id
        start_date='2017-08-01', # 数据开始日期
        end_date=T.live_run_param('trading_date', '2018-12-31'), # 数据结束日期
        train_update_days=30, # 更新周期,按交易日计算,每多少天更新一次
        train_update_days_for_live=30, #模拟实盘模式下的更新周期,按交易日计算,每多少天更新一次。如果需要在模拟实盘阶段使用不同的模型更新周期,可以设置这个参数
        train_data_min_days=125, # 最小数据天数,按交易日计算,所以第一个滚动的结束日期是 从开始日期到开始日期+最小数据天数
        train_data_max_days=125, # 最大数据天数,按交易日计算,0,表示没有限制,否则每一个滚动的开始日期=max(此滚动的结束日期-最大数据天数, 开始日期
        rolling_count_for_live=1, #实盘模式下滚动次数,模拟实盘模式下,取最后多少次滚动。一般在模拟实盘模式下,只用到最后一次滚动训练的模型,这里可以设置为1;如果你的滚动训练数据时间段很短,以至于期间可能没有训练数据,这里可以设置大一点。0表示没有限制
    ):
        def merge_datasources(input_1):
            df_list = [ds.read_df() 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:
                    train_start_date = max(train_end_date - train_data_max_days, 0)
                else:
                    train_start_date = start_date
                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].data_1 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}
    
    
    m42 = M.hyper_rolling_train.v1(
        run=m42_run_bigquant_run,
        run_now=True,
        bq_graph=g
    )
    
    ---------------------------------------------------------------------------
    NotImplementedError                       Traceback (most recent call last)
    <ipython-input-1-99c288e4e88d> in <module>
       1837 
       1838 
    -> 1839 m42 = M.hyper_rolling_train.v1(
       1840     run=m42_run_bigquant_run,
       1841     run_now=True,
    
    <ipython-input-1-99c288e4e88d> in m42_run_bigquant_run(bq_graph, inputs, trading_days_market, train_instruments_mid, test_instruments_mid, predict_mid, trade_mid, start_date, end_date, train_update_days, train_update_days_for_live, train_data_min_days, train_data_max_days, rolling_count_for_live)
       1822         parameters[test_instruments_mid + '.end_date'] = rolling['test_end_date']
       1823         # print('------ rolling_train:', parameters)
    -> 1824         results.append(g.run(parameters))
       1825 
       1826     # 合并预测结果并回测
    
    NotImplementedError: Cannot convert a symbolic Tensor (lstm/strided_slice:0) to a numpy array. This error may indicate that you're trying to pass a Tensor to a NumPy call, which is not supported