请选择 进入手机版 | 继续访问电脑版
楼主: 十三太饱
3994 14

[期权交易] 【求助】用VBA写了一个简单的蒙特卡洛模拟,跑不出结果,求高手帮忙看看哪里不对QAQ [推广有奖]

Chemist_MZ 在职认证  发表于 2019-2-21 11:22:13 |显示全部楼层 |坛友微信交流群
十三太饱 发表于 2019-2-21 11:12
感谢大大!!!算出结果了!!
一直没有搞懂定义类型的问题,请问什么时候需要定义成variant呢?
我之前 ...
就是我之前说的“我记得VBA里面array的size是要明确声明的,即便一开始不知道size用了variant,之后要用的时候还是要用ReDim来声明size。可能这就是一直报错的原因吧。” 你的二叉树程序里面的vvec 有ReDim

其实这里你也不用redim,因为你已经知道了大小n因此直接定义Dim vvec As double (1 to n) 就行。我之前用Variant主要有两种情况:
一种是你要往array里装的变量类型未知,比如你既可能要装string也可能要装double
另一种是你在最初定义的时候还无法确定array的大小,比如你的array大小取决于后面计算出的某些量,这时候先定义成variant,不声明size然后等知道了确切的大小再redim size。

使用道具

十三太饱 发表于 2019-2-21 11:22:24 |显示全部楼层 |坛友微信交流群
Chemist_MZ 发表于 2019-2-21 11:02
Public Function MCoption(S, X, T, r, sigma, n, a)

Dim i As Integer
还得请教您:当n取到10,000还可以运行,渠道100,000就不行了,请问有解决的方法么?

使用道具

Chemist_MZ 在职认证  发表于 2019-2-21 11:27:45 |显示全部楼层 |坛友微信交流群
十三太饱 发表于 2019-2-21 11:22
还得请教您:当n取到10,000还可以运行,渠道100,000就不行了,请问有解决的方法么?
Public Function MCoption(S, X, T, r, sigma, n, a)

Dim i As Long
Dim sum, Se, P As Double

sum = 0

For i = 1 To n Step 1
Se = S * Exp((r - sigma * sigma / 2) * T + sigma * RndNorm(0, 1) * Sqr(T))
P = Exp(-r * T) * Application.Max((X - Se) * a, 0)
sum = sum + P

Next i

MCoption = sum / n

End Function

把i定义成Long就行了
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
admin_kefu + 30 + 3 + 3 + 3 热心帮助其他会员

总评分: 论坛币 + 30  学术水平 + 3  热心指数 + 3  信用等级 + 3   查看全部评分

使用道具

十三太饱 发表于 2019-2-21 13:00:07 |显示全部楼层 |坛友微信交流群
Chemist_MZ 发表于 2019-2-21 11:27
Public Function MCoption(S, X, T, r, sigma, n, a)

Dim i As Long
十分感谢大大!

使用道具

nonewman 发表于 2019-2-22 07:15:54 |显示全部楼层 |坛友微信交流群
三人行,必有我师。
学问,约等于debug。

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jr
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-3-29 16:03