เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

คำนวณพอร์ตโฟลิโอ

ต่อไปจะสร้างพอร์ตโฟลิโอเพื่อค้นหาพอร์ตโฟลิโอที่ดีที่สุดของแต่ละเดือน โดย random.random() ของ numpy จะสุ่มตัวเลขจากการแจกแจงแบบสม่ำเสมอ จากนั้นนำมาปรับให้ผลรวมเป็น 1 ด้วยตัวดำเนินการ /= แล้วนำน้ำหนักเหล่านี้ไปคำนวณผลตอบแทนและความผันผวน ผลตอบแทนคือผลรวมของน้ำหนักคูณผลตอบแทนรายตัว ส่วนความผันผวนมีความซับซ้อนกว่า เนื่องจากต้องคำนึงถึงค่าความแปรปรวนร่วมของหุ้นแต่ละตัวด้วย

สุดท้าย จะเก็บค่าต่าง ๆ ไว้ในดิกชันนารีเพื่อใช้ในภายหลัง โดยใช้วันที่ของแต่ละเดือนเป็นคีย์

ในแบบฝึกหัดนี้ จะสร้างเพียง 10 พอร์ตโฟลิโอต่อวันที่เพื่อให้โค้ดรันได้เร็วขึ้น แต่ในการใช้งานจริง ควรสร้างพอร์ตโฟลิโอแบบสุ่มประมาณ 1,000 ถึง 5,000 พอร์ตโฟลิโอสำหรับหุ้นไม่กี่ตัว

แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร

Machine Learning สำหรับการเงินด้วย Python

ดูคอร์ส

คำแนะนำการฝึกหัด

  • สุ่มตัวเลข 3 ค่าสำหรับน้ำหนักโดยใช้ np.random.random()
  • คำนวณ returns โดยหาผลคูณดอต (np.dot() ซึ่งคูณแบบ element-by-element แล้วหาผลรวมของอาร์เรย์ทั้งสอง) ระหว่าง weights กับผลตอบแทนรายเดือนของ date ปัจจุบันในลูป
  • ใช้เมธอด .setdefault() เพื่อเพิ่มลิสต์ว่าง ([]) ลงในดิกชันนารี portfolio_weights สำหรับ date ปัจจุบัน จากนั้น append weights เข้าไปในลิสต์นั้น

แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ

ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์

portfolio_returns, portfolio_volatility, portfolio_weights = {}, {}, {}

# Get portfolio performances at each month
for date in sorted(covariances.keys()):
    cov = covariances[date]
    for portfolio in range(10):
        weights = np.random.random(____)
        weights /= np.sum(weights) # /= divides weights by their sum to normalize
        returns = np.dot(____, returns_monthly.loc[____])
        volatility = np.sqrt(np.dot(weights.T, np.dot(cov, weights)))
        portfolio_returns.setdefault(date, []).append(returns)
        portfolio_volatility.setdefault(date, []).append(volatility)
        portfolio_weights.setdefault(date, ____).append(____)
        
print(portfolio_weights[date][0])
แก้ไขและรันโค้ด