pandas df列中的交替条件滚动计数

2024-04-19 06:43:03 发布

您现在位置:Python中文网/ 问答频道 /正文

在拉里·康纳斯(Larry Connors)的一本技术交易账簿中,我发现了一个简单的指标,即对于金融资产时间序列而言,它衡量的是同一方向的连续收盘次数。每个交易日的得分为-1、0或+1,具体取决于收盘价是否低于、等于或高于上一个收盘价。在

序列每天递增,收盘点在同一方向,当方向改变时,它重置为-1、0或1。在

到目前为止,我得到的是:

df['sign'] = np.sign(np.log(df['close']/df['close'].shift(1)).map(str)
df['streak'] = df.groupby((df['sign'] != df['sign'].shift(1)).cumsum()).cumcount()+1

这捕捉了连续,但不指示方向,因为我使用资产的回报

(np.log(df['close']/df['close'].shift(1))

我没有捕获0的条件when close today=close昨天。 如何修改代码以捕捉效果;如果可能,不使用“sign”列?在


Tags: logdfcloseshiftnp序列交易方向
1条回答
网友
1楼 · 发布于 2024-04-19 06:43:03

你已经99%的成功了:

df['sign'] = np.sign(np.log(df['close']/df['close'].shift(1))).map(str)
df['streak'] = df.groupby((df['sign'] !=df['sign'].shift(1)).cumsum()).cumcount()+1
df['final_streak'] = df['sign'].astype(float)*df['streak']

应该给你你想要的(不知道如何在不使用符号列的情况下实现,考虑到你已经完成的工作,这个解决方案似乎最简单)。在

相关问题 更多 >