การใช้ 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)