{"description":"实验创建于2022/11/29","graph":{"edges":[{"to_node_id":"-13:instruments","from_node_id":"-4:data"},{"to_node_id":"-30:input_2","from_node_id":"-13:data"},{"to_node_id":"-38:input_1","from_node_id":"-13:data"},{"to_node_id":"-30:input_1","from_node_id":"-38:data"}],"nodes":[{"node_id":"-4","module_id":"BigQuantSpace.instruments.instruments-v2","parameters":[{"name":"start_date","value":"2015-01-01","type":"Literal","bound_global_parameter":null},{"name":"end_date","value":"2017-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":"-4"}],"output_ports":[{"name":"data","node_id":"-4"}],"cacheable":true,"seq_num":1,"comment":"","comment_collapsed":true},{"node_id":"-13","module_id":"BigQuantSpace.use_datasource.use_datasource-v2","parameters":[{"name":"datasource_id","value":"bar1d_CN_STOCK_A","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":90,"type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"instruments","node_id":"-13"},{"name":"features","node_id":"-13"}],"output_ports":[{"name":"data","node_id":"-13"}],"cacheable":true,"seq_num":2,"comment":"","comment_collapsed":true},{"node_id":"-30","module_id":"BigQuantSpace.cached.cached-v3","parameters":[{"name":"run","value":"# Python 代码入口函数,input_1/2/3 对应三个输入端,data_1/2/3 对应三个输出端\n# def bigquant_run(input_1, input_2, input_3):\n # 示例代码如下。在这里编写您的代码\n# input_df = input_1.read_df()\n# input_df.index=input_df.date\n# columns+ =['date','instrument']\n# df =input_df[columns]\n# resample_df=df.groupby(['instrument',pd.Grouper(freq=resample_period)]).agg(how_key).reset_index('instrument')\n# resample_df.reset_index('date',drop=True,inplace=True)\n# data = DataSource.write_df(resample_df)\n# return Outputs(data=data)\ndef bigquant_run(input_1,input_2,col_name):\n df_resample = input_1.read()\n df_origin = input_2.read()\n \n new_column = 'rolling_' +col_name\n def cal(x):\n return pd.Series([[x.values[j-i] for i in range(5) if j-i >0 ] for j in range(len(x))],index=x.index)\n df_resample[new_column] = df_resample.groupby('instrument' ,group_keys=False)[col_name].apply(lambda x: cal(x))\n start_ = df_resample.date.min( )\n df_merge = df_origin[df_origin.date>=start_].merge(df_resample[[ 'date' , 'instrument ' ,new_column]],\n on=['date','instrument'],how='left')\n df_merge[new_column] += df_merge['close'].apply(lambda x:[x])\n df_merge['bolling_up'] = df_merge[new_column].apply(lambda x:np.mean(x)+np.std(x))\n data_1 =DataSource.write_df(df_merge)\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":"-30"},{"name":"input_2","node_id":"-30"},{"name":"input_3","node_id":"-30"}],"output_ports":[{"name":"data_1","node_id":"-30"},{"name":"data_2","node_id":"-30"},{"name":"data_3","node_id":"-30"}],"cacheable":true,"seq_num":4,"comment":"","comment_collapsed":true},{"node_id":"-38","module_id":"BigQuantSpace.resample_df.resample_df-v15","parameters":[{"name":"columns","value":"[\"open\", \"high\", \"low\", \"close\",\"amount\",\"volume\"]","type":"Literal","bound_global_parameter":null},{"name":"resample_period","value":"W-FRI","type":"Literal","bound_global_parameter":null},{"name":"how_key","value":"{\"date\": \"last\",\n \"volume\": \"sum\",\n \"amount\": \"sum\",\n \"close\": \"last\",\n \"high\": \"max\",\n \"low\": \"min\",\n \"open\": \"first\"}","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"input_1","node_id":"-38"}],"output_ports":[{"name":"data","node_id":"-38"}],"cacheable":true,"seq_num":5,"comment":"","comment_collapsed":true}],"node_layout":"<node_postions><node_position Node='-4' Position='316,105,200,200'/><node_position Node='-13' Position='317,210,200,200'/><node_position Node='-30' Position='318,420,200,200'/><node_position Node='-38' Position='157,309.21875,200,200'/></node_postions>"},"nodes_readonly":false,"studio_version":"v2"}
[2022-11-29 18:49:21.064440] INFO: moduleinvoker: instruments.v2 开始运行..
[2022-11-29 18:49:21.245080] INFO: moduleinvoker: 命中缓存
[2022-11-29 18:49:21.247694] INFO: moduleinvoker: instruments.v2 运行完成[0.183268s].
[2022-11-29 18:49:21.255865] INFO: moduleinvoker: use_datasource.v2 开始运行..
[2022-11-29 18:49:21.268715] INFO: moduleinvoker: 命中缓存
[2022-11-29 18:49:21.273295] INFO: moduleinvoker: use_datasource.v2 运行完成[0.017365s].
[2022-11-29 18:49:21.330299] INFO: moduleinvoker: resample_df.v15 开始运行..
[2022-11-29 18:49:21.343699] INFO: moduleinvoker: 命中缓存
[2022-11-29 18:49:21.345935] INFO: moduleinvoker: resample_df.v15 运行完成[0.015663s].
[2022-11-29 18:49:21.363187] INFO: moduleinvoker: cached.v3 开始运行..
[2022-11-29 18:49:27.315811] ERROR: moduleinvoker: module name: cached, module version: v3, trackeback: TypeError: can only concatenate str (not "NoneType") to str
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-50-7f5c1151ae84> in <module>
64 )
65
---> 66 m4 = M.cached.v3(
67 input_1=m5.data,
68 input_2=m2.data,
<ipython-input-50-7f5c1151ae84> in m4_run_bigquant_run(input_1, input_2, col_name)
18 df_origin = input_2.read()
19
---> 20 new_column = 'rolling_' +col_name
21 def cal(x):
22 return pd.Series([[x.values[j-i] for i in range(5) if j-i >0 ] for j in range(len(x))],index=x.index)
TypeError: can only concatenate str (not "NoneType") to str