Implémentation de Maximum Drawdown en python travaillant directement avec les retours
Aug 31 2020
J'ai une stratégie sur une action (comme Buy and Hold) sur laquelle je dois calculer le drawdown maximum. Le problème est que je travaille sur des rendements exprimés en pourcentages, donc je n'ai pas la série chronologique des prix mais celle des rendements obtenus à chaque étape. J'ai donc écrit ce code:
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)
Est-ce correct?
Réponses
4 amdopt Aug 31 2020 at 19:12
Il vous manque quelques éléments. La fonction ci-dessous suppose qu'il returnss'agit d'une série de pandas ou d'une colonne d'un dataframe pandas. Essaye ça:
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)