ブログトップ 記事一覧 ログイン 無料ブログ開設

とあるMetaTraderの備忘秘録 RSSフィード Twitter

忙しいです。ネタもないし・・・

2012-10-29

EAで指標発表等を回避するには?

・・・と、どなたかに聞かれていたような気がするので方針だけ書いておきます。

1.ネット上で経済指標発表時刻一覧を公開しているサイトを探す。

2.定期的に自動取得して、EAに読み込む。

公開サイトとしては、

ForexFactoryhttp://www.forexfactory.com/ff_calendar_thisweek.xml や、

DailyFXhttp://www.dailyfx.com/files/Calendar-10-21-2012.csv (週単位でファイル名が変わります)

が知られています。

EAからデータ取得するとしたら、WinInet.mqh のようなライブラリを使うと

f:id:fai_fx:20121027235738j:image

↑こんな感じで、↓のCSVデータが取得できます。

f:id:fai_fx:20121027235737j:image

DailyFXのデータはCSVなので、MQL4では簡単に読めます。(ただし、文字コードがUnicodeなので一部文字化けします。)

DailyFXの指標を表示させるインジケータがここにあるので、そのあたりを参考にすればよいと思います。


一方、ForexFactory のデータは、FFCal.mq4 が対応していて、EA から直接 iCustom 経由で直前直後にどのインパクトの指標発表があるのかを1つだけ取得できます。

f:id:fai_fx:20121028004147j:image

↑EAでの書き方はこれだけです。一つのMT4内で、複数のEAで使う場合は、iCustom よりもグローバル環境変数を用いて情報共有させた方が良いかもしれません。



問題は、、、FFCal.mq4 自体があまり改良されていない点で、例えば、「SetIndexStyle(1, DRAW_NONE);//←本来は 2 」みたいなバグも相変わらず放置されています。

一定時間前に鳴るように Alert の設定をしても、希なタイミングで鳴らないこともあります。EAから呼ばれる際に、毎回、XMLファイルを読み取って、構文解析する処理も非効率です。(一度読んだ結果をメモリ上に保持しておけば良いはずなのに...)



指標インジケータ自体は、凝ったものがいくつかあるので作り込む気はないのですが、最低限のカスタマイズをしたものをこちらに用意しました。

・縦ライン表示機能の削除

・Alertは少し遅れても確実に鳴るように

・3個以上の指標時刻を表示可能に

・XMLのデータは解析結果を保持

・既知の指標名は日本語表示可能に

などの変更を行っています。指標ボットを作りたい人向けの下地になれば良いかなと思ってます。

f:id:fai_fx:20121028015623j:image

↑二段表示

f:id:fai_fx:20121029133436p:image

↑日本語表示(!)


日本語表示は、同梱のCSVファイルによる置換をしているだけなので、適宜、正しい訳語に修正してお使いください。

saru999saru999 2012/10/29 14:28 Codeの記事はいつも楽しみにしています ^^
おもしろそうな記事ですね。
ブログ更新ありがとうございます。

hotfieldshotfields 2012/10/31 22:44 はじめましてhotfieldsと申します
EA依頼の項目が見当たらないので、もう受け付けてないのかもしれませんが
一応お願いしたいものがあります
それは証拠金維持率(mt4のmargin level)が設定値を切ったらアラートメールを送る
というものです。出来ればガラケーが希望ですがPCメールでも結構です
結構国内外探したのですが、ヒントはあっても当方完全な文系ユーザーなので…
もし可能なら有償でも構いません(勿論個人使用のみです)
お返事お待ちしてます

平田平田 2012/11/20 10:38 はじめまして
貴ブログを発見し、数時間読ませていただきました。
数学的なことは理解できませんが、
なんとなく考え方(間違った理解かも知れませんが)を
理解したような気になっています。
新たな視点を発見したような感じです。
感謝致します。

投稿したコメントは管理者が承認するまで公開されません。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/fai_fx/20121029/1351485650