{"description":"实验创建于2017/8/26","graph":{"edges":[{"to_node_id":"-52:features","from_node_id":"-331:data"},{"to_node_id":"-52:instruments","from_node_id":"-312:data"},{"to_node_id":"-88:instruments","from_node_id":"-312:data"},{"to_node_id":"-250:instruments","from_node_id":"-312:data"},{"to_node_id":"-101:input_1","from_node_id":"-52:data"},{"to_node_id":"-783:input_1","from_node_id":"-52:data"},{"to_node_id":"-41:features","from_node_id":"-64:data"},{"to_node_id":"-783:input_2","from_node_id":"-64:data"},{"to_node_id":"-88:features","from_node_id":"-79:data"},{"to_node_id":"-95:input_data","from_node_id":"-88:data"},{"to_node_id":"-101:input_2","from_node_id":"-95:data"},{"to_node_id":"-250:options_data","from_node_id":"-101:data"},{"to_node_id":"-52:user_functions","from_node_id":"-726:functions"},{"to_node_id":"-41:user_factor_data","from_node_id":"-783:data_1"}],"nodes":[{"node_id":"-331","module_id":"BigQuantSpace.input_features.input_features-v1","parameters":[{"name":"features","value":"_amt = amount\n_ret = ret_sim(close, open)\nbig_order_ret = np.prod(1 + _ret*where(_amt >= _amt.sort_values(ascending=False).iloc[np.int(240*0.4-1)], 1, 0))\n","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"features_ds","node_id":"-331"}],"output_ports":[{"name":"data","node_id":"-331"}],"cacheable":true,"seq_num":1,"comment":"","comment_collapsed":true},{"node_id":"-312","module_id":"BigQuantSpace.instruments.instruments-v2","parameters":[{"name":"start_date","value":"2019-01-01","type":"Literal","bound_global_parameter":null},{"name":"end_date","value":"2021-08-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":"-312"}],"output_ports":[{"name":"data","node_id":"-312"}],"cacheable":true,"seq_num":2,"comment":"","comment_collapsed":true},{"node_id":"-52","module_id":"BigQuantSpace.feature_extractor_1m.feature_extractor_1m-v2","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":"20","type":"Literal","bound_global_parameter":null},{"name":"workers","value":"20","type":"Literal","bound_global_parameter":null},{"name":"parallel_mode","value":"集群","type":"Literal","bound_global_parameter":null},{"name":"table_1m","value":"level2_bar1m_CN_STOCK_A","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"instruments","node_id":"-52"},{"name":"features","node_id":"-52"},{"name":"user_functions","node_id":"-52"}],"output_ports":[{"name":"data","node_id":"-52"}],"cacheable":true,"seq_num":7,"comment":"V2","comment_collapsed":true},{"node_id":"-41","module_id":"BigQuantSpace.factorlens.factorlens-v1","parameters":[{"name":"title","value":"因子分析: {factor_name}","type":"Literal","bound_global_parameter":null},{"name":"start_date","value":"2019-01-01","type":"Literal","bound_global_parameter":null},{"name":"end_date","value":"2021-08-01","type":"Literal","bound_global_parameter":null},{"name":"rebalance_period","value":"2","type":"Literal","bound_global_parameter":null},{"name":"delay_rebalance_days","value":0,"type":"Literal","bound_global_parameter":null},{"name":"rebalance_price","value":"close_0","type":"Literal","bound_global_parameter":null},{"name":"stock_pool","value":"全市场","type":"Literal","bound_global_parameter":null},{"name":"quantile_count","value":"10","type":"Literal","bound_global_parameter":null},{"name":"commission_rate","value":"0.0002","type":"Literal","bound_global_parameter":null},{"name":"returns_calculation_method","value":"累乘","type":"Literal","bound_global_parameter":null},{"name":"benchmark","value":"无","type":"Literal","bound_global_parameter":null},{"name":"drop_new_stocks","value":60,"type":"Literal","bound_global_parameter":null},{"name":"drop_price_limit_stocks","value":"False","type":"Literal","bound_global_parameter":null},{"name":"drop_st_stocks","value":"False","type":"Literal","bound_global_parameter":null},{"name":"drop_suspended_stocks","value":"False","type":"Literal","bound_global_parameter":null},{"name":"normalization","value":"False","type":"Literal","bound_global_parameter":null},{"name":"neutralization","value":"%7B%22enumItems%22%3A%5B%7B%22value%22%3A%22%E8%A1%8C%E4%B8%9A%22%2C%22displayValue%22%3A%22%E8%A1%8C%E4%B8%9A%22%2C%22selected%22%3Afalse%7D%2C%7B%22value%22%3A%22%E5%B8%82%E5%80%BC%22%2C%22displayValue%22%3A%22%E5%B8%82%E5%80%BC%22%2C%22selected%22%3Afalse%7D%5D%7D","type":"Literal","bound_global_parameter":null},{"name":"metrics","value":"%7B%22enumItems%22%3A%5B%7B%22value%22%3A%22%E5%9B%A0%E5%AD%90%E8%A1%A8%E7%8E%B0%E6%A6%82%E8%A7%88%22%2C%22displayValue%22%3A%22%E5%9B%A0%E5%AD%90%E8%A1%A8%E7%8E%B0%E6%A6%82%E8%A7%88%22%2C%22selected%22%3Atrue%7D%2C%7B%22value%22%3A%22%E5%9B%A0%E5%AD%90%E5%88%86%E5%B8%83%22%2C%22displayValue%22%3A%22%E5%9B%A0%E5%AD%90%E5%88%86%E5%B8%83%22%2C%22selected%22%3Atrue%7D%2C%7B%22value%22%3A%22%E5%9B%A0%E5%AD%90%E8%A1%8C%E4%B8%9A%E5%88%86%E5%B8%83%22%2C%22displayValue%22%3A%22%E5%9B%A0%E5%AD%90%E8%A1%8C%E4%B8%9A%E5%88%86%E5%B8%83%22%2C%22selected%22%3Atrue%7D%2C%7B%22value%22%3A%22%E5%9B%A0%E5%AD%90%E5%B8%82%E5%80%BC%E5%88%86%E5%B8%83%22%2C%22displayValue%22%3A%22%E5%9B%A0%E5%AD%90%E5%B8%82%E5%80%BC%E5%88%86%E5%B8%83%22%2C%22selected%22%3Atrue%7D%2C%7B%22value%22%3A%22IC%E5%88%86%E6%9E%90%22%2C%22displayValue%22%3A%22IC%E5%88%86%E6%9E%90%22%2C%22selected%22%3Atrue%7D%2C%7B%22value%22%3A%22%E4%B9%B0%E5%85%A5%E4%BF%A1%E5%8F%B7%E9%87%8D%E5%90%88%E5%88%86%E6%9E%90%22%2C%22displayValue%22%3A%22%E4%B9%B0%E5%85%A5%E4%BF%A1%E5%8F%B7%E9%87%8D%E5%90%88%E5%88%86%E6%9E%90%22%2C%22selected%22%3Atrue%7D%2C%7B%22value%22%3A%22%E5%9B%A0%E5%AD%90%E4%BC%B0%E5%80%BC%E5%88%86%E6%9E%90%22%2C%22displayValue%22%3A%22%E5%9B%A0%E5%AD%90%E4%BC%B0%E5%80%BC%E5%88%86%E6%9E%90%22%2C%22selected%22%3Atrue%7D%2C%7B%22value%22%3A%22%E5%9B%A0%E5%AD%90%E6%8B%A5%E6%8C%A4%E5%BA%A6%E5%88%86%E6%9E%90%22%2C%22displayValue%22%3A%22%E5%9B%A0%E5%AD%90%E6%8B%A5%E6%8C%A4%E5%BA%A6%E5%88%86%E6%9E%90%22%2C%22selected%22%3Atrue%7D%2C%7B%22value%22%3A%22%E5%9B%A0%E5%AD%90%E5%80%BC%E6%9C%80%E5%A4%A7%2F%E6%9C%80%E5%B0%8F%E8%82%A1%E7%A5%A8%22%2C%22displayValue%22%3A%22%E5%9B%A0%E5%AD%90%E5%80%BC%E6%9C%80%E5%A4%A7%2F%E6%9C%80%E5%B0%8F%E8%82%A1%E7%A5%A8%22%2C%22selected%22%3Atrue%7D%2C%7B%22value%22%3A%22%E8%A1%A8%E8%BE%BE%E5%BC%8F%E5%9B%A0%E5%AD%90%E5%80%BC%22%2C%22displayValue%22%3A%22%E8%A1%A8%E8%BE%BE%E5%BC%8F%E5%9B%A0%E5%AD%90%E5%80%BC%22%2C%22selected%22%3Atrue%7D%2C%7B%22value%22%3A%22%E5%A4%9A%E5%9B%A0%E5%AD%90%E7%9B%B8%E5%85%B3%E6%80%A7%E5%88%86%E6%9E%90%22%2C%22displayValue%22%3A%22%E5%A4%9A%E5%9B%A0%E5%AD%90%E7%9B%B8%E5%85%B3%E6%80%A7%E5%88%86%E6%9E%90%22%2C%22selected%22%3Atrue%7D%5D%7D","type":"Literal","bound_global_parameter":null},{"name":"factor_coverage","value":0.5,"type":"Literal","bound_global_parameter":null},{"name":"user_data_merge","value":"inner","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"features","node_id":"-41"},{"name":"user_factor_data","node_id":"-41"}],"output_ports":[{"name":"data","node_id":"-41"}],"cacheable":true,"seq_num":8,"comment":"","comment_collapsed":true},{"node_id":"-64","module_id":"BigQuantSpace.input_features.input_features-v1","parameters":[{"name":"features","value":"big_order_ret","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"features_ds","node_id":"-64"}],"output_ports":[{"name":"data","node_id":"-64"}],"cacheable":false,"seq_num":9,"comment":"","comment_collapsed":true},{"node_id":"-79","module_id":"BigQuantSpace.input_features.input_features-v1","parameters":[{"name":"features","value":"in_csi500_0","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"features_ds","node_id":"-79"}],"output_ports":[{"name":"data","node_id":"-79"}],"cacheable":true,"seq_num":12,"comment":"","comment_collapsed":true},{"node_id":"-88","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":"-88"},{"name":"features","node_id":"-88"}],"output_ports":[{"name":"data","node_id":"-88"}],"cacheable":true,"seq_num":13,"comment":"","comment_collapsed":true},{"node_id":"-95","module_id":"BigQuantSpace.filter.filter-v3","parameters":[{"name":"expr","value":"in_csi500_0 == 1","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":"-95"}],"output_ports":[{"name":"data","node_id":"-95"},{"name":"left_data","node_id":"-95"}],"cacheable":true,"seq_num":14,"comment":"","comment_collapsed":true},{"node_id":"-101","module_id":"BigQuantSpace.data_join.data_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":"input_1","node_id":"-101"},{"name":"input_2","node_id":"-101"}],"output_ports":[{"name":"data","node_id":"-101"}],"cacheable":true,"seq_num":15,"comment":"","comment_collapsed":true},{"node_id":"-250","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":"def bigquant_run(context):\n \n context.ranker_prediction = context.options['data'].read_df()\n factor_name = [i for i in context.ranker_prediction.columns if i not in ['date','instrument','in_csi500_0']]\n print('因子名称:', factor_name)\n \n context.ranker_prediction.sort_values(['date',factor_name[0]], ascending=[True,False], inplace=True)\n context.ranker_prediction.rename(columns={factor_name[0]:'prediction'}, inplace=True)\n \n # 股票数量 \n context.stock_count = 100\n # 组合权重\n #context.stock_weights = T.norm([1 / math.log(i + 2) for i in range(0, context.stock_count)])\n context.stock_weights = [1/ context.stock_count]* context.stock_count\n # 换仓频率\n context.rebalance_days = 1\n \n # 设置交易费用,买入是万三,卖出是千分之1.3,如果不足5元按5元算\n context.set_commission(PerOrder(buy_cost=0.00015, \n sell_cost=0.00015, min_cost=5))\n \n if 'index' not in context.extension:\n context.extension['index'] = 0","type":"Literal","bound_global_parameter":null},{"name":"handle_data","value":"# 回测引擎:每日数据处理函数,每天执行一次\ndef bigquant_run(context, data):\n # 日期\n date = data.current_dt.strftime('%Y-%m-%d')\n context.extension['index'] += 1\n \n if context.extension['index'] % context.rebalance_days != 0:\n return \n\n \n cur_df = context.ranker_prediction[context.ranker_prediction['date'] == date]\n stock_to_buy = cur_df.instrument.tolist()[: context.stock_count]\n \n # 目前持仓列表 \n stock_hold_now = [equity.symbol for equity in context.portfolio.positions]\n # 继续持有股票列表\n no_need_to_sell = [i for i in stock_hold_now if i in stock_to_buy]\n # 卖出股票列表 \n stock_to_sell = [i for i in stock_hold_now if i not in no_need_to_sell]\n \n # 执行卖出\n for stock in stock_to_sell:\n if data.can_trade(context.symbol(stock)):\n context.order_target_percent(context.symbol(stock), 0)\n \n if len(stock_to_buy) == 0:\n return\n \n # 执行买入\n for i in np.arange(len(stock_to_buy)):\n cp = stock_to_buy[i]\n weight = context.stock_weights[i]\n if data.can_trade(context.symbol(cp)):\n context.order_target_percent(context.symbol(cp), weight)","type":"Literal","bound_global_parameter":null},{"name":"prepare","value":"# 回测引擎:准备数据,只执行一次\ndef bigquant_run(context):\n pass\n","type":"Literal","bound_global_parameter":null},{"name":"before_trading_start","value":"","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":"10000000","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.HIX","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"instruments","node_id":"-250"},{"name":"options_data","node_id":"-250"},{"name":"history_ds","node_id":"-250"},{"name":"benchmark_ds","node_id":"-250"},{"name":"trading_calendar","node_id":"-250"}],"output_ports":[{"name":"raw_perf","node_id":"-250"}],"cacheable":false,"seq_num":11,"comment":"指数增强","comment_collapsed":false},{"node_id":"-726","module_id":"BigQuantSpace.feature_extractor_user_function.feature_extractor_user_function-v1","parameters":[{"name":"name","value":"ret_sim","type":"Literal","bound_global_parameter":null},{"name":"func","value":"def bigquant_run(df, close, op):\n res = close.pct_change()\n res.iloc[0] = close.iloc[0] / op.iloc[0] - 1\n return res\n","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"input_functions","node_id":"-726"}],"output_ports":[{"name":"functions","node_id":"-726"}],"cacheable":false,"seq_num":4,"comment":"","comment_collapsed":true},{"node_id":"-783","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() \n f = input_2.read()[0]\n df[f] = df[f] * -1\n data_1 = DataSource.write_df(df)\n return Outputs(data_1=data_1)","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":"-783"},{"name":"input_2","node_id":"-783"},{"name":"input_3","node_id":"-783"}],"output_ports":[{"name":"data_1","node_id":"-783"},{"name":"data_2","node_id":"-783"},{"name":"data_3","node_id":"-783"}],"cacheable":true,"seq_num":5,"comment":"因子值越大越好","comment_collapsed":false}],"node_layout":"<node_postions><node_position Node='-331' Position='-544.2874145507812,-760.2734985351562,200,200'/><node_position Node='-312' Position='-870.8899536132812,-649.2467956542969,200,200'/><node_position Node='-52' Position='-551.2873840332031,-557.917724609375,200,200'/><node_position Node='-41' Position='-264.48181915283203,-305.94554138183594,200,200'/><node_position Node='-64' Position='-264.0982666015625,-444.8899230957031,200,200'/><node_position Node='-79' Position='-819.2328491210938,-376.616455078125,200,200'/><node_position Node='-88' Position='-819,-303,200,200'/><node_position Node='-95' Position='-821,-246,200,200'/><node_position Node='-101' Position='-819,-166,200,200'/><node_position Node='-250' Position='-828,-91.4519157409668,200,200'/><node_position Node='-726' Position='-212.7126007080078,-663.889892578125,200,200'/><node_position Node='-783' Position='-264.4871597290039,-375.8904724121094,200,200'/></node_postions>"},"nodes_readonly":false,"studio_version":"v2"}
[2021-08-17 14:28:48.971882] INFO: moduleinvoker: input_features.v1 开始运行..
[2021-08-17 14:28:48.980348] INFO: moduleinvoker: 命中缓存
[2021-08-17 14:28:48.981827] INFO: moduleinvoker: input_features.v1 运行完成[0.009964s].
[2021-08-17 14:28:48.984023] INFO: moduleinvoker: instruments.v2 开始运行..
[2021-08-17 14:28:48.990261] INFO: moduleinvoker: 命中缓存
[2021-08-17 14:28:48.991435] INFO: moduleinvoker: instruments.v2 运行完成[0.007412s].
[2021-08-17 14:28:48.993396] INFO: moduleinvoker: input_features.v1 开始运行..
[2021-08-17 14:28:49.003238] INFO: moduleinvoker: 命中缓存
[2021-08-17 14:28:49.004664] INFO: moduleinvoker: input_features.v1 运行完成[0.011265s].
[2021-08-17 14:28:49.016623] INFO: moduleinvoker: general_feature_extractor.v7 开始运行..
[2021-08-17 14:28:49.029690] INFO: moduleinvoker: 命中缓存
[2021-08-17 14:28:49.031008] INFO: moduleinvoker: general_feature_extractor.v7 运行完成[0.01439s].
[2021-08-17 14:28:49.033772] INFO: moduleinvoker: filter.v3 开始运行..
[2021-08-17 14:28:49.045170] INFO: moduleinvoker: 命中缓存
[2021-08-17 14:28:49.046411] INFO: moduleinvoker: filter.v3 运行完成[0.01264s].
[2021-08-17 14:28:49.051344] INFO: moduleinvoker: feature_extractor_user_function.v1 运行完成[0.000107s].
[2021-08-17 14:28:49.057011] INFO: moduleinvoker: feature_extractor_1m.v2 开始运行..
[2021-08-17 14:28:49.072155] INFO: moduleinvoker: 命中缓存
[2021-08-17 14:28:49.073476] INFO: moduleinvoker: feature_extractor_1m.v2 运行完成[0.016467s].
[2021-08-17 14:28:49.090338] INFO: moduleinvoker: data_join.v3 开始运行..
[2021-08-17 14:28:49.098333] INFO: moduleinvoker: 命中缓存
[2021-08-17 14:28:49.099643] INFO: moduleinvoker: data_join.v3 运行完成[0.009307s].
[2021-08-17 14:28:49.149667] INFO: moduleinvoker: backtest.v8 开始运行..
[2021-08-17 14:28:49.166114] INFO: moduleinvoker: 命中缓存
[2021-08-17 14:28:55.273017] INFO: moduleinvoker: backtest.v8 运行完成[6.123343s].
[2021-08-17 14:28:55.274833] INFO: moduleinvoker: trade.v4 运行完成[6.171044s].
- 收益率133.83%
- 年化收益率40.69%
- 基准收益率62.36%
- 阿尔法0.1
- 贝塔1.45
- 夏普比率1.06
- 胜率0.54
- 盈亏比0.97
- 收益波动率35.52%
- 信息比率0.07
- 最大回撤36.07%
bigcharts-data-start/{"__type":"tabs","__id":"bigchart-4480b7210c574c42ace79172417a08f2"}/bigcharts-data-end