리턴으로 직접 작업하는 Python에서 Maximum Drawdown 구현

Aug 31 2020

최대 손실을 계산해야하는 주식 (예 : 매수 및 보류)에 대한 전략이 있습니다. 문제는 내가 백분율로 표현 된 수익을 작업하고 있기 때문에 가격의 시계열이 아니라 각 단계에서 얻은 수익 중 하나를 가지고 있다는 것입니다. 그래서이 코드를 작성했습니다.

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)

맞습니까?

답변

4 amdopt Aug 31 2020 at 19:12

당신은 몇 가지를 놓치고 있습니다. 아래 함수 returns는 팬더 시리즈 또는 팬더 데이터 프레임의 열 이라고 가정합니다 . 이 시도:

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)