หา Sharpe ratio ที่ดีที่สุด
เราต้องค้นหาพอร์ตโฟลิโอ "อุดมคติ" สำหรับแต่ละวัน เพื่อนำไปใช้เป็น target สำหรับ machine learning โดยจะวนลูปผ่านแต่ละวันใน portfolio_returns แล้ววนลูปผ่านพอร์ตโฟลิโอที่สร้างขึ้นใน portfolio_returns[date] จากนั้นคำนวณ Sharpe ratio ซึ่งก็คือผลตอบแทนหารด้วยความผันผวน (โดยสมมติให้ผลตอบแทนที่ไม่มีความเสี่ยงเท่ากับ 0)
เราใช้ enumerate() เพื่อวนลูปผ่านผลตอบแทนสำหรับวันที่ปัจจุบัน (portfolio_returns[date]) และติดตามดัชนีด้วย i จากนั้นใช้วันที่ปัจจุบันและดัชนีปัจจุบันเพื่อดึงค่าความผันผวนของแต่ละพอร์ตโฟลิโอผ่าน portfolio_volatility[date][i] สุดท้าย เราหาดัชนีของ Sharpe ratio ที่ดีที่สุดสำหรับแต่ละวันโดยใช้ np.argmax() ซึ่งจะนำดัชนีนี้ไปใช้ดึงน้ำหนักพอร์ตโฟลิโอที่เหมาะสมที่สุดในขั้นตอนถัดไป
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Machine Learning สำหรับการเงินด้วย Python
คำแนะนำการฝึกหัด
- ใช้
enumerate()เพื่อ enumerateportfolio_returnsสำหรับแต่ละdateในลูป - สำหรับ
dateปัจจุบันในลูป ให้เพิ่มค่าลงใน dictionary entry ของsharpe_ratioโดยใช้ผลตอบแทน (ret) หารด้วยportfolio_volatilityสำหรับวันที่ปัจจุบันและค่าiปัจจุบันในลูป - กำหนดค่าของ
max_sharpe_idxsสำหรับdateปัจจุบัน ให้เป็น ดัชนี ของ Sharpe ratio สูงสุด โดยใช้np.argmax()
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# Empty dictionaries for sharpe ratios and best sharpe indexes by date
sharpe_ratio, max_sharpe_idxs = {}, {}
# Loop through dates and get sharpe ratio for each portfolio
for date in portfolio_returns.keys():
for i, ret in enumerate(portfolio_returns[____]):
# Divide returns by the volatility for the date and index, i
sharpe_ratio.setdefault(date, []).append(____ / portfolio_volatility[date][____])
# Get the index of the best sharpe ratio for each date
max_sharpe_idxs[date] = np.argmax(sharpe_ratio[____])
print(portfolio_returns[date][max_sharpe_idxs[date]])