Simulasi Historis dan Monte Carlo

Manajemen Risiko Kuantitatif dengan Python

Jamsheed Shorish

Computational Economist

Simulasi historis

  • Tidak ada kelas distribusi yang sesuai?
  • Simulasi historis: gunakan masa lalu untuk memprediksi masa depan
    • Tidak perlu asumsi distribusi
    • Data kerugian sebelumnya menjadi kerugian simulasi untuk besok
Manajemen Risiko Kuantitatif dengan Python

Simulasi historis di Python

  • VaR: mulai dengan pengembalian di asset_returns
  • Hitung portfolio_returns menggunakan weights portofolio
  • Ubah portfolio_returns menjadi losses
  • VaR: hitung np.quantile() untuk losses pada mis. 95%
  • Mengasumsikan distribusi kerugian masa depan sama persis dengan masa lalu

 

weights = [0.25, 0.25, 0.25, 0.25]

portfolio_returns = asset_returns.dot(weights)
losses = - portfolio_returns
VaR_95 = np.quantile(losses, 0.95)
Manajemen Risiko Kuantitatif dengan Python

Simulasi Monte Carlo

  • Simulasi Monte Carlo: gabungan kuat estimasi parametrik dan simulasi
    • Mengasumsikan distribusi untuk kerugian portofolio dan/atau faktor risiko
    • Mengandalkan pengambilan acak dari distribusi untuk membuat lintasan acak (run)
    • Ulangi pengambilan acak ⇒ membentuk sekumpulan run simulasi
  • Hitung kerugian portofolio tersimulasi pada tiap run hingga waktu target
  • Temukan VaR sebagai kuantil dari kerugian simulasi
Manajemen Risiko Kuantitatif dengan Python

Simulasi Monte Carlo di Python

  • Langkah Satu:
    • Impor distribusi Normal norm dari scipy.stats
    • Tetapkan total_steps (1 hari = 1440 menit)
    • Tetapkan jumlah run N
    • Hitung mean mu dan simpangan baku sigma dari data portfolio_losses
from scipy.stats import norm

total_steps = 1440
N = 10000
mu = portfolio_losses.mean() sigma = portfolio_losses.std()
Manajemen Risiko Kuantitatif dengan Python

Simulasi Monte Carlo di Python

  • Langkah Dua:
    • Inisialisasi vektor daily_loss untuk N run
    • Ulangi untuk N run
      • Hitung vektor loss hasil simulasi Monte Carlo
        • Gunakan norm.rvs() untuk mengambil berulang dari distribusi Normal standar
        • Pengambilan sesuai data dengan mu dan sigma diskalakan 1/total_steps
daily_loss = np.zeros(N)

for n in range(N):
loss = ( mu * (1/total_steps) + norm.rvs(size=total_steps) * sigma * np.sqrt(1/total_steps) )
Manajemen Risiko Kuantitatif dengan Python

Simulasi Monte Carlo di Python

  • Langkah Tiga:
    • Hasilkan daily_loss kumulatif untuk setiap run n
    • Gunakan np.quantile() untuk VaR pada mis. tingkat keyakinan 95% atas daily_loss

 

daily_loss = np.zeros(N)
for n in range(N):

loss = mu * (1/total_steps) + ... norm.rvs(size=total_steps) * sigma * np.sqrt(1/total_steps)
daily_loss[n] = sum(loss)
VaR_95 = np.quantile(daily_loss, 0.95)
Manajemen Risiko Kuantitatif dengan Python

Mensimulasikan pengembalian aset

  • Penyempurnaan: buat lintasan acak pengembalian aset dalam portofolio
    • Lebih realistis: tiap aset dapat disimulasikan terpisah
    • Pengembalian aset dapat saling berkorelasi
      • Ingat: matriks kovarians efisien e_cov
      • Dipakai di Langkah 2 untuk menghitung pengembalian aset
  • Latihan: simulasi Monte Carlo dengan simulasi pengembalian aset
Manajemen Risiko Kuantitatif dengan Python

Ayo berlatih!

Manajemen Risiko Kuantitatif dengan Python

Preparing Video For Download...