Đánh giá rủi ro và lợi nhuận - Giới thiệu về lý thuyết Markowitz

Tác giả:Lydia., Tạo: 2023-11-13 11:05:54, Cập nhật: 2024-01-01 12:23:29

img

Tuần trước, khi giới thiệuLàm thế nào để đo rủi ro vị trí - Giới thiệu về phương pháp VaR, nó đã được đề cập rằng rủi ro của một danh mục đầu tư không bằng với rủi ro của các tài sản cá nhân và liên quan đến mối tương quan giá của chúng. lấy hai tài sản làm ví dụ, nếu mối tương quan tích cực của chúng rất mạnh, nghĩa là chúng tăng và giảm cùng nhau, thì đầu tư đa dạng sẽ không làm giảm rủi ro. Nếu có mối tương quan tiêu cực mạnh, đầu tư đa dạng có thể làm giảm rủi ro đáng kể. Câu hỏi tự nhiên sau đó nảy sinh: làm thế nào chúng ta tối đa hóa lợi nhuận ở một mức độ rủi ro nhất định khi đầu tư vào danh mục đầu tư? Điều này dẫn chúng ta đến Lý thuyết Markowitz, mà chúng ta sẽ giới thiệu hôm nay.

Lý thuyết danh mục đầu tư hiện đại (MPT), được đề xuất bởi Harry Markowitz vào năm 1952, là một khuôn khổ toán học cho việc lựa chọn danh mục đầu tư. Nó nhằm mục đích tối đa hóa lợi nhuận mong đợi bằng cách chọn các kết hợp khác nhau của các tài sản rủi ro trong khi kiểm soát rủi ro. Ý tưởng cốt lõi là giá của tài sản không di chuyển hoàn toàn đồng bộ với nhau (tức là, có mối tương quan không đầy đủ giữa các tài sản), và rủi ro đầu tư tổng thể có thể được giảm thông qua phân bổ tài sản đa dạng.

Khái niệm chính của Lý thuyết Markowitz

  1. Tỷ lệ lợi nhuận dự kiến: Đây là lợi nhuận mà các nhà đầu tư mong đợi nhận được từ tài sản sở hữu hoặc danh mục đầu tư, thường được dự đoán dựa trên dữ liệu lợi nhuận trong quá khứ.

img

Ở đâu?imglà lợi nhuận dự kiến của danh mục đầu tư,imglà trọng lượng của tài sản số i trong danh mục đầu tư,imglà lợi nhuận dự kiến của tài sản số i.

  1. Rủi ro (sự biến động hoặc sai lệch chuẩn): Được sử dụng để đo độ không chắc chắn về lợi nhuận đầu tư hoặc sự biến động của đầu tư.

img

Ở đâu?imgđại diện cho tổng rủi ro của danh mục đầu tư,imglà sự tương đồng của tài sản i và tài sản j, đo mối quan hệ thay đổi giá giữa hai tài sản này.

  1. Sự tương đồng: đo mối quan hệ lẫn nhau giữa các thay đổi giá của hai tài sản.

img

Ở đâu?imglà hệ số tương quan của tài sản i và tài sản j,imgimgtương ứng là độ lệch chuẩn của tài sản i và tài sản j.

  1. Biên giới hiệu quả: Trong hệ thống phối hợp rủi ro - lợi nhuận, ranh giới hiệu quả là tập hợp các danh mục đầu tư có thể cung cấp lợi nhuận tối đa dự kiến ở mức độ rủi ro nhất định.

img

Biểu đồ trên là một minh họa của một ranh giới hiệu quả, trong đó mỗi điểm đại diện cho một danh mục đầu tư có trọng số khác nhau. trục x biểu thị sự biến động, tương đương với mức độ rủi ro, trong khi trục y biểu thị tỷ lệ lợi nhuận. Rõ ràng, chúng tôi tập trung vào cạnh trên của biểu đồ vì nó đạt được lợi nhuận cao nhất ở mức rủi ro tương đương.

Trong giao dịch định lượng và quản lý danh mục đầu tư, áp dụng các nguyên tắc này đòi hỏi phân tích thống kê dữ liệu lịch sử và sử dụng các mô hình toán học để ước tính lợi nhuận dự kiến, độ lệch chuẩn và sự tương đồng cho các tài sản khác nhau. Sau đó, các kỹ thuật tối ưu hóa được sử dụng để tìm phân bổ trọng lượng tài sản tốt nhất. Quá trình này thường liên quan đến các hoạt động toán học phức tạp và xử lý máy tính rộng rãi - đây là lý do tại sao phân tích định lượng đã trở nên rất quan trọng trong tài chính hiện đại. Tiếp theo, chúng tôi sẽ minh họa cách tối ưu hóa bằng các ví dụ cụ thể của Python.

Ví dụ mã Python để tìm kết hợp tối ưu bằng phương pháp mô phỏng

Tính toán danh mục đầu tư tối ưu của Markowitz là một quá trình nhiều bước, liên quan đến một số bước chính, chẳng hạn như chuẩn bị dữ liệu, mô phỏng danh mục đầu tư và tính toán chỉ số.https://plotly.com/python/v3/ipython-notebooks/markowitz-portfolio-optimization/

  1. Thu thập dữ liệu thị trường:

