トレードDiNapoliレベル

Dmitriy Zabudskiy | 20 2月, 2018


イントロダクション

実際の生き物と同じように、相場は絶えず進化しています。 昨日まで完璧だったものは、今日通用しなくなるかもしれません。 しかし、細かい修正に時間をかけることはありますが、根源的なものは変わりません。 “DiNapoliレベル”もそういったものの一つで、その考案者の名前をとって名づけられました。 フィボナッチリトレースメントの実現を表します。 

最初のポイント-フィボナッチレベルは 38.2% と 61.8% です。 テイクプロフィットポイントを取るために、次のことをします。: COP (取引目標ポイント)-61.8%、OP (オブジェクティブポイント)-100%、XOP (拡張オブジェクティブポイント)-161.8%。 すべての距離は、トレンドの長さ (図1参照) からセントあたりで指定されています。

図1. 通貨ペア EURUSD H4 の "DiNapoliレベル"

図1. 通貨ペア EURUSD H4 のDiNapoliレベル

図1で、レベルは、標準的なMetaTrader5パッケージの一部であるフィボナッチツールを使用して設定されています。フィボナッチリトレースメント(赤の色) とイクスパンジョン(青の色)。 さらに、この図はレベルの設定方法を示しています。 2つの矢印でマークされた縦線は、トレンド (赤い下向きの線) から取得され、最大ロールバック価格から下方に設定されている 61.8% のレベルを示し、COP のレベルを形成します。

相場参入には4つの亜種があります: "バッシュ"、"盆栽"、"マインスイーパーA" と "マインスイーパーB"。 最初の2つは、積極的です。 相場のエントリー項目は最初の訂正の段階で起こります。 最後の2つのシナリオは、2番目の修正のポジションを開くことを意味します。 亜種間の他の違いはストップロスのレベルを置くことにあります。 これらのメソッドは記事「DiNapoliトレーディングシステム」で詳しく説明されているため、ここでは詳細については説明しません。

上記で提供された図では、DiNapoliレベルの古典的な画像を表示しています。 ご覧のとおり、相場にエントリーするための最良の選択は、レベル 61.8%(ここでは、赤色の価格マークを見ることができます) ですが、このレベルは常に到達されていません。 したがって、トレーダーは、積極的に 38.2% で売りを開始しました。:これは、20:00 で下向きのロウソク足で証明されています。 このようなエントリーは、"茂み" のメソッドで積極的なトレードに特徴的です。 続いて、トレーダーは、ポジションが開かれている場所よりも高い場所にストップを置きます。 決済は COP レベル (61.8%) で行われました。 青い価格の印が付いています。

単純に見えますが、常に頻繁にトレンドの変化に引き起こされていません。 より確実にトレンドを決定するためには、著者は、レベルに加えて、インジケーターを使用しています。:つまり、移動平均 (MA) とオシレーターストキャスティクスです。 有益な戦略を開発し、EAでこれを実装するために、この基盤があります。


標準的なMetaTrader5ツールの戦略を形成する

効果的なDiNapoliのレベルのトレード戦略は、要因数の共同の関数を意味します。 したがって、そのプログラミングの実現はかなり複雑ですが面白いです。 また、ここにはトレード構成の難しさがあります。この戦略によると、時には、相場に参入するために長い時間を待たなければならない。 継続的な裁量での監視は、トレーダーにとって困難なタスクです。そのため、トレーディングマシンの要因が優先されます.

EAの基礎として機能する戦略を説明します。

図2. 補助インジケーターによるDiNapoliレベル EURUSD H4 (上昇トレンド)

図2. 補助インジケーターによるDiNapoliレベル EURUSD H4 (上昇トレンド)

図2は、通貨ペア EURUSD H4 のチャートを示しています。 次のようにマークされています。: DiNapoliレベル、インジケーターストキャスティクス (8、3、3) と5のシフトと 25 (赤) と 7 (青) の期間の2つの移動平均。

一つずつ始めましょう。 チャートでは、レベル 23.6%、38.2%、50%、61.8% で、を重ねてフィボナッチのグリッドと上向きのトレンドを見ることができます。 ここでは、古典的な方法と比べて多くのレベルがあります。プラクティスでは、価格が各々からできることを示しています。 

