Click here to Skip to main content
15,746,101 members
Please Sign up or sign in to vote.
1.00/5 (1 vote)
See more:
I am new in coding and my professor asked me to do a project about Risk at value(VaR)

but unfortunately, I wasn't able.

Is there anyone to help me with this issue?

I need to convert this MatLab code into Python code

https://www.mathworks.com/help/risk/value-at-risk-estimation-and-backtesting.html
I have a problem converting Matlab loops into python loops.

in the following, at first I write the whole code and then in which parts I have problem 

    load VaRExampleData.mat
    Returns = tick2ret(sp);
    DateReturns = dates(2:end);
    SampleSize = length(Returns);
    TestWindowStart      = find(year(DateReturns)==1996,1);
    TestWindow           = TestWindowStart : SampleSize;
    EstimationWindowSize = 250;

For a VaR confidence level of 95% and 99%, set the complement of the VaR level.

    pVaR = [0.05 0.01];

These values mean that there is at most a 5% and 1% probability, respectively, that the loss incurred will be greater than the maximum threshold (that is, greater than the VaR).
Compute the VaR Using the Normal Distribution Method
For the normal distribution method, assume that the profit and loss of the portfolio is normally distributed. Using this assumption, compute the VaR by multiplying the z-score, at each confidence level by the standard deviation of the returns. Because VaR backtesting looks retrospectively at data, the VaR "today" is computed based on values of the returns in the last N = 250 days leading to, but not including, "today."

    Zscore   = norminv(pVaR);
    Normal95 = zeros(length(TestWindow),1);
    Normal99 = zeros(length(TestWindow),1);

    for t = TestWindow
        i = t - TestWindowStart + 1;
        EstimationWindow = t-EstimationWindowSize:t-1;
        Sigma = std(Returns(EstimationWindow)); 
        Normal95(i) = -Zscore(1)*Sigma;
        Normal99(i) = -Zscore(2)*Sigma;
    end

    figure;
    plot(DateReturns(TestWindow),[Normal95 Normal99])
    xlabel('Date')
    ylabel('VaR')
    legend({'95% Confidence Level','99% Confidence Level'},'Location','Best')
    title('VaR Estimation Using the Normal Distribution Method')

Compute the VaR Using the Historical Simulation Method

Unlike the normal distribution method, the historical simulation (HS) is a nonparametric method. It does not assume a particular distribution of the asset returns. Historical simulation forecasts risk by assuming that past profits and losses can be used as the distribution of profits and losses for the next period of returns. The VaR "today" is computed as the  p th-quantile of the last  N returns prior to "today."

    Historical95 = zeros(length(TestWindow),1);
    Historical99 = zeros(length(TestWindow),1);

    for t = TestWindow
        i = t - TestWindowStart + 1;
        EstimationWindow = t-EstimationWindowSize:t-1;
        X = Returns(EstimationWindow);
        Historical95(i) = -quantile(X,pVaR(1)); 
        Historical99(i) = -quantile(X,pVaR(2)); 
    end
    
    figure;
    plot(DateReturns(TestWindow),[Historical95 Historical99])
    ylabel('VaR')
    xlabel('Date')
    legend({'95% Confidence Level','99% Confidence Level'},'Location','Best')
    title('VaR Estimation Using the Historical Simulation Method')

Compute the VaR Using the Exponential Weighted Moving Average Method (EWMA)
A value of the decay factor frequently used in practice is 0.94. This is the value used in this example

    Lambda = 0.94;
    Sigma2     = zeros(length(Returns),1);
    Sigma2(1)  = Returns(1)^2;
    
    for i = 2 : (TestWindowStart-1)
        Sigma2(i) = (1-Lambda) * Returns(i-1)^2 + Lambda * Sigma2(i-1);
    end
    Zscore = norminv(pVaR);
    EWMA95 = zeros(length(TestWindow),1);
    EWMA99 = zeros(length(TestWindow),1);
    
    for t = TestWindow 
        k     = t - TestWindowStart + 1;
        Sigma2(t) = (1-Lambda) * Returns(t-1)^2 + Lambda * Sigma2(t-1);
        Sigma = sqrt(Sigma2(t));
        EWMA95(k) = -Zscore(1)*Sigma;
        EWMA99(k) = -Zscore(2)*Sigma;
    end

    figure;
    plot(DateReturns(TestWindow),[EWMA95 EWMA99])
    ylabel('VaR')
    xlabel('Date')
    legend({'95% Confidence Level','99% Confidence Level'},'Location','Best')
    title('VaR Estimation Using the EWMA Method')

I will appreciate it a lot if someone helps m


What I have tried:

I have tried a lot but I couldn't
Posted
Updated 23-Nov-22 6:11am
v2

1 solution

Sorry, but this site does not provide code conversion services. If you want help with your problem then you need to show the code that you have written and explain what problem(s) you see and where it/they occur.
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900