トレンドを視覚化する便利インディケータ

MT4
スポンサーリンク

FXで裁量トレードをしていると、トレードに熱くなりすぎてトレンドを見誤る事はありませんか?
※私はよくあります

そんな時、(客観的に)トレンドを可視化するインディケータがあれば便利だなと思い、簡易的なサポート機能としてMT4で使えるインディケータを作成しました。
※簡単に作ったものなのでもちろん無料ですが、自己責任でご使用下さい

トレンド判定は、MT4に標準搭載されているインディケータで『Alligator(アリゲーター)』を使っています。

インディケータの概要

冒頭でも記載しましたが、今回のインディケータは『Alligator(アリゲーター)』を基準に判断しています。以降『アリゲーターサポート』と呼称します。

表示例

こんな感じで青矢印(ロングシグナル)と赤矢印(ショートシグナル)で表示時間足レベルでトレンドを視覚化しています。アリゲーター自体の線も同時に表示します。ですので、このインディケータ1つでアリゲーターの役割も果たします。

ロングシグナル

リップスラインのゴールデンクロス、以下の4条件が揃った場合にロングシグナル(青矢印)を表示します。

  • ①リップスラインの値が、ティースラインより高くなっている
  • ②リップスラインの値が、ジョーズラインより高くなっている
  • ③ジョーズラインが、直近で上向きである
  • ④ローソク足の終値が、リップスラインより高くなっている

ショートシグナル

リップスラインのデッドクロス、以下の4条件が揃った場合にショートシグナル(赤矢印)を表示します。

  • ①リップスラインの値が、ティースラインより低くなっている
  • ②リップスラインの値が、ジョーズラインより低くなっている
  • ③ジョーズラインが、直近で下向きである
  • ④ローソク足の終値が、リップスラインより低くなっている

パラメータ設定

パラメータは基本的にインディケータの『Alligator(アリゲーター)』と同じです。

  1. Jaws Period = 13 ⇒ ジョーズラインの期間です
  2. Jaws Shift = 8 ⇒ ジョーズラインの表示移動です
  3. Teeth Period = 8 ⇒ ティースラインの期間です
  4. Teeth Shift = 5 ⇒ ティースラインの表示移動です
  5. Lips Period = 5 ⇒ リップスラインの期間です
  6. Lips Shift = 3 ⇒ リップスラインの表示移動です

上記の値を変更すると、アリゲーターのラインは設定の通りに変更されます。

もちろんシグナルもラインの変更に沿って変更されます。

ファイル

『アリゲーターサポート』のソースコードを載せていますのでコンパイルして作成する事もできますが、一応コンパイル済のファイルもダウンロードできるようにしました。

“アリゲーターサポート(Alligator_support.ex4)” をダウンロード Alligator_support.ex4 – 95 回のダウンロード – 12 KB

ダウンロードした『アリゲーターサポート』を、MT4へ適用の仕方が分からない方はこちらの記事をご覧ください。

ソースコード

『アリゲーターサポート』のソースコードです。

//+------------------------------------------------------------------+
//|                                            Alligator_support.mq4 |
//|                                    Copyright 2020, mef Software. |
//|                                             https://fx-prog.com/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, mef Software."
#property link      "https://fx-prog.com/"
#property description "Bill Williams' Aligator"
#property strict

//---- indicator settings
#property indicator_chart_window
#property indicator_buffers 5
#property indicator_color1  Blue
#property indicator_color2  Red
#property indicator_color3  Lime
#property indicator_color4  Blue
#property indicator_color5  Red


//---- input parameters
input int InpJawsPeriod=13; // Jaws Period
input int InpJawsShift=8;   // Jaws Shift
input int InpTeethPeriod=8; // Teeth Period
input int InpTeethShift=5;  // Teeth Shift
input int InpLipsPeriod=5;  // Lips Period
input int InpLipsShift=3;   // Lips Shift
//---- indicator buffers
double ExtBlueBuffer[];
double ExtRedBuffer[];
double ExtLimeBuffer[];

