рассчитать максимальную просадку по годам в питоне - PullRequest
0 голосов
/ 28 сентября 2019

У меня есть серия акций с ценами закрытия.Я хочу рассчитать максимальную просадку, но за год.

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()

1 Ответ

0 голосов
/ 28 сентября 2019

Вы должны быть в состоянии рассчитать совокупный максимум, используя что-то вроде 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)

Я использую цепочечные методы, описанные выше, но если вам не нравится ваш код, усеянный лямбда-функциями, вы можете иметь отдельные операторы для каждого изменения:

df['year'] = pd.to_datetime(df.date).dt.year
df['mdd'] = df.close / df.groupby('year').close.transform('cummax')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...