もともとMQL4/MQL5共通ライブラリは、初心者向けに作ってあり、売買シグナルをパラメータとして成行注文や待機注文を送信する関数が用意されています。
なので、Block EAでもその関数に対応したブロックを用意しています。例えば、売買シグナルとしてsigという変数を宣言して、その売買シグナルを仕掛けと手仕舞いに使う途転売買のシステムは、以下のようなブロックで作れます。
成行注文のブロックは「トレード」のツールボックスにあります。コードはこんな感じです。
void Tick()
{
int sig;
MyOrderSendMarket(sig, sig, 0.1, 0);
}
もちろんこのままではシグナルがないのでトレードできません。
売買シグナルは、プラスの値が買いシグナル、マイナスの値が売りシグナルとなっているので、適当なテクニカル指標を使ってsigに具体的なシグナルを生成してみます。
これは、Mom1という変数に1本前のバーにおける期間14のモメンタムの値を求め、それが100を上回っていれば買いシグナル(+1)、100を下回っていれば売りシグナル(-1)をsigに代入するものです。
if文に相当するブロックや条件式に相当するブロックは「条件分岐」のツールボックスに、変数に数値を代入するブロックは「変数の作成」のツールボックスにあります。
これらを組み合わせてシグナルを生成すると、実際にトレードできるEAとなります。コードはこのようになります。
void Tick()
{
double Mom1 = (iMomentum(_Symbol, (0), 14, PRICE_CLOSE, 1));
int sig = 0;
if (Mom1 > 100) {
sig = 1;
}
if (Mom1 < 100) {
sig = -1;
}
MyOrderSendMarket(sig, sig, 0.1, 0);
}
ブロックがそのままコードになっていることがわかります。ただ、これはどちらかというと、書きやすいコードが先にあって、それをブロックに対応させた形になっています。
これでも問題はないのですが、プログラミングはシンプルな方がいいです。コードでプログラミングするのならコードがシンプルな方がいいように、ブロックでプログラミングするならブロックがシンプルな方がいいでしょう。
そこで、「トレード」ツールボックスの「売買シグナル」のところに売買シグナルを生成するブロックを用意しました。
このブロックでは、上の「もし」のところに買いシグナルの条件を入れ、下の「もし」のところに売りシグナルの条件を入れるだけです。すると、0、1、-1のいずれかの売買シグナルを返すので、それをそのままsigの初期値に代入します。
このブロックを使って上のシステムを書き換えると以下になります。
全体のブロックの数が減って見やすくなったのではないでしょうか。ただ、コードはちょっと変わります。