MetaTrader 5をダウンロードする

アジアセッション中の夜間取引: どのように収益性を維持するか

6 2月 2018, 08:10
Dmitriy Zabudskiy
0
556

イントロダクション

多くのトレーダーは、しばしば夜間取引の概念に出くわします。 これが意味する心に浮かぶ最初の事はこのトレードが夜に遂行されるということです。 但し、これらは実にシンプルです。: 時間帯の相違は、世界の各エリアの夜は異なった時間帯に来ます。 アメリカとヨーロッパのトレードセッションは、UTC 世界協定時刻に対して-4と + 1 で行われます。

そのタイムゾーンは、アメリカとヨーロッパに地理的に反対しているアジアが続いています。 ヨーロッパのトレーダーが寝るとき、アメリカのトレーダーが家に帰るときに開始されます。 これが今回の指すところの夜間取引です。 トレードセッション期間は次のように表示されます (図1、時間は右から左へ)。


図1. 世界地図でのトレードセッション

図1. 世界地図でのトレードセッション


どうやら、夜間取引は、一般的に EURUSD、GBPUSD、USDCHF、USDCAD と EURGBP のようなペアでのレンジ運動になりますが、USDJPY、GBPJPY と AUDJPY では大きな活動があります。 もちろん、日によって発生しない場合もあります。 したがって、通貨ペアごとに夜間取引戦略があるかもしれません。

ナイトトレーディング戦略

一般的に、すべての外国為替トレード戦略は、大まかにトレンドとレンジに分けることができます。 トレンドは、相場の反転シグナルを検索します。 主に、 "強気" と "弱気" チャネルから水平方向のチャネルのブレークスルーやロールバックを探します。 レンジは、水平方向のチャネル境界内のロールバックに焦点を当てています。 レンジとトレンドの両方の相場は、しばしば重要なマクロ経済ニュースリリース中に成長するさまざまなボラティリティを示すことがあります。 実際には、トレンドの動きの間に高いボラティリティが発生することがありますが、ときに例外もあります。 同じインジケーターを適用してトレンドとレンジシグナルの両方を分析できますが、解釈は異なります。

ポピュラーな EURUSD ペアを見てみましょう。 アジアセッションでは、ボラティリティは通常減少し、平らに移動を開始します。 この段階でのロールバックは、しばしば些細なことであり、水平方向の動きに似ている可能性があります。


図2. アジアセッション中の EURUSD の平坦な動き

図2. アジアセッション中の EURUSD の平坦な動き

図2の黄色の長方形は、アジアセッション中の H1 の EURUSD を示しています。 最初の (左側) は、小イントラチャネルオシレーターを示しています。 セッションの開始時に、価格は、以前に作成されたトレンドに従って、小さな修正が (セッションの途中で) 最後に鋭いロールバックに向けるために発生します。 2番目の長方形は、この例では、一日の終わりに動きを繰り返すゆっくりと上向きの動きを示しています。 3番目の四角形には若干の変化があります。 前のセッションとは異なり、最初の夜の動きは、毎日のトレンドを正します。

すべてのケースでは、アジアのセッション中に価格帯内の小さな動きを見ることができます。 これは相場が「不確実性」を示すようにようです。 そのような動きはレンジとして扱うことができます。

黄色の長方形の上と下の境界線を見ることができます。 価格が変動するチャネルを制限します。 既に形成された図表のチャネルを引出すことは容易です。 しかし、リアルタイムで、どのように価格が移動するか見当がつかず疑問が残ります。 では、何をすべきでしょうか。

この問題を解決するには、レンジ時に良好なシグナルを表示するボリンジャーバンドトレンドインジケーターを使用します。

図3. EURUSD M30 にボリンジャーバンドを使用する

図3. EURUSD M30 にボリンジャーバンドを使用する

図3は、ボリンジャーバンドが取り付けられた EURUSD М30チャートを示しています。 選択した期間は可能な限り低くなります (10)、その他の設定はデフォルトです。 ここでは、価格がインジケータによって作成されたいわゆる "ダイナミックチャネル" に陥るメソッドを見ることができます。 しかし、チャネルのシグナルは十分に正確ではありません。 たとえば、最初の四角形では、価格は下に移動し、チャネルはそれに従います。 同時に、価格は、アジアのセッションの終わりまでにすべてが変わるにもかかわらず、チャンネルの下方の境界線から跳ね返ることはありません。 この相場はチャネルのリミッターからリバウンドを開始します。 2番目の四角形では、インジケーターのアクションは最後にしか表示できません。 3番目の長方形は、最初の四角形のような状況を示しています。

