Block EAで作る2本の移動平均線の交差システム
皆さん、こんにちは。
今回は、定番の売買システムの一つである「2本の移動平均線の交差システム」を取り上げて、Block EAの使い方を紹介していきます。
具体的な売買ロジックの説明は、以下のサイトをご覧ください。
このシステムをBlock EAを使って組んでいきます。
今回のシステムも、前回同様、途転売買のシステムです。まずは、以下のブロックまで組んだところから始めていきます。
これは、「sig_entry」というシグナル変数が「1」なら買い注文、「-1」なら売り注文を繰り返すブロックです。
今回の売買シグナルは、2本の移動平均線が交差する条件なので、期間の異なる2本の移動平均線で、交差前のデータと交差後のデータの計4点の値が必要となります。
通常、交差を判別するのは、バーが確定した直後なので、2本前と1本前のバーにおける移動平均線の値を利用します。
移動平均を求めるためのテクニカル指標は、以下のように「テクニカル指標」ー「トレンド系」のツールボックスにあります。
このブロックを変数の宣言ブロックと合わせて4つほど作っておきます。
変数の型はテクニカル指標なので、「double」型とします。
短期移動平均の期間は「20」とし、1本前の値を「FastMA1」、2本前の値を「FastMA2」という変数に求めます。
また長期移動平均の期間は「50」とし、1本前の値を「SlowMA1」、2本前の値を「SLowMA2」という変数に求めます。
移動平均の種類も選べますが、ここでは、単純移動平均を意味する「SMA」のままにしておきます。
ここで、同じようなブロックを4つ作る場合、いちいちツールボックスから引っ張ってくる以外に、今あるブロックを複製するという方法もあります。
例えば、「FastMA1」を宣言したブロックを右クリックすると、メニューがでるので、ここで、「複製」を選択します。
すると、同じブロックができます。
ここで変数名を「FastMA2」に変える必要があるのですが、「FastMA1」をクリックして「変数名を変える」を選ばないようにしてください。
「FastMA1」から「FastMA2」に変数名を変えると、該当するブロックだけでなく、すべてのブロックの変数名が変わってしまいます。
なので、ブロックをコピーして変数名を変えたい場合は、「変数の作成」のツールボックスで「変数の作成」を選んで、あらかじめ変数を作成しておいてください。
例えば、ここで「FastMA2」という変数を作っておくと、以下のように変数の宣言ブロックの変数名のところに「FastMA2」という選択肢ができるので、それを選択して設定してください。
さて、移動平均の各値が取得できたら、それを使って交差の条件を作るわけですが、交差の条件はコードで書くとちょっと面倒です。
そこで、Block EAでは、交差の条件を簡単に作るためのブロックが用意してあります。
ツールボックスでの場所がわかりにくいのですが、「テクニカル指標」のところにあります。
このブロックでは、2つのポイントを使って1本のラインを表します。ライン「」→「」となっているところに、「古い値」→「新しい値」と入力します。
例えば、短期移動平均は、ライン「FastMA2」→「FastMA1」、長期移動平均は、ライン「SlowMA2」→「SLowMA1」と表します。
このシステムでの買いシグナルは、短期移動平均線が長期移動平均線を上抜けたときなので、ブロックの入力は、「FastMA2」「FastMA1」「SlowMA2」「SlowMA1」「上抜けた」の順に設定します。
逆に売りシグナルの場合は、短期移動平均線が長期移動平均線を下抜けたときなので、最後の選択肢を「下抜けた」に変えるだけです。
これで2本の移動平均線の交差システムは完成です。
このままMQL4やMQL5ファイルに変換してMT4やMT5で使ってもいいのですが、売買システムでは、実行時に変更したいパラメータがいくつかあります。
例えば、移動平均を計算する期間や、売買ロット数です。
このようなEA実行時に変更可能なパラメータは、MQL4やMQL5のコードでは、inputキーワードをつけて宣言します。それに対応するブロックは、「MQL変数」のツールボックスに用意されています。
変数を宣言するブロックと使い方は同じなのですが、外部パラメータの場合、必ず初期値を定数として設定しないといけないので、ブロックが1行になっています。
あと、このブロックは関数の外部に配置しないといけないので、ティック時実行関数の中ではなく、「セットアップ」ブロックの下に配置します。
短期移動平均の期間を「FastMAPeriod」、長期移動平均の期間を「SlowMAPeriod」、さらに売買ロット数を「Lots」という外部パラメータにしたものが以下のブロックになります。
外部パラメータも変数の一種なのでデータ型を正しく指定する必要があります。移動平均の期間は整数なのでint型、売買ロット数は小数を含むのでdouble型を選択してください。
あとは、「変数の作成」のところに各変数名ができていると思うので、それぞれの変数を対応するブロックのパラメータのところに挿入してください。
これで外部パラメータ入力付きのEAとなりました。
コードはこんな感じです。
コメントなどが記入されていないのでわかりにくいかもしれません。
もし、コードにコメントを追加したい場合は、各ブロックにコメントを書くことができます。右クリックのメニューで「コメントを追加」を選んでください。
すると、ブロックの左側に「?」のアイコンが付くので、それをクリックして出た吹き出しにコメントを書くことができます。
このコメントは、「?」のアイコンをクリックすると隠れます。
各ブロックに適当なコメントをつけてコードに変換した例です。
コメントは基本的にコードの上の行につきますが、input付きの変数の宣言だけ、同じ行につきます。
MT4、MT5では、外部パラメータの入力画面で、変数名と同じ行に書かれているコメントが表示される独自仕様があるので、それに合わせた形です。
バックテストの画面でどのように表示されるか確認してみてください。
今回の記事は以上です。ではまた。