2016年2月18日木曜日

MT4スクリプト: ヒストリカルデータを自在に変換、History Converter


EAのバックテストを行うために、MT4のヒストリーセンター以外から入手したデータを使用している人は多いと思います。

しかし、データの書式やタイムゾーンが違う、ファイルが複数に分割されている、といったことがしばしばあり、それらを修正してインポートする作業はなかなか面倒なものです。

History Converterはそうした手間のかかる作業を全自動でやってくれる便利なスクリプトです。

データ結合・書式/時間軸/タイムゾーン変換、全部おまかせ!

History Converterでは、以下の4つ作業を一連の手続きとして行うことができます。

データの結合

長期のヒストリカルデータは容量が大きいため、年や月ごとに分けて配布されている場合がほとんどです。これらを一つ一つインポートしていくのは、地道で根気のいる作業です。

History Converterは、ソースとなるデータが分かれていても読み込むことができます。処理されたデータは一つのファイルとして出力されるので、一度でインポートできます。

タイムゾーンの変換

ヒストリカルデータは公開元によってタイムゾーンがバラバラです。MT4には時間をずらしてインポートする機能がついていますが、夏時間に対応していないため、欧州・米国時間のデータを利用する際に困ります。

History Converterは、タイムゾーンを正確に変換します。2007~2008年にかけてアメリカとオセアニアで夏時間の期間が変更されましたが、それも考慮して変換されるため、長期のヒストリカールデータのタイムゾーン変換にも対応しています。

しかも、ソースとなるデータファイル一つ一つにつきタイムゾーンを指定することもできるため、公開元の異なるデータが混在していても読み込むことができます。

データフォーマットの変換

ヒストリカルデータのフォーマットは公開元によって異なり、そのままではMT4で読み込めないものもあります。エクセルやテキストエディタで修正することも可能ですが、これも自動でできるに越したことはありません。

History Converterは様々なデータソースを読み込むことができ、それらをMT4で読み取り可能なCSV形式で出力します。

時間軸の変換

さらにおまけで時間軸を変換する機能も付けました。1分足データがあれば、どんな時間軸のデータも生成することができます。

ヒストリカルデータの入手先

主だったFXのヒストリカルデータの入手先を紹介します。データの品質や公開している期間などにそれぞれ違いがあるので、目的にあったところを選ぶといいでしょう。

Metaquotes

MT4のヒストリーセンターから、Metaquotes社が公開しているデータをダウンロードできます。

手軽にダウンロードでき、種類も豊富で、期間が長いのがメリット。ただしデータが抜けていたり変なレートが混じっていたりと、品質はいまひとつな模様。

Alpari.com

日本のアルパリはスイスショックで撤退しましたが、Alpari.comはまだ生きています。ここのMT4をインストールすると、ヒストリーセンターからAlpari社のデータをダウンロードすることができます。

種類がそろっており、期間も長く、データ品質も良いためおすすめです。

FXDD

大手ブローカーFXDDが公開しているデータです。

品質が良く、EAバックテストにしばしば利用されています。バイナリファイル(hstファイル)で配布されており、期間は2005年から。

Dukascopy

最近日本に上陸したDukascopy社も品質の良いヒストリカルデータを公開しています。

モデリング品質99.9%と公称していますが、一体何がそんなに違うのかは謎です。。。

Forexite

ロシアのブローカーForexite社によるデータです。

期間は長いものの、品質はMetaquotes社のものと同レベル。日ごとに分かれている上に全通貨がまとまっていて扱いにくいのも難点です。

Forex Testerのサイトからまとめられたデータを入手できるので、こちらを利用するといいでしょう。

Pepperstone

日本から撤退してしまったPepperstone社ですが、ティック刻みの非常に高精度のヒストリカルデータを公開しています。期間は2009年から。

Histdata.com

Histdata.comで公開されているデータは、期間が長く、種類もたくさんあります。昔のデータは抜けが多いですが、最近のデータの品質は悪くありません。

GMOクリック証券

口座を開設すると2007年からのヒストリカルデータをダウンロードすることができます。実際に配信されたデータなので、品質は良いと思われます。

その他

GAIN Capital
YADIX
Pacific Exchange Rate Service

使い方

ファイルの入出力が行われる場所は「ファイル→データフォルダを開く→MQL4→Files」です。サブフォルダを作業ディレクトリとする場合は、DataDirを指定します。

SrcFile・DstFileには入力/出力ファイル名を指定します。csv/txtファイルとhstファイルの両方に対応しています。「USDJPY_2014.csv, USDJPY_2015.csv・・・」など複数ファイルに分かれている場合は、"USDJPY_20*.csv"のようにワイルドカードを使って指定します。

Timeframeには時間軸を指定します。Currentとすると時間軸の変換は行いません。