double CrossUp[];
double CrossDown[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit(void)
  {
   IndicatorDigits(Digits);
//---- line shifts when drawing
   SetIndexShift(0,InpJawsShift);
   SetIndexShift(1,InpTeethShift);
   SetIndexShift(2,InpLipsShift);
//---- first positions skipped when drawing
   SetIndexDrawBegin(0,InpJawsShift+InpJawsPeriod);
   SetIndexDrawBegin(1,InpTeethShift+InpTeethPeriod);
   SetIndexDrawBegin(2,InpLipsShift+InpLipsPeriod);
//---- 3 indicator buffers mapping
   SetIndexBuffer(0,ExtBlueBuffer);
   SetIndexBuffer(1,ExtRedBuffer);
   SetIndexBuffer(2,ExtLimeBuffer);
//---- drawing settings
   SetIndexStyle(0,DRAW_LINE);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexStyle(2,DRAW_LINE);
//---- index labels
   SetIndexLabel(0,"Gator Jaws");
   SetIndexLabel(1,"Gator Teeth");
   SetIndexLabel(2,"Gator Lips");
   
   
   ArrayInitialize(CrossUp,EMPTY_VALUE);
   SetIndexBuffer(3,CrossUp);
   SetIndexStyle(3,DRAW_ARROW,EMPTY);
   SetIndexArrow(3,228);
      
   ArrayInitialize(CrossDown,EMPTY_VALUE);
   SetIndexBuffer(4,CrossDown);   
   SetIndexStyle(4,DRAW_ARROW,EMPTY);
   SetIndexArrow(4,230);
   
   
  }
//+------------------------------------------------------------------+
//| Bill Williams' Alligator                                         |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int limit=rates_total-prev_calculated;
   
//---- main loop
   for(int i=0; i<limit; i++)
     {
     
      double Range=0;
      double AvgRange=0;
      
      //----矢印位置調整用
      for(int counter=0;counter<=0+9;counter++){
         AvgRange= AvgRange+MathAbs(High[counter]-Low[counter]);
      }
      Range=AvgRange/10;
     
      //---- ma_shift set to 0 because SetIndexShift called abowe
      ExtBlueBuffer[i]=iMA(NULL,0,InpJawsPeriod,0,MODE_SMMA,PRICE_MEDIAN,i);
      ExtRedBuffer[i]=iMA(NULL,0,InpTeethPeriod,0,MODE_SMMA,PRICE_MEDIAN,i);
      ExtLimeBuffer[i]=iMA(NULL,0,InpLipsPeriod,0,MODE_SMMA,PRICE_MEDIAN,i);
      
      double rosokuValueCloseP = iClose(NULL, 0, i);
      
      //ジョーズライン
      double JAW_ATAI_1 = ExtBlueBuffer[i];
      double JAW_ATAI_2 = iMA(NULL,0,InpJawsPeriod,0,MODE_SMMA,PRICE_MEDIAN,i+1);
    
      //ティースライン
      double TEETH_ATAI_1 = ExtRedBuffer[i];
      double TEETH_ATAI_2 = iMA(NULL,0,InpTeethPeriod,0,MODE_SMMA,PRICE_MEDIAN,i+1);
      
      //リップスライン
      double LIPS_ATAI_1 = ExtLimeBuffer[i];
      double LIPS_ATAI_2 = iMA(NULL,0,InpLipsPeriod,0,MODE_SMMA,PRICE_MEDIAN,i+1);
    

      //リップスラインのゴールデンクロスでロング(ジョーズラインが上を向いている事)  
      if(LIPS_ATAI_1 > TEETH_ATAI_1 && LIPS_ATAI_1 > JAW_ATAI_1 && JAW_ATAI_2 < JAW_ATAI_1 && rosokuValueCloseP > LIPS_ATAI_1)
      {
            //ロングエントリー
            CrossUp[i]=Low[i]-Range*0.5;
      }
      //リップスラインのデッドクロスでショート(ジョーズラインが下を向いている事)     
      else if(LIPS_ATAI_1 < TEETH_ATAI_1 && LIPS_ATAI_1 < JAW_ATAI_1 && JAW_ATAI_2 > JAW_ATAI_1 && rosokuValueCloseP < LIPS_ATAI_1)
      {
            //ショートエントリー   
            CrossDown[i]=High[i]+Range*0.5;
      }
      else
      {
            //何もしない
      }
      
     }
//---- done
   return(rates_total);
  }
//+------------------------------------------------------------------+

『アリゲーターサポート』の使い方

『アリゲーターサポート』の使い方としての一例です。

基本的には、シグナルに逆らわずトレードしていく感じになります。

トレンドが発生している場合

大きなトレンドが発生すると、上記のようにショートシグナルが各所に出ます。アリゲーターの線が交錯するぐらいまで停滞してくると、ロングシグナルが発生し下げトレンド継続ならダマシの形となります。

この場合は、

  • ロングエントリーしない
  • ロングエントリーするけどロングシグナルが消えたら即撤

等の措置が必要になってきます。

レンジ相場の場合

見ての通り、レンジ相場は結構厳しい戦いになります。基本的にはシグナル通りに仕掛けてシグナルが消える又は逆のシグナルになったら撤退という感じです。

最後に

以上が、トレンドを視覚化する便利インディケータになります。

このインディケータを作ったきっかけは、アリゲーターのEAを作成してみて結構機能していたので、裁量でも客観的にトレンドを確認したい場合は使えるかもしれないと思い、今回このようにインジケータとして作成してみました。


※ 上記のシグナルをEA(自動売買)化したものがこちら

 

※ EAのサンプルソースを一覧表にまとめました


※ オススメ記事(EAが使える国内FX業者の一覧)


※ 1からEAの作り方を学びたい人はこちら

コメント

タイトルとURLをコピーしました