Implementacja Maximum Drawdown w Pythonie pracująca bezpośrednio ze zwrotami
Aug 31 2020
Mam strategię dotyczącą akcji (taką jak Kup i trzymaj), dla której muszę obliczyć maksymalne wypłaty. Problem w tym, że pracuję na zwrotach wyrażonych w procentach, więc nie mam szeregów czasowych cen, ale zwrotów uzyskanych na każdym kroku. Więc napisałem ten kod:
def MDD(returns):
rend_cum=returns.cumsum()
rend_max=pd.Series(rend_cum).cummax()
drawdown=rend_cum-rend_max
MDD=max(abs(drawdown))
return(MDD)
Czy to jest poprawne?
Odpowiedzi
4 amdopt Aug 31 2020 at 19:12
Brakuje Ci kilku rzeczy. Poniższa funkcja zakłada, że returnsjest to seria pand lub kolumna ramki danych pandy. Spróbuj tego:
def MDD(returns):
cum_rets = (1 + returns).cumprod() - 1
nav = ((1 + cum_rets) * 100).fillna(100)
hwm = nav.cummax()
dd = nav / hwm - 1
return min(dd)