{"description":"实验创建于2023/2/10","graph":{"edges":[{"to_node_id":"-23:features","from_node_id":"-30:data"},{"to_node_id":"-55:input_2","from_node_id":"-30:data"},{"to_node_id":"-23:input_data","from_node_id":"-38:data"},{"to_node_id":"-38:instruments","from_node_id":"-31:data"},{"to_node_id":"-63:instruments","from_node_id":"-31:data"},{"to_node_id":"-55:input_1","from_node_id":"-23:data"},{"to_node_id":"-63:options_data","from_node_id":"-55:data"}],"nodes":[{"node_id":"-30","module_id":"BigQuantSpace.input_features.input_features-v1","parameters":[{"name":"features","value":"\n# #号开始的表示注释,注释需单独一行\n# 多个特征,每行一个,可以包含基础特征和衍生特征,特征须为本平台特征\nproduct(close/open,5)\nstd(amount,10)","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"features_ds","node_id":"-30"}],"output_ports":[{"name":"data","node_id":"-30"}],"cacheable":true,"seq_num":2,"comment":"","comment_collapsed":true,"x":303,"y":-154},{"node_id":"-38","module_id":"BigQuantSpace.use_datasource.use_datasource-v2","parameters":[{"name":"datasource_id","value":"bar1d_CN_FUND","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":"before_start_days","value":"30","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"instruments","node_id":"-38"},{"name":"features","node_id":"-38"}],"output_ports":[{"name":"data","node_id":"-38"}],"cacheable":true,"seq_num":5,"comment":"","comment_collapsed":true,"x":67,"y":-61},{"node_id":"-31","module_id":"BigQuantSpace.instruments.instruments-v2","parameters":[{"name":"start_date","value":"2017-12-01","type":"Literal","bound_global_parameter":"交易日期"},{"name":"end_date","value":"2023-12-31","type":"Literal","bound_global_parameter":"交易日期"},{"name":"market","value":"CN_FUND","type":"Literal","bound_global_parameter":null},{"name":"instrument_list","value":"510050.HOF\n510300.HOF\n510500.HOF\n512100.HOF\n159915.ZOF\n515100.HOF\n510900.HOF\n159938.ZOF\n159928.ZOF\n512660.HOF\n515220.HOF\n159869.ZOF\n159792.ZOF\n512480.HOF\n515790.HOF\n512930.HOF\n516160.HOF\n","type":"Literal","bound_global_parameter":null},{"name":"max_count","value":0,"type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"rolling_conf","node_id":"-31"}],"output_ports":[{"name":"data","node_id":"-31"}],"cacheable":true,"seq_num":3,"comment":"","comment_collapsed":true,"x":-11,"y":-155},{"node_id":"-23","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":"True","type":"Literal","bound_global_parameter":null},{"name":"user_functions","value":"{}","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"input_data","node_id":"-23"},{"name":"features","node_id":"-23"}],"output_ports":[{"name":"data","node_id":"-23"}],"cacheable":true,"seq_num":1,"comment":"","comment_collapsed":true,"x":129,"y":57},{"node_id":"-63","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.0003, sell_cost=0.0013, min_cost=5))\n\n \n #读取数据\n context.ranker_prediction = context.options['data'].read_df()\n context.ranker_prediction.set_index('date',inplace=True)\n \n","type":"Literal","bound_global_parameter":null},{"name":"handle_data","value":"# 交易引擎:bar数据处理函数,每个时间单位执行一次\ndef bigquant_run(context, data):\n \n # 调仓时间,1就是一天一调仓\n remainder = context.trading_day_index % 5\n #如果没到调仓期直接结束运行\n if remainder !=0:\n return\n \n \n import datetime\n #初始化\n \n #==================== 数据准备\n today = data.current_dt.strftime('%Y-%m-%d')\n time = data.current_dt\n\n #获取持仓\n holding_list = [equity.symbol for equity in context.portfolio.positions]\n holding_num = len(holding_list)\n \n # 持有股票的数量\n #holding_num = len(holding_list)\n\n #读取当日数据\n try:\n today_data = context.ranker_prediction.loc[today,:]\n today_data.reset_index(inplace=True)\n except:\n return\n \n \n # 根据权重计算排序得分\n today_data['std_score'] = today_data['std(amount,10)'].rank(ascending=True)\n today_data['return_score'] = today_data['product(close/open,5)'].rank(ascending=True)\n\n # 计算总得分并按照总得分进行排序\n today_data['total_score'] = today_data['std_score'] #+today_data['return_score']\n today_data.sort_values(by='total_score',ascending=True,inplace=True)\n \n \n #构建保留目标列表\n target_buy_list = today_data.instrument.to_list()[:2]\n\n #构建卖出列表\n for ins in holding_list:\n if ins not in target_buy_list:\n context.order_target(context.symbol(ins),0)\n #sell_list.append(ins)\n \n #print(today)\n #print('holding_list:',holding_list)\n #print('target_buy_list:',target_buy_list)\n \n #构建买入列表\n for ins in target_buy_list:\n if ins not in holding_list: \n context.order_percent(context.symbol(ins),0.48)\n","type":"Literal","bound_global_parameter":null},{"name":"prepare","value":"# 回测引擎:准备数据,只执行一次\ndef bigquant_run(context):\n pass\n","type":"Literal","bound_global_parameter":null},{"name":"before_trading_start","value":"# 回测引擎:每个单位时间开始前调用一次,即每日开盘前调用一次。\ndef bigquant_run(context, data):\n pass\n","type":"Literal","bound_global_parameter":null},{"name":"volume_limit","value":"0","type":"Literal","bound_global_parameter":null},{"name":"order_price_field_buy","value":"open","type":"Literal","bound_global_parameter":null},{"name":"order_price_field_sell","value":"close","type":"Literal","bound_global_parameter":null},{"name":"capital_base","value":1000000,"type":"Literal","bound_global_parameter":null},{"name":"auto_cancel_non_tradable_orders","value":"True","type":"Literal","bound_global_parameter":null},{"name":"data_frequency","value":"daily","type":"Literal","bound_global_parameter":null},{"name":"price_type","value":"真实价格","type":"Literal","bound_global_parameter":null},{"name":"product_type","value":"股票","type":"Literal","bound_global_parameter":null},{"name":"plot_charts","value":"True","type":"Literal","bound_global_parameter":null},{"name":"backtest_only","value":"False","type":"Literal","bound_global_parameter":null},{"name":"benchmark","value":"000300.HIX","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"instruments","node_id":"-63"},{"name":"options_data","node_id":"-63"},{"name":"history_ds","node_id":"-63"},{"name":"benchmark_ds","node_id":"-63"},{"name":"trading_calendar","node_id":"-63"}],"output_ports":[{"name":"raw_perf","node_id":"-63"}],"cacheable":false,"seq_num":4,"comment":"","comment_collapsed":true,"x":86,"y":277},{"node_id":"-55","module_id":"BigQuantSpace.standardlize.standardlize-v12","parameters":[{"name":"standard_func","value":"ZScoreNorm","type":"Literal","bound_global_parameter":null},{"name":"columns_input","value":"","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"input_1","node_id":"-55"},{"name":"input_2","node_id":"-55"}],"output_ports":[{"name":"data","node_id":"-55"}],"cacheable":true,"seq_num":6,"comment":"","comment_collapsed":true,"x":138,"y":156}],"node_layout":"<node_postions><node_position Node='-30' Position='303,-154,200,200'/><node_position Node='-38' Position='67,-61,200,200'/><node_position Node='-31' Position='-11,-155,200,200'/><node_position Node='-23' Position='129,57,200,200'/><node_position Node='-63' Position='86,277,200,200'/><node_position Node='-55' Position='138,156,200,200'/></node_postions>"},"nodes_readonly":false,"studio_version":"v2"}
[2024-01-02 16:56:33.246660] INFO: moduleinvoker:3311972364.py:111: input_features.v1 开始运行..
[2024-01-02 16:56:33.258993] INFO: moduleinvoker:3311972364.py:111: 命中缓存
[2024-01-02 16:56:33.264022] INFO: moduleinvoker:3311972364.py:111: input_features.v1 运行完成[0.017359s].
[2024-01-02 16:56:33.279464] INFO: moduleinvoker:3311972364.py:120: instruments.v2 开始运行..
[2024-01-02 16:56:33.289610] INFO: moduleinvoker:3311972364.py:120: 命中缓存
[2024-01-02 16:56:33.294228] INFO: moduleinvoker:3311972364.py:120: instruments.v2 运行完成[0.014777s].
[2024-01-02 16:56:33.311569] INFO: moduleinvoker:3311972364.py:146: use_datasource.v2 开始运行..
[2024-01-02 16:56:33.321801] INFO: moduleinvoker:3311972364.py:146: 命中缓存
[2024-01-02 16:56:33.326424] INFO: moduleinvoker:3311972364.py:146: use_datasource.v2 运行完成[0.014862s].
[2024-01-02 16:56:33.344968] INFO: moduleinvoker:3311972364.py:155: derived_feature_extractor.v3 开始运行..
[2024-01-02 16:56:33.356353] INFO: moduleinvoker:3311972364.py:155: 命中缓存
[2024-01-02 16:56:33.360815] INFO: moduleinvoker:3311972364.py:155: derived_feature_extractor.v3 运行完成[0.015888s].
[2024-01-02 16:56:33.377417] INFO: moduleinvoker:3311972364.py:166: standardlize.v12 开始运行..
[2024-01-02 16:56:33.387003] INFO: moduleinvoker:3311972364.py:166: 命中缓存
[2024-01-02 16:56:33.391837] INFO: moduleinvoker:3311972364.py:166: standardlize.v12 运行完成[0.014433s].
[2024-01-02 16:56:33.470486] INFO: moduleinvoker:3311972364.py:174: backtest.v8 开始运行..
[2024-01-02 16:56:33.483950] INFO: moduleinvoker:3311972364.py:174: 命中缓存
/usr/local/python3/lib/python3.8/site-packages/pandas/core/indexing.py:1637: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
self._setitem_single_block(indexer, value, name)
[2024-01-02 16:56:34.765581] INFO: bigcharts.impl.render:render.py:494:render_chart Data is None, skip loading it to chart.
[2024-01-02 16:56:37.516563] INFO: moduleinvoker:3311972364.py:174: backtest.v8 运行完成[4.046089s].
[2024-01-02 16:56:37.521216] INFO: moduleinvoker:3311972364.py:174: trade.v4 运行完成[4.108699s].
Trade(回测/模拟)
- 收益率96.51%
- 年化收益率12.21%
- 基准收益率-14.35%
- 阿尔法0.15
- 贝塔0.86
- 夏普比率0.51
- 胜率0.65
- 盈亏比2.78
- 收益波动率21.28%
- 信息比率0.07
- 最大回撤34.02%