首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

R语言中的马尔科夫机制转换(Markov regime switching)模型

相关视频

投资者希望及时发现这些变化,以便可以相应地调整其策略,但是这样做可能很困难。

RHmm从CRAN不再可用,因此我想使用其他软件包复制功能实现马尔可夫区制转移(Markov regime switching)模型从而对典型的市场行为进行预测,并且增加模型中对参数的线性约束功能。

r

load.packages('quantmod')

y=returns

ResFit = HMM(y, nStates=2)

DimObs = 1

r

matplot(fb$Gamma, type='l', main='Smoothed Probabilities', ylab='Probability')

legend(x='topright', c('State1','State2'), fill=1:2, bty='n')

r

fm2 = fit(mod, verbose = FALSE)

使用logLik在迭代69处收敛:125.6168

r

probs = posterior(fm2)

layout(1:2)

plot(probs$state, type='s', main='Implied States', xlab='', ylab='State')

matplot(probs[,-1], type='l', main='Probabilities', ylab='Probability')

legend(x='topright', c('State1','State2'), fill=1:2, bty='n')

r

#*****************************************************************

# #添加一些数据,看看模型是否能够识别状态#******************************************************************

bear2 = rnorm( 100, -0.01, 0.20 )

bull3 = rnorm( 100, 0.10, 0.10 )

bear3 = rnorm( 100, -0.01, 0.25 )

true.states = c(true.states, rep(2,100),rep(1,100),rep(2,100))

y = c( bull1, bear, bull2, bear2, bull3, bear3 )

DimObs = 1

r

plot(data, type='h', x.highlight=T)

plota.legend('Returns + Detected Regimes')

r

#*****************************************************************

# 加载历史价格

#******************************************************************

data = env()

getSymbols('SPY', src = 'yahoo', from = '1970-01-01', env = data, auto.assign = T)

price = Cl(data$SPY)

open = Op(data$SPY)

ret = diff(log(price))

ret = log(price) - log(open)

atr = ATR(HLC(data$SPY))[,'atr']

fm2 = fit(mod, verbose = FALSE)

使用logLik在迭代30处收敛:18358.98

r

print(summary(fm2))

Initial state probabilties model pr1 pr2 pr3 pr4 0 0 1 0

Transition matrix toS1 toS2 toS3 toS4 fromS1 9.821940e-01 1.629595e-02 1.510069e-03 8.514403e-45 fromS2 1.167011e-02 9.790209e-01 8.775478e-68 9.308946e-03 fromS3 3.266616e-03 8.586650e-47 9.967334e-01 1.350529e-69 fromS4 3.608394e-65 1.047516e-02 1.922545e-130 9.895248e-01

Response parameters Resp 1 : gaussian Resp 2 : gaussian Re1.(Intercept) Re1.sd Re2.(Intercept) Re2.sd St1 2.897594e-04 0.006285514 1.1647547 0.1181514 St2 -6.980187e-05 0.008186433 1.6554049 0.1871963 St3 2.134584e-04 0.005694483 0.4537498 0.1564576 St4 -4.459161e-04 0.015419207 2.7558362 0.7297283

Re1.(Intercept)Re1.sdRe2.(Intercept)Re2.sd

St10.0002897594013789510.006285514046163541.164754744198910.118151350440916

St2-6.98018749098021e-050.008186433076343581.655404887369830.187196307284941

St30.0002134583581413140.005694483301156080.4537497819450660.156457606460757

St4-0.000445916126672640.01541920708195962.755836200188950.72972830143278

r

probs = posterior(fm2)

print(head(probs))

rownames(x)stateS1S2S3S4

130010

230010

330010

430010

530010

630010

r

layout(1:3)

plota(temp, type='l', col='darkred')

plota.legend('Market Regimes', 'darkred')

r

layout(1:4)

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OdCZyUa-jE5T9Bpt8tZpDkow0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券