Implementação de redução máxima em python trabalhando diretamente com retornos

Aug 31 2020

Eu tenho uma estratégia para uma ação (como Buy and Hold) na qual devo calcular a redução máxima. O problema é que estou trabalhando com retornos expressos em percentuais, então não tenho a série temporal dos preços, mas sim a dos retornos obtidos em cada etapa. Então, escrevi 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)

Está correto?

Respostas

4 amdopt Aug 31 2020 at 19:12

Você está perdendo algumas coisas. A função abaixo assume que returnsé uma série de pandas ou uma coluna de um dataframe de pandas. Experimente isto:

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)