ご覧の通り、正確なシグナルは、各3つのセッションの終わりに向かってのみ形成されます。 規則性はご覧の通りで、これは戦略を構築するために使用することがあります。

さて、急激なボラティリティに基づいて別の戦略に変えてみましょう。 アジアのセッションでは、 これらはJPY ペアです。 この戦略は、ウェブ上で広く説明されています。 その考え方は、鋭い動きが任意の方向にあるときにエントリーすることです。 2つの未決オーダー (現在の価格の上で-買い、下で-売り ) は反対の方向の等しい間隔で同時にオーダーします。 通常、オーダーはアジアセッションの後半に配置されます (例外は可能です)。

図4は USDJPY H1 を示しています:


図4. USDJPY H1 のアジアセッション

図4. USDJPY H1 のアジアセッション

アジアのセッションセグメントについて詳しく見てみましょう。


図5. アジアセッションセグメント、USDJPY H1

図5. アジアセッションセグメント、USDJPY H1


図5では、赤色の価格ラベルが相場参入の機会を得るために立っています。 すべて、ロウソク足の始値で設定されています。 説明された戦略が予約オーダーを配置することを示唆するタイミングです。

さて、各セグメントを個別に分析してみましょう。 すべての4つのセグメントでは、始値の時間は 8.00 MSK (5.00 UTC) です。

  1. 左上のセグメントでは、ロウソク足は113.521 で開き始めます。 安値は113.341 で、高値は113.553。 上向き180ポイント-下向き32ポイントです。
  2. 右上のセグメントでは、ロウソク足は114.152 で開き始めます。 安値は114.109、高値 (翌1時間) は114.308。 始値の上向き43ポイント-下向き156ポイントです。 
  3. 左下のセグメントは、113.601 で開きます。 安値は113.587、高値 (3 時間後) は113.747。 始値の上向きと14ポイント-下向き146ポイントです。
  4. 最後に、右下のセグメント: 始値は113.192、安値は112.957 であり、高値は113.193 です。 アップ-1 ポイント、ダウン-235ポイント。

詳細をわかりやすくするために、テーブル内のすべてを示しましょう。

表1

セグメント# 始値 高値 安値 最大ポイント 最小ポイント
1 113.521 113.553 113.341 180 32
2 114.152 114.308 114.109 156 43
3 113.601 113.747 113.587 146 14
4 113.192 113.193 112.957 235 1
Summary --- --- --- 最小146 最大43

表1でご覧の通り、1つの方向の最大の動きの最小値は146ポイントを構成しています。 140ポイントに切り上げ、最小を45ポイントまで丸めるようにしましょう。 

すべての4つのケースで50ポイントの2つの反対の予約オーダーを設定します。 ストップロスを100-110 ポイントに設定し、テイクプロフィットを50-80 ポイントにします。 利益はそれぞれ200-320 ポイントで構成されています。 つまり、4つのケースすべてでテイクプロフィットが発動されます。

このように、効率的なトレード戦略を得ました。 さて, これをコードにする必要があります。過去データでテストし、有益であるかどうかを調べます。. 

戦略のコーディング

ボリンジャーバンドベースの戦略 

まず、トレードをより便利に管理するためのCTradeクラスをインクルードします。 次に、変数を扱います。

  • div_work 変数は、シャープな価格スパイクを担当しています: シグナルがポジションする範囲を制限します。
  • div_signal 変数は、シグナルの歪みを担当します。 上または下のインジケーターの境界線の交点は、シグナルとは見なされません。 代わりに、予約を管理します。 つまり、価格がこの変数で設定された距離の境界線を越えると、シグナルがトリガされます。 これにより、一連のダマシシグナルを選別することができます。
  • work_alt 変数は、反対のシグナルが表示されたときに、現在のポジションを閉じて新しいものを開くことを可能にするフラグです。
