У меня есть следующий dataframe:Выберите первую строку, которая соответствует определенному условию
Date RunningTotal
01-05-2015 100
02-05-2015 150
03_05-2015 140
04-05-2015 130
05_05_2015 140
06-05-2015 170
07-05-2015 180
Мне нужно, чтобы определить начало и конец максимального drawdown для нарастающего итога. До сих пор я могу определить позицию стартового индекса для максимальной просадки и индекс позиции максимального сокращения следующим образом:
df.set_index(['RunningTotal'], inplace=True)
max_drawdown_ix = np.argmax(np.maximum.accumulate(df.index) - df.index)+1
start_drawdown_ix = np.argmax(df.index[:max_drawdown_ix])
То, что я не смог сделать, это определить индекс позиции, когда концы просадки (т. е. когда текущая общая сумма выше, чем была при начале просадки). В приведенном выше примере будет приведен следующий результат:
max_drawdown_ix occurs on 04_05_2015 which is index position 3
start_drawdown_ix occurs on 02_05_2015 which is index position 1
end_drawdown_ix occurs on 06_05_2015 which is index position 5
Любые предложения относительно того, как определить, когда заканчивается наибольшая/максимальная просадка? (т. е. как определить, когда первое происшествие - это то, что выполняемое движение больше, чем start_drawdown_ix, которое происходит после max_drawdown_ix)
Данные могут содержать более одного просадки? Если да, вам нужны все из них самого большого? – matousc
Мне просто нужен самый большой. Код, который я разместил правильно, идентифицирует начало самой большой просадки, а также самую большую позицию просадки. Мне нужно знать, когда заканчивается самая большая просадка. (т. е. когда общее число запусков становится больше, чем было до начала просадки). Спасибо. – darkpool