Sumber daya yang dimuat... Pemuatan...

Mengukur risiko dan imbalan Teori Fumakowitz

Penulis:Rumput, Dibuat: 2023-11-10 15:44:53, Diperbarui: 2024-11-08 09:06:34

img

Berbicara pada minggu laluManajemen Risiko VaRKetika berbicara tentang risiko portofolio, risiko tidak sama dengan risiko masing-masing aset, dan terkait dengan korelasi harga mereka. Sebagai contoh, jika dua aset memiliki korelasi positif yang sangat kuat, maka penyebaran investasi tidak mengurangi risiko, jika korelasi negatif kuat, penyebaran investasi dapat mengurangi risiko secara signifikan. Pertanyaan alami adalah, bagaimana memaksimalkan pengembalian dengan tingkat risiko tertentu ketika berinvestasi dalam sebuah portofolio?

Modern Portfolio Theory (MPT), yang dikemukakan oleh Harry Markowitz pada tahun 1952, adalah kerangka matematis pemilihan portofolio yang bertujuan untuk memaksimalkan pengembalian yang diharapkan dengan memilih portofolio aset berisiko yang berbeda, sambil mengendalikan risiko. Gagasan inti adalah bahwa perubahan harga antara aset yang tidak sepenuhnya sinkron dapat mengurangi risiko investasi secara keseluruhan melalui diversifikasi penataan aset.

Konsep kunci dari teori Markowitz

  1. Pengembalian yang diharapkan: Ini adalah laba yang diharapkan dapat diperoleh investor yang memegang aset atau portofolio investasi, biasanya berdasarkan data laba historis.

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

    Di mana $E ((R_p) $ adalah tingkat pengembalian yang diharapkan dari portofolio, $w_i$ adalah bobot aset ke $i$ di portofolio, dan $E ((R_i) $ adalah tingkat pengembalian yang diharapkan dari aset ke $i$.

  2. Risiko (volatilitas atau deviasi standar): digunakan untuk mengukur ketidakpastian laba atas investasi atau volatilitas investasi.

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

    Di antaranya, $\sigma_p$ adalah risiko total portofolio, $\sigma_{ij}$ adalah perkalian dari aset $i$ dan aset $j$, yang mengukur hubungan perubahan harga antara kedua aset tersebut.

  3. PerbedaanPerbedaan harga antara dua aset.

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

    Di mana $\rho_{ij}$ adalah koefisien terkait dari aset $i$ dan aset $j$, $\sigma_i$ dan $\sigma_j$ adalah selisih standar dari aset $i$ dan aset $j$.

  4. Perbatasan yang efektif: Dalam sistem koordinat risiko-keuntungan, batas efektif adalah kumpulan portofolio yang mampu memberikan pengembalian maksimum yang diharapkan pada tingkat risiko tertentu.

img

Gambar di atas adalah grafik batas yang efektif, dimana setiap titik mewakili portofolio yang memiliki bobot yang berbeda, koordinat horizontal adalah tingkat volatilitas atau tingkat risiko, koordinat vertikal adalah tingkat pengembalian. Jelas, kita fokus pada bagian atas grafik, yang memiliki hasil tertinggi pada tingkat risiko yang sama.

Dalam manajemen transaksi dan portofolio kuantitatif, penerapan prinsip-prinsip ini membutuhkan analisis statistik terhadap data historis, menggunakan model matematika untuk memperkirakan hasil yang diharapkan, defisit standar, dan defisit koefisien dari berbagai aset. Kemudian, teknik optimasi digunakan untuk menemukan re-allocation aset yang optimal. Proses ini biasanya melibatkan operasi matematika yang rumit dan banyak pemrosesan komputer, dan itulah sebabnya mengapa analisis kuantitatif menjadi sangat penting di bidang keuangan modern. Berikut ini adalah contoh spesifik Python untuk menunjukkan bagaimana mengoptimalkan.

Contoh kode Python untuk mencari kombinasi optimal dengan analog

Menghitung Markovitz optimal combination adalah proses multi-langkah yang melibatkan beberapa langkah penting seperti persiapan data, portofolio simulasi, dan perhitungan indikator.https://plotly.com/python/v3/ipython-notebooks/markowitz-portfolio-optimization/

  1. Mendapatkan data pasar

    • Diperbolehkanget_dataFungsi, mendapatkan data harga historis mata uang digital yang dipilih. Ini adalah data yang diperlukan untuk menghitung tingkat pengembalian dan risiko, dan digunakan untuk membangun portofolio dan menghitung rasio Sharpe.
  2. Menghitung Pengembalian dan Risiko

    • Penggunaancalculate_returns_riskFungsi ini menghitung pengembalian tahunan dan risiko tahunan (standar deviasi) untuk setiap mata uang digital. Hal ini dilakukan untuk mengkuantifikasi kinerja historis setiap aset agar dapat digunakan dalam kombinasi yang optimal.
  3. Menghitung kombinasi optimal Markowitz

    • Penggunaancalculate_optimal_portfolioFungsi, yang mensimulasikan beberapa portofolio. Dalam setiap simulasi, beban aset dihasilkan secara acak, dan kemudian berdasarkan beban ini, pengembalian dan risiko yang diharapkan dari portofolio dihitung.
    • Dengan secara acak menghasilkan kombinasi dari bobot yang berbeda, Anda dapat menjelajahi beberapa portofolio yang mungkin untuk menemukan kombinasi terbaik. Ini adalah salah satu gagasan inti dari rasionalitas portofolio Markowitz.

Tujuan dari proses ini adalah untuk menemukan portofolio yang memberikan hasil yang paling optimal untuk tingkat risiko yang diberikan. Dengan mensimulasikan beberapa kombinasi yang mungkin, investor dapat lebih memahami kinerja dari berbagai konfigurasi dan memilih kombinasi yang paling sesuai dengan tujuan investasi dan kemampuan menanggung risiko mereka.

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

Hasil akhir: Perbedaan terbaik: Berat BTCUSDT: 0.0721 Berat ETHUSDT: 0.2704 BNBUSDT berat: 0.3646 LINKUSDT Berat: 0.1892 Berat BCHUSDT: 0.0829 LTCUSDT berat: 0.0209 Hasil yang diharapkan: 0.4195 Risiko yang diharapkan (standar deviasi): 0.1219 Perbandingan Sharp: 3.4403img


Lebih banyak