Implementierung von Maximum Drawdown in Python, das direkt mit Retouren arbeitet

Aug 31 2020

Ich habe eine Strategie für eine Aktie (z. B. Kaufen und Halten), für die ich den maximalen Drawdown berechnen muss. Das Problem ist, dass ich an Renditen arbeite, die in Prozent ausgedrückt werden. Daher habe ich nicht die Zeitreihen der Preise, sondern die der Renditen, die bei jedem Schritt erzielt werden. Also habe ich diesen Code geschrieben:

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)

Ist es richtig?

Antworten

4 amdopt Aug 31 2020 at 19:12

Ihnen fehlen ein paar Dinge. Die folgende Funktion geht davon aus, dass returnses sich entweder um eine Pandas-Serie oder um eine Spalte eines Pandas-Datenrahmens handelt. Versuche dies:

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)