10のトレンド戦略による比較分析

Alexander Fedosov | 29 5月, 2017


コンテンツ

イントロダクション

順張りは、外国為替相場で人気があります。 このアイデアは、良いエントリポイントを見つけるために、強力な一方向の動きを決定することにあります。またその終わりを決定することも重要です。 この記事では、直接または間接的にトレンドを決定するテクニカルツールを選択しました。 これらのツールに基づいて、10のトレーディング戦略をMT5のEAにしました。また、これらのEAの結果を踏まえ、各取引戦略の長所と短所を分析し、その性能を比較しました。 この記事の目的は、トレンドの強い点、弱い点について最大限に可能な情報を提供することです。 他のトレンドは、記事MQL5でトレンドを発見する方法にあります。

トレンド戦略を作成する際のタスクの定義

一見、トレンド戦略を開発することは困難な作業ではないと思われるかもしれません。 可能であれば、技術的な分析を使用してトレンドを決定する必要があります。 理論的に、このアプローチには議論の余地はありません。 しかし、いくつか問題が残ります。

図1 トレンドとレンジのゾーンの決定

タスク 1. トレンドを特定。

通常、トレンドの定義と確認には時間がかかります。 したがって、トレンドの冒頭に理想的なエントリーを行うことはできません。 図1を参照してください。 グラフ上の点の位置でエントリを決定することは不可能です。 相場に参入するための有利な場所がわかるだけです。 この領域を定義するということは、解析中にシグナルが遅れるということであり、そのトレンドを確認するために時間が必要であるという事実に基づいています。 例として、あるインジケーターはトレンドを通知し、またあるインジケーターはある程度たって確認します。 この方法には時間がかかります。 時は金なり、にもかかわらずです。 今回のケースでは利益を逃したことを意味します。

タスク 2. オープンポジションのターゲット。

トレンドを確認しました。 今、相場に参入しようとしています。 ただし、その前に、利益の目標を定義する必要があります。 利益の目標をポイント単位で設定したり、トレンド強度の予測に応じて、動的なものを使用することができます。 ここでは、サポートレベルとレジスタンスレベルを使用することができます。 しかし、このアイデアは、相場に入る前に、決済のタイミングを知るということです。 次のタスクは、これと密接につながっています。

タスク 3. トレンドの終わりを決定する。 

図1を再度参照します。 次の状況を示しています。つまり、緑のエリアで相場に参入し、トレンドはレンジ領域まで続きます。 これが一時的な状態か、決済するべきかを判断する必要があります。 この場合、レンジは短く、トレンドは続きました。 なお、固定利益の戦略においては、タスク2のようにトレンドの推定に基づいて、継続時間とサイズが予測できます。 

トレンド戦略

ここでは一般的な条件です。 このトレンド戦略では、あまりにも多くのダマシのシグナルがあるので、極端に小さなタイムフレームを使用しないでください。 そのため、テストには M30 から H4 の間の時間枠を使用します。

戦略 # 1: ヒストグラムとして引かれる RSI からの ADXCloud のインジケーター。

最初の戦略は、ADX インジケーター (ADXCloud) に基づいています。 このシグナルは買われ過ぎ/売られ過ぎのレベルを RSI オシレーターによって確認されます。 これは、ヒストグラムとして描かれ、RSI 値の緑のバーは、買われ過ぎゾーンを示しています。赤は売られすぎです。

パラメーター 詳細
使用インジケーター ADXCloud
使用インジケーター RSIColor
時間枠 H1
買い条件 雲の色が赤から緑に変わり、RSIColor ヒストグラムが緑色になる。
売り条件 雲の色が緑から赤に変わり、RSIColor ヒストグラムは赤色になる。
決済条件   利確/ストップロス

図2に、この戦略を示します。 H1 の時間枠では、いくつかの最後の方の足がトレンドとして定義されています。そのためには、決済の利益とストップロスに大きな値を使用することはお勧めしません。

図 2. トレンド戦略のエントリー条件 # 1

ここでは、この戦略に基づいて実装されたEAのコードを示します。

void OnTick()
  {
//---EA が以前に開いた注文を確認する
   if(!Trade.IsOpened(Inp_MagicNum))
     {
      //---計算のためのデータの取得

      if(!GetIndValue())
         return;
      //---買いシグナルがある場合はポジションを開く

      if(BuySignal())
         Trade.BuyPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment);
      //---売りシグナルがある場合は注文を開く

      if(SellSignal())
         Trade.SellPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment);
     }
  }
//+------------------------------------------------------------------+
//買い条件                                                            |
//+------------------------------------------------------------------+
+------------------------------------------------------------------+
  {
   return(adx[0]>0 && adx[1]<0 && rsi1[0]==1)?true:false;
  }
//+------------------------------------------------------------------+
//売り条件                                                            |
//+------------------------------------------------------------------+
+------------------------------------------------------------------+
  {
   return(adx[0]<0 && adx[1]>0 && rsi2[0]==1)?true:false;
  }
//+------------------------------------------------------------------+
//インジケーターの現在の値を取得する                                     |
//+------------------------------------------------------------------+
+------------------------------------------------------------------+
  {
   return(CopyBuffer(InpInd_Handle1,0,0,2,rsi1)<=0 ||
          CopyBuffer(InpInd_Handle1,1,0,2,rsi2)<=0 ||
          CopyBuffer(InpInd_Handle2,0,0,2,adx)<=0
          )?false:true;
  }



戦略 # 2: 確認に使用される RVI のヒストグラムとして引かれる標準偏差のトレンドインジケーター。

この戦略は、標準偏差トレンドインジケーターと RVI オシレーターの修正に基づいています。 これらのインジケーターがどのように機能するかについて、詳しくは表のリンクをご覧ください。

パラメーター 詳細
使用インジケーター ColorStdDev
使用インジケーター ColorZerolagRVI
時間枠 H1
買い条件 ColorStdDev ヒストグラムは赤色 (強いトレンド) で、ColorZerolagRVI 雲は緑色です。
売り条件 ColorStdDev ヒストグラムは赤色 (強いトレンド) で、ColorZerolagRVI 雲は赤色です。
決済条件   利確/ストップロス

図3に、この戦略を視覚的に示します。 強い動きの領域は標準偏差を使用して決定されます。 このトレンドは、異なる期間と重みを持つ4つの標準 RVIs に基づいて、修正された RVI オシレーターによって確認されます。

図 3. トレンド戦略 # 2 のエントリー条件

