通貨ペアパターンのテスト: 実用的なアプリケーションと実際のトレードの視点 第4部

24 9月 2018, 11:22
Andrei Novichkov
0
310

イントロダクション

この記事では、ここから始まった通貨ペアバスケットのトレード時に発生するテストパターンの学習を終了します。 今しなければならないのは、残りのパターン、つまり移動平均をクロスするチャートを考えることです。

以前、このパターンを既に分析していますが、特定の条件を参照しています。

  • 通貨ペアバスケットの統一されたインジケータチャートが独自の移動平均でクロスしているときに、トレーダーはロウソク足の終値でエントリシグナルを受信します。 2つのシグナルがあります-移動平均がチャートを下方にクロス (売り) および上向きにクロス (買い)。

このパターンのポジティブな側面は、シグナルの数が多いことがわかっています。 欠点は、追加のフィルターの必要性です。

2つのバスケットの統一インジケータの値の間の差のチャートでこのパターンをテストすることを提案します。基本通貨と引用通貨 (詳細はこちら) を参照してください。 単一ではなく2つの通貨ペアのバスケットを使用すると、追加のフィルター処理の要因として機能します。

また、記事の後半では、実際のトレードで取得したすべての知識を適用しましょう。

リサーチパターン

パターンの基本的な要件を繰り返してみましょう。移動平均による統一されたインジケータのブレイクスルーは、明確かつ顕著である必要があります。

"良い " パターン (シグナル) 探している
パターンなし、 "悪い" シグナル




グリーンラインは統一されたインジケータチャートで、ピンクの線は移動平均です。

パターンを正確に識別するためには、統合インジケータチャートと、その前後の移動平均との距離が、左の画像で指定したもの (Delta1 と Delta2) よりも少なくないことが必要です。 この条件は、青色の縦線で囲まれた間隔で、右の画像で満たされていないことは明らかです。 したがって、そこにパターンはありません。

さらなる勉強のため、エントリのシグナルとして、左の画像のものと同様のパターンを使用する方法を確認します。 逆に指示された同じパターンは相場決済シグナルとして役立つかもしれません。 しかし、このような戦術は、相場で永続的な存在感を意味し、ポジティブな結果をもたらす可能性は低いでしょう。 そのため、決済シグナルとして "bad " パターンの検出を提案します。 これは、オーダーが新しく開かれることなく閉じるであろうことを意味します。

リサーチツール

すでにすべてのツールを持っています。 これらは以前、過去の記事で開発しました。 コードはあまり変わっていませんが、ここで説明しましょう。 testEAbasket3.mq5 EA はメインとして使用します。

//+------------------------------------------------------------------+
//|                                                 testEAbasket.mq5 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

#include <Trade\\Trade.mqh>


//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
enum BSTATE
  {
   BCLOSE = 0,
   BBUY   = 1,
   BSELL  = 2
  };
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
input int wpr = 20;
input int ma  = 10;
input double lt=0.01; 

int h;
ulong  Ticket;

double m[1],ml;
double w[1],wl;

BSTATE g_state;

double g_dMinSize = 2.0;
double g_dMaxSize = 50.0;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   h=iCustom(NULL,0,"testWPR&MA3",wpr,ma);
   if(h==INVALID_HANDLE) 
     {
      Print("Error while creating testWPR&MA3");
      return (INIT_FAILED);
     }

   g_state=BCLOSE;
   EventSetTimer(1);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   IndicatorRelease(h);
   EventKillTimer();

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {

  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
   if(IsNewCandle())
     {
      wl=w[0];
      CopyBuffer(h,0,1,1,w);
      ml=m[0];
      CopyBuffer(h,1,1,1,m);
      double d1 = MathAbs(w[0] - m[0]);
      double d2 = MathAbs(ml - wl);
      if(w[0]>m[0] && wl<ml) 
        {
         if(g_state!=BCLOSE) CloseAllPos();
         if(d1 >= g_dMinSize && d2 >= g_dMinSize &&
            d1 <= g_dMaxSize && d2 <= g_dMaxSize) 
           {
            EnterBuy(lt);
            g_state=BBUY;
           }
        }
      if(w[0]<m[0] && wl>ml) 
        {
         if(g_state!=BCLOSE) CloseAllPos();
         if(d1 >= g_dMinSize && d2 >= g_dMinSize &&
            d1 <= g_dMaxSize && d2 <= g_dMaxSize) 
           {
            EnterSell(lt);
            g_state=BSELL;
           }
        }
     }
  }
//+------------------------------------------------------------------+