ロールバック (訂正) フィボナッチ拡張が重畳されます。: このようにCOPと OP レベルが発生します。 ただし、この場合も、戦略全般においても、レベルは微々たるものです。 ここでは、排他的に利益を設定するために計算されます (後でコード内でを参照してください)。

収支の結果は4点でエントリーが可能ということです。 図は、最初とポイント 23.6%でトレンドを逆にキャッチする場合、 利益を得ることを示しています。しかし、ドローダウンは非常に重要になります。 確かに, これでは満足できるものではありません。したがって、より信頼性の高いエントリポイントを探していきます。 

  • ルール 1: DiNapoliレベルのエントリは 23.6% から 61.8% に可能です。 これは分析の第2段階に進む理由で、かなり広範囲です。

次のシグナルフィルタは、2つのレベル-30 と70のストキャスティクスインジケーター (パラメータ8、3、3) です。

  • ルール 2: ストキャスティクスのシグナルとメインラインが30のレベルの下にある場合に買いします。そして、70のレベルの上にあるときに売ります。

さて、トレンドを決定しましょう。 これを行うには、移動平均 (シフト5、期間 25) を使用します。 価格がトレンドラインよりも高いときに買い、低いときに売りします。 しかし、これはきわめて幅が広いので、もう一つ移動平均線を入れましょう。(シフト5、期間7) しかし、これを使用しても、範囲が広すぎるままのことがあります。 そのような場合には追加のリダクションが導入されます。: 25の期間とラインに近い、相違の "アッパーハーフ" だけで開くことができます。

  • ルール 3: 時間間隔の後半に、25の期間のラインに近い方を買います。一方、時間間隔の短いラインは上に配置されます。
  • ルール 4: 時間間隔の後半で、25の期間に近いラインに売ります。一方、時間間隔の短いラインは下に配置されます。

上記の条件が働き、ポジションをとったと仮定します。 さて、決済のルールを調整してみましょう。 これを行うため、フィボナッチの拡張によって形成されたレベルだけでなく、ストキャスティクスインジケーターを使用します。

  • ルール 5: 価格が目標のDiNapoliレベル (COP、OP、XOP) のいずれかに達した場合に決済、またはストキャスティクスインジケーターが決済シグナルを与えます。

図2および図3では、ルールに適合する領域を黄色の長方形で示しています。

図3. 補助インジケーターによるDiNapoliレベル EURUSD H4 (下降トレンド)

図3. 補助インジケーターによるDiNapoliレベル EURUSD H4 (下降トレンド)

ご覧のとおり、結果として得られるルールは論理的で明確です。 損益に転送するためのテイクプロフィットまたはストップロスとマイナートレーリングを置くことはまだ規定されていません。 すべては以下のように見なされます。


戦略のコーディング

インプットパラメータ

まず、クラス CTrade (トレード mqh) に接続します。 その後、DiNapoliのレベルのパラメータを確立します。-最小エントリレベルと最大のエントリレベル。 デフォルトでは、上記のように設定されています: 23.6% から 61.8%。 しかし、通貨ペアごとにことなるリミットがある可能性があります。

次のパラメータは、テイクプロフィットとストップロスのパラメータです。 ストップロスは、天井価格からのレベルによって配置されます。 図2と図3では、赤色で表示されています。 テイクプロフィットは、オーダー価格から配置されます。

つまり、買いレベルは 50%、ストップロスが 70% に設定されていると仮定し、テイクプロフィット-70%です。 100% が100ポイントであると仮定した場合、ストップロスは20ポイントで買い価格よりも低く配置されますが、一方で、テイクプロフィットは70ポイントということです。 このEA を最適化する際に考慮する必要があります。

さらに、ブレイクイーブンへの受け渡しを定義する必要があります。 コード内の現在のパラメータによると、価格が400ポイントで通過すると、ストップロスは10ポイントずつ利益面にシフトします。

残りのパラメータはコメントなしです。