このソフトウェアの実装では、強いトレンドの値は、ColorStDev の設定でフラットを経験的に決定する必要があります。 既定値を使用しますが、便宜上、[トレンドオプション] を追加して、取引するトレンドの種類 (中規模または大規模) を選択できます。 この方法では、次の3つの値を毎回再定義する必要はなく、代わりに1つだけを選択する必要があります。 H4 の時間枠で使用するため、強力なトレンドシグナルの使用は、現在の戦略に適しています。 中規模のトレンドオプションは、より高いタイムフレームでのテストに適しています。 同時に、トレンドで入るべき多くのシグナルがあることを心に留めておいてください。 従ってダマシシグナルを減らし、肯定的な結果を有するためにターゲットおよび現在の時間枠を考慮に入れることが必要です。

//---ColorStDev インジケーターパラメータ

input int                  period = 12;                               //平滑化期間 stdev
input ENUM_MA_METHOD       MA_Method=MODE_EMA;                        //ヒストグラム平滑化法
input ENUM_APPLIED_PRICE   applied_price=PRICE_CLOSE;                 //適用価格
input int                  MaxTrendLevel=100;                         //最大トレンドレベル
input int                  MiddLeTrendLevel=40;                       //ミドルトレンドレベル
input int                  FlatLevel=10;                              //フラットレベル
input Trend                TrendLevel=Maximum;                                //使用トレンド

この戦略は、コードに記載されています:

void OnTick()
  {
//---EA が以前に開いた注文を確認する
   if(!Trade.IsOpened(Inp_MagicNum))
     {
      //---計算のためのデータの取得

      if(!GetIndValue())
         return;
      //---買いシグナルがある場合はポジションを開く

      if(BuySignal())
         Trade.BuyPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment);
      //---売りシグナルがある場合は注文を開く

      if(SellSignal())
         Trade.SellPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment);
     }
  }
//+------------------------------------------------------------------+
//買い条件                                                            |
//+------------------------------------------------------------------+
+------------------------------------------------------------------+
  {
   return(stdev[0]>trend && rvi_fast[0]>rvi_slow[0])?true:false;
  }
//+------------------------------------------------------------------+
//売り条件                                                            |
//+------------------------------------------------------------------+
+------------------------------------------------------------------+
  {
   return(stdev[0]>trend && rvi_fast[0]<rvi_slow[0])?true:false;
  }
//+------------------------------------------------------------------+
//インジケーターの現在の値を取得する                                     |
//+------------------------------------------------------------------+
+------------------------------------------------------------------+
  {
   return(CopyBuffer(InpInd_Handle1,0,0,2,stdev)<=0 ||
          CopyBuffer(InpInd_Handle2,0,0,2,rvi_fast)<=0 ||
          CopyBuffer(InpInd_Handle2,1,0,2,rvi_slow)<=0
          )?false:true;
  }


戦略 # 3: ビル・ウィリアムズによる AC の雲の解釈と結合ブルベアインジケーター
次の戦略では、ビルウィリアムズのアクセラレータオシレーター (ac) の雲とブルベアの解釈を試してみました。 ‌

パラメーター 詳細
使用インジケーター Bear_Bulls_Power
使用インジケーター CronexAC
時間枠 H1
買い条件 ヒストグラムは成長を示します (色がピンクから青に変わり、インジケーターの値は0未満)、CroneAC 雲は青色になります。
売り条件 ヒストグラムは、ドロップ (青からピンクへの色の変化、およびインジケーターの値がゼロより大きい) を示しています。CroneAC 雲はオレンジ色です。
決済条件   利確/ストップロス

この戦略を図4に図式で表します。 シグナルを検索する際には、ヒストグラムの初期成長を監視する必要があります。 言い換えれば、ブルがベアに置き換えられ、その後、オシレーターからのシグナルの確認を必要とする瞬間を見つける必要があります。

図4 トレンド戦略3のエントリー条件

この戦略は、異なる入力条件を使用することができます。ヒストグラムの "初期" 成長を検索するのではなく、後のシグナルを使用することができます。たとえば、インジケーターがゼロを越える場合、またはその値の符号が変更されます。 おそらく、色のヒストグラムの変更が結果に影響を与えます。 最初に説明した条件に従った戦略の実装は、以下のリストに記載されています。

void OnTick()
  {
//---EA が以前に開いた注文を確認する
   if(!Trade.IsOpened(Inp_MagicNum))
     {
      //---計算のためのデータの取得

      if(!GetIndValue())
         return;
      //---買いシグナルがある場合はポジションを開く

      if(BuySignal())
         Trade.BuyPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment);
      //---売りシグナルがある場合は注文を開く

      if(SellSignal())
         Trade.SellPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment);
     }
  }
//+------------------------------------------------------------------+
//買い条件                                                            |
//+------------------------------------------------------------------+
+------------------------------------------------------------------+
  {
   return(ac_fast[0]>ac_slow[0] && bb_power[0]>bb_power[1] && (bb_power[0]<0 && bb_power[1]<0))?true:false;
  }
//+------------------------------------------------------------------+
//売り条件                                                            |
//+------------------------------------------------------------------+
+------------------------------------------------------------------+
  {
   return(ac_fast[0]<ac_slow[0] && bb_power[0]<bb_power[1] && (bb_power[0]>0 && bb_power[1]>0))?true:false;
  }
//+------------------------------------------------------------------+
//インジケーターの現在の値を取得する                                     |
//+------------------------------------------------------------------+
+------------------------------------------------------------------+
  {
   return(CopyBuffer(InpInd_Handle1,0,0,2,bb_power)<=0 ||
          CopyBuffer(InpInd_Handle2,0,0,2,ac_fast)<=0 ||
          CopyBuffer(InpInd_Handle2,1,0,2,ac_slow)<=0
          )?false:true;
  }


戦略 # 4: 平均価格速度のインジケーターによるEhlerの重心。

この戦略では、カラーOSMAヒストグラム (CenterOfGravityOSMA) で表されるJ.F.Ehlerの重心インジケーターを使用します。 そのシグナルは、平均価格の速度を計算するインジケーターによって確認されます。

パラメーター 詳細
使用インジケーター CenterOfGravityOSMA
使用インジケーター 平均速度
時間枠 H1
買い条件 重力の中心のヒストグラムは成長を示す (インジケーターの価値はゼロよりより少しである)、および平均速度の価値はしきい値の上にある (変数の前に置かれる)
売り条件 重心のヒストグラムは、ドロップ (インジケーター値がゼロより大きい) を示し、平均速度値はしきい値を上回る (パラメータであらかじめ設定されています)。
決済条件   利確/ストップロス

この戦略を図5に図式で表します。 前の戦略と同様に、ヒストグラムの初期の変更を監視し、価格の速度の確認を待ちます。 

図 5. トレンド戦略のエントリー条件 # 4

