15
14

More than 5 years have passed since last update.

MT4のヒストリカルデータをRでxts形式に変換する。

Last updated at Posted at 2014-05-13

はじめまして。

こちらでは主にシステムトレードソフト、MetaTrader4 に関連する話題を書いて行きます。
へなちょこなので、すきま産業的しょぼいネタばかりになると思いますが、よろしくお願いいたします。

さて、初投稿からタイトル通りいきなりすきまに突っ込みます。

MT4 での EA やインジケーター開発、トレードログの分析に R を利用したいという人も多いと思いますが、R で時系列分析を行う場合、xts パッケージを利用すると何かと便利です。
ところが xts 形式にデータを変換するのにはちょこっと手間が掛かります。
そこで MT4 の吐き出した csv 形式のヒストリカルデータを xts に一発変換する関数を作ってみました。
参考にさせていただいたのは日本 R 界の大仏様、teramonagi さんのコチラです。
私のツイートに対するアンサー記事まで書いていただき、ありがたやありがたや。

MT4 と R の連係の下準備に関しては fai さんが丁寧に解説しておられますのでそちらをご参照下さい。
なお、MT4/build600以降ではオリジナルの mt4R.dll が使えなくなってしまいましたが、その対応版を micclly さんが提供して下さっています。

では本題です。

R

fun.xts.single <- function(dat){

   x.csv <- paste(dat, ".csv", sep="")

   x.df <- read.csv(x.csv, header=FALSE,
         col.names = c("Date", "Time", "Open", "High", "Low", "Close", "Volume"),
              colClasses = c("character", "character", 
                             "numeric", "numeric", "numeric", "numeric", "integer"))
   x.df$Datetime <- paste(chartr(".", "-", x.df$Date), x.df$Time)

   x.xts <- as.xts(zoo(x.df[,3:6], as.POSIXct(x.df$Datetime, "EET")))
   # "EET" = 東ヨーロッパ時間

   return(x.xts)
}

ファイルパスを指定していないので、読み込みたい csv ファイルを R のワーキングディレクトリに入れておいて下さい。
MT4が吐き出したファイル名の .csv より前の部分を文字列の引数として与え、適当なオブジェクト名に代入するだけです。

R
USDJPY.5min.xts <- fun.xts.single("USDJPY5")

as.xts 関数内の引数、"EET" の部分は xts に変換される際の時間帯指定です。
ご使用の業者に合わせて適宜変更して下さい。
省略した場合はローカル(日本なら "JST" )で読み込まれます。
Volume 値まで読み込みたい場合は、同関数内の [,3:6] を [,3:7] に。

xts に至るまでのポイントは型指定(私は R でここに翻弄されることが多いです)、区切り文字変更、日付と時間の結合あたりでしょうか。
とりあえずこれでつるっと変換できるはずですが、もっと良い書き方があったら教えて下さい。

ところで R での "<-" と "=" の使い分けってなんか明確な作法とかあるんですかね?

次回は複数通貨ペアをべろべろっと一気に変換する関数について書いてみたいと思います。

15
14
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
14