//+------------------------------------------------------------------+
//|                                               Dinapoli_v1.01.mq5 |
//|                                                          Aktiniy |
//|                                            https://www.mql5.com/ |
//+------------------------------------------------------------------+
#property copyright "Aktiniy"
#property link      "https://www.mql5.com/"
#property version   "1.01"
#include<Trade\Trade.mqh>
//---インプットパラメータ
//--- Fibo number
input double   percent_min_enter=23.6;      //最小エントリ数 (%)
input double   percent_max_enter=61.8;      //最大エントリ数 (%)
input double   percent_for_tp=60;           //テイクプロフィットのパーセント
input double   percent_for_sl=70;           //ストップロスのパーセント
input int      trailing_sl=400;             //ポイント通過時にブレイクイーブンに切り替える
input int      trailing_profit=10;          //ポイントのブレイクウイーブンレベル
//---オーダー
input long     magic_number=65758473787389; //マジックナンバー
input double   order_volume=0.01;           //ロットサイズ
input int      order_deviation=100;         //ポジション取得の偏差
//---ストキャスティクス
input int      stochastic_k=8;              // ストキャスティクスの“Period %К"
input int      stochastic_d=3;              // ストキャスティクスの“Slowing"
input int      stochastic_slowing=3;        // ストキャスティクスの“Period %D"
input double   stochastic_up_level=70;      // ストキャスティクスの “トップからのシグナルレベル"
input double   stochastic_down_level=30;    //インジケーターストキャスティクス "ボトムからのシグナルレベル"
//---MA レッド 25 5
input int      ma_red_period=25;            // MA RED “Period"
input int      ma_red_shift=5;              // MA RED “Shift"
//---MA ブルー 7 5
input int      ma_blue_period=7;            // MA BLUE “Period"
input int      ma_blue_shift=5;             //MA BLUE “Shift"
//---変数
CTrade trade;
int stochastic_handle=0;
char answer_stochastic=0;
int ma_red_handle=0;
int ma_blue_handle=0;
char answer_ma=0;
int fractals_handle=0;


結論として、インジケーターハンドルを格納する変数と、シグナル関数の応答が決定されます。

初期化

下記は、初期化関数です。 ここでは、CTrade と受信インジケーターハンドルを設定します。

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int()
  {
//---
   trade.SetExpertMagicNumber(magic_number);
   trade.SetDeviationInPoints(order_deviation);
   trade.SetTypeFilling(ORDER_FILLING_FOK);
   trade.SetAsyncMode(false);

   stochastic_handle=iStochastic(_Symbol,_Period,stochastic_k,stochastic_d,stochastic_slowing,MODE_SMA,STO_LOWHIGH);
   ma_red_handle=iMA(_Symbol,_Period,ma_red_period,ma_red_shift,MODE_SMA,PRICE_CLOSE);
   ma_blue_handle=iMA(_Symbol,_Period,ma_blue_period,ma_blue_shift,MODE_SMA,PRICE_CLOSE);
   fractals_handle=iFractals(_Symbol,_Period);
//---
   return(INIT_SUCCEEDED);
  }


main 関数に進む前に、シグナル関数の原理を研究しましょう。

ストキャスティクスからのシグナルの取得

//+------------------------------------------------------------------+
//| Getting signal from Stochastic                                   |
//+------------------------------------------------------------------+
void Stochastic(char &answer)                                                                          //0-シグナルなし;1-シグナル上向き;2-シグナル下向き
  {
   answer=0;                                                                                           // answer
   double stochastic_line_main[3];
   double stochastic_line_signal[3];
   int line_main=CopyBuffer(stochastic_handle,0,0,3,stochastic_line_main);
   int line_signal=CopyBuffer(stochastic_handle,1,0,3,stochastic_line_signal);
   if(line_main!=3 || line_signal!=3)
     {Alert("Error of copy iStochastic: main line=",line_main,", signal line=",line_signal);}          // checking copied data Stochastic

   if(stochastic_line_main[1]>stochastic_up_level && stochastic_line_signal[1]>stochastic_up_level)
     {answer=2;}                                                                                       // sale beneficial
   if(stochastic_line_main[1]<stochastic_down_level && stochastic_line_signal[1]<stochastic_down_level)
     {answer=1;}                                                                                       // buy beneficial
  }


これは、本当にシンプルです。: インジケーターの3つの最後の値がコピーされ、最後の1つは、設定でプリセットレベルと比較されます。 この関数は、応答を変数に渡します。

インジケータからシグナルを取得する MA