戦略の実装:

void OnTick()
  {
//---EA が以前に開いた注文を確認する
   if(!Trade.IsOpened(Inp_MagicNum))
     {
      //---計算のためのデータの取得

      if(!GetIndValue())
         return;
      //---買いシグナルがある場合はポジションを開く

      if(BuySignal())
         Trade.BuyPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment);
      //---売りシグナルがある場合は注文を開く

      if(SellSignal())
         Trade.SellPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment);
     }
  }
//+------------------------------------------------------------------+
//買い条件                                                            |
//+------------------------------------------------------------------+
+------------------------------------------------------------------+
  {
   return(avr_speed[0]>Trend_lev && cog[1]<cog[0] &&(cog[1]<0 && cog[0]<0))?true:false;
  }
//+------------------------------------------------------------------+
//売り条件                                                            |
//+------------------------------------------------------------------+
+------------------------------------------------------------------+
  {
   return(avr_speed[0]>Trend_lev && cog[1]>cog[0] &&(cog[1]>0 && cog[0]>0))?true:false;
  }
//+------------------------------------------------------------------+
//インジケーターの現在の値を取得する                                     |
//+------------------------------------------------------------------+
+------------------------------------------------------------------+
  {
   return(CopyBuffer(InpInd_Handle1,0,0,2,cog)<=0 ||
          CopyBuffer(InpInd_Handle2,0,0,2,avr_speed)<=0
          )?false:true;
  }


戦略 # 5。 複合バイナリウェーブインジケーター。

最初の4つの戦略は、トレンドを示すメインインジケータと追加の確認シグナルの組み合わせを選択するモデルに基づいていました。 この戦略では、バイナリウェーブという1つのインジケーターで別のスキームベースを使用します。 一見オシレーターのように見えますが、実際には、ma、macd、osm、cci、モメンタム、rsi と adx を含む7つの指標によって生成されたシグナルです。 これは、パラメータの柔軟なフル装備のシステムです。 選択したインジケーターの標準パラメータセットに加えて、ここでは重みを使用して特定のコンポーネントの効果を表示します。

パラメーター 詳細
使用インジケーター Binary_Wave
時間枠 H1
買い条件 ゼロ値を上方に交差させる
売り条件 ゼロ値を下方に交差させる
決済条件   利確/ストップロス

この戦略に基づくエントリーの例を図6に示します。 注: h1 のための戦略を最適化するために、ソフトウェア実装の MA_Period、CCIPeriod、MOMPeriod、RSIPeriod と ADX_Period 期間のデフォルト値は、14から 10 (より速い) に変えました。 古典的な期間でテストする必要がある場合は、時間枠H3 または H4 を使用することができます。

図6トレンド戦略のエントリー条件 # 5

実装結果:

void OnTick()
  {
//---EA が以前に開いた注文を確認する
   if(!Trade.IsOpened(Inp_MagicNum))
     {
      //---計算のためのデータの取得

      if(!GetIndValue())
         return;
      //---買いシグナルがある場合はポジションを開く

      if(BuySignal())
         Trade.BuyPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment);
      //---売りシグナルがある場合は注文を開く

      if(SellSignal())
         Trade.SellPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment);
     }
  }
//+------------------------------------------------------------------+
//買い条件                                                            |
//+------------------------------------------------------------------+
+------------------------------------------------------------------+
  {
   return(wave[0]>0 && wave[1]<0)?true:false;
  }
//+------------------------------------------------------------------+
//売り条件                                                            |
//+------------------------------------------------------------------+
+------------------------------------------------------------------+
  {
   return(wave[0]<0 && wave[1]>0)?true:false;
  }
//+------------------------------------------------------------------+
//インジケーターの現在の値を取得する                                      |
//+------------------------------------------------------------------+
+------------------------------------------------------------------+
  {
   return(CopyBuffer(InpInd_Handle,0,0,2,wave)<=0)?false:true;
  }


戦略 # 6: LeManと統合Weightオシレーター。

これは、前の5つの例で使用される戦略の原則を組み合わせたものです。 システムを組み合わせて、シグナルを追加します。 4 つのインジケーターRSI, mfi の, wpr と DeMarkerの加重平滑化された合計を表す重み付きオシレーターを使用します。 このシグナルは、始値から高値と安値への距離を計算し、偏差の四分を表示するLeManによって確認されます。 指定された数では、75、50、25% の価格変更の統計情報も表示され、最大偏差を表示します。重量オシレーターのヒストグラムを監察します。

パラメーター 詳細
使用インジケーター 重量オシレーター
使用インジケーター LeMan
時間枠 H1
買い条件 重量オシレーターが成長し、価格が偏差の四分 75% で上位レベルを破る。
売り条件 重量オシレーターが下落し、価格が偏差の四分 75% で下位レベルを破る。
決済条件   利確/ストップロス

エントリーポイントを図7に示します。 75% のレベルは、太字の線で表示されます。 価格の終値は、これらのレベルを突破し、重量オシレーターの成長/落下の条件が満たされています。

図 7. トレンド戦略のエントリー条件 # 6

LeMan Objectiveインジケータは、描画レベルに8つのインジケーターバッファを使用します。

  • Quartile 1は、例 25% のサンプルに関連して、価格引き下げの平均値に相当します。
  • Quartile 2は、例の 50% でのサンプルに関連して、価格の減少の平均値に対応しています。
  • Quartile 3は、例の 75% でのサンプルに関連して、価格の減少の平均値に対応しています。 これを戦略で使用します。
  • Quartile 4は、平均価格値の最大偏差に対応します。 
  • Quartile 1は、例 25% のサンプルに関連して、価格の成長の平均値に対応しています。
  • Quartile 1は、例の 50% でのサンプルに関連して価格の成長の平均値に対応しています。
  • Quartile 1は、例の 75% でのサンプルに関連して価格の成長の平均値に対応しています。 これを戦略で使用します。
  • Quartile 8は、平均価格値の最大偏差に対応します。

実装においては、ウェイトオシレータと終値に加えて、バッファ2と 6が必要です。 

void OnTick()
  {
//---EA が以前に開いた注文を確認する
   if(!Trade.IsOpened(Inp_MagicNum))
     {
      //---計算のためのデータの取得

      if(!GetIndValue())
         return;
      //---買いシグナルがある場合はポジションを開く

      if(BuySignal())
         Trade.BuyPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment);
      //---売りシグナルがある場合は注文を開く

      if(SellSignal())
         Trade.SellPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment);
     }
  }
//+------------------------------------------------------------------+
//買い条件                                                            |
//+------------------------------------------------------------------+
+------------------------------------------------------------------+
  {
   return(wo[0]>wo[1] && close[0]>obj_q3_b[0])?true:false;
  }
