Tài nguyên đang được tải lên... tải...

Phương pháp đo lường rủi ro và lợi nhuận theo lý thuyết của Goma Kowitz

Tác giả:Cỏ nhỏ, Tạo: 2023-11-10 15:44:53, Cập nhật: 2024-11-08 09:06:34

img

Tuần trướcQuản lý rủi ro VaRKhi đề cập đến rủi ro của danh mục đầu tư, rủi ro của danh mục đầu tư không bằng rủi ro của các tài sản riêng lẻ, và có liên quan đến mối quan hệ giá của chúng. Ví dụ, nếu hai tài sản có mối quan hệ tích cực rất mạnh, tức là đồng xu, thì việc phân tán vào nhiều đầu tư sẽ không làm giảm rủi ro, nếu mối quan hệ tiêu cực mạnh, việc phân tán đầu tư có thể làm giảm đáng kể rủi ro. Vấn đề tự nhiên là làm thế nào để tối đa hóa lợi nhuận khi đầu tư vào một danh mục đầu tư ở mức độ rủi ro nhất định?

Lý thuyết danh mục đầu tư hiện đại (Modern Portfolio Theory, MPT), được đưa ra bởi Harry Markowitz vào năm 1952, là một khuôn khổ toán học về lựa chọn danh mục đầu tư nhằm tối đa hóa lợi nhuận dự kiến, trong khi kiểm soát rủi ro, bằng cách chọn các danh mục đầu tư rủi ro khác nhau. Ý tưởng cốt lõi là sự thay đổi giá không hoàn toàn đồng bộ giữa các tài sản có thể làm giảm rủi ro đầu tư tổng thể bằng cách đa dạng hóa bố trí tài sản.

Các khái niệm then chốt của lý thuyết Markowitz

  1. Tỷ lệ lợi nhuận dự kiến: Đây là mức lợi nhuận mà nhà đầu tư có thể mong đợi để có được khi nắm giữ tài sản hoặc danh mục đầu tư, thường được dự đoán dựa trên dữ liệu lợi nhuận lịch sử.

    $E(R_p) = \sum_{i=1}^{n} w_i E(R_i) $

    Trong đó, $E ((R_p) $ là tỷ lệ lợi nhuận dự kiến của danh mục đầu tư, $w_i$ là trọng lượng của tài sản thứ $i$ trong danh mục đầu tư, và $E ((R_i) $ là tỷ lệ lợi nhuận dự kiến của tài sản thứ $i$.

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

    $\sigma_p = \sqrt{\sum_{i=1}^{n} \sum_{j=1}^{n} w_i w_j \sigma_{ij}}$

    Trong đó, $\sigma_p$ là tổng rủi ro trong danh mục đầu tư, $\sigma_{ij}$ là chênh lệch đồng chiều giữa tài sản $i$ và tài sản $j$, nó đo mối quan hệ giữa sự thay đổi giá giữa hai tài sản này.

  3. Phân biệtCác nhà đầu tư có thể sử dụng các giá trị khác nhau để đo lường các mối quan hệ giữa hai loại tài sản.

    $\sigma_{ij} = \rho_{ij} \sigma_i \sigma_j$

    Trong đó, $\rho_{ij}$ là hệ số liên quan của tài sản $i$ và tài sản $j$, $\sigma_i$ và $\sigma_j$ là chênh lệch tiêu chuẩn của tài sản $i$ và tài sản $j$.

  4. Biên giới hiệu quả: Trong hệ thống tọa độ 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ó khả năng cung cấp lợi nhuận dự kiến cao nhất ở mức rủi ro nhất định.

img

Dưới đây là một biểu đồ của ranh giới hiệu quả, mỗi điểm đại diện cho một danh mục đầu tư có trọng lượng khác nhau, theo tọa độ ngang là tỷ lệ biến động hoặc mức độ rủi ro, theo tọa độ ngang là tỷ lệ lợi nhuận.

Trong quản lý giao dịch và danh mục đầu tư định lượng, việc áp dụng các nguyên tắc này đòi hỏi phải phân tích thống kê dữ liệu lịch sử, sử dụng mô hình toán học để ước tính lợi nhuận dự kiến, chênh lệch chuẩn và chênh lệch khớp của các loại tài sản khác nhau. Sau đó, sử dụng kỹ thuật tối ưu hóa để tìm ra sự tái phân phối tài sản tối ưu nhất. Quá trình này thường liên quan đến các phép tính toán học phức tạp và nhiều xử lý máy tính, đó cũng là lý do tại sao phân tích định lượng trở nên rất quan trọng trong lĩnh vực tài chính hiện đại.

Ví dụ về mã Python để tìm kết hợp tối ưu bằng phương pháp giả lập

Tính toán tổng hợp tối ưu của Markowitz là một quá trình nhiều bước, liên quan đến nhiều bước quan trọng như chuẩn bị dữ liệu, danh mục đầu tư giả lập, tính toán các chỉ số; tài liệu tham khảo:https://plotly.com/python/v3/ipython-notebooks/markowitz-portfolio-optimization/

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

    • Thỏa thuậnget_dataChức năng lấy dữ liệu giá lịch sử của đồng tiền kỹ thuật số đã chọn. Đây là dữ liệu cần thiết để tính lãi suất và rủi ro, chúng được sử dụng để xây dựng danh mục đầu tư và tính tỷ lệ Sharpe.
  2. Tính toán lợi nhuận và rủi ro

    • Sử dụngcalculate_returns_riskChức năng tính toán tỷ lệ lợi nhuận hàng năm và rủi ro hàng năm của mỗi đồng tiền kỹ thuật số ("sự chênh lệch tiêu chuẩn").
  3. Tính toán kết hợp tối ưu của Markowitz

    • Sử dụngcalculate_optimal_portfolioCác chức năng, mô phỏng nhiều danh mục đầu tư. Trong mỗi mô phỏng, các trọng số tài sản được tạo ngẫu nhiên và sau đó tính toán tỷ lệ lợi nhuận và rủi ro dự kiến của danh mục đầu tư dựa trên các trọng số này.
    • Bằng cách ngẫu nhiên tạo ra các kết hợp có trọng lượng khác nhau, nhiều danh mục đầu tư có thể được khám phá để tìm ra danh mục đầu tư tốt nhất. Đây là một trong những ý tưởng cốt lõi của lý thuyết hợp lý của nhóm đầu tư Markowitz.

Mục đích của toàn bộ quá trình là tìm ra 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ể, 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 kết hợp phù hợp nhất với mục tiêu đầu tư và khả năng chịu rủi ro của họ. Cách này giúp tối ưu hóa quyết định đầu tư và 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

# 获取行情数据
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)

# 计算马科维茨最优组合
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) # 将权重转换为列表

    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]

# 输出结果
print("最优组合:")
for i in range(len(symbols)):
    print(f"{symbols[i]}权重: {optimal_weights[i]:.4f}")

print(f"预期收益率: {optimal_return:.4f}")
print(f"预期风险(标准差): {optimal_risk:.4f}")
print(f"夏普比率: {optimal_return / optimal_risk:.4f}")

# 可视化投资组合
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ả cuối cùng: Kết hợp tốt nhất: Đánh giá BTCUSDT: 0.0721 ETHUSDT trọng lượng: 0.2704 BNBUSDT cân nặng: 0.3646 LINKUSDT trọng lượng: 0.1892 BCHUSDT cân nặng: 0.0829 LTCUSDT trọng lượng: 0.0209 Ước tính lợi nhuận: 0.4195 Rủi ro dự kiến (thất chuẩn): 0.1219 Tỷ lệ Sharp: 3.4403img


Thêm nữa