void CloseAllPos()
  {

   CTrade Trade;
   Trade.LogLevel(LOG_LEVEL_NO);
   Trade.PositionClose(Ticket);
   g_state=BCLOSE;

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void EnterBuy(double lot)
  {

   CTrade Trade;
   Trade.LogLevel(LOG_LEVEL_NO);
   Trade.Buy(lot,_Symbol);
   Ticket=Trade.ResultDeal();
   g_state=BBUY;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void EnterSell(double lot)
  {

   CTrade Trade;
   Trade.LogLevel(LOG_LEVEL_NO);
   Trade.Sell(lot,_Symbol);
   Ticket=Trade.ResultDeal();
   g_state=BSELL;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool IsNewCandle()
  {
   static int candle=-1;
          int t1=0;
   switch(_Period)
     {
      case PERIOD_H1:  t1 = Hour();   break;
      case PERIOD_H4:  t1 = Hour4();  break;
      case PERIOD_D1:  t1 = Day();    break;
     }
     
   if(t1!=candle) {candle=t1; return(true);}
   return (false);
  }
            
  int Hour4(){return((int)Hour()/4);}

int Day()
  {
   MqlDateTime tm;
   TimeCurrent(tm);
   return(tm.day);
  }

int Hour()
  {
   MqlDateTime tm;
   TimeCurrent(tm);
   return(tm.hour);
  }

これは、バスケット全体ではなく、1つの通貨ペアのエントリに対して改訂された、この記事の testEAbasket.mq5のバージョンです。 このEA は、同記事の testWPR&MA.mq5 インジケータのバージョンである testWPR.&MA3.mq5 カスタムインジケータのデータを適用します。

//+------------------------------------------------------------------+
//|                                                      testWPR.mq5 |
//|                                        MetaQuotes Software Corp. |
//|                                               http://fxstill.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_minimum -100
#property indicator_maximum 100


#property indicator_buffers 2
#property indicator_plots   2

input int WPR       = 20; //期間 WPR
input int maperiod  = 10; //期間 MA
input color   clr   = clrGreen;
input color   clrMA = clrMagenta;


int h,h1;
double ind[],ma[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//---インジケータバッファのマッピング
      h = iCustom(NULL,0,"testWPReur",WPR);
      if (h == INVALID_HANDLE) {
         Print("Error while creating testWPR");
         return (INIT_FAILED);
      }
      h1 = iCustom(NULL,0,"testWPRusd",WPR);
      if (h1 == INVALID_HANDLE) {
         Print("Error while creating testWPR");
         return (INIT_FAILED);
      }  
 

   IndicatorSetString(INDICATOR_SHORTNAME,"testWPRusd");
   IndicatorSetInteger(INDICATOR_DIGITS,2);
   IndicatorSetInteger(INDICATOR_LEVELS,2);
   IndicatorSetInteger(INDICATOR_LEVELSTYLE,0,STYLE_SOLID);
   IndicatorSetInteger(INDICATOR_LEVELSTYLE,1,STYLE_SOLID);
   IndicatorSetInteger(INDICATOR_LEVELCOLOR,0,clrRed);
   IndicatorSetInteger(INDICATOR_LEVELCOLOR,1,clrRed);
   IndicatorSetInteger(INDICATOR_LEVELWIDTH,0,1);
   IndicatorSetInteger(INDICATOR_LEVELWIDTH,1,1);
   IndicatorSetDouble(INDICATOR_LEVELVALUE,0,-60);
   IndicatorSetDouble(INDICATOR_LEVELVALUE,1,60);

   ArraySetAsSeries(ind,true);
   SetIndexBuffer(0,ind);
   PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_LINE);
   PlotIndexSetInteger(0,PLOT_LINE_STYLE,STYLE_SOLID);
   PlotIndexSetInteger(0,PLOT_LINE_WIDTH,2);
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,clr);
   PlotIndexSetString(0,PLOT_LABEL,"_tstWPRusd_");

   ArraySetAsSeries(ma,true);
   SetIndexBuffer(1,ma);
   PlotIndexSetInteger(1,PLOT_DRAW_TYPE,DRAW_LINE);
   PlotIndexSetInteger(1,PLOT_LINE_STYLE,STYLE_SOLID);
   PlotIndexSetInteger(1,PLOT_LINE_WIDTH,1);
   PlotIndexSetInteger(1,PLOT_LINE_COLOR,clrMA);
   PlotIndexSetString(1,PLOT_LABEL,"Middle_Basket_line_MA");


//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double GetValue(int shift)
  {
   double dBuf[1], dBuf1[1];
   double res=0.0;
   CopyBuffer(h,0,shift,1,dBuf);
   CopyBuffer(h1,0,shift,1,dBuf1);
   return (NormalizeDouble((dBuf[0] - dBuf1[0])/2, _Digits) );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {
//---
   if(prev_calculated==0 || rates_total>prev_calculated+1)
     {
      int rt=rates_total-WPR;
      for(int i=1; i<rt; i++)
        {
         ind[i]=GetValue(i);
        }
      rt-=maperiod;
      for(int i=1; i<rt; i++)
        {
         ma[i]=GetMA(ind,i,maperiod,_Digits);
        }
     }
   else
     {
         ind[0] = GetValue(0);
         ma[0]  = GetMA(ind, 0, maperiod, _Digits);        
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

void OnDeinit(const int reason)
  {
      if(h!=INVALID_HANDLE) IndicatorRelease(h);
      if(h1!=INVALID_HANDLE) IndicatorRelease(h1);
  }
//+------------------------------------------------------------------+

double GetMA(const double &arr[],int index,int period,int digit) 
  {
   double m=0;
   for(int j=0; j<period; j++) m+=arr[index+j];
   m/=period;
   return (NormalizeDouble(m,digit));
  }
//+------------------------------------------------------------------+

このインジケータは、上記のパターン識別条件に一致するようにわずかな変更を受けています。 使用されているすべてのツールは、添付のtest.zipアーカイブにあります。

以前は、同じような導入として、相場のエントリー項目の潜在的な数の定義から始まりました。 このようなパターンをテストした経験から、トランザクションの数が非常に十分であることを示唆しているので、今回は避けます。

テストの前に、パターンフォームを指定してみましょう。 すでに Delta1 と Delta2 パラメータの特定の値に十分な時間を設けています。 それらの値が発見され、相場参入シグナルの厳格なフィルターが実施されます。 ここでは、多少の制限を緩和しましょう。 パターンの根底にある原理を損なうことなくエントリの数が増加します。つまり、Delta1 と Delta2 は、少なくとも 2% 以上 50% である必要があります。

2つのテスト戦略のいずれかを選択してみましょう。

  • 相場での一定のプレゼンス。 トレーダーは、シグナルによって相場をエントリーし、反対方向のシグナルを待ちます。 その後、オーダーを閉じ、反対のエントリーを行います。 その非効率性はありますが、ここではその戦略に固執しません。
  • 新しいオーダーを開くことなく、決済します。 トレーダーは、シグナルによって相場にエントリーし、 "bad " パターンの決済シグナルを待ちます。 これはエントリーシグナルを提供しませんが、トレンドの速度低下や反転の警告をしてくれます。 この戦略をテストに使用します。

さて、時間枠を定義してみましょう。 前回の記事では、H1、H4、D1 のパターンをテストしました。 D1 はごく少数の取引を示したので、今回は省略します。 H1 と H4 が残っているので、EURUSDでテストを開始します。

パターンのテスト

過去1年、H1でテストした後、次の 結果を得ました:

H4 の期間:

前のテストのように、H1 の損失と H4 の利益を参照します。

EURUSD、GBPUSD、AUDUSD、NZDUSD、USDCAD、USDCHF、USDJPY という主要通貨ペアのパターンをテストしてみましょう。

テストは驚きの結果にはなりませんでした。 この結果は、すでにあるデータに似ています: H4 の利益と H1 の損失。 テストレポートは、添付のtesthtml.zipアーカイブに記載されています。

我々は、すでにエントリーシグナルの追加選別を導入して収益性を高めた経験があります。 この記事で適用された2番目のフィルタを使用します。

  • トレーダーは、結合 WPR チャートが買われ過ぎの境界線を上向きにタッチまたはブレイクする場合は買わないでください。
  • トレーダーは、結合 WPR チャートが売られ過ぎのボーダーを触れたり、下方にブレイクする場合は売りしません。

修正された EAのコードは、付属のプログラムのzipアーカイブにあります。 ここでは、以前に表示されたものとほぼ同じなので、コード全体を表示しません。 直接パターンを識別する関数のみ表示します:

//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
   if(IsNewCandle())
     {
      wl=w[0];
      CopyBuffer(h,0,1,1,w);
      ml=m[0];
      CopyBuffer(h,1,1,1,m);
      double d1 = MathAbs(w[0] - m[0]);
      double d2 = MathAbs(ml - wl);
      if(w[0]>m[0] && wl<ml) 
        {
         if(g_state!=BCLOSE) CloseAllPos();
         if(d1 >= g_dMinSize && d2 >= g_dMinSize &&
            d1 <= g_dMaxSize && d2 <= g_dMaxSize && w[0] < 60) 
           {
            EnterBuy(lt);
            g_state=BBUY;
           }
        }
      if(w[0]<m[0] && wl>ml) 
        {
         if(g_state!=BCLOSE) CloseAllPos();
         if(d1 >= g_dMinSize && d2 >= g_dMinSize &&
            d1 <= g_dMaxSize && d2 <= g_dMaxSize && w[0] > -60) 
           {
            EnterSell(lt);
            g_state=BSELL;
           }
        }
     }
  }
//+------------------------------------------------------------------+

どこに買われ過ぎと売られ過ぎのレベルを設定する必要があるでしょうか 前回の記事では、WPR に基づく結合インジケータの標準値 (買われ過ぎレベルでは + 60、売られ過ぎのレベルでは-60) は、テストされた条件に対してわずかに低くなることを示しました。 標準値オプションに加えて、買われ過ぎと売られ過ぎのレベルについて、それぞれ + 50% と-50% の値をテストしてみましょう。 H1 および H4 の EURUSD のテストレポートは、testhtml50.zip および testhtml60.zip アーカイブにあります。

ご覧の通り、上記の最初の2つのテストとは異なることはありません。 このパターンのテスト専用の前回の記事の結果と一致しています。 当時、このようなフィルターは、同様に有意な結果を得られませんでした。したがって、このパターンを残りのペアでテストせず、最後のパートに進みます (フィルターとして使用します)。

このケースを思い出してみましょう。

  • 結合 WPR チャートは、売られ過ぎのレベルを上向きにブレイクします。 そのブレイクスルーは、ロウソク足の終値に残っています。 トレーダーは、移動平均が "以下の価格 " の場合にのみ、組み合わせたインジケータチャートで買いします。
  • 売りについては、状況を反対にする必要があります。
  • 結合 WPR チャートが 0% に達すると、トレーダーは相場から決済します。

testEAbasket5.mq5 EA をテストに使用します。

//+------------------------------------------------------------------+
//|                                                 testEAbasket.mq5 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

#include <Trade\\Trade.mqh>



enum BSTATE
  {
   BCLOSE = 0,
   BBUY   = 1,
   BSELL  = 2
  };
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
input int wpr = 20;
input int ma  = 10;
input double lt=0.01; //lot

int SELLPROFIT =   0;
int SELL1LIMIT =  50;
int SELL2FROM  =  40;
int SELL2TO    =  20;
int BUYPROFIT  =   0;
int BUY1LIMIT  = -50;
int BUY2FROM   = -40;
int BUY2TO     = -20;


int h;
ulong  Ticket;

double m[1],ml;
double w[1],wl;

BSTATE g_state;

double g_dMinSize = 2.0;
double g_dMaxSize = 50.0;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   h=iCustom(NULL,0,"testWPR&MA3",wpr,ma);
   if(h==INVALID_HANDLE) 
     {
      Print("Error while creating testWPR&MA3");
      return (INIT_FAILED);
     }

   g_state=BCLOSE;
   EventSetTimer(1);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   IndicatorRelease(h);
   EventKillTimer();

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {

  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
   if(IsNewCandle())
     {
      wl=w[0];
      CopyBuffer(h,0,1,1,w);
      ml=m[0];
      CopyBuffer(h,1,1,1,m);


      if(g_state==BBUY && (w[0]>=BUYPROFIT))
        {
         CloseAllPos();
        }
      if(g_state==BSELL && (w[0]<=SELLPROFIT))
        {
         CloseAllPos();
        }
      if(g_state==BCLOSE && w[0]>=BUY2FROM && w[0]<=BUY2TO && wl<=BUY1LIMIT && w[0] > m[0])
        {
            EnterBuy(lt);
            return;        
        }
        
 
      if(g_state==BCLOSE && w[0]<=SELL2FROM && w[0]>=SELL2TO && wl>=SELL1LIMIT && w[0] < m[0])
        {
            EnterSell(lt);
            return;        
        }
     }
  }
//+------------------------------------------------------------------+

void CloseAllPos()
  {

   CTrade Trade;
   Trade.LogLevel(LOG_LEVEL_NO);
   Trade.PositionClose(Ticket);
   g_state=BCLOSE;

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void EnterBuy(double lot)
  {

   CTrade Trade;
   Trade.LogLevel(LOG_LEVEL_NO);
   Trade.Buy(lot,_Symbol);
   Ticket=Trade.ResultDeal();
   g_state=BBUY;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void EnterSell(double lot)
  {

   CTrade Trade;
   Trade.LogLevel(LOG_LEVEL_NO);
   Trade.Sell(lot,_Symbol);
   Ticket=Trade.ResultDeal();
   g_state=BSELL;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool IsNewCandle()
  {
   static int candle=-1;
          int t1=0;
   switch(_Period)
     {
      case PERIOD_H1:  t1 = Hour();   break;
      case PERIOD_H4:  t1 = Hour4();  break;
      case PERIOD_D1:  t1 = Day();    break;
     }
     
   if(t1!=candle) {candle=t1; return(true);}
   return (false);
  }
            
  int Hour4(){return((int)Hour()/4);}

int Day()
  {
   MqlDateTime tm;
   TimeCurrent(tm);
   return(tm.day);
  }

int Hour()
  {
   MqlDateTime tm;
   TimeCurrent(tm);
   return(tm.hour);
  }

いつものように、 EURUSD H1 と H4 からテストを開始します。

H1 のタイムフレームの結果:

H4 のタイムフレームの結果:

ご覧の通り、トレード数は少ないです。 すでにこの現象を考察し、さらにその原因を示唆しました。 トレードの数は、残りのペアでさらに小さくなる可能性があります。 したがって、テストを終了し、結論に進みましょう。

結果

  1. トレードの通貨ペアバスケットを使用するメソッドを検討しています。 基本的な原理と概念だけでなく、基本的な計算の種類があります。
  2. トレード通貨ペアバスケットが記述されているときに発生する簡単なパターン。
  3. バスケットを使用する際に表示される複雑な構造は、通貨ペアを使用するために特別に設計された標準のテクニカルインジケータを同時に利用すると考えられています。
  4. 検出されたパターンの効率性を確認しました。

新しい合理的かつ論理的な方法で相場を見るツールを取得しています。 しかし、パターンのテストは、説得力のある結果には至っていません。 何か他のものを期待することは不可能でした。 結局のところ、トレードの原理は、1つのパターンに基づいて決定を行ったが、シグナルは、エントリの決定を下すために必要です。

経験では、最もシンプルなパターン (たとえば、移動平均を越える場合) のトレードは非常に危険であると言います。 しかし、シンプルなパターンを使用して、有望結果を得ました。 その上、目的が有益な EA ではなかったことを心に留めておきましょう。 代わりに、他のシグナルと組み合わせることができる、トレードの決定を行うために使用可能なシグナルを取得しましょう。

説明したメソッドを日常的なオペレーションと自動化されたトレードで適用するという視点を評価してみましょう。

実際のトレードの見通しと適用

この問題に取り組んでいる間、インジケーターやEAによるテストなしでは進みません。 信頼性の高いツールの適用例が必要です。 マーケットにはいくつかありますが、それ以外もそのうち追加されるでしょう。 この記事では、そのようなプログラムの実際の名前を指定せずに例だけを与えます。 

バスケットのパターンを使用したタイトルは非常に膨大です。 新しいトレードメソッドは毎日のように現れ、それぞれを記事にするのは不可能です。 しかし、別の記事、スクリーンショットやテンプレートの形で追加することが可能です。 ブログにある程度のものがあります。 今後もこの情報を広げていきます。

エントリ/決済の詳細

NZDUSD H1 で相場に参入する詳細を考えてみましょう。 統一されたインジケータは、収益性の高い (垂直方向の青色の線) 買いシグナルを検出しました:



左に、基本的な通貨と引用通貨バスケットの統一されたインジケータの値の差のチャートを見ることができます。 このインジケータの "擬似方程式 " は、次の価格として記述できます。

Indicator (NZDUSD) = Indicator (NZD) — Indicator (USD)

特に指定しない場合は、この種類の表示がデフォルトですべての統一されたインジケータに適用されていると仮定します。

可能なエントリのオプションは、以下の通りです。

  1. 低い赤の水平線は売られ過ぎのレベルです。 このレベルをブレイクするインジケータチャートのパターンが最初に形成されていることがわかります。 この場所は、垂直方向の緑の線でマークされ、 パターン自体は、ロウソク足1が開いているときに識別されます。 この時点で、すでに買いオーダーを開くことができます: 下降トレンドは、その容量を使い果たしていると反転を開始します。 トレーダーは、この初動をキャプチャし、全体の上昇をとらえます。 このパターンをテストします。 これは、幾分危険で (下降が訂正の後で続くかもしれないので) 頻繁に現われます。 潜在的なトレーダーの損失は、この場合はあまり大きいものではありません。 近いSL はここで使用することができます。
  2. しかし、スクリーンショットで、新しい増加トレンドが勢いを増し始めていることがわかります。 新しいパターンが形成されます—インジケータチャートは移動平均をブレイクします。 これは、売られ過ぎのレベルがブレイクしている後に良いシグナルフィルタです。 下降トレンドが続く危険を減らします。 このパターンはまた、緑の垂直線でマークされ、ロウソク足2のオープンで識別することができます。 ここにも相場に参入することができます。 一般に、SL は (移動平均パラメータによって定義される) 大きい必要があります。
  3. 上昇トレンドが強さを得た後、新しいパターンは現われます-高速移動平均が低速移動平均をブレイク。 このパターンは、ロウソク足3のオープンで識別されます。 前の2つのケースと比較して、リスクは最小限に抑えられます。 しかし、, 利益レベルは低く, SL はより大きくなります. パターンが検出された後に移動平均間の距離がどのように増加するかに注意してください。 これは、トレンドが強くなることを示しています-トレーダーの有利なシグナル。 減少する距離は、スローダウンと弱体化を示しています (左のスクリーンショットを参照してください)。

パターンを使用したエントリーの最初の2つの説明の亜種は、オシレーターのすべての種類の典型的な、よく知られているものであることに注意してください。 3番目のパターンはあまり人気がありません。 またこれはすべてのオシレーターで機能しますが、あくまで成長したトレンドを使用して相場に入ることの例です。

すべての3つのエントリのオプションは、強力な初期シグナルによって統一されています。-売られ過ぎレベルのブレイクスルー。 しかし、このようなシグナルは非常にまれです。 もう一度簡潔に分析してみましょう。

  • 右のスクリーンショットで、インジケータチャートが売られ過ぎ (または買わ) エリアに入る様子を見ることができます。 必要な場所は緑の長方形でマークされています。 インジケータウィンドウでは、同じインジケータが別のメソッドで表示されます (NZD (水色の線) と USD (濃い緑のライン) バスケットに対して個別に)。 ドルバスケットは、買われ過ぎになったことを見ることができますが、NZDはかなり長い時間に売られ過ぎていました。 バスケットのような状態の同時の組合せは スクリーンショットのような状態を作り出します。

しかし、イベントのような好ましい組み合わせはめったに発生しません。 これは、数週間シグナルを待つ必要があるということでしょうか。 必ずしもそうではありません。 買われ過ぎ/売られ過ぎのレベルがわずかに低いレベルに位置していると仮定することができます。 この値は、ペアごと、および各タイムフレームごとに異なる場合があります。 しかし、ほとんどの場合、+ 50% と-50% のレベルで十分であると思われます。 これは、間違いなくリスクを増加させます。 再び右のスクリーンショットを見てみましょう。 レベルの新しいレイアウトは、2つのバスケットのいずれか (あるいは両方!) はまだその動きが終わっていないことを意味します。 従って、まだ続く可能性があり、トレンドに反対するエントリーは危険です。 よって、パターン3はトレンドによってエントリを意味するので、特に重要です。 しかし、ここにもダイバージェンスの形の落とし穴があります:



右のスクリーンショットで、インジケータ自体が同様に上方に移動しながら、上向きの高速 MA がスローMAをブレイクする様子を参照してください。 左のスクリーンショットで、ダイバージェンスを観察します: インジケータと MA チャートは、異なる方向に動きます。 もちろん、ダイバージェンスのあるシグナルは飛ばしてください! ニュースラインは、ダイバージェンスの有無にかかわらず、様々なパターンの他の例を備えています。

さて、決済するための可能な方法を検討してみましょう (オーダーを閉じる)。

トレーダーは、3つの方法のいずれかで相場に参入したと仮定します。 反対のシグナルはポジションを完全にまたは部分的に閉じるか、または ブレイクイーブン に動かすのに使用することができます。

1. たとえば、インジケータが売られ過ぎの領域に入る-買いオーダーを閉じるか、ブレイクイーブン に移動するための重要なポイントです (反対は売りオーダーに当てはまります)。

2. オーダーを持つトレーダーは、以前に開いたオーダーとは反対方向にインジケータチャートで MA のブレイクスルーを検出することができます。

3. トレーダーは、二つの移動平均線の間が縮まることによってトレンドがスローダウンしていると検出するかもしれません。

4. 最後に、インジケータによって買われ過ぎ/売られ過ぎのレベルではない値に達すると、ブレイクイーブン に価格/移動を閉じるためのシグナルとして使用することができます。 たとえば、 レベル 0%である可能性があります。 このレベルは、両方の通貨バスケットの "等価 " を意味します。 このインジケータは、このようなレベルで "つまずく" 傾向があります。 したがって、このレベルはレジスタンスです。

Fibo レベルは、統一されたインジケータでも使用できます。 

5. そして、最後に、トレーダーは、独自の考慮事項または標準のテクニカル分析に基づいて SL と TP を割り当てることができます。

オーダーのエントリーと決済の方法を考慮してきました。 では、チャート上のパターンを検索して分析してみましょう。

統一されたインジケータの操作


検出されたパターンを識別するには、チャートに統一インジケータを配置し、結果を確認します。 NZDUSD H1 の最近の例です (チャートは、サイズ制限に2つのイメージに分けられます):


パターン3と7は買われ過ぎ/売られ過ぎのエリアから決済付近で検出されることに注意してください。 ここでは乖離はないが、価格はパターン3でゼロレベルを通過する上方に強く移動します。 一方、パターン7領域の動きは比較的弱い。 強力な動きは、スローダウンし、ロールバックします。 チャートはまだゼロレベルを越えていないし、(まさに参照してください) 跳ね返ることが可能です。

パターン8は、売られ過ぎのレベルからのリバウンドを示しています。 このグラフは、反転し、強く上向きのパターンを形成しました。 ゼロレベルは、長く続く可能性があります。 ただし、インジケータチャートと価格が逆方向に移動します。 少し後で、トレーダーは、最小損失でオーダーを閉じることができるようになります。そうでなければ、損失は非常に明白になることがあります。

パターン6はとてもではないが有望ではない: 売りの潜在性はほとんど排出され、売られ過ぎのレベルに達しています。 反転のリスクは高い。 実際には、収益性がない長引くレンジの動きになるでしょう。 下方の動きは徐々に来るがだいぶ後になってからです。パターンはそこで確立されると考えた方が良いでしょう。

パターン6と同様の条件下では、パターン5が非常に有望です。 したがって、買われ過ぎ/売られ過ぎの領域の近くにインジケータで検出され、トレンドはまだ検出時に継続する可能性があるので、まだ破棄しないでください。

パターン4も、ブレイクせずにゼロレベルを中心に動きます。 ダイバージェンスがなく、インジケータチャートが水平方向に動いています。

パターン2は有望です。 下向きの動きは、スローダウンし、ゼロレベルに到達せずに反転します。 チャートはまだ売られ過ぎのレベルに達していないので、ダイバージェンスはありません。 インジケータは、レンジ移動しますが、パターンはまだ良い利益をもたらします。

パターン1を考慮しません。なぜなら、これが形成される前に何が起こったのかわからない。

見つかったパターンに加えて、青色の矢印でマークされたものと同様の領域に注意を払う価値があります。 これはゼロレベルをブレイクし、買われ過ぎ領域を脱出し、売られ過ぎのレベルからの強力かつ着実な動きです。 両方の MA がブレイクしているが、インジケータは、パターンを見つけることができませんでした。 そこに相違はありません。 インジケータがゼロレベルをブレイクした場合、特にこのブレイクスルーは、スローMAによる高速 MA のブレイクスルーと一致するので、相場参入を検討してください。

分析メソッドは簡単ではありませんのでご注意ください。 少なくとも1回の損失で終わる可能性があるので、多くのあいまいさがあります。 組み合わせインジケータの助けを受けて分析の可能性を高めるために、次の段階に頼る必要があります- "アドバンスト" 分析。


複合インジケータによる高度なタスク

まず最初に、1つのチャートに結合インジケータの2つのコピーを使用することをお話しします。 間接的に、この可能性は前のセクションで既に述べられています。 より詳細に検討します。

  • チャートには、同様の設定が異なる表示メソッドを持つ1つの結合インジケータの2つのインスタンスがあります。
    1. デフォルトは V1 ウィンドウです。
    2. ベースと引用通貨バスケット (V2 ウィンドウ) の2つの別々のチャート。

USDCAD のインジケータが表示されます。 V2 ウィンドウでは、通貨ペアの USD バスケットの状態が濃い緑の線として表示され、CAD 1 がオレンジ色の線として表示されます。

V1 ウィンドウでは、インジケータが2つのエントリパターン (1 と 2) を検出しました。 どちらの場合も乖離がなく、ポジションがプラスになることもあります。

ウィンドウ V2、パターン1を見てみましょう。 ここでは、CAD バスケットが買わされ、現在ゼロレベルに近づいて弱体化していることがわかります。 買われ過ぎエリアを決済しながら、米ドルバスケットも弱体化していました。 しかし、弱体化は、最終的に水平方向の動きになり、ストップした。 パターン検出の瞬間、動きは上向きになるトレンドがありました。 従って、買いのエントリーは正当化されます。

ポイント2を見てみましょう。 両方のバスケットが V2 ウィンドウで水平セグメントを通過するので、ここでの状況は、より危険です。 したがって、いずれかが可能な損失を引き起こす任意の方向に行く可能性があります。

その上、トレーダーはポイント3に注意を払う必要があります。 そこにパターンはありませんが、V2 のウィンドウで、明らかに両方のバスケットが互いに向かって買われ過ぎと売られ過ぎの領域を超えて行くことがわかります。 これは、トレーダーがちょうど反転したトレンドの始まりを捉えることができることを意味します。

この場合、トレーダーはインジケータチャート "by default (デフォルトで)" のパターンを検索し、同じインジケータの2番目のインスタンスでデータを表示する別のメソッドを使用して画像を絞り込みます。

結合インジケータで稼働する2番目の興味深い方法は、標準のインジケータと一緒に使用することです。 ここでは、通常の標準 WPR で WPR に基づいて組み合わせたインジケータを使用する例を示します。

USDCAD チャートとほぼ同じセグメントです。 以前、パターン1が相場に参入するのに適していることが既にわかっていますが、パターン2はリスクを大きくしています。 失敗のパターン3を見てください。 その上で、ダイバージェンスはありませんが、どちらにしても利益をもたらさない。 標準の WPR ウィンドウでは、発生する理由が明確になります: WPR は買われ過ぎエリアにあります。 結果として、ペアは、どちらかの補正またはトレンド反転に従うレンジになります。 パターン2は、ここでも同様に、レンジを示しています。 パターン1はまだ強くなります。 トレンドフォローのエントリの場合、WPR インジケータにはまだ買われ過ぎ領域までの十分な範囲がありますが、ゼロラインは既に渡されています。 その後、確認されるパターンの潜在的な収益性を意味します。

あまり印象的ではあありませんが、 "cooperation(協力)" の例を示しましょう。 同じ USDCAD ペアを使用します。 セグメントとタイムフレームも同じです。 ウィンドウには、結合STOCHと標準 WPR があります。 以前に検出されたパターンを示す縦線は、参照用に残されています。


直接結合STOCHは重要なパターンをもたらさなかった。 複合 WPR と同様に、パターン1と3がエントリに適していることを前提としています。 パターン2は、相場に参入するために使用することはできません。これはダイバージェンスを示しています。 WPR によって買われ過ぎゾーンであると考えられる領域は、主に複合STOCHによってフラットな領域とみなされていることに注意してください。 インジケータを組み合わせるのはまだ別の例です。

上記の組み合わせのインジケータでのタスクは、唯一のものではありませんが、非常に明白で効率的です。

結論

この記事シリーズでは、通貨バスケットをトレードするときに発生するパターンでのタスクを検討しました。 相場に出入りするメソッド、およびを適用するための重要な原則を説明しました。

ほとんどの例は、結合 WPR を使用して実装されています。 しかし、STOCH、RSI は、TDI などのように、他の組み合わせのインジケータがあります。 トレード通貨バスケットのインジケータ戦略を構成します。 この作戦は容易ではなく、いろいろと考えることができるトレーダーだけ習得することができます。

他にもこれ以外の開発機会はあるでしょうか。 もちろん、あります。 いつかそれも説明しましょう。


この記事で使用されるプログラム

 # 名称
タイプ
 詳細
1 test.zip Archive
パターンテストツール
2
testhtml.zip Archive test.zipアーカイブのツールのテスト結果
3 test1.zip Archive フィルタでテストするための EA コード
4 testhtml50.zip Archive test1.zipアーカイブによるツールを使ったテスト結果
5
testhtml60.zip Archive
test1.zipアーカイブによるツールを使ったテスト結果
 6 testEAbasket5.mq5  EA テスト EA


MetaQuotes Software Corp.によりロシア語から翻訳された
元の記事: https://www.mql5.com/ru/articles/4543

添付されたファイル |
test.zip (15.54 KB)
testhtml.zip (1197.56 KB)
testhtml50.zip (226.91 KB)
testhtml60.zip (200.84 KB)
testEAbasket5.mq5 (4.81 KB)
14,000自動売買ロボットがMetaTraderマーケットに 14,000自動売買ロボットがMetaTraderマーケットに

最大級のアルゴリズム取引既成アプリストアでは13,970件の製品があります。これには4,800件のロボット、6,500件の指標、2,400件のユーティリティその他のソルーションが含まれます。半分以上のアプリケーション (6,000) はレンタルもできます。全製品の4分の1(3,800)は無料でダウンロードできます。

ディープニューラルネットワーク(その4)ニューラルネットワーク分類器のアンサンブル: バギング ディープニューラルネットワーク(その4)ニューラルネットワーク分類器のアンサンブル: バギング

本稿では、バギング構造を持つニューラルネットワークのアンサンブルを構築および訓練する方法について説明します。また、アンサンブルを構成する個々のニューラルネットワーク分類器の超パラメータ最適化の特性も特定されます。このシリーズの前の記事で得られた最適化ニューラルネットワークの品質は、作成されたニューラルネットワークのアンサンブルの品質と比較されます。アンサンブルの分類の質をさらに向上させる可能性が考慮されます。

950のウェブサイトがメタクオーツの経済指標カレンダーをブロードキャスト 950のウェブサイトがメタクオーツの経済指標カレンダーをブロードキャスト

このウィジェットによって、ウェブサイトには世界最大経済の500の指標と指数の詳細なリリーススケジュールが提供され、トレーダーは、ウェブサイトのメインコンテンツに加えて、説明やグラフとともに、重要なイベントの最新情報をすばやく受け取ることができます。

MQL5.comフリーランスサービスが注文50,000件を達成 MQL5.comフリーランスサービスが注文50,000件を達成

公式のMetaTraderフリーランスサービスのメンバー受注完了数が2018年10月に50,000件に達しました。これは、MQLプログラマー向けの世界最大のフリーランスサイトです。サイトには1,000人以上の開発者が登録しており、新規注文は毎日数十件を超えます。サイトは7ヶ国語に訳されています。