//+------------------------------------------------------------------+
//売り条件                                                            |
//+------------------------------------------------------------------+
+------------------------------------------------------------------+
  {
   return(wo[0]<wo[1] && close[0]<obj_q3_s[0])?true:false;
  }
//+------------------------------------------------------------------+
//インジケーターの現在の値を取得する                                     |
//+------------------------------------------------------------------+
+------------------------------------------------------------------+
  {
   return(CopyBuffer(InpInd_Handle1,6,0,2,obj_q3_b)<=0 ||
         CopyBuffer(InpInd_Handle1,2,0,2,obj_q3_s)<=0 ||
         CopyBuffer(InpInd_Handle2,0,0,2,wo)<=0 || 
         CopyClose(Symbol(),PERIOD_CURRENT,0,2,close)<=0
          )?false:true;
  }


戦略 # 7: 価格をウィリアムズの ao 値に置き換えたMACDと組み合わせたドンチャンチャンネル

ドンチャンチャネルは、一方向の動きを決定するために使用されます。 チャネルブレイクアウトはトレンドの兆候として使用されます。 トレンドを確認するために、価格シリーズはビルウィリアムズの AOの値に置き換えられています。

パラメーター 詳細
使用インジケーター チャンネルシステム
使用インジケーター CronexAO
時間枠 H1
買い条件 上部境界と CronexAO 雲の青色のブレイクアウト
売り条件 下縁と CronexAO 雲のピンク色のブレイクアウト
決済条件   利確/ストップロス

図8では、このトレンド戦略がグラフィカルに表示されています。 明瞭さのために、ドンチャンチャンネルの上または下のチャンネルを破るローソク足の色を変更してインジケーターを使用してください。 CronexAO の色は、チャンネルの境界線を破るロウソクの色に一致します。

図 8. トレンド戦略のエントリー条件 # 7

トレンド戦略のエントリー条件 # 7 トレンド戦略のエントリー条件 # 7 トレンド戦略のエントリー条件 # 7 

void OnTick()
  {
//---EA が以前に開いた注文を確認する
   if(!Trade.IsOpened(Inp_MagicNum))
     {
      //---計算のためのデータの取得

      if(!GetIndValue())
         return;

      //---買いシグナルがある場合はポジションを開く

      if(BuySignal())
         Trade.BuyPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment);
      //---売りシグナルがある場合は注文を開く

      if(SellSignal())
         Trade.SellPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment);
     }
  }
//+------------------------------------------------------------------+
//買い条件                                                            |
//+------------------------------------------------------------------+
+------------------------------------------------------------------+
  {
   return(cao_fast[0]>cao_slow[0] && close[0]>dcs_up[0])?true:false;
  }
//+------------------------------------------------------------------+
//売り条件                                                            |
//+------------------------------------------------------------------+
+------------------------------------------------------------------+
  {
   return(cao_fast[0]<cao_slow[0] && close[0]<dcs_low[0])?true:false;
  }
//+------------------------------------------------------------------+
//インジケーターの現在の値を取得する                                     |
//+------------------------------------------------------------------+
+------------------------------------------------------------------+
  {
   return(CopyBuffer(InpInd_Handle1,0,0,2,dcs_up)<=0 ||
          CopyBuffer(InpInd_Handle1,1,0,2,dcs_low)<=0 || 
          CopyBuffer(InpInd_Handle2,0,0,2,cao_fast)<=0 ||
          CopyBuffer(InpInd_Handle2,1,0,2,cao_slow)<=0 ||
          CopyClose(Symbol(),PERIOD_CURRENT,0,2,close)<=0
          )?false:true;
  }


戦略 # 8: 3 つのTyroneレベルに基づいた確認とシャフサイクルオシレーター

この戦略は、買われ過ぎ/売られ過ぎの領域を利用した、シャフサイクルオシレーターに基づいています。 3つのTironeレベルが使用されます。 興味深い結果がより大きなタイムフレームで得られました。 H4のテスト結果

パラメーター 詳細
使用インジケーター Schaff Trend Cycle
使用インジケーター Three Tirone levels
時間枠 H4
買い条件 現在の価格が上のTitoneレベルよりも高く、売られ過ぎゾーンで決済します。
売り条件 現在の価格が下のTitone レベルより低く、買われ過ぎゾーンで決済します。
決済条件   利確/ストップロス

このトレンドを図9に示します。

図9 トレンド戦略のエントリー条件 # 8

この戦略では、2つのインジケーターの主要なパラメータに加えて、買われ過ぎ/売られ過ぎのレベルの数値を追加する必要がありました。また、デフォルトの20と80を使用していました。 しかし、平滑化パラメータと期間を変更しています。(図中、シャフトインジケーターの左上隅に表示されます)。 これらの設定はオプションで、既定の設定を使用したり、独自の値を設定したりできます。

//+------------------------------------------------------------------+
//| Expert Advisor input parameters                                  |
//+------------------------------------------------------------------+
input string               Inp_EaComment="Strategy #8";                  //EA Comment
input double               Inp_Lot=0.01;                                 //Lot
input MarginMode           Inp_MMode=LOT;                                //MM
input int                  Inp_MagicNum=1111;                            //Magic number
input int                  Inp_StopLoss=400;                             //Stop Loss(points)
input int                  Inp_TakeProfit=600;                           //利益を取る (ポイント)
input int                  Inp_Deviation = 20;                           //偏差値 (ポイント)

input double               Overbuying=80;                                //Overbuying ゾーン
input double               Overselling=20;                               //売られすぎゾーン
//シャフトレンドサイクルパラメータ

input Smooth_Method        MA_SMethod=MODE_SMMA_;                        //ヒストグラム平滑化法
input int                  Fast_XMA = 20;                                //高速移動平均期間
input int                  Slow_XMA = 30;                                //低速移動平均期間
input int                  SmPhase= 100;                                 //移動平均平滑化パラメータ
input Applied_price_       AppliedPrice=PRICE_CLOSE_;                    //価格定数
input int                  Cycle=10;                                     //ストキャスティクスオシレーター期間

戦略の原則は次のとおりです。

void OnTick()
  {
//---EA が以前に開いた注文を確認する
   if(!Trade.IsOpened(Inp_MagicNum))
     {
      //---計算のためのデータの取得

      if(!GetIndValue())
         return;
      //---買いシグナルがある場合はポジションを開く

      if(BuySignal())
         Trade.BuyPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment);
      //---売りシグナルがある場合は注文を開く

      if(SellSignal())
         Trade.SellPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment);
     }
  }
