在 python 中查找价格动量的有效方法:对列的最后 n 个条目求平均值

2024-05-11

我正在定义价格动量是给定股票过去动量的平均值n days.

反过来,动量是一种分类:如果当天的收盘价高于前一天,则每天标记为 1;如果当天的收盘价低于前一天,则标记为 -1。

我的库存变化百分比如下:

df['close in percent'] = np.array([0.27772152, 1.05468772, 
                                   0.124156 , -0.39298394, 
                                   0.56415267,  1.67812005])

momentum = df['close in percent'].apply(lambda x: 1 if x > 0 else -1).values

Momentum应该:[1,1,1,-1,1,1].

所以如果我找到最后的平均动量n = 3 天,我希望我的价格动量是:

Price_momentum = [Nan, Nan, 1, 1/3, 1/3, 1/3]

我设法使用以下代码让它工作,但这非常慢(数据集有 5000 多行,执行需要 10 分钟)。

for i in range(3,len(df)+1,1):
    data = np.array(momentum[i-3:i])
    df['3_day_momentum'].iloc[i-1]=data.mean()

您可以创建一个rolling https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.rolling.html object:

df = pd.DataFrame()
df['close_in_percent'] = np.array([0.27772152, 1.05468772, 
                                   0.124156 , -0.39298394, 
                                   0.56415267,  1.67812005])
df['momentum'] = np.where(df['close_in_percent'] > 0, 1, -1)
df['3_day_momentum'] = df.momentum.rolling(3).mean()

Here, np.where是一个替代方案apply(),这通常很慢,应该作为最后的手段使用。

   close_in_percent  momentum  3_day_momentum
0            0.2777         1             NaN
1            1.0547         1             NaN
2            0.1242         1          1.0000
3           -0.3930        -1          0.3333
4            0.5642         1          0.3333
5            1.6781         1          0.3333
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 python 中查找价格动量的有效方法:对列的最后 n 个条目求平均值 的相关文章

随机推荐