//+------------------------------------------------------------------+
//                                       BollingerBandsForFlat mq5   |
//|                                                          Aktiniy |
//|                                                             BBFF |
//+------------------------------------------------------------------+
#property copyright "Aktiniy"
#property link      "BBFF"
#property version   "1.01"
#include<Trade\Trade.mqh>
//---インプットパラメータ
input char     time_h_start=22;       //トレード開始時間
input char     time_h_stop=3;         //トレードストップ時間
input int      bands_period=12;       //ボリンジャーバンド期間
input int      bands_shift=0;         //ボリンジャーバンドシフト
input double   bands_diviation=2;     //ボリンジャーバンド偏差
input double   div_work=3;            //シグナルからの偏差
input double   div_signal=5;          //主シグナルの過小
input bool     work_alt=true;         //反対のシグナルの場合にポジションを使用する
input int      take_profit=50;        //テイクプロフィット
input int      stop_loss=100;         //ストップロス
//---
input bool     mon=true;              //月曜日に稼働
input bool     tue=false;             //火曜日に稼働
input bool     wen=true;              //水曜日に稼働
input bool     thu=true;              //木曜日に稼働
input bool     fri=true;              //金曜日に稼働
//---
input long magic_number=65758473787389; //マジックナンバー
input double order_volume=0.01;         //ロットサイズ
input int order_deviation=100;          //ポジションの開始による偏差
//---変数
MqlDateTime time_now_str;
datetime time_now_var;
CTrade trade;
int bb_handle;
double bb_base_line[3];
double bb_upper_line[3];
double bb_lower_line[3];
bool work_day=true;

残りの受信変数は、コード内で十分にコメントされています。

グローバル変数に関しては、次のものがあります。

  • 便宜上2つの等価時間変数 (time_now_str, time_now_var),
  • オーダーを処理するためのクラスオブジェクト
  • インジケーターハンドル、
  • 現在の時刻 (bb_base_line [], bb_upper_line [], bb_lower_line []) のインジケーターデータの3つの小さな配列。
  • work_day 変数は、曜日ごとにオーダーを管理します。

次に、クラスを操作するためのパラメータを初期化するためのコードです。

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

相互作用とシグナル受信のメインコードを参照してください。

まず、サーバーから現在の時刻を取得してから、switch 演算子を使用して、開始オーダーが今日許可されているかどうかを確認し、work_day 変数にデータをインプットします。

EA がすべてのセッション (アジアのものだけでなく) の間に稼働すると仮定しました。 さらに、ターミナルの時刻が異なるサーバで異なる可能性があります。 そのため、稼働時間を確認する必要があります。 ここには2つの選択肢があります。: 期間中に稼働するか、または1日の期間の区切りシンボルを使用して移行するかです。 「work」フラグにデータをインプットします。

稼働時間と選択した日が一致した場合、インジケーターハンドルが計算され、そのデータが以前に宣言された配列にコピーします。 次に、買いと売りのシグナルを計算するのに使用する価格を知るべきです。 開いているポジションがない場合は、適切なオーダーを設定します。

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   time_now_var=TimeCurrent(time_now_str);//現在の時刻
   bool work=false;
   
      switch(time_now_str.day_of_week)
     {
      case 1: if(mon==false){work_day=false;}
      else {work_day=true;}
      break;
      case 2: if(tue==false){work_day=false;}
      else {work_day=true;}
      break;
      case 3: if(wen==false){work_day=false;}
      else {work_day=true;}
      break;
      case 4: if(thu==false){work_day=false;}
      else {work_day=true;}
      break;
      case 5: if(fri==false){work_day=false;}
      else {work_day=true;}
      break;
     }

