简易损失分步法计量操作风险(Julia)

金融风险管理作业题之二,接基于NS模型+久期衡量利率风险,两者没有什么联系,就是一篇作业题里的而已。

为什么说是简易呢?因为老师没让我们找数据,就自己随便定数据,过程虽然实现了,但真实的可操作性我不敢保证(抱歉~)。同时,还要说明的一点是分布的参数估计均采用的是极大似然估计,虽然我们学了MCMC并且看到了相关文章用MCMC估计泊松分布参数,但我没看懂,感觉MCMC会更好。

损失分步法:

1)估计损失强度分布。收集样本数据,假设损失强度分布服从对数正态分布,依据极大似然法,计算样本数据的均值、标准差对μ、σ进行参数估计。

2)估计损失频率分布。收集样本数据,假设损失频率分布服从泊松分布,依据极大似然法,计算样本数据的均值对进行参数估计。

3)蒙特卡洛模拟。假设进行n次模拟,每期模拟时依据损失强度分布产生1个随机数a,即该期损失次数为a,依据损失频率分布产生a个随机数组成Array的b,即a次损失的损失程度分别对应b中的元素。

4)按照实际状况和按照正态分布计算VaR。

using XLSX#引入库
using Distributions
#估计损失强度分布(对数正态分布-极大似然)
intensify=XLSX.readtable("D://julia//Lognormal.xlsx","Sheet1","A")
intensify=intensify[1][1]
for i in 1:length(intensify)#将x转化为ln(x)
    intensify[i]=log(intensify[i])
end
μ1=mean(intensify)#计算均值、标准差
σ1=std(intensify)
n1=LogNormal(μ1,σ1)#生成对数正态分布
#估计损失频率分布(泊松分布-极大似然)
frequency1=XLSX.readtable("D://julia//possion.xlsx","Sheet1","A")#获取X
frequency2=XLSX.readtable("D://julia//possion.xlsx","Sheet1","B")#获取P
frequency1=frequency1[1][1]
frequency2=frequency2[1][1]
λ1=0
for i in 1:length(frequency1)#计算均值,X*P求和
    λ1=λ1+frequency1[i]*frequency2[i]
end
n2=Poisson(λ1)#生成泊松分布
#蒙特卡洛模拟
n=1000#模拟次数
Loss=zeros(n)
for i in 1:n
    a=rand(n2)#抽取该期损失次数
    b=rand(n1,a)#抽取每次损失的损失程度
    loss=sum(b)#计算当期损失程度的总和
    Loss[i]=loss#保存数据
end
#按照实际情况计算VaR
Loss=sort(Loss)#从小到大排序
VaR1=Loss[Int64(round((1-0.01)*n))]#第(1-c)*n个即为所求,因为精度问题,对(1-c)*n进行一定处理
#按照正态分布计算VaR
function VaRNorm(μ,σ,α)
    return -quantile(Normal(μ,σ),α)#输出以μ为均值,以σ为方差,在α处的分位数,正态分布对称VaR为对应的负数
end

miu=mean(Loss)
sigma=std(Loss)
VaRNorm(miu,sigma,0.01)

你可能感兴趣的:(julia)