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.
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$.
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.
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$.
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.
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.
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/
Mendapatkan data pasaran:
get_data
Fungsi, 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.Mengira pulangan dan risiko:
calculate_returns_risk
Fungsi 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.Mengira kombinasi optimum Markowitz:
calculate_optimal_portfolio
Fungsi, yang mensimulasikan pelbagai portfolio. Dalam setiap simulasi, berat aset dihasilkan secara rawak, dan berdasarkan berat ini, jangkaan pulangan dan risiko portfolio dikira.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.4403