//--- check the working time     
   if(time_h_start>time_h_stop)             //次の日に移行して稼働する
     {
      if(time_now_str.hour>=time_h_start || time_now_str.hour<=time_h_stop)
        {
         work=true;
        }                                   //稼働を有効にするフラグを渡す
     }
   else                                     //日中の稼働
     {
      if(time_now_str.hour>=time_h_start && time_now_str.hour<=time_h_stop)
        {
         work=true;
        }
     }                                     //稼働を有効にするフラグを渡す

   int pos=PositionsTotal();

   if(work==true && work_day==true)        //稼働を有効に
     {
      bb_handle=iBands(_Symbol,_Period,bands_period,bands_shift,bands_diviation,PRICE_CLOSE);         //ボリンジャーバンドハンドルを調べる
      int i_bl=CopyBuffer(bb_handle,0,0,3,bb_base_line);
      int i_ul=CopyBuffer(bb_handle,1,0,3,bb_upper_line);
      int i_ll=CopyBuffer(bb_handle,2,0,3,bb_lower_line);
      if(i_bl==-1 || i_ul==-1 || i_ll==-1)
        {Alert("Error of copy iBands: base line=",i_bl,", upper band=",i_ul,", lower band=",i_ll);}   //コピーしたデータを確認する

      double price_ask=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
      double price_bid=SymbolInfoDouble(_Symbol,SYMBOL_BID);

      if(pos<1)
        {
         if((price_ask-(div_signal*_Point))>=bb_upper_line[2]-(div_work*_Point) && (price_ask-(div_signal*_Point))<=bb_upper_line[2]+(div_work*_Point))//売りシグナル
           {
            trade.Sell(order_volume,_Symbol,price_bid,(price_bid+(stop_loss*_Point)),(price_bid-(take_profit*_Point)),"pos<1_sell");
           }
         if((price_bid+(div_signal*_Point))<=bb_lower_line[2]+(div_work*_Point) && (price_bid+(div_signal*_Point))>=bb_lower_line[2]-(div_work*_Point))//買いシグナル
           {
            trade.Buy(order_volume,_Symbol,price_ask,(price_ask-(stop_loss*_Point)),(price_ask+(take_profit*_Point)),"pos<1_buy");
           }
        }
      if(pos>0 && work_alt==true)
        {
         if(trade.RequestType()==ORDER_TYPE_BUY)                     //その前に買いオーダーがあった場合
            if((price_ask-(div_signal*_Point))>=bb_upper_line[2]-(div_work*_Point) && (price_ask-(div_signal*_Point))<=bb_upper_line[2]+(div_work*_Point))//売りシグナル
              {
               trade.PositionClose(_Symbol,order_deviation);
               trade.Sell(order_volume,_Symbol,price_bid,(price_bid+(stop_loss*_Point)),(price_bid-(take_profit*_Point)),"pos>0_sell");
              }
         if(trade.RequestType()==ORDER_TYPE_SELL)                   //その前に売りオーダーがあった場合
            if((price_bid+(div_signal*_Point))<=bb_lower_line[2]+(div_work*_Point) && (price_bid+(div_signal*_Point))>=bb_lower_line[2]-(div_work*_Point))//買いシグナル
              {
               trade.PositionClose(_Symbol,order_deviation);
               trade.Buy(order_volume,_Symbol,price_ask,(price_ask-(stop_loss*_Point)),(price_ask+(take_profit*_Point)),"pos>0_buy");
              }
        }
     }
   else
     {
      if(pos>0)
        {
         trade.PositionClose(_Symbol,order_deviation);
        }
     }
  }
//+------------------------------------------------------------------+ 

最後のコード要素: 夜のセッションが終了した場合は、すべてのオーダーを閉じます。 これでEA のコードが終了します。

急激なボラティリティの変化に基づく戦略

すべて非常に簡単です: オーダーはある特定の order_time でだけ置かれます。 オーダーは、現在の価格からの order_div 距離に対応するストップロス (order_sl) で設定され、テイクプロフィットは (order_tp) で行われます。 予約オーダーがどれもトリガーされない場合はレンジ相場を示し、time_to_del のテイクプロフィット (秒単位) でオーダーが削除されます。

他のインプットは、前の EA と同じです。

追加グローバル変数は次のとおりです。

  • work-オーダーの1回限りのポジションを有効にする
  • work_del —オーダーのいずれかがトリガされた場合、逆のオーダーの削除を有効にします。
  • work_day —現在の日の稼働を有効にします。

また、データを受信し、予約オーダーを削除するための2つの構造があります。

//+------------------------------------------------------------------+
//|                                                TimeBuyOrSell.mq5 |
//|                                                          Aktiniy |
//|                                                             TBOS |
//+------------------------------------------------------------------+
#property copyright "Aktiniy"
#property link      "TBOS"
#property version   "1.01"
#include<Trade\Trade.mqh>
//---インプットパラメータ
input int      order_time=0;                        //オープンタイムのオーダー
input int      order_sl=200;                        //ストップロス
input int      order_tp=180;                        //テイクプロフィット
input int      order_div=120;                       //現在の価格からオーダーを配置することによる偏差
input int      time_to_del=10800;                   //オーダーの削除時間
//---
input bool     mon=true;                            //月曜日に稼働
input bool     tue=false;                           //火曜日に稼働
input bool     wen=true;                            //水曜日に稼働
input bool     thu=true;                            //木曜日の稼働
input bool     fri=true;                            //金曜日に稼働
//---
input long magic_number=65758473787389;             //マジックナンバー
input double order_volume=0.01;                     //ロットサイズ
input int order_deviation=100;                      //ポジションの開始による偏差
//---変数
CTrade trade;
MqlDateTime time_now_str;
datetime time_now_var;
bool work=true;
bool work_del=true;
bool work_day=true;
//---
MqlTradeResult result_buy={0};
MqlTradeResult result_sell={0};