SrcTimezoneとDstTimezoneには、入力/出力データのタイムゾーンを指定します。入力データに複数のタイムゾーンのデータが混在している時は、USDJPY_2013.UC-3.csv、USDJPY_2014.EET.csv、USDJPY_2014.NewYork.csvといったように拡張子の前にタイムゾーンを指定します。

パラメーター

パラメーター名デフォルト値説明
SrcFile入力ファイル名(ワイルドカード可)
DstFile出力ファイル名
DataDir作業ディレクトリ
TimeframeCurrent時間軸
SrcTimezoneNone入力データのタイムゾーン
DstTimezoneGMT出力データのタイムゾーン
ダウンロード
ヒストリカルデータを自在に変換、History Converter
最新バージョン: Ver 1.02 (2017.3.5)

History Converter.ex4

9 件のコメント:

  1. 素晴らしいツールの公開ありがとうございます!
    ただし、使い方がわからず上手く変換が出来ませんでした。

    ① 公開されているファイルをMQL4\Scriptsの下に設置
    ② *.hstのファイルはMQ4\Filesの下に配置
    ③ Metatrader起動
    ④ 適当なチャートを開いてスクリプトを実行
    ⑤ 以降は本ページに記載の設定方法に則りパラメーターを設定

    これでMQL4\Filesの下にファイルが出来上がると思って居たのですが、どこにも生成されたファイルが出来上がらない状況です。

    返信削除
    返信
    1. ご利用いただきありがとうございます。
      お書きいただいた手順はあっているので、パラメーター設定や変換元ファイルなどが原因で何らかのエラーが生じているのではないかと思います。エラーがメッセージボックスで表示されるよう修正いたしましたので、再度ダウンロードしてお試しください。

      削除
    2. ありがとうございます!
      確認させて頂き新しいスクリプトが無事機能致しました。

      削除
  2. 探していたツールでした。公開,ありがとうございます。
    ただ,操作履歴に次のものが残るだけで,うまく行きません。

    2017.4.29. 23:39:37.099 Script History Converter TRYJPY,H1:removed

    2017.4.29. 23:36:15.650 Script History Converter TRYJPY,H1:loaded successfully

    元データは日足の次のようなものです。

    銘柄 日付 始値 高値 安値 終値
    TRYJPY 2007/4/2 84.62 85.02 84.32 84.86
    TRYJPY 2007/4/3 84.84 86.76 84.7 86.6

    時間足でないといけないのでしょうか?

    DataDirは空白で試しても,入れて試しても,同じでした。入れ方がよくわからないので,フルパスでC:\Users\H\ForexComTest\MQL4\Files\と入れました。

    すみません。よろしくお願いいたします。

    返信削除
    返信
    1. ご利用いただきありがとうございます。
      DataDirは空白で構いません。おそらく何らかのエラーが生じていますので、エキスパートタブのメッセージ(複数)をお書きいただけますでしょうか?

      削除
    2. どうもありがとうございます。
      自己解決しました。ヒストリーセンターのポップアップウィンドーが出てから,左の通貨ペアを選択しないまま,インポートしようとしたのがいけなかったようです。
      気づいて,選択してから,元のcsvファイルをインポートしてみると,History Converterを使うまでもなく,できました。

      せっかくですから,エキスパートタブのメッセージを載せます。
      2017.04.29 23:34:33.558 Script History Converter TRYJPY,H1: removed

      2017.04.29 23:34:33.554 History Converter TRYJPY,H1: uninit reason 0

      2017.04.29 23:34:33.554 History Converter TRYJPY,H1: OnStart [0]: Timezone is not designated. : SrcTimezone=None DstTimezone=UTC+0

      2017.04.29 23:34:33.554 History Converter TRYJPY,H1: initialized

      2017.04.29 23:34:33.519 History Converter TRYJPY,H1 inputs: SrcFile=*.csv; DstFile=TRYJPY1440.hst; DataDir=; Timeframe=0; SrcTimezone=127; DstTimezone=0; StartTime=0; EndTime=2145916800; SkipWeekendBars=false;

      2017.04.29 23:30:31.960 Script History Converter TRYJPY,H1: loaded successfully

      どうもありがとうございました。

      削除
  3. Dukascopyのヒストリカルデータを変換しようとして失敗してます

    hstファイルフォーマットを調べましたら、新フォーマット
    1レコード60バイトになってました
    このスクリプトは、新フォーマット対応してますでしょうか?
    https://www.dogrow.net/fx/blog16/

    返信削除
  4. このコメントは投稿者によって削除されました。

    返信削除
  5. はじめまして。エクスネスのティックデーター4年分を一つにまとめてインポートできるように変換希望なんですが、最初は色々エラーの窓がでていまして、それぞれ変更して、最後にはエラーなくなったのですが、MQL4>Fileに生成されなくて困っています。こちらは随分前の記事のようですが、今も使用って可能でしょうか?
    パラメーターの画像URLを添付します。https://photos.app.goo.gl/r4NgucKu4UoDBZy78

    返信削除