//+------------------------------------------------------------------+
//| Getting signal from indicators MA                                |
//+------------------------------------------------------------------+
void MA(char &answer,                                               //0-シグナルなし;1-シグナル上向き;2-シグナル下向き
        double &line_blue,
        double &line_red,
        double ask,
        double bid)
  {
   answer=0;                                                        // answer
   double ma_red[3];
   double ma_blue[3];
   int red=CopyBuffer(ma_red_handle,0,0,3,ma_red);
   int blue=CopyBuffer(ma_blue_handle,0,0,3,ma_blue);
   if(red!=3 || blue!=3)
     {Alert("Error of copy iMA: MA red=",red,", MA blue=",blue);}   // check copied data MA red and blue

   line_blue=ma_blue[2];
   line_red=ma_red[2];

   if(ma_blue[2]>ma_red[2])                                         //おそらくトレンドが上向きに向けられている
      if(ask<ma_blue[2])                                            //おそらく価格はロールバックの位置にある
         if(ask>ma_red[2])
           {answer=1;}                                              //すぐにトレンドの方向 (上向き) への動きが可能

   if(ma_blue[2]<ma_red[2])                                         //おそらくトレンドは下方に向けられている
      if(bid>ma_blue[2])                                            //おそらく価格はロールバックのポジションにある
         if(bid<ma_red[2])
           {answer=2;}                                              //すぐにトレンドの方向 (下向き) に移動可能
  }


ここでは、3つの最後の値もバッファにコピーされます。次に、比較メソッドによって、価格が2つのインジケーターラインの間にあるかどうかが定義されます。 以前は、トレードが可能である間隔が狭くなることが多いことを考察してきました。 このため、この関数は2つの移動平均の最後の値も渡します。 トレード間隔の縮小のメカニズムは後で考慮されます。

インジケーターフラクタルからのデータの受信

トレンドのサイズの確立の関数はより複雑です。 フラクタルデータに実装されています。 この関数の初めに100の最後のデータがコピーされます。その後、上下のシグナルは、2つのサイクルで実行されます. ここでは、フラクタルの可用性に関するテストが実現されています。:10 000 以上のすべての値がオフにフィルタリングされ、隣接するものは、最後から最大と最小の最初のフラクタルを探して比較されます。

//+------------------------------------------------------------------+
//| Receiving data from indicator Fractals                           |
//+------------------------------------------------------------------+
void Fractals(double &price_up,
              double &price_down)
  {
   price_up=0;
   price_down=0;
   double fractals_up[100];
   double fractals_down[100];
   int up=CopyBuffer(fractals_handle,0,0,100,fractals_up);
   int down=CopyBuffer(fractals_handle,1,0,100,fractals_down);
   if(up!=100 || down!=100)
     {Alert("Error of copy iFractals: Fractals up=",up,", Fractals down=",down);} // checking copied data Fractals up and down

   double price_high=0;
   double price_low=0;

   for(int x=99; x>0; x--)                                                        //上部フラクタルのサイクル
     {
      if(fractals_up[x]<10000)                                                    //フラクタルの可用性をチェック
        {
         if(price_high==0){price_high=fractals_up[x];}                            //初期チェックアップ
         if(price_high>fractals_up[x]){break;}                                    //フラクタルが下向きのストップサイクルを行っている場合
         else{price_high=fractals_up[x];}                                         //フラクタルが上向きになっている場合、コピー
        }
     }

   for(int x=99; x>0; x--)                                                        //低いフラクタルの繰り返しサイクル
     {
      if(fractals_down[x]<10000)                                                  //フラクタルの可用性をチェック
        {
         if(price_low==0){price_low=fractals_down[x];}                            //初期チェックアップ
         if(price_low<fractals_down[x]){break;}                                   //フラクタルが上向きになっている場合、サイクルをストップ
         else{price_low=fractals_down[x];}                                        //フラクタルが下方に進んでいる場合、コピー
        }
     }

   double price_ask=SymbolInfoDouble(_Symbol,SYMBOL_ASK);                         //買い価格リクエスト
   double price_bid=SymbolInfoDouble(_Symbol,SYMBOL_BID);                         //売り価格リクエスト

   if(price_high>price_ask && price_high>price_bid)                               //ask価格 とBid価格が上下価格の間にあるかどうかを確認する
      if(price_low<price_ask && price_low<price_bid)
        {
         price_up=price_high;                                                     //アンサーに値を割り当てる
         price_down=price_low;
        }
  }
