复制链接
克隆策略

    {"description":"实验创建于2022/11/30","graph":{"edges":[{"to_node_id":"-180:instruments","from_node_id":"-172:data"}],"nodes":[{"node_id":"-172","module_id":"BigQuantSpace.instruments.instruments-v2","parameters":[{"name":"start_date","value":"2022-01-01","type":"Literal","bound_global_parameter":null},{"name":"end_date","value":"2022-05-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":"-172"}],"output_ports":[{"name":"data","node_id":"-172"}],"cacheable":true,"seq_num":1,"comment":"","comment_collapsed":true},{"node_id":"-180","module_id":"BigQuantSpace.advanced_auto_labeler.advanced_auto_labeler-v2","parameters":[{"name":"label_expr","value":"# #号开始的表示注释\n# 0. 每行一个,顺序执行,从第二个开始,可以使用label字段\n# 1. 可用数据字段见 https://bigquant.com/docs/develop/datasource/deprecated/history_data.html\n# 添加benchmark_前缀,可使用对应的benchmark数据\n# 2. 可用操作符和函数见 `表达式引擎 <https://bigquant.com/docs/develop/bigexpr/usage.html>`_\n\n# # 计算收益:5日收盘价(作为卖出价格)除以明日开盘价(作为买入价格)\n# shift(close, -5) / shift(open, -1)\n\n# # 极值处理:用1%和99%分位的值做clip\n# clip(label, all_quantile(label, 0.01), all_quantile(label, 0.99))\n\n# # 将分数映射到分类,这里使用20个分类\n# all_wbins(label, 20)\n\n# # 过滤掉一字涨停的情况 (设置label为NaN,在后续处理和训练中会忽略NaN的label)\n# where(shift(high, -1) == shift(low, -1), NaN, label)\n#未来5日最大相对收益率\nshift(cal_max_ret(close,open,benchmark_close,benchmark_open,5),-1)\n#未来5日最大相对收益率所在天数\n# shift(cal_max_ret_date(close,open, benchmark_close, benchmark_open,5),-1)+ 1","type":"Literal","bound_global_parameter":null},{"name":"start_date","value":"","type":"Literal","bound_global_parameter":null},{"name":"end_date","value":"","type":"Literal","bound_global_parameter":null},{"name":"benchmark","value":"000300.SHA","type":"Literal","bound_global_parameter":null},{"name":"drop_na_label","value":"True","type":"Literal","bound_global_parameter":null},{"name":"cast_label_int","value":"True","type":"Literal","bound_global_parameter":null},{"name":"user_functions","value":"def cal_max_ret(df,close,open,benchmark_close,benchmark_open,N):\n ret = df.groupby('instrument',as_index=False,sort=False,group_keys=False).apply(lambda x:(pd.concat([x['close'].shift(-i)/ x['open']- x['benchmark_close'].shift(-i)/ x['benchmark_open'] for i in range(N)],axis=1))\n return ret\n \ndef cal_max_ret_dateldf,close,open,benchmark_close,benchmark_open,N):\n ret = df.groupby ('instrument',as_index=False,sort=False,group_keys=False).apply(lambda x:(pd.concat([x['close'].shift(-i)/ x['open']- x['benchmark_close'].shift(-i)/ x['benchmark_open'] for i in range(N)],axis=1))\n return np.nanargmax(np.array(ret),axis=1)\nbigquant_run={'cal_max_ret':cal_max_ret,'cal_max_ret_date': cal_max_ret_date}","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"instruments","node_id":"-180"}],"output_ports":[{"name":"data","node_id":"-180"}],"cacheable":true,"seq_num":2,"comment":"","comment_collapsed":true}],"node_layout":"<node_postions><node_position Node='-172' Position='182,123,200,200'/><node_position Node='-180' Position='200,274,200,200'/></node_postions>"},"nodes_readonly":false,"studio_version":"v2"}
    In [9]:
    # 本代码由可视化策略环境自动生成 2022年11月30日 17:06
    # 本代码单元只能在可视化模式下编辑。您也可以拷贝代码,粘贴到新建的代码单元或者策略,然后修改。
    
    
    def cal_max_ret(df,close,open,benchmark_close,benchmark_open,N):
        ret = df.groupby('instrument',as_index=False,sort=False,group_keys=False).apply(lambda x:(pd.concat([x['close'].shift(-i)/ x['open']- x['benchmark_close'].shift(-i)/ x['benchmark_open'] for i in range(N)],axis=1))
        return ret
            
    def cal_max_ret_dateldf,close,open,benchmark_close,benchmark_open,N):
        ret = df.groupby ('instrument',as_index=False,sort=False,group_keys=False).apply(lambda x:(pd.concat([x['close'].shift(-i)/ x['open']- x['benchmark_close'].shift(-i)/ x['benchmark_open'] for i in range(N)],axis=1))
        return np.nanargmax(np.array(ret),axis=1)
    m2_user_functions_bigquant_run={'cal_max_ret':cal_max_ret,'cal_max_ret_date': cal_max_ret_date}
    
    m1 = M.instruments.v2(
        start_date='2022-01-01',
        end_date='2022-05-01',
        market='CN_STOCK_A',
        instrument_list='',
        max_count=0
    )
    
    m2 = M.advanced_auto_labeler.v2(
        instruments=m1.data,
        label_expr="""# #号开始的表示注释
    # 0. 每行一个,顺序执行,从第二个开始,可以使用label字段
    # 1. 可用数据字段见 https://bigquant.com/docs/develop/datasource/deprecated/history_data.html
    #   添加benchmark_前缀,可使用对应的benchmark数据
    # 2. 可用操作符和函数见 `表达式引擎 <https://bigquant.com/docs/develop/bigexpr/usage.html>`_
    
    # # 计算收益:5日收盘价(作为卖出价格)除以明日开盘价(作为买入价格)
    # shift(close, -5) / shift(open, -1)
    
    # # 极值处理:用1%和99%分位的值做clip
    # clip(label, all_quantile(label, 0.01), all_quantile(label, 0.99))
    
    # # 将分数映射到分类,这里使用20个分类
    # all_wbins(label, 20)
    
    # # 过滤掉一字涨停的情况 (设置label为NaN,在后续处理和训练中会忽略NaN的label)
    # where(shift(high, -1) == shift(low, -1), NaN, label)
    #未来5日最大相对收益率
    shift(cal_max_ret(close,open,benchmark_close,benchmark_open,5),-1)
    #未来5日最大相对收益率所在天数
    # shift(cal_max_ret_date(close,open, benchmark_close, benchmark_open,5),-1)+ 1""",
        start_date='',
        end_date='',
        benchmark='000300.SHA',
        drop_na_label=True,
        cast_label_int=True,
        user_functions=m2_user_functions_bigquant_run
    )
    
      File "<ipython-input-9-91d92071f87b>", line 7
        return ret
        ^
    SyntaxError: invalid syntax