复制链接
克隆策略
In [3]:
m2.data.read().head()
Out[3]:
turn adjust_factor instrument date open volume low deal_number close high amount
0 0.685887 71.053696 000001.SZA 2014-10-08 722.616089 67468717.0 720.484497 22884.0 729.010925 729.010925 6.881796e+08
1 1.496408 123.296082 000002.SZA 2014-10-08 1176.244629 144731249.0 1152.818359 43922.0 1163.914917 1181.176392 1.368340e+09
2 5.320163 4.063862 000004.SZA 2014-10-08 76.116135 4462311.0 75.994217 2955.0 77.497849 78.310623 8.493218e+07
3 6.293991 9.267600 000005.SZA 2014-10-08 36.885048 57510897.0 36.699696 17201.0 37.719131 37.904484 2.313634e+08
4 1.935198 31.780066 000006.SZA 2014-10-08 189.091385 25910316.0 187.820190 5073.0 190.998184 191.633789 1.549236e+08
In [11]:
dd=m2.data.read().set_index('date')
dd
Out[11]:
turn adjust_factor instrument open volume low deal_number close high amount
date
2014-10-08 0.685887 71.053696 000001.SZA 722.616089 67468717.0 720.484497 22884.0 729.010925 729.010925 6.881796e+08
2014-10-08 1.496408 123.296082 000002.SZA 1176.244629 144731249.0 1152.818359 43922.0 1163.914917 1181.176392 1.368340e+09
2014-10-08 5.320163 4.063862 000004.SZA 76.116135 4462311.0 75.994217 2955.0 77.497849 78.310623 8.493218e+07
2014-10-08 6.293991 9.267600 000005.SZA 36.885048 57510897.0 36.699696 17201.0 37.719131 37.904484 2.313634e+08
2014-10-08 1.935198 31.780066 000006.SZA 189.091385 25910316.0 187.820190 5073.0 190.998184 191.633789 1.549236e+08
... ... ... ... ... ... ... ... ... ... ...
2016-12-30 0.151838 3.206374 603993.SHA 11.991838 19668687.0 11.895648 8082.0 11.927711 12.055966 7.327321e+07
2016-12-30 3.600849 1.516708 603996.SHA 30.774006 3718776.0 30.030819 5499.0 30.212824 30.925676 7.447262e+07
2016-12-30 1.418655 1.010777 603997.SHA 19.881983 1617267.0 19.609074 1843.0 19.770798 20.003277 3.175641e+07
2016-12-30 0.874353 3.926143 603998.SHA 68.511192 2353560.0 68.511192 1896.0 69.178642 69.885345 4.160723e+07
2016-12-30 4.199971 1.204088 603999.SHA 35.942028 4838367.0 35.231613 7800.0 35.303860 36.315292 1.432123e+08

1527109 rows × 10 columns

In [16]:
dd.resample('W-FRI').last()
Out[16]:
turn adjust_factor instrument open volume low deal_number close high amount
date
2014-10-10 0.694629 1.052055 603993.SHA 7.900933 13673215.0 7.764166 7739.0 7.806248 8.006139 102180102.0
2014-10-17 0.486793 1.052055 603993.SHA 7.553755 9582131.0 7.280221 6525.0 7.332823 7.595837 67220283.0
2014-10-24 0.245009 1.052055 603993.SHA 7.301262 4822806.0 7.143454 3166.0 7.175015 7.322303 33057707.0
2014-10-31 0.617924 1.052055 603993.SHA 7.438029 12163351.0 7.395947 7108.0 7.606358 7.637919 87155151.0
2014-11-07 0.508526 1.052055 603993.SHA 7.606358 10009940.0 7.490632 5358.0 7.606358 7.732604 72523264.0
... ... ... ... ... ... ... ... ... ... ...
2016-12-02 6.834540 1.204088 603999.SHA 43.082268 4920869.0 41.757771 10013.0 41.793896 43.575943 174269895.0
2016-12-09 16.173647 1.204088 603999.SHA 40.577766 11645026.0 37.976936 22725.0 38.615101 40.577766 378837875.0
2016-12-16 15.559425 1.204088 603999.SHA 37.892651 17924458.0 37.892651 33785.0 39.698780 40.312866 582256741.0
2016-12-23 5.095364 1.204088 603999.SHA 38.867962 5869859.0 37.326729 11677.0 37.350811 38.892044 185104460.0
2016-12-30 4.199971 1.204088 603999.SHA 35.942028 4838367.0 35.231613 7800.0 35.303860 36.315292 143212341.0

117 rows × 10 columns

In [17]:
# dd.aligndata.read()['close'].resample('W').last()
In [41]:
# m2.data.read().resample('W-FRI')
df=m5.data.read()
df
Out[41]:
instrument date volume amount close high low open
0 000001.SZA 2014-10-10 199642981.0 2.034255e+09 721.905579 731.142517 719.773926 722.616089
1 000001.SZA 2014-10-17 371766521.0 3.776291e+09 719.063416 735.405762 711.958069 719.063416
2 000001.SZA 2014-10-24 406342269.0 4.144513e+09 723.326660 735.405762 714.800171 721.195007
3 000001.SZA 2014-10-31 743921313.0 7.842321e+09 783.722290 806.459473 709.115906 717.642334
4 000001.SZA 2014-11-07 740119664.0 8.128124e+09 775.195862 808.591064 757.432434 792.959229
... ... ... ... ... ... ... ... ...
319857 603999.SHA 2016-12-02 24751592.0 8.820508e+08 41.793896 44.767990 41.348381 44.539215
319858 603999.SHA 2016-12-09 30199981.0 1.029839e+09 38.615101 43.286964 37.976936 41.805935
319859 603999.SHA 2016-12-16 42189864.0 1.321642e+09 39.698780 40.312866 35.424271 38.398365
319860 603999.SHA 2016-12-23 37382607.0 1.204237e+09 37.350811 40.144295 37.326729 39.132858
319861 603999.SHA 2016-12-30 24151296.0 7.286126e+08 35.303860 37.386932 34.918552 36.869175