//+------------------------------------------------------------------+


シグナルが信頼できることを確認するには、価格が見つかった範囲内にあるかどうかをチェックします。 最後に、おそらくキーフラクタルは、2つの最後のロウソクの作成後に形成されるために行われます (フラクタルの形成ルールによる)。

ポジション開始価格の計算

最も重要な関数は、DiNapoliレベルの計算です。 以前に受信した価格の最大値と最小値、および想定トレンドの方向のデータと、移動平均からの最後の価値が渡されます。 最初に、得られた距離はすべてポイントに変換されます。そして、パラメータのセクションでプリセットごとにセントに基づいて計算されます。 セクションは分数であるため、正規化します。

//+------------------------------------------------------------------+
//| Calculation of position opening price                            |
//+------------------------------------------------------------------+
void Price_for_order(double high_price,
                     double low_price,
                     double &p_enter_min,
                     double &p_enter_max,
                     double &p_tp,
                     double &p_sl,
                     char trend,                                      //1-上向き;2-下向き
                     double blue_line,
                     double red_line
                     )
  {
   double point_price=(high_price-low_price);
   double point_enter_min=point_price*percent_min_enter/100;
   double point_enter_max=point_price*percent_max_enter/100;
   double point_tp=point_price*percent_for_tp/100;
   double point_sl=point_price*percent_for_sl/100;
   double point_ma_line=MathAbs(blue_line-red_line)/2;

   point_enter_min=NormalizeDouble(point_enter_min,_Digits);
   point_enter_max=NormalizeDouble(point_enter_max,_Digits);
   point_ma_line=NormalizeDouble(point_ma_line,_Digits);

   point_tp=NormalizeDouble(point_tp,_Digits);
   point_sl=NormalizeDouble(point_sl,_Digits);

   if(trend==1)                                                       //上向き
     {
      p_enter_min=high_price-point_enter_min;
      double p_ma_min=red_line+point_ma_line;
      if(p_enter_min>p_ma_min)
        {p_enter_min=p_ma_min;}
      p_enter_max=high_price-point_enter_max;
      if(p_enter_max>p_enter_min)
        {p_enter_max=red_line;}

      p_tp=p_enter_min+point_tp;
      p_sl=high_price-point_sl;
     }

   if(trend==2)                                                       //下向き
     {
      p_enter_min=low_price+point_enter_min;
      double p_ma_min=red_line-point_ma_line;
      if(p_enter_min<p_ma_min)
        {p_enter_min=p_ma_min;}
      p_enter_max=low_price+point_enter_max;
      if(p_enter_max<p_enter_min)
        {p_enter_max=red_line;}

      p_tp=p_enter_min-point_tp;
      p_sl=low_price+point_sl;
     }
  }


さらに、トレンドの方向に応じて、価格が計算され、この関数はアンサーを返します。

ポジションの変更と決済

最初に、最後のポジションにあるすべてのデータを取得します。 さらに、オーダーの種類に応じて、更新されます (ブレイクイーブンに移動) または決済、ストキャスティクスは、反対のシグナルを出します。

//+------------------------------------------------------------------+
//| Modification and closing of position                             |
//+------------------------------------------------------------------+
void Position_mod(double ask,
                  double bid,
                  int point,
                  int profit,
                  char stochastic)
  {
   double price=trade.RequestPrice();
   double tp=trade.RequestTP();
   double sl=trade.RequestSL();
   double sl_point=point*_Point;
   double sl_profit=profit*_Point;
   double tp_point=(MathAbs(tp-price))/2;

   if(trade.RequestType()==ORDER_TYPE_BUY)              //買いオーダー
     {
      if(sl<price && bid>(price+sl_point))
        {
         sl_profit=sl_profit+price;
         trade.PositionModify(_Symbol,sl_profit,tp);
        }
      if(stochastic==2)                                 //下方への移動の予想
        {
         trade.PositionClose(_Symbol,order_deviation);
        }
     }
   if(trade.RequestType()==ORDER_TYPE_SELL)             //売りオーダー
     {
      if(sl>price && ask<(price-sl_point))
        {
         sl_profit=sl_profit-price;
         trade.PositionModify(_Symbol,sl_profit,tp);
        }
      if(stochastic==1)                                 //上方への移動が予想される
        {
         trade.PositionClose(_Symbol,order_deviation);
        }

     }
  }


