Implementación de Maximum Drawdown en Python trabajando directamente con devoluciones
Aug 31 2020
Tengo una estrategia en una acción (como Comprar y mantener) en la que tengo que calcular la reducción máxima. El problema es que estoy trabajando con rentabilidades expresadas en porcentajes, por lo que no tengo la serie temporal de precios sino la de las rentabilidades obtenidas en cada paso. Entonces escribí este código:
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)
¿Es correcto?
Respuestas
4 amdopt Aug 31 2020 at 19:12
Te faltan algunas cosas. La función a continuación asume que returnses una serie de pandas o una columna de un marco de datos de pandas. Prueba esto:
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)