//+------------------------------------------------------------------+
//買い条件                                                            |
//+------------------------------------------------------------------+
+------------------------------------------------------------------+
  {
   return(schaff[1]<Overselling && schaff[0]>Overselling && close[0]>tirone_b[0])?true:false;
  }
//+------------------------------------------------------------------+
//売り条件                                                            |
//+------------------------------------------------------------------+
+------------------------------------------------------------------+
  {
   return(schaff[1]>Overbuying && schaff[0]<Overbuying && close[0]<tirone_s[0])?true:false;
  }
//+------------------------------------------------------------------+
//インジケーターの現在の値を取得する                                     |
//+------------------------------------------------------------------+
+------------------------------------------------------------------+
  {
   return(CopyBuffer(InpInd_Handle1,0,0,2,schaff)<=0 ||
          CopyBuffer(InpInd_Handle2,0,0,2,tirone_b)<=0 ||
          CopyBuffer(InpInd_Handle2,2,0,2,tirone_s)<=0 ||
          CopyClose(Symbol(),PERIOD_CURRENT,0,2,close)<=0
          )?false:true;
  }


戦略 # 9:  ヒストグラムとして描画されたケルトナーズチャネルと、雲として描かれた iTrend インジケーター。

このトレンドは、ヒストグラムとして描かれたケルトナーズチャネルに基づいて i-KlPrice を用いて同定されます。 トレンドの確認のために、雲の色と幅が現在のトレンドを特徴付けるクラウドフォームで iTrend インジケーターを使用します。 前の戦略のように、シグナルはある特定のレベルのクロスオーバーとして生成されます。 KlPrice のレベルのデフォルト値は、50および-50 です。 したがって、BuyLevel と SellLevel のパラメータを追加する必要があります。これらのレベルをクロスすると、買いまたは売りシグナルになります。

シグナルは iTrend によって確認できます。 このインジケーターでは、2行の値によって決定される雲の色を監視します。 上側のラインは、平滑化された価格値とパラメータで選択したボリンジャーバンドバンドの差です。 下のラインは、(高 + 低) と現在のローソク足の移動平均値の差を-1 で乗算したものです。

パラメーター 詳細
使用インジケーター i-KlPrice
使用インジケーター iTrend
時間枠 H1
買い条件 KlPrice ヒストグラムの値が BuyLevel より大きく、iTrend 雲が緑。
売り条件 KlPrice ヒストグラムの値がSellLevel より低く、iTrend 雲がピンク。
決済条件   利確/ストップロス

KlPrice ヒストグラムの値がSellLevel より低く、iTrend 雲がピンク。

図 10. トレンド戦略のエントリー条件 # 9

‌‌

この戦略のコードです:

void OnTick()
  {
//---EA が以前に開いた注文を確認する
   if(!Trade.IsOpened(Inp_MagicNum))
     {
      //---計算のためのデータの取得

      if(!GetIndValue())
         return;
      //---買いシグナルがある場合はポジションを開く

      if(BuySignal())
         Trade.BuyPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment);
      //---売りシグナルがある場合は注文を開く

      if(SellSignal())
         Trade.SellPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment);
     }
  }
//+------------------------------------------------------------------+
//買い条件                                                            |
//+------------------------------------------------------------------+
+------------------------------------------------------------------+
  {
   return(klprice[0]>BuyLevel && itrend_h[0]>itrend_l[0])?true:false;
  }
//+------------------------------------------------------------------+
//売り条件                                                            |
//+------------------------------------------------------------------+
+------------------------------------------------------------------+
  {
   return(klprice[0]<SellLevel && itrend_h[0]<itrend_l[0])?true:false;
  }
//+------------------------------------------------------------------+
//インジケーターの現在の値を取得する                                     |
//+------------------------------------------------------------------+
+------------------------------------------------------------------+
  {
   return(CopyBuffer(InpInd_Handle1,0,0,2,klprice)<=0 ||
          CopyBuffer(InpInd_Handle2,0,0,2,itrend_h)<=0 ||
          CopyBuffer(InpInd_Handle2,1,0,2,itrend_l)<=0
          )?false:true;
  }



戦略 # 10:  平均変化価格のモメンタムと MA ファン FigurelliSeries。

最後に、平均変化インジケーターを使用してトレンドを分析します。 ヒストグラムとしての FigurelliSeries は、モメンタムの確認に使用されます。 平均変更の基本的な値は1に等しくなります。 この値に基づいて、価格のモメンタムのシグナルが上下に行ったり来たりします。 この戦略のエントリ条件は、1の値のクロスです。 FigurelliSeries インジケーターの値が何を意味するかを理解するためには、そのアルゴリズムと入力を検討する必要があります。

//+----------------------------------------------+
//インジケーター入力パラメータ                       |
//+----------------------------------------------+
input uint StartPeriod=6;                              //初期期間
input uint Step=6;                                     //期間計算ステップ
input uint Total=36;                                   // MAのナンバー
input  ENUM_MA_METHOD   MAType=MODE_EMA;               //移動平均スムージングタイプ
input ENUM_APPLIED_PRICE   MAPrice=PRICE_CLOSE;        //移動平均の価格時系列
input int Shift=0;                                     //インジケーターの足の水平シフト 

最初の StartPeriod (移動平均の開始期間) が設定され、その他の36移動平均の値が、プラスステップに等しい期間で指定されます。 次に、計算に使用する移動平均タイプと価格を選択します。 実際に MAのファンは、現在の終値と比較されます。 ヒストグラムの値は、終値のMAの 数の差を示しています。

//----インジケーターの計算のメインサイクル
   for(bar=limit; bar>=0 && !IsStopped(); bar--)
     {
      double tot_Ask=0;
      double tot_Bid=0;

      for(int count=0; count<int(Total); count++)
        {
         //----配列に新しく現われられたデータをコピー
         if(CopyBuffer(MA_Handle[count],0,bar,1,MA)<=0) return(RESET);

         if(close[bar]<MA[0]) tot_Ask++;
         if(close[bar]>MA[0]) tot_Bid++;
        }

      IndBuffer[bar]=tot_Bid-tot_Ask;
     }

----配列に新しく現われられたデータをコピー

パラメーター 詳細
使用インジケーター Average Change
使用インジケーター Figurelli シリーズ
時間枠 H4
買い条件 平均変化がしきい値を上方に横切り、Figurelli シリーズヒストグラムの値はゼロより上。
売り条件 平均変化がしきい値を下方に横切り、Figurelli シリーズヒストグラムの値はゼロ以下。
決済条件   利確/ストップロス

図11に、この戦略に基づく相場参入例を示します。