統合関数

最後の関数は、以前に考えられたすべての関数を統合します。 最初に、すべてのリコンサイル変数が宣言されます。 次に、「上位戦略ルール」の現在の主な値を受信するインジケーター関数を通じます。 さらに、「上のルール」の受け取られたアンサーによって分割が起こります。 相場に有益な参入を提供するトレンドと価格のサイズが計算されます。 以前に開かれたポジションが検出されず、価格が計算範囲内にある場合は、ポジションを開きます。

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   double price_high=0;                                           //フラクタルの計算の高い価格
   double price_low=0;                                            //フラクタルの計算の安値

   double price_enter_min=0;                                      //最小エントリー価格
   double price_enter_max=0;                                      //最大エントリー価格
   double price_tp=0;                                             //テイクプロフィットレベル
   double price_sl=0;                                             //ストップロスレベル

   double price_ask=SymbolInfoDouble(_Symbol,SYMBOL_ASK);         //買い価格リクエスト
   double price_bid=SymbolInfoDouble(_Symbol,SYMBOL_BID);         //売り価格リクエスト

   double ma_blue_line=0;                                         // value of few-period МА BLUE
   double ma_red_line=0;                                          // value of multi-period МА RED

   Stochastic(answer_stochastic);
   MA(answer_ma,ma_blue_line,ma_red_line,price_ask,price_bid);

   if(answer_stochastic==1)                                       //上方への移動が予想される
     {
      if(answer_ma==1)                                            // we are in buy-trade range 
        {
         Fractals(price_high,price_low);
         Price_for_order(price_high,price_low,price_enter_min,price_enter_max,price_tp,price_sl,1,ma_blue_line,ma_red_line);

         if(price_ask<price_enter_min && price_ask>price_enter_max)
           {
            if(PositionsTotal()==0)
              {
               trade.Buy(order_volume,_Symbol,price_ask,price_sl,price_tp,"Buy");
              }
           }
        }
     }

   if(answer_stochastic==2)                                        // we are in sell-trade range 
     {
      if(answer_ma==2)                                             // move downward is expected
        {
         Fractals(price_high,price_low);
         Price_for_order(price_high,price_low,price_enter_min,price_enter_max,price_tp,price_sl,2,ma_blue_line,ma_red_line);

         if(price_bid>price_enter_min && price_bid<price_enter_max)
            if(PositionsTotal()==0)
              {
               trade.Sell(order_volume,_Symbol,price_bid,price_sl,price_tp,"Sell");
              }
        }
     }

   if(PositionsTotal()!=0)
     {
      Position_mod(price_ask,price_bid,trailing_sl,trailing_profit,answer_stochastic);
     }

  }


今回の場合には、オープンポジションが既に利用可能な場合は、ポジションのアップグレード/削除関数をコールします。 これでコードは最後です。 さて、EAをテストしましょう。


テスト結果

EA dinapoli_v 1.01 は、タイムフレーム H4 で、様々な通貨ペアでテストされました。 2017.01.01 から2017.11.12 までヒストリーを使いました。

シンボル: EURUSD

パラメータ:

percent_min_enter=33.6 magic_number=65758473787389 stochastic_up_level=70
percent_max_enter=56 order_volume=0.01 stochastic_down_level=30
percent_for_tp=145 order_deviation=100 ma_red_period=25
percent_for_sl=100 stochastic_k=8 ma_red_shift=5
trailing_sl=675 stochastic_d=3 ma_blue_period=7
trailing_profit=40 stochastic_slowing=3 ma_blue_shift=5



図4. テスト結果 EURUSD H4 (2017.01.01-2017.11.12)

シンボル: GBPUSD

パラメータ:

percent_min_enter=23.6 magic_number=65758473787389 stochastic_up_level=90
percent_max_enter=50 order_volume=0.01 stochastic_down_level=30
percent_for_tp=335 order_deviation=100 ma_red_period=15
percent_for_sl=63 stochastic_k=3 ma_red_shift=5
trailing_sl=425 stochastic_d=1 ma_blue_period=4
trailing_profit=20 stochastic_slowing=4 ma_blue_shift=5



