Sumber dimuat naik... memuat...

Mengukur risiko dan pulangan: Panduan Teori Goma Kovitz

Penulis:Rumput, Dicipta: 2023-11-10 15:44:53, Dikemas kini: 2024-11-08 09:06:34

img

Minggu lepasPengurusan Risiko VaRApabila dikatakan bahawa risiko portfolio tidak sama dengan risiko aset individu, ia berkaitan dengan korelasi harga mereka. Sebagai contoh, jika dua aset mempunyai korelasi positif yang sangat kuat, maka penyebaran untuk banyak pelaburan tidak mengurangkan risiko, jika korelasi negatif yang kuat, penyebaran pelaburan dapat mengurangkan risiko dengan ketara. Persoalan semula jadi adalah bagaimana untuk memaksimumkan pulangan pada tahap risiko tertentu ketika melabur dalam portfolio. Kita akan menggunakan teori Markowitz yang akan diperkenalkan hari ini.

Teori Portfolio Moden (MPT), yang dikemukakan oleh Harry Markowitz pada tahun 1952, adalah satu rangka kerja matematik untuk pemilihan portfolio yang bertujuan untuk memaksimumkan pulangan yang dijangkakan dengan memilih pelbagai portfolio aset berisiko sambil mengawal risiko. Idea terasnya ialah perubahan harga antara aset yang tidak sepenuhnya sinkron (iaitu terdapat korelasi antara aset) dapat mengurangkan risiko pelaburan secara keseluruhan dengan mempelbagaikan penyesuaian aset.

Konsep utama teori Markowitz

  1. Pendapatan yang dijangkakan: Ini adalah pendapatan yang dijangka dapat diperoleh oleh pelabur yang memegang aset atau portfolio, biasanya berdasarkan data pendapatan sejarah.

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

    Di mana, $E ((R_p) $ adalah kadar pulangan yang dijangkakan untuk portfolio, $w_i$ adalah berat aset ke $i$ dalam portfolio, dan $E ((R_i) $ adalah kadar pulangan yang dijangkakan untuk aset ke $i$.

  2. Risiko (ketidakstabilan atau standard deviasi): digunakan untuk mengukur ketidakpastian atau turun naiknya pulangan pelaburan.

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

    Di mana $\sigma_p$ adalah risiko keseluruhan portfolio, $\sigma_{ij}$ adalah perbezaan perpaduan antara aset $i$ dan aset $j$, yang mengukur hubungan perubahan harga antara kedua-dua aset ini.

  3. Perbezaan pihak: Mengukur hubungan antara perubahan harga antara dua aset.

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

    Di sini, $\rho_{ij}$ adalah faktor yang berkaitan dengan aset $i$ dan aset $j$, $\sigma_i$ dan $\sigma_j$ adalah perbezaan standard antara aset $i$ dan aset $j$.

  4. Sempadan yang berkesan: Dalam sistem koordinat risiko-manfaat, sempadan yang berkesan adalah kumpulan portfolio yang mampu memberikan pulangan yang paling diharapkan pada tahap risiko yang diberikan.

img

Gambar di atas adalah satu carta sempadan yang berkesan, dengan setiap titik mewakili portfolio yang mempunyai berat yang berbeza, koordinat melintang adalah kadar turun naik atau tahap risiko, koordinat vertikal adalah kadar pulangan. Jelas, kita memberi tumpuan kepada bahagian atas grafik, yang mendapat pulangan tertinggi pada tahap risiko yang sama.

Dalam pengurusan transaksi dan portfolio kuantitatif, penerapan prinsip-prinsip ini memerlukan analisis statistik data sejarah, menggunakan model matematik untuk menganggarkan hasil yang dijangkakan, perbezaan standard, dan perpaduan antara pelbagai aset. Kemudian, teknik pengoptimuman digunakan untuk mencari pembagian semula aset yang terbaik. Proses ini biasanya melibatkan operasi matematik yang rumit dan banyak pemprosesan komputer, dan itulah sebabnya analisis kuantitatif menjadi sangat penting dalam bidang kewangan moden. Berikut adalah contoh Python khusus untuk menunjukkan bagaimana untuk mengoptimumkan.

Contoh kod Python untuk mencari kombinasi optimum dengan kaedah analog

Menghitung Markovitz optimal portfolio adalah proses pelbagai langkah yang melibatkan beberapa langkah penting seperti penyediaan data, portfolio analog, pengiraan penunjuk dan sebagainya.https://plotly.com/python/v3/ipython-notebooks/markowitz-portfolio-optimization/

  1. Mendapatkan data pasaran

    • Dibenarkanget_dataFungsi, mendapatkan data harga sejarah mata wang digital yang dipilih. Ini adalah data yang diperlukan untuk mengira kadar pulangan dan risiko, yang digunakan untuk membina portfolio dan mengira nisbah Sharpe.
  2. Mengira pulangan dan risiko

    • Penggunaancalculate_returns_riskFungsi ini mengira pulangan tahunan dan risiko tahunan (default standard) untuk setiap mata wang digital. Ini adalah untuk mengukur prestasi sejarah setiap aset untuk digunakan dalam kombinasi yang optimum.
  3. Mengira kombinasi optimum Markowitz

    • Penggunaancalculate_optimal_portfolioFungsi, yang mensimulasikan pelbagai portfolio. Dalam setiap simulasi, berat aset dihasilkan secara rawak, dan berdasarkan berat ini, jangkaan pulangan dan risiko portfolio dikira.
    • Dengan menghasilkan kombinasi dengan berat yang berbeza secara rawak, anda boleh meneroka pelbagai portfolio yang mungkin untuk mencari kombinasi yang terbaik. Ini adalah salah satu idea teras dari rasionaliti kumpulan investasi Markowitz.

Tujuan keseluruhan proses ini adalah untuk mencari portfolio yang akan memberikan pulangan yang terbaik yang dijangkakan pada tahap risiko yang diberikan. Dengan mensimulasikan pelbagai kombinasi yang mungkin, pelabur dapat memahami dengan lebih baik bagaimana pelbagai konfigurasi berfungsi dan memilih kombinasi yang paling sesuai dengan matlamat pelaburan dan daya tahan risiko mereka. Pendekatan ini membantu mengoptimumkan keputusan pelaburan dan membuat pelaburan lebih berkesan.

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()

Hasilnya ialah: Kumpulan terbaik: Berat BTCUSDT: 0.0721 Berat ETHUSDT: 0.2704 Berat BNBUSDT: 0.3646 LINKUSDT berat: 0.1892 Berat BCHUSDT: 0.0829 Berat LTCUSDT: 0.0209 Kadar pulangan dijangkakan: 0.4195 Risiko yang dijangkakan: 0.1219 Peratusan Sharp: 3.4403img


Lebih lanjut