図 11. トレンド戦略のエントリー条件 # 10

戦略のコード:

void OnTick()
  {
//---EA が以前に開いた注文を確認する
   if(!Trade.IsOpened(Inp_MagicNum))
     {
      //---計算のためのデータの取得

      if(!GetIndValue())
         return;
      //---買いシグナルがある場合はポジションを開く

      if(BuySignal())
         Trade.BuyPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment);
      //---売りシグナルがある場合は注文を開く

      if(SellSignal())
         Trade.SellPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment);
     }
  }
//+------------------------------------------------------------------+
//買い条件                                                            |
//+------------------------------------------------------------------+
+------------------------------------------------------------------+
  {
   return(avr_change[1]<1 && avr_change[0]>1 && fig_series[0]>0)?true:false;
  }
//+------------------------------------------------------------------+
//売り条件                                                            |
//+------------------------------------------------------------------+
+------------------------------------------------------------------+
  {
   return(avr_change[1]>1 && avr_change[0]<1 && fig_series[0]<0)?true:false;
  }
//+------------------------------------------------------------------+
//インジケーターの現在の値を取得する                                     |
//+------------------------------------------------------------------+
+------------------------------------------------------------------+
  {
   return(CopyBuffer(InpInd_Handle1,0,0,2,avr_change)<=0 ||
          CopyBuffer(InpInd_Handle2,0,0,2,fig_series)<=0
          )?false:true;
  }



テスト

前のセクションで、10のトレンド戦略を定式化し、そのコードを準備しました。 得られた結果をテストし比較するために、同じ条件でテストモードを選択する必要があります。

  • 期間: 01.01.2016 — 01.03.2017
  • 通貨ペア: eurusd
  • 取引モード:遅延なし。 これらは、HFTではないので、遅延の影響は非常に小さくなります。
  • テスト: M1 OHLC.実際のティックの事前テストはほぼ同じ結果を示しています。
  • 初期証拠金: 1000 ドル。
  • Leverage: 1:500.
  • Server: MetaQuotes-Demo.
  • Quotes: 5-digit.

ほぼすべての戦略で、決済条件は、利確/ストップロス、8戦略 H1 のトリガです。 したがって、これらの戦略のTPとSLの値を同じにして使用することができます。 600 (5 桁の引用符) にTPを設定し、 400にSLを設定しましょう。上記の条件に加えて、戦略で使用されるインジケーターのプリセットパラメータを設定することができます。

戦略のテスト # 1 (ヒストグラムとして描かれた RSI の確認と ADXCloud インジケーター)。

プリセット:

//---RSI_Color インジケーターパラメータ

input int                  Inp_RSIPeriod=11;                            //RSI 期間
input double               Inp_Overbuying=70;                           //Overuying ゾーン
input double               Inp_Overselling=30;                          //過大ゾーン
//---ADX_Cloud インジケーターパラメータ

input int                  Inp_ADXPeriod=8;                             //adx 期間
input double               Inp_alpha1 = 0.25;                           //alpha1
input double               Inp_alpha2 = 0.25;                           //alpha2

テスト結果:


図 12 戦略 #1. テスト結果

ストラテジー # 2 のテスト: (RVI を持つヒストグラムとして描かれる標準偏差トレンドインジケーター)。

プリセット:

//---ColorStDev インジケーターパラメータ

input int                  period = 12;                                  //Smoothing period StDev
input ENUM_MA_METHOD       MA_Method=MODE_EMA;                           //ヒストグラム平滑化法
input ENUM_APPLIED_PRICE   applied_price=PRICE_CLOSE;                    //適用価格
input int                  MaxTrendLevel=90;                             //最大トレンドレベル
input int                  MiddLeTrendLevel=50;                          //ミドルトレンドレベル
input int                  FlatLevel=20;                                 //フラットレベル
input Trend                TrendLevel=Maximum;                           //使用トレンド
//--- Параметры индикатора ColorZerolagRVI

input uint                 smoothing=15;                                 //平滑化期間 RVI
input double               Factor1=0.05;                                 //重量係数 1
input int                  RVI_period1=14;                               //rvi 期間 1
input double               Factor2=0.10;                                 //重量係数 2
input int                  RVI_period2=28;                               //rvi 期間 2
input double               Factor3=0.16;                                 //重量係数
input int                  RVI_period3=45;                               //rvi 期間 3
input double               Factor4=0.26;                                 //重量係数 4
input int                  RVI_period4=65;                               //rvi 期間 4
input double               Factor5=0.43;                                 //重量係数 5
input int                  RVI_period5=75;                               //rvi 期間5


テスト結果:

図13戦略 # 2. テスト結果

戦略テスト #3 (ビル・ウィリアムズによる ACの雲の解釈と結合されたブルベアインジケーター).

プリセット:

//---Bears_Bull_power インジケーターパラメータ

input Smooth_Method        MA_Method1=MODE_AMA;                         //平均化方法
input uint                 Length1=12;                                  //平均深さ
input int                  Phase1=15;                                   //平均パラメータ
input Smooth_Method        MA_Method2=MODE_ParMA;                       //平滑化期間
input uint                 Length2=5;                                   //平滑化期間
input int                  Phase2=15;                                   //スムージングの深さ
input Applied_price_       IPC=PRICE_WEIGHTED_;                         //適応価格
input int                  Shift=0;                                     //シフト
//--- CronexAC indicator parameters

input Smooth_Method        XMA_Method=MODE_SMMA_;                       //平滑化法
input uint                 FastPeriod=9;                                //高速平滑化期間
input uint                 SlowPeriod=21;                               //高速平滑化期間
input int                  XPhase=15;                                   //低速平滑化期間

スムージングパラメータ</s3>

図14 戦略 # 3. テスト結果

図14戦略 # 3.

プリセット:

//---CenterOfGravityOSMA インジケーターパラメータ

input uint                 Period_=9;                                   //---平均期間
input uint                 SmoothPeriod1=3;                             //スムージング期間1
input ENUM_MA_METHOD       MA_Method_1=MODE_SMA;                        //平均 method1
input uint                 SmoothPeriod2=3;                             //平均 method2
input ENUM_MA_METHOD       MA_Method_2=MODE_SMA;                        //平滑化 period2
input Applied_price_       AppliedPrice=PRICE_OPEN_;                    //平均法</s3>
//--- Average Speed indicator parameters

input int                  Inp_Bars=1;                                  //日
input ENUM_APPLIED_PRICE   Price=PRICE_CLOSE;                           //適応価格
input double               Trend_lev=2;                                 //トレンドレベル

スムージングパラメータ</s3>

トレンドレベル</s3> テスト結果

