MQL4でWebにアクセスする

MQL4から楽にWebアクセスするためのモジュールを作りました。
MQL4-Web

経緯

MQL4でWebにデータを送ったり、逆にWebからデータを受け取ったりするには、WebRequest関数を使えば実現できます。
しかしこの関数、引数が色々と多くて分かりにくいのと、受け取ったデータも加工してやらないと使えないなど、非常に面倒な処理が必要です。
そこでWebとのデータの受け渡し処理をモジュール化しようと思い、作成したのがこのモジュールです。

用途

Webとの連携を使った例を幾つかご紹介します。

  • 稼働状況をサーバーに送って、EAが正しく動作しているかを監視する
  • レートやスプレッドをサーバーに送って、解析に利用
  • 経済指標に関する情報をWebから取得して取引に活かす。
  • 取引シグナルはサーバー側でPythonなどを使って判定。MT4側は結果を受け取って取引。

特に一番下は最近話題のDeep Larningを使って取引する場合に必要になってきますね。

機能

このモジュールの主な機能は3つです。

post

Parameters

string url アクセス先のURL
string &response 結果を受け取る文字列型の変数

Returns value

ダウンロードに成功したらtrue, 失敗したらfalseを返します。

Note

WebRequest関数でアクセスするので、事前にMT4のオプション設定から、許可するURLを登録しておく必要があります。
許可するURLに登録されていないURLにはアクセスできません。 パラメータを付けてアクセスしたい場合は、postメソッドを実行する前にaddParameterでパラメータの登録付与を付与してください。

string response = "";
Web::addParameter("age", "20");
Web::addParameter("address", "Tokyo");
Web::post("http://sample.com", response);

get

Parameters

string url アクセス先のURL
string &response 結果を受け取る文字列型の変数

Returns value

ダウンロードに成功したらtrue, 失敗したらfalseを返します。

Note

アクセスする方式が違うだけで、使い方はpostメソッドと同じです。

string response = "";
Web::addParameter("age", "20");
Web::addParameter("address", "Tokyo");
// http://sample.com?age=20&address=Tokyoにアクセス
Web::get("http://sample.com", response);

download

Parameters

string url ダウンロードするURL
string path 保存するファイルの名前

Returns value

ダウンロードに成功したらtrue, 失敗したらfalseを返します。

Note

指定したURLからファイルをダウンロードしてきてFilesフォルダ内に保存します。
分析結果のcsvをダウンロードしたいときに使えるメソッドです。

// ダウンロードしたファイルをMQL4/Files/download.jpgに保存
Web::download("http://sample.com/test.jpg", "download.jpg");

その他

DLLを使用してWebRequest関数を使わずに同じ処理を作成することも可能なので、そこをちょっと悩んでます。
DLLを使うメリットとしては、MT4のオプション設定なしにどんなサイトにもアクセスできることです。
しかしユーザーの手間を省ける反面、悪意のあるプログラムも書きやすくなるので、そんな処理を公開すべきかどうかを悩んでます。

ご意見・ご要望、もしくは不具合がありましたら、Githubの方にIssueを投げてください。

arrow_upward