VBA的蒙特卡罗模拟方法

时间:2013-06-26 14:12:37

标签: vba simulation montecarlo

我有一个代码,使用蒙特卡罗模拟方法生成价格总利润的概率分布。

F和G列中的数据如何显示利润的累积分布?

据我所知,它会使用给定的值范围来计算累积频率

由Int(Iteration / 20 * i)给出。

但是我没有看到它与F列中的利润概率> = X有什么关系。

如果我为我的迭代选择100,

然后

TP(Int(Iteration / 20 * i))

= TP(Int(100/20 * i))

= TP(Int(5 * i))

所以它只会显示,

TP(5),TP(10),TP(15)和TP(20)

如果i = 5

TP(Int(Iteration / 20 * i))

= TP(Int(100/20 * i))

= TP(Int(5 * 5))

我得到的TP(25)超出范围。

这是我困惑的代码的一部分:

For i = 1 To 20
Cells(i + 3, 6) = 1 - (0.05 * i)
Cells(i + 3, 7) = TP(Int(Iteration / 20 * i))

Cells(i + 3, 14) = Iteration / 20 * i


Next i

http://www.anthony-vba.kefra.com/vba/vba12.htm

1 个答案:

答案 0 :(得分:0)

根据您提供的代码和数据,不应超出范围:

ReDim TP(Iteration) As Double 'Is defined as function of the number of iterations (100 here)

Cells(i + 3, 6) = 1 - (0.05 * i) 'Writes to the F column until row 8 
Cells(i + 3, 7) = TP(Int(Iteration / 20 * i)) 'Writes to the G column until row 8

'The maximum value for  TP(Int(Iteration / 20 * i)) is 25, below 100 

'Actually, this array should be dimensioned in a more direct way like ReDim TP(Int(Iteration / 20 * i)) As Double 

如果你遇到一个越界错误是因为TP数组的尺寸不应该是:它要么因为你错过了上面的行(ReDim TP(Iteration) As Double),要么因为你没有给出正确的值在进行上述重新定尺寸之前,变量Iteration(= 100)。