戦略のテスト # 5 (統合バイナリウェーブインジケーター)。

プリセット:

//---Binary_Wave インジケーターパラメータ

input double               WeightMA    = 1.0;
input double               WeightMACD  = 1.0;
input double               WeightOsMA  = 1.0;
input double               WeightCCI   = 1.0;
input double               WeightMOM   = 1.0;
input double               WeightRSI   = 1.0;
input double               WeightADX   = 1.0;
//----移動平均

input int                  MAPeriod=10;
input ENUM_MA_METHOD       MAType=MODE_EMA;
input ENUM_APPLIED_PRICE   MAPrice=PRICE_CLOSE;
//----macd

input int                  FastMACD     = 12;
input int                  SlowMACD     = 26;
input int                  SignalMACD   = 9;
input ENUM_APPLIED_PRICE   PriceMACD=PRICE_CLOSE;
//----macd

input int                  FastPeriod   = 12;
input int                  SlowPeriod   = 26;
input int                  SignalPeriod = 9;
input ENUM_APPLIED_PRICE   OsMAPrice=PRICE_CLOSE;
//---- CCI

input int                  CCIPeriod=10;
input ENUM_APPLIED_PRICE   CCIPrice=PRICE_MEDIAN;
//----モメンタム

input int                  MOMPeriod=14;
input ENUM_APPLIED_PRICE   MOMPrice=PRICE_CLOSE;
//----RSI

input int                  RSIPeriod=14;
input ENUM_APPLIED_PRICE   RSIPrice=PRICE_CLOSE;
//----adx

input int                  ADXPeriod=10;

スムージングパラメータ</s3>


図16 戦略 # 5. テスト結果

戦略のテスト # 6 (LeManと複合重量オシレーター)。

プリセット:

//---レマン目標インジケーターパラメータ

input int                  Sample=20;
input int                  Quartile_1 = 25;
input int                  Quartile_2 = 50;
input int                  Quartile_3 = 75;
input int                  Shift=0;
//---レマン目標インジケーターパラメータ
//----RSI
input double               RSIWeight=1.0;
input uint                 RSIPeriod=14;
input ENUM_APPLIED_PRICE   RSIPrice=PRICE_CLOSE;
//---- MFI
input double               MFIWeight=1.0;
input uint                 MFIPeriod=14;
input ENUM_APPLIED_VOLUME  MFIVolumeType=VOLUME_TICK;
//---- WPR
input double               WPRWeight=1.0;
input uint                 WPRPeriod=12;
//---- DeMarker
input double               DeMarkerWeight=1.0;
input uint                 DeMarkerPeriod=10;
//----
input Smooth_Method        bMA_Method=MODE_SMMA_;
input uint                 bLength=5;
input int                  bPhase=100;

テスト結果:


図 17 戦略#6. テスト結果

戦略のテスト # 7(価格シリーズがウィリアムズの ao 値に置き換えられている MACD と組み合わせたドンチャンチャンネル

プリセット:

input string               Inp_EaComment="Strategy #7";                 //EA Comment
input double               Inp_Lot=0.01;                                //ロット
input MarginMode           Inp_MMode=LOT;                               //mm
input int                  Inp_MagicNum=1111;                           //マジックナンバー
input int                  Inp_StopLoss=400;                            //ストップロス (ポイント)
input int                  Inp_TakeProfit=600;                          //テイクプロフィット(ポイント)
input int                  Inp_Deviation = 20;                          //偏差 (ポイント)
//--- Donchian Channel System indicator parameters

input uint                 DonchianPeriod=12;                           //平均の期間
input Applied_Extrem       Extremes=HIGH_LOW_CLOSE;                     //極値の種類

//---CronexAO インジケーターパラメータ

input Smooth_Method        XMA_Method=MODE_ParMA;                        //平均の方法
input uint                 FastPeriod=14;                               //高速平均化の期間
input uint                 SlowPeriod=25;                               //フロー平均の期間
input int                  XPhase=15;                                   //低速平滑化期間

テスト結果:


図18 戦略 # 7. テスト結果


戦略 # 8 のテスト(3 つのTyroneレベルとシャフトレンドサイクルオシレーター)

プリセット:

input string               Inp_EaComment="Strategy #8";                 //ea のコメント
input double               Inp_Lot=0.01;                                //ロット
input MarginMode           Inp_MMode=LOT;                               //mm
input int                  Inp_MagicNum=1111;                           //マジックナンバー
input int                  Inp_StopLoss=400;                            //ストップロス (ポイント)
input int                  Inp_TakeProfit=600;                          //テイクプロフィット(ポイント)
input int                  Inp_Deviation = 20;                          //偏差 (ポイント)

input double               Overbuying=90;                               //Overbuying ゾーン
input double               Overselling=15;                              //Overbuying ゾーン
//シャフトレンドサイクルパラメータ

input Smooth_Method        MA_SMethod=MODE_SMMA_;                        //ヒストグラムスムージングメソッド
input int                  Fast_XMA = 20;                               //高速移動平均期間
input int                  Slow_XMA = 30;                               //低速移動平均期間
input int                  SmPhase= 100;                                //移動平均平滑化パラメータ
input Applied_price_       AppliedPrice=PRICE_CLOSE_;                   //価格定数
input int                  Cycle=10;                                    //ストキャスティクスオシレーター周期

//---ティレベルインジケーターパラメータ

input int                  TirPeriod=13;                                //インジケーターの期間
input int                  Shift=0;                                     //バー内のインジケーターの水平方向のシフト

テスト結果:


図19 戦略 # 8. テスト結果

戦略のテスト # 9 (ケルトナーズチャンネルはヒストグラムとして描画され、iTrend インジケータは雲として描かれます)。

プリセット:

input string               Inp_EaComment="Strategy #9";                 //ea のコメント
input double               Inp_Lot=0.01;                                //ロット
input MarginMode           Inp_MMode=LOT;                               //mm
input int                  Inp_MagicNum=1111;                           //マジックナンバー
input int                  Inp_StopLoss=400;                            //ストップロス (ポイント)
input int                  Inp_TakeProfit=600;                          //テイクプロフィット(ポイント)
input int                  Inp_Deviation = 20;                          //偏差 (ポイント)

input uint                 BuyLevel=50;                                 //Overbuying ゾーン
input double               SellLevel=-50;                               //Oversellingゾーン
//---i-KlPrice インジケーターパラメータ

input Smooth_Method        MA_Method1=MODE_ParMA;                       //移動平均の平滑化法
input uint                 Length1=100;                                 //移動平均の平滑化深さ
input int                  Phase1=15;                                   //移動平均平滑化パラメータ

