経済指標を取得する方法【mql4/mql5】

経済指標を取得するソースコード

web上の経済指標を取得するソースコードを無料で公開しています。

取得できるwebサイトは以下の4つです。

外貨ex
マネーパートナーズ
みんかぶ
マネックス

ソースコードをカスタマイズすることで「経済指標発表時にEAの動作を停止させるツール」などを開発することができます。

無料ですので是非ご利用ください!

経済指標を取得する方法

MT4やMT5で経済指標を取得する最もスタンダードな方法は、プラグラムから経済指標を公開しているサイトにアクセスして情報を取得することです。

実はMT5ではツールボックスの「指標カレンダー」から経済指標にアクセスすることができます。

しかし使い勝手が悪く、やはり各証券会社や企業が掲載している経済指標に比べると情報の質も良くないのが現状です。

ではプログラム上からwebサイトにアクセスするにはどうすればいいでしょうか?

web通信(リクエスト送信)を行う

mql4にはWebRequest関数という、指定したサーバーにHTTPリクエストを送信するための標準関数が用意されています。

int  WebRequest(
   const string      method,            // HTTPメソッド
   const string      url,               // URL
   const string      headers,           // ヘッダー 
   int               timeout,           // タイムアウト
   const char        &data[],           // HTTPメッセージ
   char              &result[],         // 応答データを含む配列
   string            &result_headers    // 応答のヘッダ
);

しかし、このWebRequest関数にはいくつかデメリットが存在しています。

WebRequest関数を推奨しない理由

WebRequest関数はそもそもEAかスクリプトでしか使用することが許可されておらず、インジケーターで使用するとエラーが発生します。

つまりインジケーターではWebRequest関数を使って経済指標を取得することができません。

さらにWebRequest関数を使用する際はMT4/MT5上部タブの「ツール」→「オプション」→「エキスパートアドバイザ」の中にある「WebRequestを許可するURLリスト」にチェックを入れて、さらに通信先のサーバーを指定する必要があります。

自分で使う分にはいいですが、第三者に配布する場合ユーザーの負担が増えてしまうので推奨しません。

wininet.dllを使う

WebRequest関数のデメリットはwininet.dllを使うことで解決できます。

wininet.dllとは主に通信のためのWindows標準のライブラリです。

mql4やmql5でwininet.dllを使用する際はインポートする必要があったり関数の扱いが難しい面がありますが、一度慣れてしまえば簡単に利用することができます。

まずはインポートしてみましょう。

#property version   "1.00"
#property strict

#import "Wininet.dll"
int InternetOpenW(string, int, string, string, int);
int InternetConnectW(int, string, int, string, string, int, int, int);
int HttpOpenRequestW(int, string, string, int, string, int, string, int);
int InternetOpenUrlW(int, string, string, int, int, int);
int InternetReadFile(int, uchar &sBuffer[], int, int &OneInt);
int InternetCloseHandle(int);
bool HttpSendRequestW(int, string, int, string, int);
#import

このようにフィールド部分に記載することでwininet.dllをインポートして、プログラム中で使用することができるようになります。

あとは経済指標を読込みたいタイミングで以下のようにプログラムを書くことでwebページのHTMLを取得することができます。

以下の例ではみんかぶの経済指標ページのURLを指定しています。

string url = "https://fx.minkabu.jp/indicators";
int HttpOpen = InternetOpenW("MetaTrader 4 Terminal", 0, " ", " ", 0);
int HttpRequest = InternetOpenUrlW(HttpOpen, url, NULL, 0, 0, 0);
uchar ch[5000];
string response = "";
int dwBytes;
 
while (InternetReadFile(HttpRequest, ch, 5000, dwBytes))
{
   if (dwBytes <= 0)break;
   response += CharArrayToString(ch, 0, dwBytes, CP_UTF8);
}
if (HttpRequest > 0)InternetCloseHandle(HttpRequest);
if (HttpOpen > 0)InternetCloseHandle(HttpOpen);

string型の変数「url」の値を任意のURLの文字列を指定することで、そのURLのHTMLを取得することができます。

取得したHTMLはstring型の変数「response」に格納しています。responseの中身をPrint関数で表示したいのですが、Print関数は文字数に制限があるため、テキストファイルとして出力してあげます。

string url = "https://fx.minkabu.jp/indicators";
int HttpOpen = InternetOpenW("MetaTrader 4 Terminal", 0, " ", " ", 0);
int HttpRequest = InternetOpenUrlW(HttpOpen, url, NULL, 0, 0, 0);
uchar ch[5000];
string response = "";
int dwBytes;
 
while (InternetReadFile(HttpRequest, ch, 5000, dwBytes))
{
   if (dwBytes <= 0)break;
   response += CharArrayToString(ch, 0, dwBytes, CP_UTF8);
}
if (HttpRequest > 0)InternetCloseHandle(HttpRequest);
if (HttpOpen > 0)InternetCloseHandle(HttpOpen);

//news.txtというファイルを作成してテキストを保存する
int filehandle;
filehandle = FileOpen("news.txt",FILE_WRITE | FILE_TXT);
FileWrite(filehandle, response);
FileClose(filehandle);

HTMLを確認する

保存したテキストファイルはMQL4→Filesに保存されます。

MT4の上部タブの「ファイル」→「データフォルダをクリック」しましょう。

すると以下のようなウィンドウが開くので、MQL4→Filesを開きます。すると、news.txtというファイルが作成されています。

テキストファイルを開くと、確かにみんかぶの経済指標ページのHTMLを取得することができています。

あとはこのHTMLの中から自分が利用したい情報を抜き出しましょう。

pythonはHTMLのパース(解析)専用のライブラリが多くあるため、簡単にHTMLの解析を行うことができますが、残念ながらmql4にはそのようなライブラリは存在しないため、StringSubStr関数などでこつこつ文字列を解析する必要があります。

経済指標を取得するソースコード

web上の経済指標を取得するソースコードを無料で公開しています。

取得できるwebサイトは以下の4つです。

外貨ex
マネーパートナーズ
みんかぶ
マネックス

ソースコードをカスタマイズすることで「経済指標発表時にEAの動作を停止させるツール」などを開発することができます。

無料ですので是非ご利用ください!