前のものと同一のクラスでタスクするパラメータを初期化するための小さなコードが続きます。

OnTick 関数の先頭は、前に説明した EA と似ています。 現在の日のタスクのフラグを取得した後、現在の時間が対応するかどうかで実行されます。 すべてが成功した場合は、オーダーを開始するためのパラメータを計算します。 (テイクプロフィット、ストップロス、始値、およびトリガに失敗した場合の除去の時間)。 関連するトレードリクエストをサーバーに送信します。

予約オーダーを配置した後、EA は1つのトリガを監視し、そのチケットによって結果の構造 (result_buy、result_sell) から余分なものを削除します。

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   time_now_var=TimeCurrent(time_now_str);//現在の時刻

   switch(time_now_str.day_of_week)
     {
      case 1: if(mon==false){work_day=false;}
      else {work_day=true;}
      break;
      case 2: if(tue==false){work_day=false;}
      else {work_day=true;}
      break;
      case 3: if(wen==false){work_day=false;}
      else {work_day=true;}
      break;
      case 4: if(thu==false){work_day=false;}
      else {work_day=true;}
      break;
      case 5: if(fri==false){work_day=false;}
      else {work_day=true;}
      break;
     }

   if(time_now_str.hour==order_time && work==true && work_day==true)
     {
      double price_ask=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
      double price_bid=SymbolInfoDouble(_Symbol,SYMBOL_BID);

      double div=order_div*_Point;
      double sl=order_sl*_Point;
      double tp=order_tp*_Point;

      double price_buy=price_ask+div;
      double price_sell=price_bid-div;

      double buy_sl=price_buy-sl;
      double buy_tp=price_buy+tp;
      double sell_sl=price_sell+sl;
      double sell_tp=price_sell-tp;

      datetime time_end=time_now_var+time_to_del;     //3600秒、1時間

      trade.BuyStop(order_volume,price_buy,_Symbol,buy_sl,buy_tp,ORDER_TIME_SPECIFIED,time_end,"BuyLimit");
      trade.Result(result_buy);

      trade.SellStop(order_volume,price_sell,_Symbol,sell_sl,sell_tp,ORDER_TIME_SPECIFIED,time_end,"SellLimit");
      trade.Result(result_sell);

      work=false;
     }

   if(PositionsTotal()>0 && work_del==true)
     {
      PositionSelect(_Symbol);
      long position_type=PositionGetInteger(POSITION_TYPE);
      if(position_type==POSITION_TYPE_SELL)
         trade.OrderDelete(result_buy.order);
      if(position_type==POSITION_TYPE_BUY)
         trade.OrderDelete(result_sell.order);

      work_del=false;
     }
   if(PositionsTotal()==0)
      work_del=true;

   if(time_now_str.hour!=order_time)
     {
      work=true;
     }

  }
//+------------------------------------------------------------------+

このコードは、オープン時間を超えるためにオーダーを配置できるフラグで終了します。

テストと収益性

ボリンジャーバンドベースの戦略 

  • シンボル: EURUSD
  • Period: М30 (2017.01.01 - 2017.11.03)
  • Broker: Halifax Investment Services Pty Ltd
  • 通貨: 豪ドル
  • デポジット: 100.00
  • レバレッジ: 1:100

次のパラメータは、最適化中に明らかにされています。


これは1:00から11:00 (MSK) の夜の時間に実行され、インジケータの期間は11、シグナルからの偏差は12、メインシグナル過小は13、ストップロス = 140 とテイクプロフィット = 120。

まず、「M1 の OHLC」をテストするときの結果を見てみましょう。


図6. OHLC によるボリンジャーバンドベースの戦略テスト結果

図6. OHLC によるボリンジャーバンドベースの戦略テスト結果