319862 rows × 8 columns

In [42]:
def cal(x):
    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)
df['week_close'] = df.groupby('instrument' ,group_keys=False)['close'].apply(lambda x: cal(x))
In [43]:
df
Out[43]:
instrument date volume amount close high low open week_close
0 000001.SZA 2014-10-10 199642981.0 2.034255e+09 721.905579 731.142517 719.773926 722.616089 []
1 000001.SZA 2014-10-17 371766521.0 3.776291e+09 719.063416 735.405762 711.958069 719.063416 [719.0634]
2 000001.SZA 2014-10-24 406342269.0 4.144513e+09 723.326660 735.405762 714.800171 721.195007 [723.32666, 719.0634]
3 000001.SZA 2014-10-31 743921313.0 7.842321e+09 783.722290 806.459473 709.115906 717.642334 [783.7223, 723.32666, 719.0634]
4 000001.SZA 2014-11-07 740119664.0 8.128124e+09 775.195862 808.591064 757.432434 792.959229 [775.19586, 783.7223, 723.32666, 719.0634]
... ... ... ... ... ... ... ... ... ...
319857 603999.SHA 2016-12-02 24751592.0 8.820508e+08 41.793896 44.767990 41.348381 44.539215 [41.793896, 44.527176, 45.911877, 47.705967, 4...
319858 603999.SHA 2016-12-09 30199981.0 1.029839e+09 38.615101 43.286964 37.976936 41.805935 [38.6151, 41.793896, 44.527176, 45.911877, 47....
319859 603999.SHA 2016-12-16 42189864.0 1.321642e+09 39.698780 40.312866 35.424271 38.398365 [39.69878, 38.6151, 41.793896, 44.527176, 45.9...
319860 603999.SHA 2016-12-23 37382607.0 1.204237e+09 37.350811 40.144295 37.326729 39.132858 [37.35081, 39.69878, 38.6151, 41.793896, 44.52...
319861 603999.SHA 2016-12-30 24151296.0 7.286126e+08 35.303860 37.386932 34.918552 36.869175 [35.30386, 37.35081, 39.69878, 38.6151, 41.793...

319862 rows × 9 columns

In [ ]:
 

    {"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"}
    In [50]:
    # 本代码由可视化策略环境自动生成 2022年11月29日 18:49
    # 本代码单元只能在可视化模式下编辑。您也可以拷贝代码,粘贴到新建的代码单元或者策略,然后修改。
    
    
    # Python 代码入口函数,input_1/2/3 对应三个输入端,data_1/2/3 对应三个输出端
    # def m4_run_bigquant_run(input_1, input_2, input_3):
        # 示例代码如下。在这里编写您的代码
    #     input_df = input_1.read_df()
    #     input_df.index=input_df.date
    #     columns+ =['date','instrument']
    #     df =input_df[columns]
    #     resample_df=df.groupby(['instrument',pd.Grouper(freq=resample_period)]).agg(how_key).reset_index('instrument')
    #     resample_df.reset_index('date',drop=True,inplace=True)
    #     data = DataSource.write_df(resample_df)
    #     return Outputs(data=data)
    def m4_run_bigquant_run(input_1,input_2,col_name):
        df_resample = input_1.read()
        df_origin = input_2.read()
        
        new_column = 'rolling_' +col_name
        def cal(x):
            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)
        df_resample[new_column] = df_resample.groupby('instrument' ,group_keys=False)[col_name].apply(lambda x: cal(x))
        start_ = df_resample.date.min( )
        df_merge = df_origin[df_origin.date>=start_].merge(df_resample[[ 'date' , 'instrument ' ,new_column]],
                                                           on=['date','instrument'],how='left')
        df_merge[new_column] += df_merge['close'].apply(lambda x:[x])
        df_merge['bolling_up'] = df_merge[new_column].apply(lambda x:np.mean(x)+np.std(x))
        data_1 =DataSource.write_df(df_merge)
        return Outputs(data_1=data_1)
    
    # 后处理函数,可选。输入是主函数的输出,可以在这里对数据做处理,或者返回更友好的outputs数据格式。此函数输出不会被缓存。
    def m4_post_run_bigquant_run(outputs):
        return outputs
    
    
    m1 = M.instruments.v2(
        start_date='2015-01-01',
        end_date='2017-01-01',
        market='CN_STOCK_A',
        instrument_list='',
        max_count=0
    )
    
    m2 = M.use_datasource.v2(
        instruments=m1.data,
        datasource_id='bar1d_CN_STOCK_A',
        start_date='',
        end_date='',
        before_start_days=90
    )
    
    m5 = M.resample_df.v15(
        input_1=m2.data,
        columns=["open", "high", "low", "close","amount","volume"],
        resample_period='W-FRI',
        how_key={"date": "last",
     "volume": "sum",
     "amount": "sum",
     "close": "last",
     "high": "max",
     "low": "min",
     "open": "first"}
    )
    
    m4 = M.cached.v3(
        input_1=m5.data,
        input_2=m2.data,
        run=m4_run_bigquant_run,
        post_run=m4_post_run_bigquant_run,
        input_ports='',
        params='{}',
        output_ports=''
    )
    
    ---------------------------------------------------------------------------
    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