1. 程式人生 > 其它 >拓端tecdat|R語言隨機波動率(SV)模型、MCMC的Metropolis-Hastings演算法金融應用:預測標準普爾SP500指數

拓端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. model
  5. {
  6. alha ~ dnorm(0,10000)
  7. logteta ~ dnorm(0,.1)
  8. bea <- ilogit(loit_ta)
  9. lg_sima ~ dnorm(0, 1)
  10. sia <- exp(log_sigma)
  11. x[1] ~ dnorm(0, 1/sma^2)
  12. pr_y[1] <- exp(-x[1])
  13. y[1] ~ dnorm(0, prec_y[1])
  14. for (t in 2:t_max)
  15. {
  16. x[t] ~ dnorm(aa + eta*(t-1]-alha, 1/ia^2)
  17. pr_y[t] <- exp(-x[t])
  18. y[t] ~ dnorm(0, prec_y[t])
  19. }

設定

設定隨機數生成器種子以實現可重複性

set.seed(0)

載入模型並載入或模擬資料

  1. sample_data = TRUE # 模擬資料或SP500資料
  2. t_max = 100
  3. if (!sampe_ata) {
  4. # 載入資料 tab = read.csv('SP500.csv')
  5. y = diff(log(rev(tab$ose)))
  6. SP5ate_str = revtab$te[-1])
  7. ind = 1:t_max
  8. y = y[ind]
  9. SP500_dae_r = SP0dae_tr[ind]
  10. 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. for (k in 1:length(param_aes)) {
  5. smps_pm = tmmh[[paranesk]]
  6. 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. } else
  9. legend(
  10. bt='n)

PMMH:後驗均值和分位數

x 的 MCMC 樣本的蹤跡

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

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. }

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. }

最受歡迎的見解

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模擬優化市場風險

▍關注我們 【大資料部落】第三方資料服務提供商,提供全面的統計分析與資料探勘諮詢服務,為客戶定製個性化的資料解決方案與行業報告等。 ▍諮詢連結:http://y0.cn/teradat ▍聯絡郵箱:[email protected]