図7. チャート上のテスト結果 (M1 の OHLC によるボリンジャーバンド)

図7. チャート上のテスト結果 (M1 の OHLC によるボリンジャーバンド)

「実際のティックに基づくすべてのティック」モードで同じパラメータを使用したテスト結果、図8及び 図9:

図8. ボリンジャーバンドベースの戦略テストの結果、"全ティック、リアルティック" モード

図8. ボリンジャーバンドベースの戦略テストの結果、"全ティック、リアルティック" モード

図9. チャート上のテスト結果 (ボリンジャーバンド、"リアルティック、全ティック" モード)

図9. チャート上のテスト結果 (ボリンジャーバンド、"リアルティック、全ティック" モード)

ご覧の通り、利益は両方のケースで得られます: 最初の方で152%、2番目で-48 パーセントです。 両方のテストで、ドローダウンは 25% 未満です。 非常に興味深い結果です。

これまでに、3つのセッション期間 (図3) を検討し、その戦略について説明しました。 では、最初の2つのセグメントで EA のパフォーマンスを見てみましょう (図10および 図11)。

図10. 以前に考慮された最初の期間の結果

図10. 以前に考慮された最初の期間の結果

図10 (図3の第1期) は、EA が3つのエントリを実装していることを示しています。 最初は失敗し、ストップロスで決済していますが、次の2つ (アジアのセッションの終わりとヨーロッパ時間の始まり) は利益を取れています。

図11. 以前に考慮した第2の期間の結果

図11. 以前に考慮した第2の期間の結果

図11 (図3から第2ピリオド) は、EA がアジア・セッションの決済時とヨーロッパの最初の2つのエントリを実行することを示しています。 2つ目の損失はありますが、収益性の高いことが判明した。 図3の第3期には、EA は相場に参入しませんでした。 火曜日であり、EA はこの日にトレードしませんでした。

では、他のメジャーペアでの戦略結果を見てみましょう。

シンボル: ドル

期間: M30 (2017.01.01-2017.11.07)

Inputs:


図12. ドル M30 (BollingerBands) テスト結果

図13. ドル M30 (BollingerBands) テスト結果

図13. ドル M30 (BollingerBands) テスト結果

シンボル: GBPUSD

期間: M30 (2017.01.01-2017.11.06)

Inputs:


図14. GBPUSD M30 (BollingerBands) テスト結果

図14. GBPUSD M30 (BollingerBands) テスト結果

図14. GBPUSD M30 (BollingerBands) テスト結果

シンボル: NZDUSD

期間: M30 (2017.01.01-2017.11.07)

Inputs:



図15. NZDUSD M30 (BollingerBands) テスト結果

図15. NZDUSD M30 (BollingerBands) テスト結果

図15. NZDUSD M30 (BollingerBands) テスト結果

シンボル: USDCAD

期間: M30 (2017.01.01-2017.11.07)

Inputs:


図16. USDCAD M30 (BollingerBands) テスト結果

図16. USDCAD M30 (BollingerBands) テスト結果

図16. USDCAD M30 (BollingerBands) テスト結果

シンボル: USDCHF

期間: M30 (2017.01.01-2017.11.07)

Inputs:


図17. USDCHF M30 (BollingerBands) テスト結果

図17. USDCHF M30 (BollingerBands) テスト結果

図17. USDCHF M30 (BollingerBands) テスト結果

すべてのテストデータを蓄積し、次の結論にいくことができます。

  • この EA での最適なペアは、EURUSD、NZDUSD、ドルです。 パラメータによると、シグナルは、ストップロスは3回以上異なる場合、以前の名前のペアで最も有用です。 もちろん、ここでの利益も同様に進歩しています。
  • 週の日は、利益に影響を与えます。 通貨ペアの動作は曜日によって異なりますが、安定したパターンは検出されませんでした: すべてが選択されたペアと適用された設定によって異なります。

急激なボラティリティの変化に基づく戦略

テストパラメータも変更されます。

  • シンボル: USDJPY
  • 期間: H1 (2017.01.01-2017.11.03)

まず、上記で説明した戦略を確認してみましょう。 これらは、そのパラメータです: 

  • order_time=8;
  • order_sl=140;
  •  order_tp=70;
  • order_div=50;
  • time_to_del=18000.

ここでは、110から140へのストップロスをわずかに上げて、戦略の収益性を高めました。 テスト結果は、図18及び19に示すとおりです。

