Historical और Monte Carlo Simulation

Python में Quantitative Risk Management

Jamsheed Shorish

Computational Economist

Historical simulation

  • कोई उपयुक्त वितरण वर्ग नहीं?
  • Historical simulation: भविष्य का अनुमान लगाने के लिए अतीत का उपयोग
    • किसी वितरण की मान्यता जरूरी नहीं
    • पिछले नुकसान का डेटा कल के लिए सिम्युलेटेड नुकसान बन जाता है
Python में Quantitative Risk Management

Python में Historical simulation

  • VaR: asset_returns में रिटर्न से शुरू करें
  • पोर्टफोलियो weights से portfolio_returns निकालें
  • portfolio_returns को losses में बदलें
  • VaR: losses पर 95% जैसे confidence level के लिए np.quantile() निकालें
  • मानता है कि भविष्य का नुकसान-वितरण अतीत के ठीक समान है

 

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 में Quantitative Risk Management

Monte Carlo simulation

  • Monte Carlo simulation: पैरामीट्रिक अनुमान और सिमुलेशन का शक्तिशाली संयोजन
    • पोर्टफोलियो नुकसान और/या जोखिम कारकों के लिए वितरण मानता है
    • रैंडम path बनाने के लिए वितरणों से रैंडम ड्रॉ पर निर्भर, जिसे run कहते हैं
    • रैंडम ड्रॉ दोहराएँ $\Rightarrow$ सिमुलेशन runs का set बनता है
  • इच्छित समय तक _हर_ run पर simulated पोर्टफोलियो नुकसान निकालें
  • simulated losses के quantile के रूप में VaR का अनुमान पाएँ
Python में Quantitative Risk Management

Python में Monte Carlo simulation

  • Step One:
    • scipy.stats से Normal distribution norm इंपोर्ट करें
    • total_steps परिभाषित करें (1 day = 1440 minutes)
    • runs की संख्या N परिभाषित करें
    • portfolio_losses के mean mu और standard deviation sigma निकालें
from scipy.stats import norm

total_steps = 1440
N = 10000
mu = portfolio_losses.mean() sigma = portfolio_losses.std()
Python में Quantitative Risk Management

Python में Monte Carlo simulation

  • Step Two:
    • N runs के लिए daily_loss वेक्टर इनिशियलाइज़ करें
    • N runs पर लूप चलाएँ
      • Monte Carlo simulated loss वेक्टर निकालें
        • स्टैंडर्ड Normal distribution से बार-बार ड्रॉ करने को norm.rvs() उपयोग करता है
        • ड्रॉ, डेटा से मेल खाने हेतु mu और sigma को 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) )
Python में Quantitative Risk Management

Python में Monte Carlo simulation

  • Step Three:
    • हर run n के लिए cumulative daily_loss जनरेट करें
    • daily_loss पर 95% जैसे confidence level के लिए VaR पाने हेतु np.quantile() उपयोग करें

 

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 में Quantitative Risk Management

Asset returns का सिमुलेशन

  • Refinement: पोर्टफोलियो में asset returns की रैंडम sample paths जनरेट करें
    • अधिक यथार्थता: asset returns को अलग-अलग simulate किया जा सकता है
    • Asset returns correlated हो सकते हैं
      • याद करें: efficient covariance matrix e_cov
      • Step 2 में asset returns निकालने हेतु उपयोग होता है
  • Exercises: asset return simulation के साथ Monte Carlo simulation
Python में Quantitative Risk Management

अभ्यास करते हैं!

Python में Quantitative Risk Management

Preparing Video For Download...