熊猫如何根据过去的表现选择股票投资(动量,趋势跟随)

时间:2018-06-13 22:35:55

标签: python pandas dataframe

我有一个20天的5场股票的数据框架,看起来像这样。指数是日期,列是股票,元素是回报。

           ELET3        ELET6       EMBR3      ENBR3        EQTL3 (...)
Dates
2/8/2018    0.277450    0.307260    0.064575    -0.025936   0.051672
3/12/2018   0.149723    0.100899    0.017105    0.056956    0.044669
4/10/2018   -0.235531   -0.180462   0.020565    0.026310    -0.006893
5/9/2018    -0.019453   -0.057651   0.033495    -0.055192   -0.042110

我已经构建了一个数据框,其中列出了每个股票在该期间的表现(与上述相同,但是使用等级而不是回报):

           ELET3    ELET6   EMBR3   ENBR3   EQTL3   (...)
Dates
2/8/2018    2.0     1.0     3.0     5.0     4.0
3/12/2018   1.0     2.0     5.0     3.0     4.0
4/10/2018   5.0     4.0     2.0     1.0     3.0
5/9/2018    2.0     5.0     1.0     4.0     3.0
(...)

对于每个期间(i),我想计算50个宇宙中2个股票的期间(i)的平均收益率,这些股票在前一个时期(期间(i-1))表现最佳。< / p>

以下是我要找的输出。 2/8/2018没有回报,因为这是第一个期间。在第一阶段,ELET3和ELET6是表现最好的两只股票,因此该策略将在下一个时期进行投资。他们在2/8/2018 - 3/12/2018期间的回报是0.149723和0.100899,因此代码应返回其平均值(0.12531)。它们也是2/8/2018 - 3/12/2018期间表现最好的两只股票。因此,该策略将在3/12/2018 - 4/10/2018期间继续投资。在那个时期他们返回-0.20800。在此期间,2个最佳股票是EMBR3和ENBR3,因此该策略在4/10/2018 - 5/9/2018投资,并且它们的平均回报率为-0.01085。

           Strategy Return
Dates
2/8/2018    
3/12/2018   0.12531     
4/10/2018   -0.20800        
5/9/2018    -0.01085        

1 个答案:

答案 0 :(得分:0)

我使用以下代码解决了它

回报排名

my_df_returns_rank = my_df_returns.rank(axis = 1,method ='average',numeric_only = True,na_​​option ='keep',ascending = False,pct = False)

创建一个掩码,每个周期只选择2个最佳回报,向下移动一行,将第一行中的NaN替换为false

掩模=(my_df_rank&LT; 3).shift(1) 掩模= mask.replace(np.nan,FALSE)

将掩码应用于返回

my_df_2_best_returns = my_df_returns [掩模]

平均回报:

my_df_average_return_selected = my_df_2_best_returns.mean(axis = 1,skipna ='true')