Tarihsel ve Monte Carlo Simülasyonu

Python ile Nicel Risk Yönetimi

Jamsheed Shorish

Computational Economist

Tarihsel simülasyon

  • Uygun bir dağılım sınıfı yok mu?
  • Tarihsel simülasyon: geleceği tahmin için geçmişi kullanın
    • Dağılım varsayımı gerekmez
    • Önceki kayıtlara ait veriler, yarın için simüle kayıplar olur
Python ile Nicel Risk Yönetimi

Python ile tarihsel simülasyon

  • VaR: asset_returns içindeki getirilerle başlayın
  • Portföy weights ile portfolio_returns hesaplayın
  • portfolio_returns değerlerini lossesa dönüştürün
  • VaR: losses için ör. %95 güven seviyesinde np.quantile() hesaplayın
  • Gelecekteki kayıp dağılımının geçmişle tamamen aynı olduğunu varsayar

 

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)
Python ile Nicel Risk Yönetimi

Monte Carlo simülasyonu

  • Monte Carlo simülasyonu: parametrik tahmin ve simülasyonun güçlü birleşimi
    • Portföy kaybı ve/veya risk faktörleri için dağılım(lar) varsayar
    • Rastgele yol (koşu) oluşturmak için dağılım(lar)dan rastgele çekimlere dayanır
    • Çekimleri tekrarlayın ⇒ bir dizi simülasyon koşusu oluşur
  • İstenen zamana kadar her koşuda simüle portföy kaybını hesaplayın
  • VaR tahminini, simüle kayıpların kantili olarak bulun
Python ile Nicel Risk Yönetimi

Python ile Monte Carlo simülasyonu

  • Adım Bir:
    • scipy.stats içinden Normal dağılım normu içe aktarın
    • total_steps tanımlayın (1 gün = 1440 dakika)
    • Koşu sayısını N tanımlayın
    • portfolio_losses verisinin ortalaması mu ve st. sapması sigmayı hesaplayın
from scipy.stats import norm

total_steps = 1440
N = 10000
mu = portfolio_losses.mean() sigma = portfolio_losses.std()
Python ile Nicel Risk Yönetimi

Python ile Monte Carlo simülasyonu

  • Adım İki:
    • N koşu için daily_loss vektörünü başlatın
    • N koşu üzerinde döngü yapın
      • Monte Carlo ile simüle edilmiş loss vektörünü hesaplayın
        • Standart Normal dağılımdan tekrar tekrar çekmek için norm.rvs() kullanır
        • Çekimler, 1/total_steps ile ölçeklenen mu ve sigmayı kullanır
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) )
Python ile Nicel Risk Yönetimi

Python ile Monte Carlo simülasyonu

  • Adım Üç:
    • Her n koşusu için kümülatif daily_loss üretin
    • daily_loss üzerinde ör. %95 güven seviyesinde VaR için np.quantile() kullanın

 

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)
Python ile Nicel Risk Yönetimi

Varlık getirilerini simüle etme

  • İyileştirme: portföydeki varlık getirilerinin rastgele örnek yollarını üretin
    • Daha gerçekçi: varlık getirileri ayrı ayrı simüle edilebilir
    • Varlık getirileri ilişkili olabilir
      • Anımsayın: etkin kovaryans matrisi e_cov
        1. Adımda varlık getirilerini hesaplamak için kullanılır
  • Alıştırmalar: varlık getirisi simülasyonlu Monte Carlo
Python ile Nicel Risk Yönetimi

Hadi pratik yapalım!

Python ile Nicel Risk Yönetimi

Preparing Video For Download...