2021年06月11日
MQL5で正規表現を実装する方法を説明します。
必要なモジュールをダウンロードし、インクルードすることで正規表現を実装することができます。
まずはモジュールのインポートから確認しましょう。
モジュールは下記のリンクから取得できます。
MQL5での正規表現の動作の為のRegularExpressions – MetaTrader 5のためのライブラリ
『ZIPとしてダウンロード』を選択しましょう。
ダウンロードしたZIPファイルを解凍しましょう。
モジュールは下記のような構造となっています。
ExpertsにはEAを作成するプログラムが入っています。
ここでは正規表現モジュールのサンプルコードが入っており、『.mq5』が拡張子になっています。
一方Includeにはモジュールの本体が含まれています。
具体的には『.mqh』ファイルというものが複数含まれています。
『.mqh』ファイルはインクルードファイルと呼ばれ、これを呼び出すことで定義された変数や関数を使うことができます。
今回はこれから正規表現の関数が定義された『.mqh』ファイルをインクルードしていきます。
Include内にある2つのファイルはMQL5のIncludeフォルダの中へコピーしましょう。
もし用意されたサンプルを実行したい場合は
ExpertsにあるRegExpressions DemoフォルダをExpertsフォルダへコピーしておきましょう。
重要なのはIncludeにあるRegularExpressionsフォルダ内の『Regex.mqh』ファイルです。
これさえインクルードすれば正規表現モジュールを使うことができます。
(その他必要なファイルはRegex.mqh内でインクルードしているため)
こちらはサンプルコードになっています。
モジュールが正しくIncludeファイルに保存されているか確認するためにもこのコードをコンパイルしてみましょう。
コンパイルエラーが発生する場合は正しい場所に保存されていない可能性があります。
コンパイルされた『Tests.ex5』ファイルをMT5上で実行してみると、このようなポップアップがチャートに表示されます。
ただ、このサンプルは少しわかりにくいので下記にサンプルコードを添付します。
入力文字列(input_string) “X0,Y10,X20,Z30,X40,Z50″の中から、X0 Y10 X20 X40 を配列(result_array)で取り出すプログラムです。
そしてregular_expressionという名前で関数化しました。これにより入力文字列(input_string)、正規表現パターン(pattern)、結果の配列(result_array)を渡すことで正規表現を使いやすくなりました。
string&は参照渡しです。mql5の関数は配列を直接返せないため関数の前で配列を定義し、関数を実行するとその配列に値が入ります。関数の戻り値がないためvoidで定義しています。
#include <RegularExpressions\Regex.mqh>
void regular_expression(string input_string, string pattern, string& result_array[]){
CMatchCollection *matches=CRegex::Matches(input_string,pattern);
CMatchEnumerator *en=matches.GetEnumerator();
int i=0;
ArrayResize(result_array,matches.Count());
while(en.MoveNext())
{
CMatch *match=en.Current();
result_array[i] = match.Groups()[0].Value();
i++;
}
delete en;
delete matches;
}
int OnInit()
{
string result_array[];
string input_string="X0,Y10,X20,Z30,X40,Z50";
string pattern="[XY]\\d{1,}";
regular_expression(input_string, pattern, result_array);
int num = ArraySize(result_array);
for(int k=0;k<num;k++){
PrintFormat("result_array[%d]=> %s",k,result_array[k]);
}
return(INIT_SUCCEEDED);
}
初めにRegex.mqhをincludeすることを忘れないようにしましょう。そしてCMatchCollectionとCMatchEnumeratorから始まる2行で正規表現を実行し、マッチした個数に合わせてresult_arrayをリサイズしています。
while文ではマッチした結果をresult_arrayに格納しています。
実行するとコンソールにこのように表示されるはずです。
result_array[0]=> X0
result_array[1]=> Y10
result_array[2]=> X20
result_array[3]=> X40
正規表現のパターンの書き方は下記リンクが参考になります。
MQL5で正規表現を実装する方法をまとめました。
モジュールをダウンロードし、適切なフォルダに入れ、
コードで正しくインクルードすることで使用可能です。
MQL5の書き方はC++に似ていますが難しい部分も多いと思います。
ContraではEAをアプリ上で作成、変換するサービスを展開しています。
無料でアプリのダウンロードができます。ぜひご利用ください。
コントラは最高のFXアプリを
目指して誠意開発を続けております。
機能の要望や、不具合などありましたらご遠慮なくヘッダーの問い合わせ、フィードバックからご連絡ください。またツイッターからでも大丈夫です!
皆様のFXトレードのお力になるFXアプリを目指しますので、これからもよろしくお願いいたします。