図18. 急激なボラティリティ変化に基づく戦略テスト結果、USDJPY H1

図18. 急激なボラティリティ変化に基づく戦略テスト結果、USDJPY H1

図19. USDJPY H1 チャートのテスト結果

図19. USDJPY H1 チャートのテスト結果

このチャートは、戦略がテストの途中から開始することを示しています。 しかし、長いテスト期間 (約2015で始まる) で、この戦略は、一般に利益を出しません。 また、パラメータによると、エントリは 8:00 MSK は、同様に、欧州のセッションに影響を与え、実行されます。 これは、朝のトレードと見なされることがあります。

したがって、結果は負になります。 "夜の時間" の間にのみ、日付の広い範囲で最適化を実行してみましょう。

テストパラメータも変更されます。

  • シンボル: USDJPY
  • 期間: H1 (2015.01.01-2017.11.03)

テストパラメータ:


したがって、EA は火曜日 4:00 MSK (アジアセッション) で動作し、ストップロスとテイクプロフィットは、それぞれ270と220ポイントとほぼ等しいですが、オーダーは、エントリ価格から130の距離で設定されています。 テスト結果を図20、21に示します。

図20. 急激なボラティリティ変化に基づく戦略テスト結果、USDJPY H1 (2015-2017)

図20. 急激なボラティリティ変化に基づく戦略テスト結果、USDJPY H1 (2015-2017)

図21. USDJPY H1 (2015-2017) チャートのテスト結果

図21. USDJPY H1 (2015-2017) チャートのテスト結果

「リアルティックに基づく全ティック」または「M1 の OHLC」モードでの最後のテストでは、結果に有意な変化が生じないため、最初のバリアントが提示されます (図20および 21)。

結論

非常に小さなドローダウンで収益性の "夜間" (アジアセッション) トレードすることが可能であると結論することができました。 ボリンジャーバンドベースの戦略は、夜間と日中の両方のテスト中に特に効率的であることが判明しています (この記事は、アジアのセッションの結果と、ヨーロッパの結果を表しています)。 非常に有望なので、この戦略を改善するつもりです。

ボラティリティの変化に基づいた戦略としては、非常に簡単なことが判明しているが、非効率的です。 しかし、最初への補足として使用することができます。 また、日中のテストは (欧州セッションを含む) 適度に良いパフォーマンスを示しています. ボリンジャーバンドベースは、曜日に依存しています。 これは、長期テスト中に明らかにされています。 このEAは冗長であることが判明しており、そのさらなる改良の可能性は最小です。


Files:

# Name Type Description
1 BollingerBandsForFlat_v1.01.mq5 EA このEA は、アジアのセッションのレンジな動きの間にトレードに焦点を当てました。 ボリンジャーバンドシグナルベース
2 TimeBuyOrSell_v1.01.mq5 EA このEA は、ボラティリティのある時間のトレードに焦点を当てています。


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

モメンタムピンボールトレーディング戦略 モメンタムピンボールトレーディング戦略

この記事では、Linda B. RaschkeとLaurence A. Connors の "Street Smarts: High Probability Short-Term Trading Strategies" に記載されているトレーディングシステムのコードを記述します。 今回は、モメンタムのピンボールシステムを研究します。また、2つのインジケーター、トレードロボットとシグナルブロックの作成について説明します。

MQL5 ウィザードの NRTR に基づく NRTR インジケーターとトレーディングモジュール MQL5 ウィザードの NRTR に基づく NRTR インジケーターとトレーディングモジュール

この記事では、NRTR インジケーターを分析し、このインジケーターに基づいてトレードシステムを作成します。 追加のトレンド確認インジケーターと NRTR の組み合わせに基づいて戦略を作成する際に使用することができるトレードシグナルのモジュールを開発します。

有望なシグナルの自動選択 有望なシグナルの自動選択

この記事では、MetaTrader5 プラットフォームのトレードシグナルの分析に専念し、購読者アカウントでのトレードオペレーションの自動実行が可能になります。 また、この記事では、潜在的に有望なトレードシグナルを検索するツールを開発し、ターミナルから直接行います。

一連の取引に対するリスク評価続編 一連の取引に対するリスク評価続編

本稿では、前稿で提案した概念を開発し、さらに考察します。収率分布の問題や、統計的規則性のプロットと研究についても記述します。