Thông quaget_dataĐây là dữ liệu cần thiết để tính toán lợi nhuận và rủi ro, được sử dụng để xây dựng danh mục đầu tư và tính toán tỷ lệ Sharpe.

  1. Tính toán tỷ lệ lợi nhuận và rủi ro:

Cáccalculate_returns_riskchức năng được sử dụng để tính toán lợi nhuận hàng năm và rủi ro hàng năm (sự lệch chuẩn) cho mỗi loại tiền kỹ thuật số.

  1. Tính toán Portofolio tối ưu của Markowitz:

Cáccalculate_optimal_portfoliotrong mỗi mô phỏng, các trọng số tài sản được tạo ngẫu nhiên và sau đó lợi nhuận và rủi ro dự kiến của danh mục đầu tư được tính dựa trên các trọng số này. Bằng cách tạo ra các kết hợp ngẫu nhiên với các trọng lượng khác nhau, có thể khám phá nhiều danh mục đầu tư tiềm năng để tìm ra danh mục đầu tư tối ưu.

Mục đích của toàn bộ quá trình là tìm danh mục đầu tư mang lại lợi nhuận dự kiến tốt nhất ở mức độ rủi ro nhất định. Bằng cách mô phỏng nhiều sự kết hợp có thể, các nhà đầu tư có thể hiểu rõ hơn về hiệu suất của các cấu hình khác nhau và chọn sự kết hợp phù hợp nhất với mục tiêu đầu tư và dung nạp rủi ro của họ. Phương pháp này giúp tối ưu hóa các quyết định đầu tư, làm cho đầu tư hiệu quả hơn.

import numpy as np
import pandas as pd
import requests
import matplotlib.pyplot as plt

# Obtain market data
def get_data(symbols):
    data = []
    for symbol in symbols:
        url = 'https://api.binance.com/api/v3/klines?symbol=%s&interval=%s&limit=1000'%(symbol,'1d')
        res = requests.get(url)
        data.append([float(line[4]) for line in res.json()])
    return data

def calculate_returns_risk(data):
    returns = []
    risks = []

    for d in data:
        daily_returns = np.diff(d) / d[:-1]
        annualized_return = np.mean(daily_returns) * 365
        annualized_volatility = np.std(daily_returns) * np.sqrt(365)

        returns.append(annualized_return)
        risks.append(annualized_volatility)

    return np.array(returns), np.array(risks)

# Calculate Markowitz Optimal Portfolio
def calculate_optimal_portfolio(returns, risks):
    n_assets = len(returns)
    num_portfolios = 3000

    results = np.zeros((4, num_portfolios), dtype=object) 


    for i in range(num_portfolios):
        weights = np.random.random(n_assets)
        weights /= np.sum(weights)

        portfolio_return = np.sum(returns * weights)
        portfolio_risk = np.sqrt(np.dot(weights.T, np.dot(np.cov(returns, rowvar=False), weights)))

        results[0, i] = portfolio_return
        results[1, i] = portfolio_risk
        results[2, i] = portfolio_return / portfolio_risk
        results[3, i] = list(weights) # Convert weights to a list

    return results

symbols = ['BTCUSDT','ETHUSDT', 'BNBUSDT','LINKUSDT','BCHUSDT','LTCUSDT']
data = get_data(symbols)

returns, risks = calculate_returns_risk(data)
optimal_portfolios = calculate_optimal_portfolio(returns, risks)

max_sharpe_idx = np.argmax(optimal_portfolios[2])
optimal_return = optimal_portfolios[0, max_sharpe_idx]
optimal_risk = optimal_portfolios[1, max_sharpe_idx]
optimal_weights = optimal_portfolios[3, max_sharpe_idx]

# Output results
print("Optimal combination:")
for i in range(len(symbols)):
    print(f"{symbols[i]} Weight: {optimal_weights[i]:.4f}")

print(f"Expected return rate: {optimal_return:.4f}")
print(f"Expected risk (standard deviation): {optimal_risk:.4f}")
print(f"Sharpe ratio: {optimal_return / optimal_risk:.4f}")

# Visualized investment portfolio
plt.figure(figsize=(10, 5))
plt.scatter(optimal_portfolios[1], optimal_portfolios[0], c=optimal_portfolios[2], marker='o', s=3)
plt.title('portfolio')
plt.xlabel('std')
plt.ylabel('return')
plt.colorbar(label='sharp')
plt.show()

Kết quả đầu ra cuối cùng: Sự kết hợp tối ưu: Trọng lượng của BTCUSDT: 0.0721 Trọng lượng của ETHUSDT: 0.2704 Trọng lượng của BNBUSDT: 0,3646 Trọng lượng của LINKUSDT: 0.1892 Trọng lượng của BCHUSDT: 0.0829 Trọng lượng của LTCUSDT: 0,0209 Tỷ lệ lợi nhuận dự kiến: 0.4195 Rủi ro dự kiến (mức lệch chuẩn): 0,1219 Tỷ lệ Sharpe: 3.4403

img


Thêm nữa