复制链接
克隆策略
In [ ]:
 

    {"description":"实验创建于2020/12/25","graph":{"edges":[{"to_node_id":"-50:instruments","from_node_id":"-20:data"},{"to_node_id":"-50:features","from_node_id":"-38:data"},{"to_node_id":"-66:features","from_node_id":"-38:data"},{"to_node_id":"-6138:input_data","from_node_id":"-50:data"},{"to_node_id":"-1569:input_1","from_node_id":"-66:data"},{"to_node_id":"-66:input_data","from_node_id":"-6138:data"},{"to_node_id":"-662:input_1","from_node_id":"-1569:data_1"},{"to_node_id":"-6110:instruments","from_node_id":"-6097:data"},{"to_node_id":"-281:instruments","from_node_id":"-6097:data"},{"to_node_id":"-6110:features","from_node_id":"-6105:data"},{"to_node_id":"-6117:features","from_node_id":"-6105:data"},{"to_node_id":"-6126:input_data","from_node_id":"-6110:data"},{"to_node_id":"-6139:input_1","from_node_id":"-6117:data"},{"to_node_id":"-6117:input_data","from_node_id":"-6126:data"},{"to_node_id":"-662:input_2","from_node_id":"-6139:data_1"},{"to_node_id":"-281:options_data","from_node_id":"-662:data_1"}],"nodes":[{"node_id":"-20","module_id":"BigQuantSpace.instruments.instruments-v2","parameters":[{"name":"start_date","value":"2016-01-01","type":"Literal","bound_global_parameter":null},{"name":"end_date","value":"2020-01-01","type":"Literal","bound_global_parameter":null},{"name":"market","value":"CN_STOCK_A","type":"Literal","bound_global_parameter":null},{"name":"instrument_list","value":"","type":"Literal","bound_global_parameter":null},{"name":"max_count","value":0,"type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"rolling_conf","node_id":"-20"}],"output_ports":[{"name":"data","node_id":"-20"}],"cacheable":true,"seq_num":1,"comment":"训练时间","comment_collapsed":false},{"node_id":"-38","module_id":"BigQuantSpace.input_features.input_features-v1","parameters":[{"name":"features","value":"#收盘突破所有短期均线,收盘表现强势\nbuy_cond_1 = where((close_0>mean(close_0, 20))&(close_0>mean(close_0, 10))&(close_0>mean(close_0, 5)),1,0)\n#底部冲短线均线下方开始反弹\nbuy_cond_2 = where((low_0<mean(close_0, 5))&(low_0<mean(close_0, 10))&(low_0<mean(close_0, 20)), 1, 0)\n#确保当天为阳\nbuy_cond_3 = where((close_0>open_0), 1, 0)\n\n\n#预测值Y\ny = shift(close_0,-2)/shift(open_0,-1)\n\n# 过滤掉一字涨停\nwhere(shift(high_0, -1) == shift(low_0, -1), NaN, y)\n\n#股价相对位置,RSI指标\na1 = ta_rsi_14_0 \n#量价因子\na2 = (ta_ema(volume_0, 12)-ta_ema(volume_0, 26))\n#资金流因子,近几天大单相对流通市值\na3 = sum(mf_net_amount_xl_0,10)/market_cap_float_0\n#换手率因子\na4 = turn_0/mean(turn_0, 5)\n#技术指标因子(量价因子)\na5 = close_0/mean(close_0, 20)","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"features_ds","node_id":"-38"}],"output_ports":[{"name":"data","node_id":"-38"}],"cacheable":true,"seq_num":2,"comment":"股票池\n预测值\n因子","comment_collapsed":false},{"node_id":"-50","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":"50","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"instruments","node_id":"-50"},{"name":"features","node_id":"-50"}],"output_ports":[{"name":"data","node_id":"-50"}],"cacheable":true,"seq_num":3,"comment":"","comment_collapsed":true},{"node_id":"-66","module_id":"BigQuantSpace.derived_feature_extractor.derived_feature_extractor-v3","parameters":[{"name":"date_col","value":"date","type":"Literal","bound_global_parameter":null},{"name":"instrument_col","value":"instrument","type":"Literal","bound_global_parameter":null},{"name":"drop_na","value":"False","type":"Literal","bound_global_parameter":null},{"name":"remove_extra_columns","value":"True","type":"Literal","bound_global_parameter":null},{"name":"user_functions","value":"","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"input_data","node_id":"-66"},{"name":"features","node_id":"-66"}],"output_ports":[{"name":"data","node_id":"-66"}],"cacheable":true,"seq_num":4,"comment":"","comment_collapsed":true},{"node_id":"-6138","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%3Afalse%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%3Atrue%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%2C%7B%22value%22%3A%22%E7%A7%91%E5%88%9B%E6%9D%BF%22%2C%22displayValue%22%3A%22%E7%A7%91%E5%88%9B%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%3Afalse%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%3Atrue%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":"-6138"}],"output_ports":[{"name":"data","node_id":"-6138"},{"name":"left_data","node_id":"-6138"}],"cacheable":true,"seq_num":5,"comment":"先过滤数据,提高运行速度","comment_collapsed":false},{"node_id":"-1569","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_all = m4.data.read_df()\n df_all = df_all[df_all['date']>'2016-01-01']\n df_all = df_all[(df_all['buy_cond_1']==1)&(df_all['buy_cond_2']==1)&(df_all['buy_cond_3']==1)]\n #df_all['label'] = df_all['y']\n data_1 = DataSource.write_df(df_all)\n return Outputs(data_1=data_1, 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","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":"-1569"},{"name":"input_2","node_id":"-1569"},{"name":"input_3","node_id":"-1569"}],"output_ports":[{"name":"data_1","node_id":"-1569"},{"name":"data_2","node_id":"-1569"},{"name":"data_3","node_id":"-1569"}],"cacheable":true,"seq_num":6,"comment":"按条件过滤","comment_collapsed":false},{"node_id":"-6097","module_id":"BigQuantSpace.instruments.instruments-v2","parameters":[{"name":"start_date","value":"2020-01-01","type":"Literal","bound_global_parameter":"交易日期"},{"name":"end_date","value":"2022-08-16","type":"Literal","bound_global_parameter":"交易日期"},{"name":"market","value":"CN_STOCK_A","type":"Literal","bound_global_parameter":null},{"name":"instrument_list","value":"","type":"Literal","bound_global_parameter":null},{"name":"max_count","value":0,"type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"rolling_conf","node_id":"-6097"}],"output_ports":[{"name":"data","node_id":"-6097"}],"cacheable":true,"seq_num":7,"comment":"测试时间","comment_collapsed":false},{"node_id":"-6105","module_id":"BigQuantSpace.input_features.input_features-v1","parameters":[{"name":"features","value":"#收盘突破所有短期均线,收盘表现强势\nbuy_cond_1 = where((close_0>mean(close_0, 20))&(close_0>mean(close_0, 10))&(close_0>mean(close_0, 5)),1,0)\n#底部冲短线均线下方开始反弹\nbuy_cond_2 = where((low_0<mean(close_0, 5))&(low_0<mean(close_0, 10))&(low_0<mean(close_0, 20)), 1, 0)\n#确保当天为阳\nbuy_cond_3 = where((close_0>open_0), 1, 0)\n\n\n#预测值Y\ny = shift(close_0,-2)/shift(open_0,-1)\n\n# 过滤掉一字涨停\nwhere(shift(high_0, -1) == shift(low_0, -1), NaN, y)\n\n#股价相对位置,RSI指标\na1 = ta_rsi_14_0 \n#量价因子\na2 = (ta_ema(volume_0, 12)-ta_ema(volume_0, 26))\n#资金流因子,近几天大单相对流通市值\na3 = sum(mf_net_amount_xl_0,10)/market_cap_float_0\n#换手率因子\na4 = turn_0/mean(turn_0, 5)\n#技术指标因子(量价因子)\na5 = close_0/mean(close_0, 20)","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"features_ds","node_id":"-6105"}],"output_ports":[{"name":"data","node_id":"-6105"}],"cacheable":true,"seq_num":8,"comment":"股票池\n预测值\n因子","comment_collapsed":false},{"node_id":"-6110","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":"50","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"instruments","node_id":"-6110"},{"name":"features","node_id":"-6110"}],"output_ports":[{"name":"data","node_id":"-6110"}],"cacheable":true,"seq_num":9,"comment":"","comment_collapsed":true},{"node_id":"-6117","module_id":"BigQuantSpace.derived_feature_extractor.derived_feature_extractor-v3","parameters":[{"name":"date_col","value":"date","type":"Literal","bound_global_parameter":null},{"name":"instrument_col","value":"instrument","type":"Literal","bound_global_parameter":null},{"name":"drop_na","value":"False","type":"Literal","bound_global_parameter":null},{"name":"remove_extra_columns","value":"True","type":"Literal","bound_global_parameter":null},{"name":"user_functions","value":"","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"input_data","node_id":"-6117"},{"name":"features","node_id":"-6117"}],"output_ports":[{"name":"data","node_id":"-6117"}],"cacheable":true,"seq_num":10,"comment":"","comment_collapsed":true},{"node_id":"-6126","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%3Afalse%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%3Atrue%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%2C%7B%22value%22%3A%22%E7%A7%91%E5%88%9B%E6%9D%BF%22%2C%22displayValue%22%3A%22%E7%A7%91%E5%88%9B%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%3Afalse%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%3Atrue%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":"-6126"}],"output_ports":[{"name":"data","node_id":"-6126"},{"name":"left_data","node_id":"-6126"}],"cacheable":true,"seq_num":11,"comment":"先过滤数据,提高运行速度","comment_collapsed":false},{"node_id":"-6139","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_all = m10.data.read_df()\n df_all = df_all[df_all['date']>'2020-01-01']\n df_all = df_all[(df_all['buy_cond_1']==1)&(df_all['buy_cond_2']==1)&(df_all['buy_cond_3']==1)] \n\n data_1 = DataSource.write_df(df_all)\n return Outputs(data_1=data_1, 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","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":"-6139"},{"name":"input_2","node_id":"-6139"},{"name":"input_3","node_id":"-6139"}],"output_ports":[{"name":"data_1","node_id":"-6139"},{"name":"data_2","node_id":"-6139"},{"name":"data_3","node_id":"-6139"}],"cacheable":true,"seq_num":12,"comment":"按条件过滤","comment_collapsed":false},{"node_id":"-662","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 = pd.DataFrame({'data': [1, 2, 3]})\n data_1 = DataSource.write_df(df)\n data_2 = DataSource.write_pickle(df)\n return Outputs(data_1=data_1, data_2=data_2, data_3=None)\n","type":"Literal","bound_global_parameter":null},{"name":"post_run","value":"# 后处理函数,可选。输入是主函数的输出,可以在这里对数据做处理,或者返回更友好的outputs数据格式。此函数输出不会被缓存。\ndef bigquant_run(outputs):\n return outputs\n","type":"Literal","bound_global_parameter":null},{"name":"input_ports","value":"","type":"Literal","bound_global_parameter":null},{"name":"params","value":"{}","type":"Literal","bound_global_parameter":null},{"name":"output_ports","value":"","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"input_1","node_id":"-662"},{"name":"input_2","node_id":"-662"},{"name":"input_3","node_id":"-662"}],"output_ports":[{"name":"data_1","node_id":"-662"},{"name":"data_2","node_id":"-662"},{"name":"data_3","node_id":"-662"}],"cacheable":true,"seq_num":13,"comment":"无任何功能","comment_collapsed":false},{"node_id":"-281","module_id":"BigQuantSpace.trade.trade-v4","parameters":[{"name":"start_date","value":"","type":"Literal","bound_global_parameter":null},{"name":"end_date","value":"","type":"Literal","bound_global_parameter":null},{"name":"initialize","value":"# 回测引擎:初始化函数,只执行一次\ndef bigquant_run(context):\n context.set_commission(PerOrder(buy_cost=0.0005, sell_cost=0.0012, min_cost=5))\n","type":"Literal","bound_global_parameter":null},{"name":"handle_data","value":"# 回测引擎:每日数据处理函数,每天执行一次\ndef bigquant_run(context, data):\n # 获取当前持仓\n positions = {e.symbol: p.amount * p.last_sale_price for e, p in context.portfolio.positions.items()}\n \n # 按日期过滤得到今日的预测数据\n df = context.df\n today = data.current_dt.strftime('%Y-%m-%d')\n today_data = df[df['date']==today]\n \n #选择预测值最高的股票,持仓的股票卖出\n df = today_data.sort_values(['pred'],ascending=False)\n df = df[:1]\n\n buy_instruments = df['instrument'].tolist()\n sell_instruments = [instrument.symbol for instrument in context.portfolio.positions.keys()]\n \n #半仓买入\n cash_for_buy = min(context.portfolio.cash,0.5*context.portfolio.portfolio_value) \n \n for instrument in sell_instruments:\n context.order_target(context.symbol(instrument), 0)\n for instrument in buy_instruments:\n context.order_value(context.symbol(instrument), cash_for_buy)\n","type":"Literal","bound_global_parameter":null},{"name":"prepare","value":"# 回测引擎:准备数据,只执行一次\ndef bigquant_run(context):\n #模型训练,预测功能也放置在自定义模块\n #-----------------------------------------------------------------------训练---------------------------------------------------------------------------------\n #训练数据,选用五个因子的多因子模型\n train_data = m6.data_1.read_df()\n train_data = train_data[(train_data['date']>'2016-01-01')&(train_data['date']<'2020-01-01')]\n train_data_temp = train_data[['a1', 'a2', 'a3', 'a4', 'a5','y','date','instrument']]\n train_data_temp = train_data_temp.dropna(axis = 0) \n\n x = train_data_temp[['a1', 'a2', 'a3', 'a4', 'a5']]\n y = train_data_temp[['y']]\n #用随机森林模型训练\n ##--------------------model---------------------\n from sklearn.ensemble import RandomForestRegressor\n model = RandomForestRegressor(\n n_estimators=10,#弱分类树个数\n bootstrap = False,#不放回抽样\n\n max_features = None,#考虑所有特征\n max_depth = 5,#最大深度\n min_samples_leaf = 2000#最小样本数\n )\n model.fit(x,y)\n ##--------------------model---------------------\n #------------------------------------------------------------------------训练----------------------------------------------------------------------------------\n \n #---------------------------------------------------------------------------测试------------------------------------------------------------------------------------\n #测试数据\n test_data = m12.data_1.read_df()\n test_data = test_data[(test_data['date']>'2020-01-01')]\n \n test_data_temp = test_data[['a1', 'a2', 'a3', 'a4', 'a5','date','instrument']]\n test_data_temp = test_data_temp.dropna(axis = 0)\n x = test_data_temp[['a1', 'a2', 'a3', 'a4', 'a5']]\n #model预测\n y_pred = model.predict(x)\n \n #整理预测后的数据,预测值要大于1,0.002考虑费用\n df_result = test_data_temp[['date','instrument']]\n df_result['pred'] = y_pred\n df_result = df_result[df_result['pred']>1.002]\n #--------------------------------------------------------------------------测试------------------------------------------------------------------------------------\n\n context.df = df_result \n","type":"Literal","bound_global_parameter":null},{"name":"before_trading_start","value":"# 回测引擎:每个单位时间开始前调用一次,即每日开盘前调用一次。\ndef bigquant_run(context, data):\n pass\n","type":"Literal","bound_global_parameter":null},{"name":"volume_limit","value":0.025,"type":"Literal","bound_global_parameter":null},{"name":"order_price_field_buy","value":"open","type":"Literal","bound_global_parameter":null},{"name":"order_price_field_sell","value":"close","type":"Literal","bound_global_parameter":null},{"name":"capital_base","value":"100000","type":"Literal","bound_global_parameter":null},{"name":"auto_cancel_non_tradable_orders","value":"True","type":"Literal","bound_global_parameter":null},{"name":"data_frequency","value":"daily","type":"Literal","bound_global_parameter":null},{"name":"price_type","value":"真实价格","type":"Literal","bound_global_parameter":null},{"name":"product_type","value":"股票","type":"Literal","bound_global_parameter":null},{"name":"plot_charts","value":"True","type":"Literal","bound_global_parameter":null},{"name":"backtest_only","value":"False","type":"Literal","bound_global_parameter":null},{"name":"benchmark","value":"000300.HIX","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"instruments","node_id":"-281"},{"name":"options_data","node_id":"-281"},{"name":"history_ds","node_id":"-281"},{"name":"benchmark_ds","node_id":"-281"},{"name":"trading_calendar","node_id":"-281"}],"output_ports":[{"name":"raw_perf","node_id":"-281"}],"cacheable":false,"seq_num":14,"comment":"建模,回测","comment_collapsed":false}],"node_layout":"<node_postions><node_position Node='-20' Position='789,331,200,200'/><node_position Node='-38' Position='1202,372.7884826660156,200,200'/><node_position Node='-50' Position='799,486,200,200'/><node_position Node='-66' Position='792,647,200,200'/><node_position Node='-6138' Position='795,565,200,200'/><node_position Node='-1569' Position='969,735,200,200'/><node_position Node='-6097' Position='1562,346,200,200'/><node_position Node='-6105' Position='2004,418,200,200'/><node_position Node='-6110' Position='1569,447,200,200'/><node_position Node='-6117' Position='1566,629,200,200'/><node_position Node='-6126' Position='1567,532,200,200'/><node_position Node='-6139' Position='1350,733,200,200'/><node_position Node='-662' Position='1161,895,200,200'/><node_position Node='-281' Position='1387,1123,200,200'/></node_postions>"},"nodes_readonly":false,"studio_version":"v2"}
    In [1]:
    # 本代码由可视化策略环境自动生成 2022年9月17日 00:47
    # 本代码单元只能在可视化模式下编辑。您也可以拷贝代码,粘贴到新建的代码单元或者策略,然后修改。
    
    
    # Python 代码入口函数,input_1/2/3 对应三个输入端,data_1/2/3 对应三个输出端
    def m6_run_bigquant_run(input_1, input_2, input_3):
    
        df_all = m4.data.read_df()
        df_all = df_all[df_all['date']>'2016-01-01']
        df_all = df_all[(df_all['buy_cond_1']==1)&(df_all['buy_cond_2']==1)&(df_all['buy_cond_3']==1)]
        #df_all['label'] = df_all['y']
        data_1 = DataSource.write_df(df_all)
        return Outputs(data_1=data_1, data_2=None, data_3=None)
    
    # 后处理函数,可选。输入是主函数的输出,可以在这里对数据做处理,或者返回更友好的outputs数据格式。此函数输出不会被缓存。
    def m6_post_run_bigquant_run(outputs):
        return outputs
    # Python 代码入口函数,input_1/2/3 对应三个输入端,data_1/2/3 对应三个输出端
    def m12_run_bigquant_run(input_1, input_2, input_3):
    
        df_all = m10.data.read_df()
        df_all = df_all[df_all['date']>'2020-01-01']
        df_all = df_all[(df_all['buy_cond_1']==1)&(df_all['buy_cond_2']==1)&(df_all['buy_cond_3']==1)] 
    
        data_1 = DataSource.write_df(df_all)
        return Outputs(data_1=data_1, data_2=None, data_3=None)
    
    # 后处理函数,可选。输入是主函数的输出,可以在这里对数据做处理,或者返回更友好的outputs数据格式。此函数输出不会被缓存。
    def m12_post_run_bigquant_run(outputs):
        return outputs
    # Python 代码入口函数,input_1/2/3 对应三个输入端,data_1/2/3 对应三个输出端
    def m13_run_bigquant_run(input_1, input_2, input_3):
        # 示例代码如下。在这里编写您的代码
        df = pd.DataFrame({'data': [1, 2, 3]})
        data_1 = DataSource.write_df(df)
        data_2 = DataSource.write_pickle(df)
        return Outputs(data_1=data_1, data_2=data_2, data_3=None)
    
    # 后处理函数,可选。输入是主函数的输出,可以在这里对数据做处理,或者返回更友好的outputs数据格式。此函数输出不会被缓存。
    def m13_post_run_bigquant_run(outputs):
        return outputs
    
    # 回测引擎:初始化函数,只执行一次
    def m14_initialize_bigquant_run(context):
        context.set_commission(PerOrder(buy_cost=0.0005, sell_cost=0.0012, min_cost=5))
    
    # 回测引擎:每日数据处理函数,每天执行一次
    def m14_handle_data_bigquant_run(context, data):
        # 获取当前持仓
        positions = {e.symbol: p.amount * p.last_sale_price for e, p in context.portfolio.positions.items()}
        
        # 按日期过滤得到今日的预测数据
        df = context.df
        today = data.current_dt.strftime('%Y-%m-%d')
        today_data = df[df['date']==today]
        
        #选择预测值最高的股票,持仓的股票卖出
        df = today_data.sort_values(['pred'],ascending=False)
        df = df[:1]
    
        buy_instruments = df['instrument'].tolist()
        sell_instruments = [instrument.symbol for instrument in context.portfolio.positions.keys()]
        
        #半仓买入
        cash_for_buy = min(context.portfolio.cash,0.5*context.portfolio.portfolio_value)      
        
        for instrument in sell_instruments:
            context.order_target(context.symbol(instrument), 0)
        for instrument in buy_instruments:
            context.order_value(context.symbol(instrument), cash_for_buy)
    
    # 回测引擎:准备数据,只执行一次
    def m14_prepare_bigquant_run(context):
        #模型训练,预测功能也放置在自定义模块
        #-----------------------------------------------------------------------训练---------------------------------------------------------------------------------
        #训练数据,选用五个因子的多因子模型
        train_data = m6.data_1.read_df()
        train_data = train_data[(train_data['date']>'2016-01-01')&(train_data['date']<'2020-01-01')]
        train_data_temp = train_data[['a1', 'a2', 'a3', 'a4', 'a5','y','date','instrument']]
        train_data_temp = train_data_temp.dropna(axis = 0) 
    
        x = train_data_temp[['a1', 'a2', 'a3', 'a4', 'a5']]
        y = train_data_temp[['y']]
        #用随机森林模型训练
        ##--------------------model---------------------
        from sklearn.ensemble import RandomForestRegressor
        model = RandomForestRegressor(
            n_estimators=10,#弱分类树个数
            bootstrap = False,#不放回抽样
    
            max_features = None,#考虑所有特征
            max_depth = 5,#最大深度
            min_samples_leaf = 2000#最小样本数
        )
        model.fit(x,y)
        ##--------------------model---------------------
        #------------------------------------------------------------------------训练----------------------------------------------------------------------------------
        
        #---------------------------------------------------------------------------测试------------------------------------------------------------------------------------
        #测试数据
        test_data = m12.data_1.read_df()
        test_data = test_data[(test_data['date']>'2020-01-01')]
      
        test_data_temp = test_data[['a1', 'a2', 'a3', 'a4', 'a5','date','instrument']]
        test_data_temp = test_data_temp.dropna(axis = 0)
        x = test_data_temp[['a1', 'a2', 'a3', 'a4', 'a5']]
        #model预测
        y_pred = model.predict(x)
        
        #整理预测后的数据,预测值要大于1,0.002考虑费用
        df_result = test_data_temp[['date','instrument']]
        df_result['pred'] = y_pred
        df_result = df_result[df_result['pred']>1.002]
        #--------------------------------------------------------------------------测试------------------------------------------------------------------------------------
    
        context.df = df_result     
    
    # 回测引擎:每个单位时间开始前调用一次,即每日开盘前调用一次。
    def m14_before_trading_start_bigquant_run(context, data):
        pass
    
    
    m1 = M.instruments.v2(
        start_date='2016-01-01',
        end_date='2020-01-01',
        market='CN_STOCK_A',
        instrument_list='',
        max_count=0
    )
    
    m2 = M.input_features.v1(
        features="""#收盘突破所有短期均线,收盘表现强势
    buy_cond_1 = where((close_0>mean(close_0, 20))&(close_0>mean(close_0, 10))&(close_0>mean(close_0, 5)),1,0)
    #底部冲短线均线下方开始反弹
    buy_cond_2 = where((low_0<mean(close_0, 5))&(low_0<mean(close_0, 10))&(low_0<mean(close_0, 20)), 1, 0)
    #确保当天为阳
    buy_cond_3 = where((close_0>open_0), 1, 0)
    
    
    #预测值Y
    y = shift(close_0,-2)/shift(open_0,-1)
    
    # 过滤掉一字涨停
    where(shift(high_0, -1) == shift(low_0, -1), NaN, y)
    
    #股价相对位置,RSI指标
    a1 = ta_rsi_14_0 
    #量价因子
    a2 = (ta_ema(volume_0, 12)-ta_ema(volume_0, 26))
    #资金流因子,近几天大单相对流通市值
    a3 = sum(mf_net_amount_xl_0,10)/market_cap_float_0
    #换手率因子
    a4 = turn_0/mean(turn_0, 5)
    #技术指标因子(量价因子)
    a5 = close_0/mean(close_0, 20)"""
    )
    
    m3 = M.general_feature_extractor.v7(
        instruments=m1.data,
        features=m2.data,
        start_date='',
        end_date='',
        before_start_days=50
    )
    
    m5 = M.chinaa_stock_filter.v1(
        input_data=m3.data,
        index_constituent_cond=['全部'],
        board_cond=['深证主板'],
        industry_cond=['全部'],
        st_cond=['正常'],
        delist_cond=['非退市'],
        output_left_data=False
    )
    
    m4 = M.derived_feature_extractor.v3(
        input_data=m5.data,
        features=m2.data,
        date_col='date',
        instrument_col='instrument',
        drop_na=False,
        remove_extra_columns=True
    )
    
    m6 = M.cached.v3(
        input_1=m4.data,
        run=m6_run_bigquant_run,
        post_run=m6_post_run_bigquant_run,
        input_ports='',
        params='{}',
        output_ports=''
    )
    
    m7 = M.instruments.v2(
        start_date=T.live_run_param('trading_date', '2020-01-01'),
        end_date=T.live_run_param('trading_date', '2022-08-16'),
        market='CN_STOCK_A',
        instrument_list='',
        max_count=0
    )
    
    m8 = M.input_features.v1(
        features="""#收盘突破所有短期均线,收盘表现强势
    buy_cond_1 = where((close_0>mean(close_0, 20))&(close_0>mean(close_0, 10))&(close_0>mean(close_0, 5)),1,0)
    #底部冲短线均线下方开始反弹
    buy_cond_2 = where((low_0<mean(close_0, 5))&(low_0<mean(close_0, 10))&(low_0<mean(close_0, 20)), 1, 0)
    #确保当天为阳
    buy_cond_3 = where((close_0>open_0), 1, 0)
    
    
    #预测值Y
    y = shift(close_0,-2)/shift(open_0,-1)
    
    # 过滤掉一字涨停
    where(shift(high_0, -1) == shift(low_0, -1), NaN, y)
    
    #股价相对位置,RSI指标
    a1 = ta_rsi_14_0 
    #量价因子
    a2 = (ta_ema(volume_0, 12)-ta_ema(volume_0, 26))
    #资金流因子,近几天大单相对流通市值
    a3 = sum(mf_net_amount_xl_0,10)/market_cap_float_0
    #换手率因子
    a4 = turn_0/mean(turn_0, 5)
    #技术指标因子(量价因子)
    a5 = close_0/mean(close_0, 20)"""
    )
    
    m9 = M.general_feature_extractor.v7(
        instruments=m7.data,
        features=m8.data,
        start_date='',
        end_date='',
        before_start_days=50
    )
    
    m11 = M.chinaa_stock_filter.v1(
        input_data=m9.data,
        index_constituent_cond=['全部'],
        board_cond=['深证主板'],
        industry_cond=['全部'],
        st_cond=['正常'],
        delist_cond=['非退市'],
        output_left_data=False
    )
    
    m10 = M.derived_feature_extractor.v3(
        input_data=m11.data,
        features=m8.data,
        date_col='date',
        instrument_col='instrument',
        drop_na=False,
        remove_extra_columns=True
    )
    
    m12 = M.cached.v3(
        input_1=m10.data,
        run=m12_run_bigquant_run,
        post_run=m12_post_run_bigquant_run,
        input_ports='',
        params='{}',
        output_ports=''
    )
    
    m13 = M.cached.v3(
        input_1=m6.data_1,
        input_2=m12.data_1,
        run=m13_run_bigquant_run,
        post_run=m13_post_run_bigquant_run,
        input_ports='',
        params='{}',
        output_ports=''
    )
    
    m14 = M.trade.v4(
        instruments=m7.data,
        options_data=m13.data_1,
        start_date='',
        end_date='',
        initialize=m14_initialize_bigquant_run,
        handle_data=m14_handle_data_bigquant_run,
        prepare=m14_prepare_bigquant_run,
        before_trading_start=m14_before_trading_start_bigquant_run,
        volume_limit=0.025,
        order_price_field_buy='open',
        order_price_field_sell='close',
        capital_base=100000,
        auto_cancel_non_tradable_orders=True,
        data_frequency='daily',
        price_type='真实价格',
        product_type='股票',
        plot_charts=True,
        backtest_only=False,
        benchmark='000300.HIX'
    )
    
    • 收益率276.78%
    • 年化收益率69.15%
    • 基准收益率1.98%
    • 阿尔法0.76
    • 贝塔0.64
    • 夏普比率1.53
    • 胜率0.51
    • 盈亏比1.41
    • 收益波动率36.75%
    • 信息比率0.1
    • 最大回撤25.01%
    bigcharts-data-start/{"__type":"tabs","__id":"bigchart-799cdee88aa24e259999adbd784ff144"}/bigcharts-data-end