拓端tecdat|R语言随机波动率(SV)模型、MCMC的Metropolis-Hastings算法金融应用:预测标准普尔SP500指数

2021/10/17 17:11:30

本文主要是介绍拓端tecdat|R语言随机波动率(SV)模型、MCMC的Metropolis-Hastings算法金融应用:预测标准普尔SP500指数,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

原文链接:http://tecdat.cn/?p=23991

原文出处:拓端数据部落公众号

在这个例子中,我们考虑随机波动率模型 SV0 的应用,例如在金融领域。

统计模型

随机波动率模型定义如下

并为

其中 yt 是因变量,xt 是 yt 的未观察到的对数波动率。N(m,σ2) 表示均值 m 和方差 σ2 的正态分布。

α、β 和 σ 是需要估计的未知参数。

BUGS语言统计模型

文件内容 'sv.bug'

  1.   moelfle = 'sv.bug' # BUGS模型文件名
  2.   cat(readLies(moelfle ), sep = "\n")
  1.   # 随机波动率模型SV_0
  2.   # 用于随机波动率模型
  3.   var y[t_max], x[t_max], prec_y[t_max]
  4.    
  5.    
  6.   model
  7.   {
  8.   alha ~ dnorm(0,10000)
  9.   logteta ~ dnorm(0,.1)
  10.   bea <- ilogit(loit_ta)
  11.   lg_sima ~ dnorm(0, 1)
  12.   sia <- exp(log_sigma)
  13.    
  14.   x[1] ~ dnorm(0, 1/sma^2)
  15.   pr_y[1] <- exp(-x[1])
  16.   y[1] ~ dnorm(0, prec_y[1])
  17.   for (t in 2:t_max)
  18.   {
  19.   x[t] ~ dnorm(aa + eta*(t-1]-alha, 1/ia^2)
  20.   pr_y[t] <- exp(-x[t])
  21.   y[t] ~ dnorm(0, prec_y[t])
  22.   }

设置

设置随机数生成器种子以实现可重复性

set.seed(0)

加载模型并加载或模拟数据

  1.   sample_data = TRUE # 模拟数据或SP500数据
  2.   t_max = 100
  3.    
  4.   if (!sampe_ata) {
  5.   # 加载数据 tab = read.csv('SP500.csv')
  6.   y = diff(log(rev(tab$ose)))
  7.   SP5ate_str = revtab$te[-1])
  8.    
  9.   ind = 1:t_max
  10.   y = y[ind]
  11.   SP500_dae_r = SP0dae_tr[ind]
  12.   SP500_e_num = as.Date(SP500_dtetr)

模型参数

  1.   if (!smle_dta) {
  2.   dat = list(t_ma=ax, y=y)
  3.   } else {
  4.   sigrue = .4; alpa_rue = 0; bettrue=.99;
  5.   dat = list(t_mx=_mx, sigm_tue=simarue,
  6.   alpatrue=alhatrue, bet_tue=e_true)
  7.   }

如果模拟数据,编译BUGS模型和样本数据

data = mdl$da()

绘制数据

对数收益率

Biips粒子边际Metropolis-Hastings

我们现在运行Biips粒子边际Metropolis-Hastings (Particle Marginal Metropolis-Hastings),以获得参数 α、β 和 σ 以及变量 x 的后验 MCMC 样本。

PMMH的参数

  1.   n_brn = 5000 # 预烧/适应迭代的数量
  2.   n_ir = 10000 #预烧后的迭代次数
  3.   thn = 5 #对MCMC输出进行稀释
  4.   n_art = 50 # 用于SMC的nb个粒子
  5.   para_nmes = c('apha', 'loit_bta', 'logsgma') # 用MCMC更新的变量名称(其他变量用SMC更新)。
  6.   latetnams = c('x') # 用SMC更新的、需要监测的变量名称

初始化PMMH

运行 PMMH

update(b_pmh, n_bun, _rt) #预烧和拟合迭代

samples(oj_mh, ter, n_art, thin=hn) # 采样

汇总统计

summary(otmmh, prob=c(.025, .975))

计算核密度估计

density(out_mh)

参数的后验均值和置信区间

  1.   for (k in 1:length(pram_names)) {
  2.   suparam = su_pmm[[pam_as[k]]]
  3.   cat(param$q)
  4.   }

参数的MCMC样本的踪迹

  1.   if (amldata)
  2.   para_tue = c(lp_tue, log(dt$bea_rue/(-dta$eatru)), log(smtue))
  3.   )
  4.    
  5.   for (k in 1:length(param_aes)) {
  6.   smps_pm = tmmh[[paranesk]]
  7.   plot(samlespram[1,]

PMMH:跟踪样本参数

参数后验的直方图和 KDE 估计

  1.   for (k in 1:length(paramns)) {
  2.   samps_aram = out_mmh[[pramnaes[k]]]
  3.   hist(sple_param)
  4.   if (sample_data)
  5.   points(parm_true)
  6.   }

PMMH:直方图后验参数

  1.   for (k in 1:length(parm) {
  2.   kd_pram =kde_mm[[paramames[k]]]
  3.   plot(kd_arm, col'blue
  4.   if (smpldata)
  5.   points(ar_true[k])
  6.   }

PMMH:KDE 估计后验参数

x 的后均值和分位数

  1.   x_m_mean = x$mean
  2.   x_p_quant =x$quant
  3.   plot(xx, yy)
  4.   polygon(xx, yy)
  5.   lines(1:t_max, x_p_man)
  6.   if (ame_at) {
  7.   lines(1:t_ax, x_true)
  8.    
  9.   } else
  10.   legend(
  11.   bt='n)

PMMH:后验均值和分位数

x 的 MCMC 样本的踪迹

  1.   par(mfrow=c(2,2))
  2.   for (k in 1:length) {
  3.   tk = ie_inex[k]
  4.    
  5.   if (sample_data)
  6.   points(0, dtax_t
  7.   }
  8.   if (sml_aa) {
  9.   plot(0
  10.   legend('center')
  11.   }
  12.    

PMMH:跟踪样本 x

x 后验的直方图和核密度估计

  1.   par(mfow=c(2,2))
  2.   for (k in 1:length(tie_dex)) {
  3.   tk = tmnex[k]
  4.   hist(ot_m$x[tk,]
  5.   main=aste(t=', t, se='')
  6.   if (sample_data)
  7.   points(ata$x_re[t],
  8.   }
  9.   if (saml_dta) {
  10.   plot(0, type='n', bty='n', x
  11.   legend('center
  12.   bty='n')
  13.    
  14.   }

PMMH:后边际直方图

  1.   par(mfrow=c(2,2))
  2.   for (k in 1:length(idx)) {
  3.   tk =m_dx[k]
  4.   plot(kmmk]] if (alata)
  5.   point(dat_r[k], 0)
  6.   }
  7.   if (aldt) {
  8.   plot(0, type='n', bty='n', x, pt.bg=c(4,NA)')
  9.   }
  10.    


最受欢迎的见解

1.R语言对S&P500股票指数进行ARIMA + GARCH交易策略

2.R语言改进的股票配对交易策略分析SPY—TLT组合和中国股市投资组合

3.R语言时间序列:ARIMA GARCH模型的交易策略在外汇市场预测应用

4.TMA三均线期指高频交易策略的R语言实现

5.r语言多均线量化策略回测比较

6.用R语言实现神经网络预测股票实例

7.r语言预测波动率的实现:ARCH模型与HAR-RV模型

8.R语言如何做马尔科夫转换模型markov switching model

9.matlab使用Copula仿真优化市场风险



这篇关于拓端tecdat|R语言随机波动率(SV)模型、MCMC的Metropolis-Hastings算法金融应用:预测标准普尔SP500指数的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程