input Smooth_Method        MA_Method2=MODE_SMMA_;                        //キャンドルサイズスムージング方式
input uint                 Length2=20;                                  //ロウソクのサイズの平滑化の深さ
input int                  Phase2=100;                                  //キャンドルサイズスムージングパラメータ

input double               Deviation=2.0;                               //channel expansion ratio
input uint                 Smooth=20;                                   //インジケータースムージング期間

input Applied_price_       IPC=PRICE_TYPICAL_;                          //価格定数
input int                  Shift=0;                                     //バー内のインジケーターの水平方向のシフト

//バー内のインジケーターの水平方向のシフト</s3>

input Applied_price_       Price_Type=PRICE_TYPICAL_;
//---iTrend インジケーターパラメータ
input uint                 MAPeriod=14;
input ENUM_MA_METHOD        MAType=MODE_EMA;
input ENUM_APPLIED_PRICE     MAPrice=PRICE_CLOSE;
//--- Bollinger parameters
input uint                 BBPeriod=14;
input double               deviation_=2.0;
input ENUM_APPLIED_PRICE    BBPrice=PRICE_CLOSE;
input Mode                BBMode=Mode_1;

テスト結果:


図20  戦略#9. テスト結果

戦略#10のテスト (平均変化価格のモメンタムと MA ファン FigurelliSeries)。

プリセット:

//--- Average Change indicator parameters
input Smooth_Method        MA_Method1=MODE_SMMA_;                       //移動平均の平滑化法
input int                  Length1=12;                                  //移動平均の平滑化深さ                   
input int                  Phase1=15;                                   //移動平均平滑化パラメータ
input Applied_price_       IPC1=PRICE_CLOSE_;                           //移動平均価格定数

input Smooth_Method        MA_Method2=MODE_EMA_;                        //インジケータースムージング方式
input int                  Length2 = 5;                                 //インジケータースムージングの深さ
input int                  Phase2=100;                                  //インジケータースムージングパラメータ
input Applied_price_       IPC2=PRICE_CLOSE_;                           //平滑化のための価格定数

input double               Pow=5;                                       //power
input int                  Shift=0;                                     //バー内のインジケーターの水平方向のシフト

//--- Indicator parameters
input uint                 StartPeriod=6;                               //初期期間
input uint                 Step_=6;                                     //期間計算ステップ
input uint                 Total=36;                                    //MAのナンバー
input ENUM_MA_METHOD        MAType=MODE_EMA;                            //MAスムージングタイプ
input ENUM_APPLIED_PRICE     MAPrice=PRICE_CLOSE;                       //MAの価格タイムシリーズ
input int                  Shift1=0;                                    //インジケーターの水平シフト 

テスト結果:


図21  戦略#10. テスト結果


結論

次のようにテストと最適化が行われました。

  • ほとんどの戦略では、総利益は、強いトレンドにおいて得られました。
  • 連続した損失は、レンジ期間中に発生しました。
  • いくつかの戦略では、TPとSLが固定されているために損失が発生しました。
  • いくつかのケースでは、トレンドの識別が遅れていたので、時間枠を変更する必要がありました。
これらより次の結論を下すことができます。 トレンド戦略の開発とテストを通して、長所と短所が得られました。 強く、長いトレンドの期間において良い成績を残しましたが、レンジやヨコヨコの相場ではうまくいきません。 主な結論は、現在のトレンドを決定する方法にそれほど違いはないということです。 すべてのトレーディング戦略は、同様に長所と短所があります。

結論

これより下記は、この記事で開発されたEAの名前の表です。クラスとインジケーターもあります。 添付のアーカイブには、すべてのファイルが含まれています。 操作方法は、 MQL5フォルダのターミナルルートフォルダに保存するだけです。

この記事で使用したプログラム:

#
 Name
Type
詳細
 1
Strategy_1.mq5
Expert Advisor
 戦略 # 1。 ヒストグラムとして描かれた RSI のADXCloud インジケーター。 
 2
Strategy_2.mql5
Expert Advisor
 戦略 # 2。 RVI のヒストグラムとして描画される標準偏差トレンドインジケーター。
 3
Strategy_3.mq5
Expert Advisor  戦略 # 3。 ビルウィリアムズとブルベアインジケーター。 
 4
Strategy_4.mq5
Expert Advisor
 戦略 # 4。 Ehlerの重心と平均価格の速度のインジケーター。
 5
Strategy_5.mq5 Expert Advisor  戦略 # 5。 複合バイナリウェーブインジケーター。
 6
Strategy_6.mq5
Expert Advisor
 戦略 # 6。 LeManの複合重みづけオシレーター。
 7 Strategy_7.mq5 
Expert Advisor
 戦略 # 7。 ドンチャンチャネル価格がウィリアムズのAOに置き換えられたMACDで複合されています。
 8 Strategy_8.mq5 Expert Advisor  戦略 # 8。 3つのTyroneのレベルに基づいたSchaffオシレーター。
 9 Strategy_9.mq5 Expert Advisor  戦略 # 9。 ヒストグラムとして描画されたケルトナーチャネルと、雲として描かれた iTrend インジケーター。
 10 Strategy_10.mq5 Expert Advisor  戦略 # 10。 平均変化価格のモメンタムとMAファンFigurelliSeries。
 11 TradeFunctions.mqh Code Base  トレードのクラス
 12 smoothalgorithms.mqh  Code Base  スムージングアルゴリズムのクラス
 13 adxcloud.mq5 Indicator  戦略 #1で使用
 14 rsi_сolor.mq5 Indicator  戦略 #1で使用
 15 colorstddev.mq5 Indicator  戦略2で使用
 16 colorzerolagrvi.mq5  Indicator  戦略2で使用
 17 Bear_Bulls_Power.mq5 Indicator  戦略3で使用
 18 cronexao.mq5 Indicator  戦略3で使用
 19 centerofgravityosma.mq5 Indicator  戦略4で使用
 20 average_speed.mq5 Indicator  戦略4で使用
 21 binarywave.mq5 Indicator  戦略5で使用
 22 objective.mq5 Indicator  戦略6で使用
 23 WeightOscillator.mq5 Indicator   戦略6で使用
 24 donchian_channels_system.mq5 Indicator  戦略7で使用
 25 cronexao.mq5 Indicator  戦略7で使用
 26 schafftrendcycle.mq5 Indicator  戦略8で使用
 27 tirone_levels_x3.mq5 Indicator  戦略8で使用
 28 i-klprice.mq5 Indicator  戦略9で使用
 29 i_trend.mq5 Indicator  戦略9で使用
 30 averagechange.mq5 Indicator  戦略10で使用
 31 figurelliseries.mq5 Indicator  戦略10で使用