図5. テスト結果 GBPUSD H4 (2017.01.01-2017.11.12)

シンボル: NZDUSD

パラメータ:

percent_min_enter=31.6 magic_number=65758473787389 stochastic_up_level=60
percent_max_enter=88 order_volume=0.01 stochastic_down_level=30
percent_for_tp=45 order_deviation=100 ma_red_period=24
percent_for_sl=95 stochastic_k=10 ma_red_shift=5
trailing_sl=550 stochastic_d=2 ma_blue_period=4
trailing_profit=100 stochastic_slowing=1 ma_blue_shift=5



図6. テスト結果 NZDUSD H4 (2017.01.01-2017.11.12)

シンボル: USDCAD

パラメータ:

percent_min_enter=23.6 magic_number=65758473787389 stochastic_up_level=60
percent_max_enter=73 order_volume=0.01 stochastic_down_level=20
percent_for_tp=315 order_deviation=100 ma_red_period=25
percent_for_sl=69 stochastic_k=10 ma_red_shift=5
trailing_sl=325 stochastic_d=1 ma_blue_period=3
trailing_profit=10 stochastic_slowing=1 ma_blue_shift=5



図7. テスト結果 USDCAD H4 (2017.01.01-2017.11.12)

シンボル: USDCHF

パラメータ:

percent_min_enter=49.6 magic_number=65758473787389 stochastic_up_level=70
percent_max_enter=69 order_volume=0.01 stochastic_down_level=40
percent_for_tp=55 order_deviation=100 ma_red_period=20
percent_for_sl=98 stochastic_k=13 ma_red_shift=5
trailing_sl=900 stochastic_d=6 ma_blue_period=12
trailing_profit=40 stochastic_slowing=3 ma_blue_shift=5



図8. テスト結果 USDCHF H4 (2017.01.01-2017.11.12)

シンボル: USDJPY

パラメータ:

percent_min_enter=23.6 magic_number=65758473787389 stochastic_up_level=60
percent_max_enter=50 order_volume=0.01 stochastic_down_level=20
percent_for_tp=295 order_deviation=100 ma_red_period=22
percent_for_sl=53 stochastic_k=3 ma_red_shift=5
trailing_sl=750 stochastic_d=1 ma_blue_period=5
trailing_profit=10 stochastic_slowing=1 ma_blue_shift=5



図9. テスト結果 USDJPY H4 (2017.01.01-2017.11.12)

シンボル: AUDUSD

パラメータ:

percent_min_enter=23.6 magic_number=65758473787389 stochastic_up_level=80
percent_max_enter=81 order_volume=0.01 stochastic_down_level=40
percent_for_tp=305 order_deviation=100 ma_red_period=13
percent_for_sl=69 stochastic_k=3 ma_red_shift=5
trailing_sl=250 stochastic_d=4 ma_blue_period=1
trailing_profit=20 stochastic_slowing=4 ma_blue_shift=5



図10. テスト結果AUDUSD H4 (2017.01.01-2017.11.12)

得られた結果は、エントリの不安定性を示します。 すべてのシンボルについて、USHCHF を除いて、ほぼ水平直線が観測されます。

理由は次のとおりです。: バランスのドローダウンを減らすための作戦は近い位置にストップロスを配置することです。 しかし、そのような要件では、シグナルの品質が向上しています。 それぞれ、シグナルの品質が良くなればなるほど、相場へのエントリーは少なくなるが、同時に、チャートの価格はより安定的になります。 (例として、USDCHF)。 しかし、実際にはできるだけ多くの利益を受け取れた方が良いです。 EAが着実に複雑な相場状況で損失を最小限に抑えるようにする必要があります。

したがって、最適化とテストでは、エントリの数と結果に依存する必要があります。

シンボル: XAUUSD

すべての人気通貨ペアでテストした後は、商品相場でどのように動作するかを調べると良いでしょう。 したがって、 XAUUSD (金の先物) をテストしました:

パラメータ:

