MetaTrader4(以下MT4)のEA開発をしていて「指標発表時は止めた方が良さそうだが実際にはどうなんだろう・・・」と思うことがありまして、ちょっと調べてみたのですがバックテスト時に回避する特効薬的な方法が見つからなかったので自作することにしました。
2015年11月20日追記
残念なことにDailyFXの仕様が変わってしまい、「FXCalendarDownload」ではCSVファイルが取れなくなってしまいました。
2015年3月14日までしかデータがありませんので、バックテストできるのはそこまでとなります。ご了承ください。
解決方法が見つかり次第、対応する予定です。
2016年11月30日追記
DailyFXのWebサイトが正式版になり、FXCalendarDownloadでCSVファイルが取れるようになっています!
2017年7月24日追記
DailyFXのWebサイトから指標カレンダーのCSVが取得できなくなってしまいました‥。
FXCalendarDownloaderでCSVデータを取得しようとすると403エラーが表示されてダウンロードに失敗します。
DailyFXのWebサイト側のミスでなければ、今後も使えるようになることは無いと思われます‥。
FXCalendarDownloader
以下のリンクからダウンロードしてください。
FXCalendarDownloader.zipのダウンロード
(クリックでダウンロードできない場合には右クリック→名前をつけて保存 等で保存し、解凍してください。)
ダウンロードしたZIPファイルを解凍するとFXCalendarDownloader.exeがあります。
実行(ダブルクリック)すると上記のような画面が表示されます。
使い方
「ダウンロード開始」ボタンをクリックしてください。
他は(通常)変更する必要はありませんが、古いデータが不要でしたら開始日を変更するとダウンロードやEAの動作が早くなると思います。
※2010年5月30日より前のデータはありません。2010年5月30日より過去の日付を入力してもエラーになります。
「ダウンロードが完了しました」のメッセージが表示されたら完了です。EXEファイルと同じ場所にFXCalendarDownloder.csvが出力されます。(このファイルの中に指標発表の日付と時刻などが入っています)
FXCalendarChecker
1.CSVファイルの設置
ダウンロードしたCSVファイルをEAで読み込ませます。
まず、CSVファイルをMT4のデータフォルダのtester\filesに置いてください。
※MQL4\Filesフォルダではありません。(これに気づかず数時間無駄にしました…)
ただし、EAをデバッグする場合にはMQL4\Filesフォルダに配置する必要があります。(なんなのこの仕様…)
2.FXCalendarCheckerをEAに組み込む
MT4のデータフォルダのMQL4\includeフォルダに以下のリンクからダウンロードしたFXCalendarChecker.mqhを置いてください。
※ファイルが3つ入っています。ここでコピーするのはFXCalendarChecker.mqhだけです。 次に組み込みたいEAのファイルの先頭(付近)に以下の記述をします。
#include <FXCalendarChecker.mqh>
後は、FXCalendarChecker.mqh内の関数を順番に呼び出すだけです。 OnInitに以下の記述(太字部分)
int OnInit() { CalendarCheckerInit(); return(INIT_SUCCEEDED); }
このCalendarCheckerInit()を実行するとFXCalendarDownloaderでダウンロードしてきたCSVファイルを読み込んで、配列に展開します。
後はEA実行時に「指標発表時刻かどうか」をチェックする関数を呼び出すだけです。 指標発表時は発注しない場合、以下のようになります。
if(!SearchCalendar(TimeCurrent(),GMTOffset,MarginMinutes)) ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,””,12345,0,Green);
SearchCalendar関数は以下のような仕様になります。
SearchCalendar(datetime time, int offset, int minutes, bool isHigh = true, bool isMedium = true, bool isLow = true, bool isUnknown = true)
3.夏時間(サマータイム)の設定
夏時間(サマータイム)の既定値はFalse(夏時間を設定しない)になっています。これはFXDDの1分足データに合わせたものです。
夏時間を設定したい場合にはFXCalendarChecker.mqhの変数宣言にあるIsSummerTimeをtrueにしてください。
※この設定も完璧ではなく「一律で夏時間の修正」を入れているためサマータイム制度を採用していない日本の発表などがズレてしまいます。
FXDDなどの「夏時間無関係」のヒストリカルデータでバックテストする場合には「あくまでも目安(日本などの指標発表はズレている)」のでご注意下さい。
「夏時間で1時間早くなる」ヒストリカルデータを使用している場合には、FXCalendarChecker.mqhのIsSummerTimeをtrueにしていただければ正確なバックテストができるかと思います。
【パラメータ】
time = チェックしたい日時を指定します。通常TimeCurrent()を渡せばOKです。
offset = 時差を設定します。MT4の時差を冬時間で設定してください。(+3のところが多い気がします)
minutes = 指標発表の前後何分間を「指標発表時間」とするかの設定です。
例)minutesを5とした場合 指標発表が19時だったとすると「18時55分から19時5分まで」の場合、true(指標発表時刻)を返します。
isHigh = trueにすると重要度が高(High)の指標を対象にします。
isMedium = trueにすると重要度が中(Medium)の指標を対象にします。
isLow = trueにすると重要度が低(Low)の指標を対象にします。
isUnknown = trueにすると重要度不明の指標を対象にします。
全重要度を対象とする場合には、重要度の指定を省略してもOKです。(既定値はtrueです)
FXCalendarTester
FXCalendarCheckerの動作確認に使用したEA「FXCalendarTester」をFXCalendarChecker.zipに同梱しています。
FXCalendarTester.mq4(またはFXCalendarTester.ex4)をMT4のデータフォルダ、MQL4\Expertsに置くとMT4から実行できます。
「毎時0分に発注し、30分に手仕舞いする」というだけの簡単なEAです。1時間足で実行すると指標を回避しているのがわかります。
その他
・サマータイムを使わない場合
FXDDの1分足データではサマータイムは関係ないらしいです。 サマータイムの自動計算を使わない場合にはFXCalendarChecker.mqhの22行目IsSummerTimeをfalseにすると未使用になります。
bool IsSummerTime = false;
夏時間、冬時間は関係なくFXDD様提供の1分足(M1)ヒストリカルデータの時間軸はGMT+3との回答を得ました。
・デバッグの有効化
あまり使うことはない(と思いたい)のですが、DailyFXから取得するデータが手入力されたもののようで取り込みに失敗するケースがあります。(入力ミスがあったりします)
本日(2015年3月14日 現在)までのデータはなんとか対応していますが、今後、謎データが出てきて上手く読み込めないという事態が発生するかもしれません。 そのような場合には21行目のIsDebugをtrueにすると、取り込み終わった配列情報をCSVファイル出力できます。
bool IsDebug = true;
ファイル名はDebug.csvで、FXCalendarDownloder.csvと同じフォルダに出力します。
FXCalendarDownloder.csvとDebug.csvを比較して原因を突き止めてください…;;
・バックテスト以外(実トレード)での使用
毎週CSVファイルをダウンロードしてMT4のデータフォルダ、MQL4\Filesの下に置くことで実トレードで使用することも可能です。
・・・しかし、それは面倒ですので実トレードでは他の方法を使った方がよいと思います。
FFCalを使った方法であれば簡単にできます。指標情報の公開元が異なりますが・・・指標発表の影響をバックテストで確認するだけと割り切ってFFCalを使用するのも手ではないでしょうか。
FFCalで指標発表を回避する方法についてはfaiさんの記事が役に立つと思います。
なお、FFCalはBuild600以降で動かなくなっていたので改修したものを別記事で公開しています。
FFCalをご利用になる場合にはこちらもご覧ください。
FFCalが動かなくなっていたので修正してみました【MT4インディケーター】
このソフトウェアについて
当ツールを利用したことに関連して生ずる損害について、一切責任を負いません。(自己責任でお使いください)
当ツールはフリーソフトです。個人使用・業務使用に関わらず自由にご使用いただいてかまいませんが、著作権は放棄しておりませんので当ツールの販売は禁止といたします。
配布等を行っていただいても構いませんがインターネット上でダウンロードさせたい場合には「当サイト(当ページ)からダウンロードする(リンクする)」ようお願いいたします。
FXCalendarChecker.mqhの改変はご自由に実施されてかまいません。ただし、改変したものの配布についてはご一報ください。
もし不具合等ございましたら当記事のコメント欄またはメールでご連絡ください。
メールアドレス:tradeandsoftwareあっとま~くgmail.com
開発後記(雑記)
いやー・・・予想以上に大変でした。
ダウンロードソフト(FXCalendarDownloader)は簡単にできたのですが、FXCalendarCheckerの開発時にCSVファイルの内容と配列の内容が一致せず、トライアルアンドエラーで1つずつ地道に問題を解消する作業が辛くて辛くて・・・
指標の内容にカンマ入れていたり、パーセント表記する際にピリオドと間違ってカンマ入れていたり。(CSVとはいったい・・・うごごご・・・)
指標の重要度にMediumRとかMediumKとか(R、Kとはなんだろう)、意味不明なところではlocale.とか。
勝手にダウンロードして使ってるので僕が文句言える筋合いのものではないんですけど・・・できれば・・・できればでいいので正しく入れていただきたいですっ!!
後は時間が前後していたり・・・(通常、上から昇順になっているのですが、この順序がズレているデータが結構ありました)
時間の問題はめっちゃ強引に解決しました・・・(なんて強引な・・・気に入らぬ!という方は勝手に改変してくださいw)
とりあえず、これでEAに組み込めるようになったので実際に使っているEAに組み込んでバックテストしてみたいと思います。
その他開発ツール等
「開発ラボ」に開発したツールの一覧があります。
ご興味がございましたら、ぜひご覧ください。
コメント
こんにちは。
バックテスト時に指標を避けるというのは面倒でそのままテストしてましたが、なんとかできないかな?と思ってはいたんですが、自分のスキルでは「無理か」と諦めていました。
それが先程、拝見したらなんと考えていた事そのままの物を作っていただいていて驚きました。
私に取って神様の様な方です(笑)
ありがたく使わせていただきます。
コメントありがとうございます。
作るとなるとちょっと難易度高いですからね・・・
できるだけ簡単に使えるように作ったつもりですが
わからないことがあればご連絡ください☆
FXDDの仕様変更(?)により使えなくなっているようです
これだ、と思うツールを見つけたのに、残念です
指標回避の方もアップデートしてくださったようなので、
そのうちにこれもよろしくお願いします
ただ、このツールを探したおかげで
この楽しくてためになるブログにめぐりあえたのは
ラッキーだと思っています
コメントありがとうございます。
使えなくなっていますか… 最近使っていなかったので気がつきませんでした。
今度、時間をみつけて調べてみます。
ご返答ありがとうございます。
ただ、このブログのツールは本当にご厚意で作っていただいているのは
重々承知していますので、気長に待っております
ブログの記事はためになるとこが多く、感謝しております!
当方も自動売買で専業を夢見てがんばっております故
ブログ主さんの存在は本当に勇気を与えてくれます!
確認しました。
DAILYFXのカレンダーデータの仕様が変わっていてデータが取れません・・・。
取得する方法は無いか?ほかのサイトから取れないか?と調べてみましたが、今のところ解決方法は見つからず…
解決方法が見つかるまで、当面保留とさせてください…
とりあえず、こちらで2015年3月に取得したデータがあるので、それをこの記事の頭の方においておきます。
2015年3月以前まではバックテストができるはずです…。
過去データありがたく利用させていただきます。
指標発表は運次第で大量の利益や損失が出る可能性があるので、
バックテストの精度上げるためにできればはずしたいんですよね。
発表の日時もあらかじめわかっていたことですし。
重ね重ね、ありがとうございました