全部版块 我的主页
论坛 金融投资论坛 六区 金融学(理论版) 金融工程(数量金融)与金融衍生品
8380 8
2012-10-20
见过有的文章对金融数据分析时,有用随机波动率模型(stochastic volatility, 以下简称SV)来拟合的。一直在找如何估计SV中那几个参数的方法,MLE(最大似然估计)似乎不行(因为Likelihood的函数形式是个不容易算的积分)。后来见到WINBUGS用法,后便试着编了WINBUGS的程序来算,似乎还行。

此帖目的是:一来请大家指正;二来也看看大家有无改进的办法(因为我发现用此程序,WINBUGS好像老是数值计算溢出,所以如果初始估计值设不好,或PRIOR设的范围太大,就不能顺利运算此程序)。

注:我这里用到SV模型(似乎是Heston)形式如下:dS/S=mu*dt+v[t]*dW1,  其中V又是随机变量,其随机过程是: V[t+dt]-V[t]=(theta-alpha*V[t])*dt+Sqr(V[t])*sigma*dW2, dW1与dW2独立,简化起见mu=0 (因为dt很小时,mu*dt此项可忽略,即mu=0)。下面是WINBUGS程序的例子(根据50个测试用收益率数据(dS/S,在X数组内),来估计Alpha,theta,sigma这些参数(下面的txt附件内容已贴在下面,不必看附件):
SV.txt
大小:(2.14 KB)

 马上下载



MODEL {
for( j in 1 : N-1 ) {
v[j+1] ~ dnorm(mu[j], tau[j])
mu[j]<- (theta-alpha*v[j])*dt+v[j]
tau[j]<- 1.0/v[j]/sigma/sigma/dt
}
for( j in 1 : N ) {
x[j] ~ dnorm(0.0, taux[j]) #Note: x is just dS/S
taux[j]<- 1.0/v[j]/dt
}
v[1] ~ dunif(0.03,0.06)
sigma ~ dunif(0.6,1.2)
theta ~ dunif(0.7,0.9)
alpha ~ dunif(1.7,2.3)
}

DATA
list(N=50, dt=0.01,  x=c(0.0026500745, 0.0480901772, 0.0107189619, 0.0170098433,
-0.0095772109, -0.0015959556, 0.0160971931, 0.0074017512, -0.0104007234, -0.0072990382, -0.0095561268,
-0.0200387847, 0.0111049423, -0.0034396885, -0.0861650005, 0.0150379343, 0.0052606306, -0.0322772593,
-0.0263788879, 0.0016784448, 0.0157479027, 0.0455850248, 0.0089219091, -0.0046011399, -0.0079556519, 0.0010855852, -0.0697741348, -0.0120694957, 0.0583712209, 0.0385789937, 0.0136737196,
-0.0170208015, -0.0739999498, -0.0092948589, -0.1007966451, 0.0089883474, -0.0396835519, 0.0045423091,
-0.0897183852, 0.0568423347, 0.0853861699, -0.0229354002, -0.1113926165, 0.0762002942, -0.0815690052,
-0.0611300245, -0.0699412850, 0.0166096849, -0.0001466746, 0.0810738261))

FIRST INIT
list(sigma=0.9, alpha=2.0, theta=0.8, v=c(0.04, 0.05, 0.06, 0.07, 0.08, 0.09, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10))
SECOND INIT
list(sigma=0.8, alpha=2.2, theta=0.9, v=c(0.05, 0.05, 0.06, 0.07, 0.08, 0.09, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10))
Third INIT
list(sigma=1.0, alpha=1.8, theta=0.7, v=c(0.045, 0.05, 0.06, 0.07, 0.08, 0.09, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10))


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2012-10-27 18:38:04
谢谢!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-10-27 22:23:44
你好,建議你去用 "基因演算法" or "模擬退火法" or "類神經網路" 相關的資料探勘文獻來找最佳化的參數 (經驗分享: 最好電腦級數高一點......才會快)
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-10-27 22:42:03
jayhsieh 发表于 2012-10-27 22:23
你好,建議你去用 "基因演算法" or "模擬退火法" or "類神經網路" 相關的資料探勘文獻來找最佳化的參數 (經驗 ...
谢谢回复。不过我不是学数学的,没听说过你说的东东。多指教。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-10-27 22:56:32
不用客氣~~我只是分享目前實務界與美國學術界最新的研究, 難得遇到相同興趣的朋友..... 我本科數學 碩經濟 博則搞財工
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-11-10 18:33:16
EM算法就可以啊,不过WINBUG肯定不行的,自己找MATLAB的CODE了……
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群