はじめに
FXで裁量トレードをしていると、トレードに熱くなりすぎてトレンドを見誤る事はありませんか?
そんな時、(客観的に)トレンドを可視化するインジケータがあれば便利ですよね!
今回は、簡易的なサポート機能としてMT4で使えるインジケータを作成しました。
※簡単に作ったものなのでもちろん無料ですが、自己責任でご使用下さい
トレンド判定は、MT4に標準搭載されているインジケータで『Alligator(アリゲーター)』を使っています。
インジケータの仕様
冒頭でも記載しましたが、今回のインジケータは『Alligator(アリゲーター)』を基準に判断しています。以降『アリゲーターサポート』と呼称します。
表示例
こんな感じで青矢印(ロングシグナル)と赤矢印(ショートシグナル)で表示時間足レベルでトレンドを視覚化しています。アリゲーター自体の線も同時に表示します。ですので、このインジケータ1つでアリゲーターの役割も果たします。
ロングシグナル
リップスラインのゴールデンクロス、以下の4条件が揃った場合にロングシグナル(青矢印)を表示します。
- ①リップスラインの値が、ティースラインより高くなっている
- ②リップスラインの値が、ジョーズラインより高くなっている
- ③ジョーズラインが、直近で上向きである
- ④ローソク足の終値が、リップスラインより高くなっている
ショートシグナル
リップスラインのデッドクロス、以下の4条件が揃った場合にショートシグナル(赤矢印)を表示します。
- ①リップスラインの値が、ティースラインより低くなっている
- ②リップスラインの値が、ジョーズラインより低くなっている
- ③ジョーズラインが、直近で下向きである
- ④ローソク足の終値が、リップスラインより低くなっている
パラメータ設定
パラメータは基本的にインジケータの『Alligator(アリゲーター)』と同じです。
- Jaws Period = 13 ⇒ ジョーズラインの期間です
- Jaws Shift = 8 ⇒ ジョーズラインの表示移動です
- Teeth Period = 8 ⇒ ティースラインの期間です
- Teeth Shift = 5 ⇒ ティースラインの表示移動です
- Lips Period = 5 ⇒ リップスラインの期間です
- Lips Shift = 3 ⇒ リップスラインの表示移動です
上記の値を変更すると、アリゲーターのラインは設定の通りに変更されます。
もちろんシグナルもラインの変更に沿って変更されます。
ファイル
『アリゲーターサポート』のソースコードを載せていますのでコンパイルして作成する事もできますが、一応コンパイル済のファイルもダウンロードできるようにしました。
“アリゲーターサポート(Alligator_support.ex4)” をダウンロード Alligator_support.ex4 – 3561 回のダウンロード – 12.28 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作成依頼はこちら
※オンラインレッスンやってます
コメント