การใช้ Maximum Drawdown ใน python ทำงานโดยตรงกับผลตอบแทน

Aug 31 2020

ฉันมีกลยุทธ์ในหุ้น (เช่น Buy and Hold) ซึ่งฉันต้องคำนวณการเบิกสูงสุด ปัญหาคือฉันกำลังทำงานกับผลตอบแทนที่แสดงเป็นเปอร์เซ็นต์ดังนั้นฉันจึงไม่มีอนุกรมเวลาของราคา แต่เป็นหนึ่งในผลตอบแทนที่ได้รับในแต่ละขั้นตอน ดังนั้นฉันจึงเขียนโค้ดนี้:

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)