1、标准正态法的假设:股票i收益率服从多元正态分布ΔS(i)∝N(μ(i),σ(i)^2);
这里需要知道:
(1) μ:一维数组,股票的期望收益率,u(i)表示第i个股票的期望收益;
(2)σ:一维数组,股票的标准差,σ(i)表示第i个股票的标准差;
(3)weights:一维数组,股票的权重序列,weights(i)表示第i个股票的权重;
(4)Corr:二维数字数组,股票的历史相关系数矩阵;
2、假设组合的初始市值MarketValue,St0为股票初始市值,则
St0[i]=weights[i]*MarketValue[i](i=1,2,...,n),模拟持有期为DeltaT ,股票的个数为n;
3、对Corr进行Cholesky分解,分解出来的上三角矩阵为L,有Corr=(`L)*L;
4、产生随机序列矩阵A,A[t,i]=ε,(t=1,2,...,DeltaT ,i=1,2,...,n),其中ε∝N(0,1);
5、计算NewA=A*L,这有NewA的相关系数近似于Corr;
6、NewA[t,i]=u(i)+σ(i)*NewA[t,i],(t=1,2,...,DeltaT ,i=1,2,...,n)
7、根据对数收益的计算法,可以得到持有期末股票i的市值
St[i]=St0[i]*exp(sum(NewA[:,i]));
8、则组合的市值P=St[i]+ ...+ St[n];
9、重复步骤4、5、6、7、8,(一般需要模拟次数SimulationNumber>=100次),则可以
得到SimulationNumber个P
10、对P序列从小到大排序。计算在一定置信度1-α(一般α取5%或1%)情况下的
分位数,Z=Round((1-α)*M),对应分位数下组合的市值MVz和组合的VAR=|MVz-MarketValue|
备注:
蒙特卡罗模拟法与历史模拟法十分类似,他们的区别在于前者利用统计方法估计历史上市场因子运动的参数然后模拟市场因子未来的变化情景,而后者则直接根据历史数据来模拟市场因子的未来变化情景
GetBkWeightByDate('SH000300', 20111231T,t1);
s1:=select ['指数代码'] as '行业代码',['代码'] ,['比例(%)'] from t1 end;
GetBkWeightByDate('SH000001', 20111231T,t2);
s2:=select ['指数代码'] as '行业代码',['代码'] ,['比例(%)'] from t2 end;
return pf_VARvsBenchmarkVAR(s1,s2,20110101T,20111231T,20,0,95,10000,1,0,0);
//返回:221.01