Bắt đầu ngayBắt đầu miễn phí

Tính toán danh mục

Giờ bạn sẽ tạo các danh mục để tìm danh mục tốt nhất của từng tháng. random.random() của numpy tạo các số ngẫu nhiên từ phân phối đều; sau đó ta chuẩn hóa để chúng có tổng bằng 1 bằng cách dùng toán tử /=. Ta dùng các trọng số này để tính lợi nhuận và độ biến động. Lợi nhuận là tổng của trọng số nhân với lợi nhuận từng cổ phiếu. Độ biến động phức tạp hơn, có liên quan đến hiệp phương sai giữa các cổ phiếu khác nhau.

Cuối cùng, ta sẽ lưu các giá trị vào các dictionary để dùng về sau, với ngày tháng làm khóa.

Trong ví dụ này, ta chỉ tạo 10 danh mục cho mỗi ngày để mã chạy nhanh hơn; nhưng trong thực tế, bạn sẽ muốn dùng khoảng 1000 đến 5000 danh mục ngẫu nhiên đối với một vài cổ phiếu.

Bài tập này là một phần của khóa học

Machine Learning cho Tài chính bằng Python

Xem khóa học

Hướng dẫn bài tập

  • Tạo 3 số ngẫu nhiên cho trọng số bằng np.random.random().
  • Tính returns bằng cách lấy tích vô hướng (np.dot(); nhân từng phần tử và cộng tổng hai mảng) giữa weights và lợi nhuận theo tháng của date hiện tại trong vòng lặp.
  • Dùng phương thức .setdefault() để thêm một danh sách rỗng ([]) vào dictionary portfolio_weights cho date hiện tại, rồi thêm weights vào danh sách đó.

Bài tập tương tác thực hành trực tiếp

Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.

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])
Chỉnh sửa và Chạy Mã