MTFインジEA化01

今回は、BBands_Stops_mtfというインジケーターを使って、下記の機能がついたEAの作り方を知りたいといったお便りを頂きましたので、記事にしていこうと思います!

・シグナルが出た瞬間か次の始値かの取引タイミング選択
・インジケーターのシグナルによる決済のON/OFF

インジケーター【BBands_Stops_mtf.mq4】をダウンロード

今回のように、インディケータにマルチタイムフレーム機能(違う時間足のものを表示させる機能)が付いたものは、バックテストのビジュアルモードで表示できなかったり、バックテストできなかったりしますので、注意が必要です。

MTF機能付きのカスタムインジケーターをEAにするには

MTF機能付きのカスタムインジケーターをEAにするには、次の手順で進めます。

  1. インジケーター用配列のインデックスを把握する
  2. iCustom()関数で売買シグナルの値を取得する

インジケーター用配列のインデックスを把握する

通常のインジケーターでは、インジケーター用配列に値を格納してラインや矢印などを描画します。

BBand_Stops_mtfの場合も、インジケーター設定ダイアログの色の設定タブを見ると#の0~5の6つのインジケーター配列が使用されていることがわかります。

今回、シグナルとして使用できそうな一際大きな★マークは#の何番かを確認するために(微妙な色の違い等で分かる人もいますが)、#2のYellowと#3のMagentaの幅を1に変更して再表示させてみると、★マークがグンと小さくなることがわかるかと思います。

iCustom()関数で売買シグナルの値を取得する

iCustom()関数の()括弧内の書き方は、次の通りです。

iCustom(通貨ペア, 時間足, インジケーター名, ..., インデックス, シフト数);

インジケーター名は、文字列で入力します。
その後ろの【, …,】にはインジケーターのパラメーターが入ります。
インデックスはインジケーター用配列のインデックス(#番号)です。
シフト数は、何本前のローソク足の値かを指定します。現在変動中のローソク足の値を取得する場合は、0を入力します。

新規EA作成で【BBands_Stop_checkEA】などの名前にして、BBands_Stops_mtfを利用する練習用のEAを作成します。
インジケーターのパラメーターをEAでも指定できるように、次のようにインジケーターのパラメーター(今回は上から3つ)を設置します。場所は、#property … の下あたりにしましょう。

extern int    TimeFrame = 0;
extern int    Length    = 13;
extern double Deviation = 1.62;

そして、OnTick()関数内でiCustom関数()を使って、買いシグナルの値を取得してComment()関数で値を確認してみます。

   double up_sign = iCustom(NULL, 0, "BBands_Stops_mtf", TimeFrame, Length, Deviation, 2, 0);
   Comment(up_sign);

バックテストのビジュアルモードで確認してると、TimeFrameを変えるとうまく値が取得できないようです。
そんなときは、iCustom()関数の時間足指定部分にTimeFrameを指定して、インジケーターのパラメーターTimeFrameは0固定で値を取得するようにします。

   double up_sign = iCustom(NULL, TimeFrame, "BBands_Stops_mtf", 0, Length, Deviation, 2, 0);
   Comment(up_sign);

Comment()関数による表示から、★マークが出ているときはその価格(レート)の値になり、そうでないときは、
-1という値になることがわかります。

このComment()関数を使った確認方法はいろんなケースで使えますのでぜひ覚えておいてくださいね!

にゃんたにゃんた

売りシグナルも取得した全体のコードにゃ

extern int    TimeFrame = 0;
extern int    Length    = 13;
extern double Deviation = 1.62;

void OnTick()
{
   double up_sign = iCustom(NULL, TimeFrame, "BBands_Stops_mtf", 0, Length, Deviation, 2, 0);
   double dn_sign = iCustom(NULL, TimeFrame, "BBands_Stops_mtf", 0, Length, Deviation, 3, 0);
   Comment(up_sign, "\n", dn_sign);
}

次回(後編)は、今回取得した売買シグナルの値を使って、EAを組み立てていきます。