我有一个收盘价系列的股票。我想计算最大跌幅,但是每年。
Date
1995-12-11 1.204
1995-12-12 1.184
1995-12-13 1.196
1995-12-14 1.192
1995-12-15 1.099
1995-12-18 1.005
...
2018-12-18 22.005
我用它来计算MDD:
drawdown = close / close.cummax()
答案 0 :(得分:0)
只要具有df.groupby('year').close.transform('cummax')
列,您应该可以使用类似year
的方法来计算累积最大值。这样会创建一系列与数据框中其他列长度相同的长度,因此您可以轻松地用收盘价除以收盘价。
如果只有日期作为字符串,而收盘价在名为close
的列中,则可以执行以下操作:
df\
.assign(year = lambda x: pd.to_datetime(x.date).dt.year)\
.assign(close_cummax = lambda x: x.groupby('year').close.transform('cummax'))\
.assign(mdd = lambda x: x.close/x.close_cummax)
我在上面使用链式方法,但是如果您不喜欢代码中充斥着lambda函数,则可以为每个更改使用单独的语句:
df['year'] = pd.to_datetime(df.date).dt.year
df['mdd'] = df.close / df.groupby('year').close.transform('cummax')