percent_min_enter=23.6 magic_number=65758473787389 stochastic_up_level=90
percent_max_enter=50 order_volume=0.2 stochastic_down_level=10
percent_for_tp=255 order_deviation=100 ma_red_period=23
percent_for_sl=80 stochastic_k=3 ma_red_shift=5
trailing_sl=750 stochastic_d=1 ma_blue_period=6
trailing_profit=10 stochastic_slowing=1 ma_blue_shift=5




図11. テスト結果 XAUUSD H4 (2017.01.01-2017.11.12)

金の結果は興味深いものです。: EAは、83.3 パーセント (収益性の高いトレード) の精度内のエントリを計算し、ドローダウンで 40% 以下で、利益は461% を達成しました。 10倍の利益がドローダウンに対してあることを意味します。 これは幾分興味深いですが、取引数が少ないので (完全に、18のトレードがある) 実行されたテストに基づいて重大な結論を作ることができません。


トレード戦略のデメリット

他と同様に、開発したEAは、欠点があります。

図12. トレンドに関するEA (NZDUSD H4)

図12. トレンドに関するEA (NZDUSD H4)

図12は、EAが特定のチャネルでどのように動作するかを示しています。 かなり安定して見えますが、明らかに欠点があります。つまり、早すぎる決済です。

図13. レンジ (EURUSD H4) のEA

図13. レンジ (EURUSD H4) のEA

そして、別の "ボトルネック"があります。EAはレンジにおいて熱心ではありません。 図13は、このような価格移動利益が大きくないことを示しています。また、エントリは正しく計算されません。

結果表

シンボルトレード利益トレード (%)純利益合計、$ Max. % のバランスドローダウン期待ペイオフ、$PFRFSharpe
AUDUSD4116 (39.0%)49.9411.81.222.262.800.19
EURUSD5228 (53.8%)124.7917.72.402.234.010.28
GBPUSD4017 (42.5%)126.3919.03.164.845.020.24
NZDUSD13151 (38.9%)111.6311.90.852.255.290.26
USDCAD23145 (19.4%)85.7128.70.371.921.930.12
USDCHF1714 (82.3%)77.114.34.547.167.240.94
USDJPY21045 (21.4%)50.8852.30.241.350.960.07
XAUUSD1815 (83.3%)461.995.1
25.679.009.880.47

テーブルから、異なるペア間の一般的なトレンドが表示されますが、結果が変化していることがわかります。 同じ設定で、いくつかのペアでは利益がでました (ただし、中程度)。 検索: 利益を上げるためには、各通貨ペアのEA設定を徹底的に最適化する必要があります。 

結論

長い年月をかけて強力なトレードにおける基礎がトレーダーの "古い学校"で培われてきました。 DiNapoliレベルトレード戦略は、良い戦略であることが証明されています。さらに、今後この開発を継続する予定です。 しかし、もちろん欠点があります: 例えば、レンジ相場では、EAは悪い結果となりました。 加えて、価格は常に COP のラインに到達していません。そして大抵、ポジションはストキャスティクス上で決済されます。

EAの利点は、積極的なエントリが含まれ、それは特に図13で明らかです。 EAは、ポジションを開いていないという状況でのアルゴリズムで、厳密に動作します。 しかし、結果として、利益は達成され、ドローダウンは微々たるものです。

添付ファイル

# 名称 種別 詳細
1 Dinapoli_v1.01.mq5 EA DiNapoliレベルと補助インジケーターの活用戦略を実現するEA
2 AUDUSDH4.set EA設定ファイル シンボルAUDUSD Н4のテストおよび最適化で使用される設定
3 EURUSDH4.set EA設定ファイル シンボル EURUSD H4 のテストおよび最適化で使用される設定
4 GBPUSDH4.set EA設定ファイル シンボル GBPUSD H4 のテストおよび最適化で使用される設定
5 NZDUSDH4.set EA設定ファイル シンボル NZDUSD H4 のテストおよび最適化で使用される設定
6 USDCADH4.set EA設定ファイル シンボル USDCAD H4 のテストおよび最適化で使用される設定
7 USDCHFH4.set EA設定ファイル シンボル USDCHF H4 のテストおよび最適化で使用される設定
8 USDJPYH4.set EA設定ファイル シンボル USDJPY H4 のテストおよび最適化で使用される設定
9 XAUUSDH4.set EA設定ファイル シンボル XAUUSD H4 のテストおよび最適化で使用される設定