Block EAでEAを作ろう:マルチタイムフレームEA
皆さん、こんにちは。
MT4やMT5のチャート画面では、タイムフレーム(時間足)をいろいろと変えることができます。
タイムフレームが変わると、各バーの4本値(始値、高値、安値、終値)が変わるので、テクニカル指標の値も変わります。
なので、MQLでバーの4本値やテクニカル指標を求める関数には、タイムフレームを指定するパラメータがあります。
Block EAでも同じです。以下に示すブロックには、タイムフレームを指定するパラメータがあります。「現在チャートの」の「現在」の部分です。
「現在」チャートの場合、EAを挿入したチャートのタイムフレームが設定されます。EAを実行する都度タイムフレームを変えたい場合は、このままでも結構です。
ただ、EAを開発する際に、タイムフレームを決めて開発することも多いです。その場合、挿入するチャートのタイムフレームに関係なく、決まったタイムフレームで動作することが好ましいでしょう。
今回は、各テクニカル指標のブロックで、タイムフレームを指定する方法を紹介します。これによりテクニカル指標ごとにタイムフレームを変える、いわゆる「マルチタイムフレームEA」を作ることができます。
例えば、移動平均のブロックでは、以下のようにタイムフレームを選ぶことができます。
これは、MT4、MT5共通に指定することができるタイムフレームのリストです。ここで、具体的なタイムフレームを指定しておけば、EAを挿入するチャートのタイムフレームに関係なく、指定されたタイムフレームでテクニカル指標が算出されます。
なお、MT5には、これ以外にも選択できるタイムフレームがあります。これについては後ほど説明します。
マルチタイムフレームEA
テクニカル指標にタイムフレームを指定する例として、複数のテクニカル指標でタイムフレームが異なるケースを考えてみます。
例えば、以下のような売買ルールです。
- 買いシグナル:1時間足のMACDがプラス、かつ15分足のRSIが30以下
- 売りシグナル:1時間足のMACDがマイナス、かつ15分足のRSIが70以以上
- 手仕舞いシグナル:売買シグナルのRSIの条件と同じ
これは基本的にRSIの逆張りシステムですが、RSIより少し長いタイムフレームのMACDでトレンドを確認します。そして、上昇トレンドであれば、買いシグナルのみを採用する、あるいは下落トレンドであれば、売りシグナルのみを採用するというものです。
このシステムをBlock EAを使って組んでいきましょう。
まずは、15分足のRSIを使って途転売買をさせるシステムを作ります。
15分足の期間10のRSIを「rsi1」という変数に求め、30以下で買いシグナル、70以上で売りシグナルという仕掛けシグナルを「sig_entry」という変数に代入します。
ここでは途転売買なので、成行注文のブロックの仕掛けシグナルと手仕舞いシグナルの両方に「sig_entry」を代入します。
このRSIだけのシグナルは、最終的には手仕舞いシグナルとなります。そこで、別の変数「sig_exit」にコピーしておき、「sig_exit」を手仕舞いシグナルのところに代入しておきます。
次に1時間足のMACDを値を「macd1」という変数に求めます。MACDのパラメータは、標準的な「12,26,9」としておきます。(今回、MACDのシグナルは使わないのでシグナル期間9は何でも構いません)
最後にsig_entryを再設定します。買いシグナルとなるのは、sig_entryが買いシグナル、かつMACDがプラスのとき、また売りシグナルになるのは、sig_entryが売りシグナル、かつMACDがマイナスのときです。
ここで、変数が買いシグナルか、売りシグナルかの判別には以下のブロックを利用すると便利です。
sig_entryを再設定するブロックを追加すると、このシステム全体のブロックは以下のようになります。
以上が各テクニカル指標でタイムフレームを具体的に指定してマルチタイムフレームEAを作る一例でした。
MT5独自のタイムフレームについて
MT5のチャート画面では、MT4では対応していない以下のタイムフレームが表示できます。
2分足、3分足、4分足、6分足、10分足、12分足、20分足
2時間足、3時間足、6時間足、8時間足、12時間足
Block EAのテクニカル指標ブロックは、そのままではこれらのタイムフレームを選択できませんが、以下のブロックを使うことで選択できるようになります。
このブロックをテクニカル指標ブロックのタイムフレームのところに挿入すると、以下のようにMT5独自のタイムフレームを選択することができます。
ただし、MT5独自のタイムフレームを使ったブロックをmq4/mq5へ変換したファイルは、MT5だとそのままコンパイルして動作させることができますが、MT4の場合、そのままではMT5独自のタイムフレームには対応していないので、正常に動作しません。
そのため、共通ライブラリでは、MT4でMT5独自のタイムフレームを利用できる機能がオプションとして用意されています。この機能は、セットアップブロックに以下のブロックを挿入することで実現できます。
以下のように「MT4でMT5独自のタイムフレームを使用する」というブロックをセットアップブロックに挿入します。
これで、MT4のEAでも、MT5独自のタイムフレームのテクニカル指標を利用することができるようになります。
ただし、MT4のチャート画面でMT5独自のタイムフレームを表示させることができるわけではなく、あくまでEAで利用できるだけです。またEAの実行に時間がかかり、バックテストが事実上できなくなるなど制限もあるのでご注意ください。
詳しくは、「メタトレーダー4&5共通ライブラリによるEA開発入門」をご覧ください。
ではまた。