読者です 読者をやめる 読者になる 読者になる

FXボーグ | テクニカル実験室

テクニカル分析を使った自動売買プログラムの開発に挑戦!

スポンサーリンク

「日次リターン+ATR」の 隠れマルコフモデル推定 ( RのdepmixS4パッケージ使用 )

日次リターンとATRで隠れマルコフモデルの推定を行うサンプルを見つけました。元ネタはこちらです。Regime Detection Update · Systematic Investor's Blog

f:id:fxborg:20160807220705p:plain

 今回使用するパッケージは「depmixS4」です。前回の「MSwM」より複雑なことができるようです。

Rコード

まずは必要なパッケージを読み込みます。

#depmixS4 , quantmod

install.packages("depmixS4")
install.packages("quantmod")

library("depmixS4") 
library("quantmod")

SPYの価格データを取得します。

getSymbols('SPY', from = '2012-01-01', auto.assign = T)

 日次リターンとATR(14)を計算します。

price <- Cl(SPY)
open <- Op(SPY)
ret <- log(price) - log(open)
atr <- ATR(HLC(SPY))[,'atr']

次にモデルデータの作成です。 

ModelData <- data.frame(ret,atr)
ModelData <- ModelData[-c(1:14),]   #先頭から14日分削除
colnames(ModelData) <- c("LogReturns","ATR")

いよいよ隠れマルコフモデルの推定です。レジーム数は自分で指定する必要があります。AICとBICの結果をみて調整するようです。

set.seed(1)
hmm <- depmix( list (LogReturns~1, ATR~1),
          data=ModelData,nstates=3,family=list(gaussian(),gaussian())) 

fm2 <- fit(hmm, verbose = FALSE) 

推定結果の出力。データ量とAIC、BICが表示されます。

print(fm2)

f:id:fxborg:20160807231114p:plain

次に推定されたパラメーターの出力。

summary(fm2)

f:id:fxborg:20160807231655p:plain

「Transition matrix」 には マトリックス形式で状態の推移確率が表示されます。

最後に各レジームの事後確率を求めます。

probs<-posterior(fm2) 
head(probs)

f:id:fxborg:20160807234247p:plain

 参考にしたソース。
https://github.com/ChicagoBoothML/MachineLearning_Fall2015/blob/master/Programming%20Scripts/Lecture09/hmm_finance.R

Regime Detection Update · Systematic Investor's Blog

http://yunus.hacettepe.edu.tr/~iozkan/eco742/hmm.html

最後に

今回はATRを使用したレジームスイッチのサンプルを試してみました。もちろんATRの代わりにADXやRCIを使うことも可能です。それにしても、Rのパッケージは充実してますね(highfrequency とか本当にスゴすぎ)。今後はNinjaTraderとの連携方法などを考えたいと思います。