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)