假设有两资产,契约为买权型式,偿付为两者的价差减去Strike。
契约为一年期,模拟的架构同前。
#001 namespace STBiBSProcess
#002 {
#061 for(int i = 0; i < NPath; i++)
#062 {
#063 s1 = Asset1;
#064 s2 = Asset2;
#065 intdiff = 0;
#066 S1[i, 0] = s1;
#067 S2[i, 0] = s2;
#068 for(int j = 0; j < (MStep - 1); j++)
#069 {
#070 diff = h_StepGrid[j + 1] -h_StepGrid[j];
#071 for(int k = 0; k < diff; k++)
#072 {
#073 e1 = DStat.N_Inv(Rnd.NextDouble());
#074 e2 = DStat.N_Inv(Rnd.NextDouble());
#075 n1 = e1;
#076 n2 = Rho * e1 +Sqrt1mRho2 * e2;
#077 s1 = s1 * Math.Exp(((Rate-Yield) - (Sigma*Sigma)/2.0) * dt
#078 + (Sigma * Math.Sqrt(dt) * n1));
#079 s2 = s2 * Math.Exp(((Rate-Yield) - (Sigma*Sigma)/2.0) * dt
#080 + (Sigma * Math.Sqrt(dt) * n2));
#081 }
#082 S1[i, j + 1] = s1;
#083 S2[i, j + 1] = s2;
#084 }
#085 Value = Math.Max((s1-s2) - Strike, 0);
#086 }
#105 }
程序行表4.1
#073与#074产生两个独立的标准常态变量,#075与#076使用(3.1.2)产生两个具相关性的随机变量,#077与#078以之产生两个具相关性的价格程序。执行结果如下。
读者可以调整不同的相关性,看看此参数对价格的影响。事实上,这是一个相当敏感的参数,忽视或估计错误,对结果有很大的影响。由于有人认为放上所有程序码不妥,因此作者只好删除相关程序码,读者见谅。