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)