エルダーレイ (ブルパワーとベアパワー)

30 10月 2018, 12:12
Vladimir Karputov
0
77

イントロダクション

エルダーレイのトレーディングシステムは、彼の著書"Trading for a Living"で紹介されています。 ブルパワーベアパワーだけでなく、移動平均もベースにしています。 (EMA-指数平均)。

このシステムはシンプルですが複雑です。

  • 文字通り受け取る場合、シンプルです: トレンドが上向き (EMA) であり、ベアの力がゼロ以下で増加している場合に買います。
  • 注意深く読めば複雑です。このような状況はそう多いものではないので見た目ほど簡単ではありません。

この記事では、このシンプルでありながら複雑さを内包しているすべての段階を考察し、トレーディングシステムの2つのタイプを確認します。 

  1. 同じチャート上のすべてのインジケータ (したがって、1つの時間枠上);
  2. "トリプルチョイス " システムと組み合わせて使用します。

この記事のEAはネットアカウントだけを想定しています。 


キーポイント

トレーディングシステムの背後にあるアイデアを把握するには、各エルダーレイ の項目を理解する必要があります。: 価格、EMA、ブルベアとその強さなどです。

  • Price—価格に関する現在の合意。 すべての売り行為は価格下落を見越してなされる反面、すべての買い行為は価格上昇を期待して行われます。 ディーラーは熱心な買い手および売り手がいるときだけ行動することができます。
  • EMA-指数移動平均。 一定期間の資産価値に関する平均的合意を反映します。 たとえば、D1 の EMA (13) は、過去13日間の平均資産価値合意です。 シンプルな移動平均ではなく指数を使う方が良いのはなぜでしょうか。 答え. エルダーは、著書のセクション 4.2 ( "移動平均 ") でこの問に答えました。 要するに、EMA は、シンプルな平均に比べてトレンドの変化に敏感です。
  • Bulls Power maximumは、与えられた足の最大のブルの強さを示します。 価格が高くなるとブルは利益を得るため、価格が最大レベルに達するまでブルは買います。 ブルパワー最大は、価格がもっと高く移動しようとしている瞬間ですが、もう資金を持っていないことを表します。
  • Bears Power minimumは、与えられた足の最大ベアの強さを示します。ベアは価格が下がると、価格がその最小値に達するまで利益を得ます。 ベアパワーミニマムは、さらに価格が下に移動しようとしている瞬間ですが、もう資金を持っていないことを表します。
  • Bulls Powerは、資産価値に関する平均合意以上の価格を引き上げるブルの能力を示します。 原則としてブルの強さはゼロを上回っています。 ゼロ未満の場合は、ブルがパニックになっていることを意味し、力を失っています。
  • Bears Powerは、資産価値に関する平均取引の下で価格を下げるベアの能力を反映します。 通常、ベアの強さはゼロ以下です。 ゼロ以上の場合は、ブルが強すぎ、ベアはその力を失っています。


オプション 1: 1 つのチャート上のすべてのインジケータ

D1 の時間枠で先物や株式を探る。 すべての3つのインジケータ (ブルパワー、ベアパワーと EMA) は、単一のチャートに配置されます。 すべてのインジケータの平均期間は13です。


買いルール

  • トレンドが上がる (EMAに拠る);
  • ベアの力はゼロ以下で、上昇している。
  • 保留中の買いストップオーダーは、最後の2日間の最大値の上に位置する。一方、保護ストップロス は、直近の最小値以下に配置する。

CATDaily 買いシグナル

CAT、日シグナル

売りルール

  • トレンドが下がる (EMAに則って);
  • ブルパワーはゼロの上で、下降している;
  • 保留中の売りストップオーダーは、最後の2日間の最小値の下に配置するす。一方、保護SLは、最後の最大値の上に配置する。

CATDaily 売りシグナル

CAT、日の売りシグナル


トレーディングルール

図1と2を見ると、"All indicators on a single chart(単一チャート上のすべてのインジケータ) " オプションでは、売買ルールが安定したトレンドにあるロールバックでトリガーされることがわかります。 特に分析された時間枠は D1 であるため、かなりの数そのような有利な瞬間があります。 したがって、オプション "1 つのチャート上のすべてのインジケータ"で、トレード口座のトレード頻度を高めるために多くの分析をする必要があります。

D1 のチャートはまた、かなりの利点があります: EMA の斜面の分析だけでなく、ブルパワーとベアパワーインジケータは、1日1回-新しい足が表示されるときに実行することができます。 これが、このEAが動作する流れです。指定された各シンボルで D1 上の新しい足を待ち、その後に可能なエントリを探します。 

先物や株式はネットモードのみでトレードされているため、逆に指示されたポジション (ヘッジ) はここでは適用できませんが、ポジション・ボリュームを増やすことができます。 このEA は、現在のシンボルのみ、またはテキストファイルに格納されているシンボルでトレードすることができます。 すべてが現在のシンボルでクリアされていますが、シンボルを選択すると、次の問題が発生します。

  • 1つの相場 (例えば、有価証券のみ) の100シンボルについて指定する必要があります。
  • さまざまな相場 (例えば、先物や有価証券) からのシンボルの多くを指定する必要があります。

どうすれば1つの相場からすべてのシンボルを選択できるでしょうか? たとえば、 "CAT " シンボルが "Stock Markets\USA\NYSE/NASDAQ (SnP100)CAT" にあるとします。

シンボルの指定

このシンボルが合っていると仮定し、 " NYSE/NASDAQ (SnP100) " ブランチから他のすべてのツールを選択したいとします。 この場合、次の操作を実行できます。

  1. このシンボルのチャートを開きます。
  2. スクリプトを起動する (Symbols on the specified path.mq5) は、シンボルのパスを受け取ることができます (上記の例では、 "CAT" のシンボルは、 "Stock Markets\USA\NYSE/NASDAQ(SnP100)") テキストファイルは、共通データフォルダに保存されます。
  3. EAの設定でテキストファイル名を設定するだけです。
相場からのシンボルが必要な場合は、各相場 (シンボルのリストは、そのユニークなファイルに保存されます) でスクリプトを実行し、手動で両方のテキストファイルを結合します。

Symbols on the specified path.mq5 スクリプトの実装については、以下で説明します。


EAのアセンブリ オプション 1: 1 つのチャート上のすべてのインジケータ

Symbols on the specified path.mq5—テキストファイルをシンボルで取得するために使用するスクリプト。 

注: 唯一の出力テキストは "Everything is fine. There are no errors"(エラーなし。すべて良好)です。[エキスパート] タブの [エラーはありません] には、スクリプトのタスクが成功したことが保証されており、シンボルを含むファイルを EA の操作でできます。

ファイル操作のコードを短くするために、 CFileTxt クラスが接続され、テキストファイルの処理はm_file_txtCFileTxtクラスオブジェクトによって実行されます。 スクリプトは、次の7つのステップでタスクを実行します。

//+------------------------------------------------------------------+
//|                                Symbols on the specified path.mq5 |
//|                              Copyright © 2018, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2018, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.002"
#property script_show_inputs
//---
#include <Files\FileTxt.mqh>
CFileTxt       m_file_txt;                   //ファイル txt オブジェクト
//---インプットパラメータ
input string   InpFileName="Enter a unique name.txt";  //ファイル名
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---ステップ1
   string current_path="";
   if(!SymbolInfoString(Symbol(),SYMBOL_PATH,current_path))
     {
      Print("ERROR: SYMBOL_PATH");
      return;
     }
//---ステップ2
   string sep_="\\";                 //文字としての区切りシンボル
   ushort u_sep_;                    //区切り文字のコード
   string result_[];                 //文字列を取得する配列
//---セパレータコードを取得する 
   u_sep_=StringGetCharacter(sep_,0);
//---文字列をサブストリングに分割する 
   int k_=StringSplit(current_path,u_sep_,result_);
//---ステップ3
//---今すぐ出力すべての文字列を取得 
   if(k_>0)
     {
      current_path="";
      for(int i=0;i<k_-1;i++)
         current_path=current_path+result_[i]+sep_;
     }
//---ステップ4
   string symbols_array[];
   int symbols_total=SymbolsTotal(false);
   for(int i=0;i<symbols_total;i++)
     {
      string symbol_name=SymbolName(i,false);
      string symbol_path="";
      if(!SymbolInfoString(symbol_name,SYMBOL_PATH,symbol_path))
         continue;
      if(StringFind(symbol_path,current_path,0)==-1)
         continue;
      
      int size=ArraySize(symbols_array);
      ArrayResize(symbols_array,size+1,10);
      symbols_array[size]=symbol_name];
     }
//---ステップ5
   int size=ArraySize(symbols_array);
   if(size==0)
     {
      PrintFormat("ERROR: On path \"%s\" %d symbols",current_path,size);
      return;
     }
   PrintFormat("On path \"%s\" %d symbols",current_path,size);
//---ステップ6
   if(m_file_txt.Open(InpFileName,FILE_WRITE|FILE_COMMON)==INVALID_HANDLE)
     {
      PrintFormat("ERROR: \"%s\" file in the Data Folder Common folder is not created",InpFileName);
      return;
     }
//---ステップ7
   for(int i=0;i<size;i++)
      m_file_txt.WriteString(symbols_array[i]+"\r\n");
   m_file_txt.Close();
   Print("Everything is fine. There are no errors");
//---
  }
//+------------------------------------------------------------------+

スクリプト操作アルゴリズム:

  • ステップ 1: SYMBOL_PATH (シンボルツリー内のパス) が、現在のシンボルに対して定義されます。
  • ステップ 2: 取得したパスは、 "" 区切りシンボルを持つ部分文字列に分割されます。
  • ステップ 3: シンボル名が含まれているため、最後の部分文字列を持たない現在のパスを再アセンブリします。
  • ステップ 4: 利用可能なすべてのシンボルをループします。シンボルツリー内のシンボルのパスが現在のものと一致する場合は、シンボル名を選択し、検出されたシンボル配列に追加します。
  • ステップ 5: 検出されたシンボル配列のサイズを確認します。
  • ステップ 6: ファイルを作成します。
  • ステップ 7: 検出されたシンボルの配列をファイルに書き込み、閉じます。


Elder-Ray 1-EA (または複数の EAs) 1. xxx のバージョン番号をオプション 1: 1 つのチャート上のすべてのインジケータに従ってトレードされます。

ポジションのボリュームを設定する方法 - 最小ロットが異なる場合があります

簡単な実験を実施しましょう: 先物や有価証券の最小ロットサイズを確認してください: 現在のものと同じパスにあるすべてのシンボルを通過する (Symbols on the specified path.mq5 スクリプトに似ている) が、ファイルにシンボルを保存中に、最小ロットサイズの情報を表示します。

Gets minimal volume.mq5—シンボルグループの最小ボリュームに関する統計を表示するために使用するスクリプト。 このスクリプトは、シンボルグループをバイパスし、2次元配列の情報 (取引とカウンタ閉じるための最小ボリューム) を累積します。

//---ステップ4
/* 
   symbols_array[][2]:
   [*][minimal volume to close a deal]
   [*][counter]
*/

フルスクリプトコード:

//+------------------------------------------------------------------+
//|                                          Gets minimal volume.mq5 |
//|                              Copyright © 2018, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2018, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.000"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---ステップ1
   string current_path="";
   if(!SymbolInfoString(Symbol(),SYMBOL_PATH,current_path))
     {
      Print("ERROR: SYMBOL_PATH");
      return;
     }
//---ステップ2
   string sep_="\\";                 //文字としての区切りシンボル
   ushort u_sep_;                    //区切り文字のコード
   string result_[];                 //文字列を取得する配列
//---セパレータコードを取得する 
   u_sep_=StringGetCharacter(sep_,0);
//---文字列をサブストリングに分割する 
   int k_=StringSplit(current_path,u_sep_,result_);
//---ステップ3
//---今すぐ出力すべての文字列を取得 
   if(k_>0)
     {
      current_path="";
      for(int i=0;i<k_-1;i++)
         current_path=current_path+result_[i]+sep_;
     }
//---ステップ4
/* 
   symbols_array[][2]:
   [*][minimal volume to close a deal]
   [*][counter]
*/
   double symbols_array[][2];
   int symbols_total=SymbolsTotal(false);
   for(int i=0;i<symbols_total;i++)
     {
      string symbol_name=SymbolName(i,false);
      string symbol_path="";
      if(!SymbolInfoString(symbol_name,SYMBOL_PATH,symbol_path))
         continue;
      if(StringFind(symbol_path,current_path,0)==-1)
         continue;

      double min_volume=0.0;
      if(!SymbolInfoDouble(symbol_name,SYMBOL_VOLUME_MIN,min_volume))
         continue;
      int size=ArrayRange(symbols_array,0);
      bool found=false;
      for(int j=0;j<size;j++)
        {
         if(symbols_array[j][0]==min_volume)
           {
            symbols_array[j][1]=symbols_array[j][1]+1;
            found=true;
            continue;
           }
        }
      if(!found)
        {
         ArrayResize(symbols_array,size+1,10);
         symbols_array[size][0]=min_volume;
         symbols_array[size][1]=1.0;
        }
     }
//---ステップ5
   int size=ArrayRange(symbols_array,0);
   if(size==0)
     {
      PrintFormat("ERROR: On path \"%s\" %d symbols",current_path,size);
      return;
     }
//---ステップ6
   for(int i=0;i<size;i++)
      PrintFormat("Minimal volume %.2f occurs %.1f times",symbols_array[i][0],symbols_array[i][1]);
   Print("Everything is fine. There are no errors");
//---
  }
//+------------------------------------------------------------------+

スクリプト操作アルゴリズム:

  • ステップ 1: SYMBOL_PATH (シンボルツリー内のパス) が、現在のシンボルに対して定義されます。
  • ステップ 2: 取得したパスは、 "" 区切りシンボルを持つ部分文字列に分割されます。
  • ステップ 3: シンボル名が含まれているため、最後の部分文字列を持たない現在のパスを再アセンブリします。
  • ステップ 4: 利用可能なすべてのシンボルをループします。シンボルツリー内のシンボルのパスが現在のものと一致する場合は、最小シンボルボリュームを取得し、シンボル配列内で検索を実行します。 このような値が既に存在する場合は、カウンタを増やします。 値がない場合は、配列に追加し、カウンタを "1.0 " に設定します。
  • ステップ 5: 検出されたシンボル配列のサイズを確認します。
  • ステップ 6: 統計を表示します。

有価証券の開始の結果:

Gets minimal volume (CAT,D1)    Minimal volume 1.00 occurs 100.0 times

そして、先物:

Gets minimal volume (RTSRIU8,D1)        Minimal volume 1.00 occurs 77.0 times

2 つの相場では、ロットサイズは同じです-1.0.

したがって、システムを過剰に複雑にして、最小ロットとして "1.0 " を設定する必要はありません。


適用されたインジケータの視覚化

テスターで視覚化されたテストを起動すると、EA が適用したインジケータを見ることができます。 しかし、EA がターミナルチャートで起動されると、インジケータは表示されません。 このトレーディングシステムでは、EA のタスクを視覚的にコントロールするために、インジケータをチャートに表示したいと思います。 次のようになります。

CATDaily ビジュアルトレーディング

ご覧の通り、ここですべてのインジケータ のカスタム色と線の幅の設定を使用しました。(もちろん、手動で) ターミナルチャートに適用されるインジケータの自動可視化に、移動平均、ブルパワーとベアパワーインジケータを再描画させる必要があります。 すでにカスタム移動平均エントリーカラーコードで同じようなものを実装しています。インジケータの色は、エントリーに含まれていました。このインプットパラメータは、EA からインジケータを作成するときに使用できます。 ちょうど3つの類似のインジケータを開発する必要があります。

インジケータ (カスタム移動平均エントリーカスタムブルパワーエントリーカスタムベアパワーエントリー) をコードベースでダウンロードできます。 ダウンロードしたインジケータを[data folder]\MQL5\Indicators\のルートに配置します。


Elder-Ray 1.001.mq5適用されたインジケータを視覚化すると、色と幅を設定できます。 ストラテジーテスターの両方で動作し、チャート上で EA を起動します。:

Elder-Ray 1.001

実装の条件は何でしょうか。

主な条件は、カスタム移動平均インプットカスタムブルパワーインプットカスタムベアパワーインプットインジケータが [data folder]\MQL5\Indicators\にあることです。 

3つのインジケータ

インジケータの外観は管理され、インプット期間で設定されますが、インジケータを操作するために、インジケータハンドルが格納される3つの変数が宣言されています (handle_iCustom_MAhandle_iCustom_Bulls 、handle_iCustom_Bears)。

//+------------------------------------------------------------------+
//|                                                  Elder-Ray 1.mq5 |
//|                              Copyright © 2018, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2018, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.000"
//---

//---
enum ENUM_INPUT_SYMBOLS
  {
   INPUT_SYMBOLS_CURRENT=0,   //現在のシンボル
   INPUT_SYMBOLS_FILE=1,      //テキストファイル
  };
//---インプットパラメータ
input ENUM_INPUT_SYMBOLS   InpInputSymbol       = INPUT_SYMBOLS_FILE;   //下記条件で動作します...
input uint                 InpNumberMinLots     = 1;                    //最小ロット数
//---カスタム移動平均エントリー
input int                  Inp_MA_ma_period     = 13;                   //MA: 平均期間
input int                  Inp_MA_ma_shift      = 0;                    //MA: 水平シフト
input ENUM_MA_METHOD       Inp_MA_ma_method     = MODE_EMA;             //MA: スムージングタイプ
input ENUM_APPLIED_PRICE   Inp_MA_applied_price = PRICE_CLOSE;          //MA: 価格のタイプ
input color                Inp_MA_Color         = clrChartreuse;        //MA: カラー
input int                  Inp_MA_Width         = 2;                    //MA: 幅
//---カスタムブルパワーエントリー
input int                  Inp_Bulls_ma_period  = 13;                   //ブルパワー: 平均期間
input color                Inp_Bulls_Color      = clrBlue;              //ブルパワー: カラー
input int                  Inp_Bulls_Width      = 2;                    //ブルパワー: 幅
//---カスタムベアパワーエントリー
input int                  Inp_Bears_ma_period  = 13;                   //カスタムベアパワーエントリー ...
input color                Inp_Bears_Color      = clrRed;               //ベアパワー: カラー
input int                  Inp_Bears_Width      = 2;                    //ベアの力: 幅

int    handle_iCustom_MA;                    //iCustom インジケータのハンドルを格納するための変数
int    handle_iCustom_Bulls;                 //iCustom インジケータのハンドルを格納するための変数
int    handle_iCustom_Bears;                 //iCustom インジケータのハンドルを格納するための変数
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()


OnInit() では、カスタムインジケータ(iCustomが適用されます) のハンドルを作成し、作成されたインジケータをグラフに追加します (ChartIndicatorAddが適用されます)。

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---インジケータ iCustom のハンドルを作成。
   handle_iCustom_MA=iCustom(Symbol(),Period(),"Custom Moving Average Inputs",
                             Inp_MA_ma_period,
                             Inp_MA_ma_shift,
                             Inp_MA_ma_method,
                             Inp_MA_Color,
                             Inp_MA_Width,
                             Inp_MA_applied_price);
//---ハンドルが作成されていない場合 
   if(handle_iCustom_MA==INVALID_HANDLE)
     {
      //---失敗理由とエラーコードについて通知 
      PrintFormat("Failed to create handle of the iCustom indicator (\"Custom Moving Average Inputs\") for the symbol %s/%s, error code %d",
                  Symbol(),
                  EnumToString(Period()),
                  GetLastError());
      //---インジケータが止まっている 
      return(INIT_FAILED);
     }

//---インジケータ iCustom のハンドルを作成。
   handle_iCustom_Bulls=iCustom(Symbol(),Period(),"Custom Bulls Power Inputs",
                                Inp_Bulls_ma_period,
                                Inp_Bulls_Color,
                                Inp_Bulls_Width);
//---ハンドルが作成されていない場合 
   if(handle_iCustom_Bulls==INVALID_HANDLE)
     {
      //---失敗理由とエラーコードについて通知 
      PrintFormat("Failed to create handle of the iCustom indicator (\"Custom Bulls Power Inputs\") for the symbol %s/%s, error code %d",
                  Symbol(),
                  EnumToString(Period()),
                  GetLastError());
      //---インジケータが止まっている 
      return(INIT_FAILED);
     }

//---インジケータ iCustom のハンドルを作成。
   handle_iCustom_Bears=iCustom(Symbol(),Period(),"Custom Bears Power Inputs",
                                Inp_Bears_ma_period,
                                Inp_Bears_Color,
                                Inp_Bears_Width);
//---ハンドルが作成されていない場合 
   if(handle_iCustom_Bears==INVALID_HANDLE)
     {
      //---失敗理由とエラーコードについて通知 
      PrintFormat("Failed to create handle of the iCustom indicator (\"Custom Bears Power Inputs\") for the symbol %s/%s, error code %d",
                  Symbol(),
                  EnumToString(Period()),
                  GetLastError());
      //---インジケータが止まっている 
      return(INIT_FAILED);
     }

   ChartIndicatorAdd(0,0,handle_iCustom_MA);
   int windows_total=(int)ChartGetInteger(0,CHART_WINDOWS_TOTAL);
   ChartIndicatorAdd(0,windows_total,handle_iCustom_Bulls);
   ChartIndicatorAdd(0,windows_total+1,handle_iCustom_Bears);
//---
   return(INIT_SUCCEEDED);
  }


リソースの節約Elder-Ray 1.010.mq5

1つのグループには、100個の分析シンボルがあります。 また、各チャートに3つのインジケータがあることもあり、RAM の節約の問題が関連するようになります。 最小ロットと同様に、最善策は、EA によるリソース消費を確認することです。 同時に、また、テキストファイルから1つのグループのシンボル名を読み取るためのコードを追加し、それを使用して EA のアセンブルに少し使います。

CFileTxtクラス (Symbols on the specified path.mq5のスクリプトシンボルに適用されています) は、このEA に含まれています。 m_file_txtオブジェクトは、テキストファイルにアクセスし、ファイルからデータを読み取る役割を担います。 また、 CSymbolInfoクラスも含まれています。 そのオブジェクトのm_symbolは、シンボルの存在をチェックし、マーケットウォッチウィンドウに追加する役割があります。 SymbolInfoInteger と SymbolSelect を介して関数を実装するのではなく、なぜCSymbolInfoを選択したのでしょうか。 すべては簡単です: CSymbolInfo クラスでは、チェック、追加、またはエラーの通知のすべてのコードがクラス内に隠されていて、 EA の次の3つの文字列を追加するだけです:

         if(!m_symbol.Name(name)) //シンボル名を設定
           {
            m_file_txt.Close();
            return(INIT_FAILED);
           }

ここで、マルチ通貨 EA のすべてのシンボルをマーケットウォッチウィンドウに追加する必要があることを思い出してください:マルチ通貨EAのマーケットウォッチで必要なシンボルを有効にします。 

したがって、このEAは次のアルゴリズムに従って動作します。OnInit()で開かれたテキストファイルは、 シンボルが読み取られ、すぐに3つのカスタムインジケータの生成を試みます。 (カスタム移動平均インプット、カスタムブルパワーインプットとカスタムベアパワーインプットを作成するために作られています) その試行が失敗した場合 (たとえば、カスタム移動平均エントリーを作成するための足の数が不足しているため)、ループに沿ってさらに続きます。 インジケータが作成されている場合は、シンボル名を m_symbols_array に書き込み、3つのインジケータのハンドルは3次元の m_handles_array に送信されます。 したがって、最初の次元によって、両方の配列は、シンボル名とシンボルのハンドルのデータを同期的に含んでいます。

//---
   if(m_file_txt.Open(InpFileName,FILE_READ|FILE_COMMON)==INVALID_HANDLE)
     {
      PrintFormat("ERROR: \"%s\" file in the Data Folder Common folder is not open: %d",InpFileName,GetLastError());
      return(INIT_FAILED);
     }
//---シンボル情報オブジェクトまたはファイル txt オブジェクト
   if(InpInputSymbol==INPUT_SYMBOLS_FILE)
     {
      //---ファイルからデータを読み取る 
      int counter=0;
      while(!m_file_txt.IsEnding())
        {
         counter++;
         Print("Iteration ",counter);
         string name=m_file_txt.ReadString();
         if(!m_symbol.Name(name)) //シンボル名を設定
           {
            m_file_txt.Close();
            return(INIT_FAILED);
           }
         int MA,Bulls,Bears;
         if(!CreateHandles(name,Period(),MA,Bulls,Bears))
            continue; //return(INIT_FAILED);
         int size=ArraySize(m_symbols_array);
         ArrayResize(m_symbols_array,size+1,10);
         ArrayResize(m_handles_array,size+1,10);
         m_symbols_array[size]=name;
         m_handles_array[size][0]=MA;
         m_handles_array[size][1]=Bulls;
         m_handles_array[size][2]=Bears;
        }
      m_file_txt.Close();
     }
   else
     {
      if(!m_symbol.Name(Symbol())) // シンボル名の設定
         return(INIT_FAILED);
     }
//---
   ChartIndicatorAdd(0,0,handle_iCustom_MA);

インジケータハンドルは CreateHandles() で作成されます。

したがって、メモリ消費量は TERMINAL_MEMORY_USED を介して、視覚的に Windows 10 のタスクマネージャで測定されました。 ステップごとにメモリ消費を定義するために、バージョン1.010 で意図的に無効 (コメントアウト) された文字列があります。 最終バージョン1.010 では、シンボルを追加し、インジケータを作成するためのすべてのストリングがアンコメントされました。

  • このEA は、チャートに配置することによる通常の方法で起動されます。
    • ターミナルを起動する (テキストファイルからのシンボルはまだマーケットウォッチウィンドウに追加されていません) — TERMINAL_MEMORY_USED 345 MB, タスクマネージャから26へ90MB;
    • マーケットウォッチウィンドウに約100のシンボルを追加する-TERMINAL_MEMORY_USED 433 MB、タスクマネージャ + 10 MB;
    • 各シンボルごとに3つのインジケータを作成する-TERMINAL_MEMORY_USED 5523 MB、タスクマネージャ300MB。
  • テスターの起動 (ビジュアライゼーションなし) — TERMINAL_MEMORY_USED 420 MB (タスクマネージャの場合)-5 GB。


結論:TERMINAL_MEMORY_USED は、RAM とディスク容量の合計消費量を示します。 通常モードでの RAM 消費は 300 MB を超えないため、リソースを節約する必要はありません。


トレンド (EMA) は...

主な EA の目的は、トレンドを定義することです (EMA) . 1つの足でトレンドを判断することはできません。 複数の足からのデータが必要です。 このパラメータを "bars" としてマークしてみましょう。 下記は、3つの有価証券チャート-CAT、MCD と V です。トレンドは次のように定義されるべきです。: "+ 1 " :上昇トレンド、 "0 ":トレンドなし、 "-1 ":下降トレンド。

トレンド (EMA) は...

"CAT" のチャートは、トレンドを示しています " 0 "(4 つの強気と4つの弱気の足)。 "MCD は"トレンドを示しています "-1 "(8の弱気足, 他は不確実な状態) 最後に、 "V" は、トレンド "0 " (6 つの強気の足、2または3つの弱気の足)です。 追加の'異なる' パラメータが必要な場合があります。隣接する足のインジケータの測定値の最小差です。 


Defining trend. Elder-Ray 1.020.mq5

トレンドの存在条件:に沿う EMA はある特定の方向にあります。 2つの追加パラメータは、おそらくその後にチェックする必要があります: 

  • different—隣接する足のインジケータの値の最小差。
  • trend percentage—1つの方向のインジケータの読み取り値の最小パーセンテージ (スクリーンショット: CATシンボル— EMAインジケータは、 bars セグメントとは反対です。一方、 MCDでは、すべて (またはほとんどすべて) のEMAインジケータが特定の方向を持っている)。


バージョン1.020 での追加と削除: 

  • differentパラメータは実装されていません—隣接する足のインジケータの値の最小差。
  • "—"列挙型の ENUM_INPUT_SYMBOLS-EA は、テキストファイルのシンボルでのみ動作します。
  • "+ " パラメータ number of bars for identifying the trend — EMA によるトレンドを識別するための足の数。
  • "+ " パラメータ minimum percentage of the trend-最小トレンド品質 (特定の方向);
  • "+ " m_prev_bars -前の足を開いた時間を格納するための配列;
  • "+ " 60 sec time — 新しい足をチェックします。


新しい足をキャッチし、トレンドの方向を定義するためのブロック

OnTimer()では、60秒に1回テキストファイルからダウンロードしたシンボル配列(m_symbols_array) を通過し、配列からシンボルに新しい足をキャッチします。 ema_array 配列トレンドを決定するのに十分な EMA インジケータデータを取得します。 計算を行います。:インジケータが上向きと下向きに移動した足の数。 検出パターンを出力します。

//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//---
   int size=ArraySize(m_symbols_array);
   for(int i=0;i<size;i++)
     {
      //---新しい足の時にだけ稼働する
      datetime PrevBars=m_prev_bars[i];
      datetime time_0=iTime(m_symbols_array[i],Period(),0);
      if(time_0==PrevBars)
         continue;
      m_prev_bars[i]=time_0;
      double ema_array[];
      ArraySetAsSeries(ema_array,true);
/*
      m_handles_array[*][MA][Bulls][Bears]
*/
      if(!iMAGetArray(m_handles_array[i][0],0,InpBarsEMA+2,ema_array))
         continue;
      int upwards=0;
      int downward=0;
      for(int j=1;j<InpBarsEMA+1;j++)
        {
         if(ema_array[j]>ema_array[j+1])
            upwards++;
         else if(ema_array[j]<ema_array[j+1])
            downward++;
        }
      if((double)upwards>InpBarsEMA*InpMinTrendPercentage/100.0)
         Print("On ",m_symbols_array[i]," trend UP!");
      else if((double)downward>InpBarsEMA*InpMinTrendPercentage/100.0)
         Print("On ",m_symbols_array[i]," trend DOWN!");
      else
         Print("On ",m_symbols_array[i]," trend NONE!");
     }
  }

トレンドの検索結果。 設定: トレンドを識別するためのバーの数 - 6、トレンドの最小割合 - 75%。 新しい足が表示された時点で機能するときに、ゼロ足は考慮されないことに注意してください。

シンボルのトレンド


シンボルのトレンド


予約注文の設定 (買いストップ、売りストップ). Elder-Ray 1.030.mq5

ポジションを開設する際に、資金不足のエラーを回避することは可能でしょうか。 予約オーダーで機能するので、答えは "No" です。 中途半端な対策はあるかもしれませんが、何も保証できません。 主な理由は、どのポイントで予約オーダーがアクティブになるか、そもそもアクティブになるかどうか知る由がないためです。

このEA はトレンドを定義する方法があるので、予約オーダーの設定に適したポイントを見つけるために買いルール売りルール を使用する必要があります。 買いについては、簡単なチェックがあります。: 足#1 のベアパワー はゼロ未満である必要があり、足 #2 のベアパワーよりも大きい。 売りについては、条件は反対です: 足#1のブルパワーはゼロを超過し、足#2 より小さい。

戦略を記述すると、アレクサンダーエルダーは、買いのポジションと同時に保護の役割を果たすストップロスを直近の安値の下に取るべきだと指摘しています。(売りの場合は直近の高値よりも上に) "直近の " の概念はかなりぼやけているので、2つのオプションをチェックします。:

  1. 足#1 価格で SL を設定する
  2. 最も近い極値点を検索します。

オプション1は、ストップロスに引っかかりすぎてしまうということが分かりました。 したがって、Elder-Ray 1.030.mq5 EA コードでは、オプション 2 (最も近い極値の検索) を実装しました。


最も近いの極値の検索

この機能は、最も近い極値を探します。

最も近い極値

極値が見つからない場合、またはエラーが検出された場合は、' false ' が返されます。

//+------------------------------------------------------------------+
//| Find the nearest extremum                                        |
//+------------------------------------------------------------------+
bool NearestExtremum(ENUM_SERIESMODE type,double &price)
  {
   if(type==MODE_LOW)
     {
      //---最も近い最小値を検索する
      double low_array[];
      ArraySetAsSeries(low_array,true);
      int copy=CopyLow(m_symbol.Name(),Period(),0,100,low_array);
      if(copy==-1)
         return(false);
      double low=DBL_MAX;
      for(int k=0;k<copy;k++)
        {
         if(low_array[k]<low)
            low=low_array[k];
         else if(low_array[k]>low)
            break;
        }
      if(low!=DBL_MAX)
        {
         price=low;
         return(true);
        }
     }
   else if(type==MODE_HIGH)
     {
      //---最も近い最大値を検索する
      double high_array[];
      ArraySetAsSeries(high_array,true);
      int copy=CopyHigh(m_symbol.Name(),Period(),0,100,high_array);
      if(copy==-1)
         return(false);
      double high=DBL_MIN;
      for(int k=0;k<copy;k++)
        {
         if(high_array[k]>high)
            high=high_array[k];
         else if(high_array[k]<high)
            break;
        }
      if(high!=DBL_MIN)
        {
         price=high;
         return(true);
        }
     }
//---
   return(false);
  }


バージョン1.030 での追加と削除: 

  • "+ " CPositionInfoトレーディングクラス (およびm_positionはそのオブジェクトです)。
  • "+ " CTradeトレーディングクラス (およびm_tradeはそのオブジェクトです)。
  • "+ " COrderInfoトレーディングクラス (およびm_orderはそのオブジェクトです)。
  • "+" trailing (Trailing Stop and Trailing Step parameters);
  • "+ " magic number — 一意のEA 識別子;
  • "+ " OnInit() -アカウントの種類を確認します: ヘッジアカウントの場合は、トレードを無効にし、エラーでアンロードします。
  • OnInit() — 視覚化オーダーが変更されました: ストラテジーテスターが起動され、現在のシンボル (EA が起動されているもの) がテキストファイルに存在する場合、現在のシンボルにはインジケータが追加されません (ChartIndicatorAddは適用されません)。
  • OnTimer() -保留中の買いストップおよび売りストップオーダーを設定するためのシグナル確認コードとトレーディングオペレーションを追加しました。
  • OnTradeTransaction() -ポジション反転または部分的な決済があった場合、補正機構を追加しました。
  • "+ " 補正アルゴリズムを有効にすると、OnTradeTransaction() に ストップロス が設定されません。 代わりに、トレーリングストップの関数が改善されています: ポジションをチェックするときに ストップロスのないポジションが検出された場合、ストップロスが最も近い極端点を検索するルールに従って設定されます。
  • "+ " では、m_magic_compensation 変数-トレード識別子が追加されました。

現在のポジションと反対の予約オーダーがトリガされる状況に対処するために、買いストップ予約オーダーがトリガされた後、3つの典型的な状況を考慮する必要があります。

既存のポジション、ボリューム 予約オーダーの有効化、ボリューム 結果のポジション、ボリューム 予約オーダーのトリガーモーメントに注意してください ポジションの前のマジック  コンペンセーションアルゴリズム (NB:マジックはコンペンセーションの前にm_magic_compensationに設定) コンペンセーションアルゴリズム (NB: マジックはコンペンセーションの前に m_magic_compensation に設定されている) ...
 1  Sell 1.0  コンペンセーションアルゴリズム (NB: マジックはコンペンセーションの前に m_magic_compensation に設定されている) ...  Buy 2.0 Position reversal (DEAL_ENTRY_INOUT deal direction)  m_magic 3.0 — 2.0 = 1.0のボリュームを持つ追加の買いを開く  m_magic_compensation
 2  Sell 1.0  Buy Stop 1.0  --- 完全にポジションを閉じる (DEAL_ENTRY_OUT取引の方向)  m_magic ポジションを検索。 ポジションがない場合は、1.0 のボリュームで買いオープン  m_magic_compensation
 3  Sell 2.0  Buy Stop 1.0  Sell 1.0 部分的にポジションを閉じる (DEAL_ENTRY_OUTの取引の方向)  m_magic ポジションを検索。 ポジションが存在し、買いの反対である場合は、1.0 + 1.0 = 2.0 のボリュームで買いオープン  m_magic_compensation

3つのケースのそれぞれについて、トレードとオーダー (実際のネットアカウントでテストだけでなく、テスター) の出力結果を用意しました。 トレードとオーダーに関するレポートを生成するために、ヒストリー取引とオーダースクリプトからコードを使いました。

#1: Sell 1.0 -> Buy Stop 3.0

Sell 1.0, Buy Stop 3.0

取引:
|Ticket              |Order               |Time                |Time msc            |Type                |Entry               |Magic               |Reason              |Position ID        
|1                   |0                   |2016.12.08 00:00:00 |1481155200000       |DEAL_TYPE_BALANCE   |DEAL_ENTRY_IN       |0                   |DEAL_REASON_CLIENT  |0                  
|Volume              |Price               |Commission          |Swap                |Profit              |Symbol              |Comment                                  |External ID        
|0.00                |0.00000             |0.00                |0.00                |50000.00            |                    |                                         |                   
オーダー 0は次のデータ間でトレード履歴がありませんでした。2010.08.07 11:06:20 and 2018.08.10 00:00:00

取引:
|Ticket              |Order               |Time                |Time msc            |Type                |Entry               |Magic               |Reason              |Position ID        
|2                   |2                   |2016.12.08 00:00:00 |1481155200100       |DEAL_TYPE_SELL      |DEAL_ENTRY_IN       |15489               |DEAL_REASON_EXPERT  |2                  
|Volume              |Price               |Commission          |Swap                |Profit              |Symbol              |Comment                                  |External ID        
|1.00                |79.31               |0.00                |0.00                |0.00                |V                   |                                         |                   
オーダー:
|Ticket              |Time setup          |Type                |State               |Time expiration     |Time done           |Time setup msc      |Time done msc       |Type filling       
|2                   |2016.12.08 00:00:00 |ORDER_TYPE_SELL     |ORDER_STATE_FILLED  |2016.12.08 00:00:00 |2016.12.08 00:00:00 |1481155200100       |1481155200100       |ORDER_FILLING_FOK  
|Type time           |Magic               |Reason              |Position id         |Position by id     
|1970.01.01 00:00:00 |15489               |ORDER_REASON_EXPERT |2                   |0                  
|Volume initial      |Volume current      |Open price          |sl                  |tp                  |Price current       |Price stoplimit    
|1.00                |0.00                |79.31               |0.00                |0.00                |79.39               |0.00               
|Symbol              |Comment                                  |Extarnal id        
|V                   |                                         |                   

取引:
|Ticket              |Order               |Time                |Time msc            |Type                |Entry               |Magic               |Reason              |Position ID        
|3                   |3                   |2016.12.08 17:27:37 |1481218057877       |DEAL_TYPE_BUY       |DEAL_ENTRY_INOUT    |15489               |DEAL_REASON_EXPERT  |2                  
|Volume              |Price               |Commission          |Swap                |Profit              |Symbol              |Comment                                  |External ID        
|3.00                |79.75               |0.00                |0.00                |-0.44               |V                   |                                         |                   
オーダー:
|Ticket              |Time setup          |Type                |State               |Time expiration     |Time done           |Time setup msc      |Time done msc       |Type filling       
|3                   |2016.12.08 14:30:00 |ORDER_TYPE_BUY_STOP |ORDER_STATE_FILLED  |2016.12.08 14:30:00 |2016.12.08 17:27:37 |1481207400100       |1481218057877       |ORDER_FILLING_RETURN
|Type time           |Magic               |Reason              |Position id         |Position by id     
|1970.01.01 00:00:00 |15489               |ORDER_REASON_EXPERT |2                   |0                  
|Volume initial      |Volume current      |Open price          |sl                  |tp                  |Price current       |Price stoplimit    
|3.00                |0.00                |79.74               |75.17               |0.00                |79.74               |0.00               
|Symbol              |Comment                                  |Extarnal id        
|V                   |                                         |                   

取引:
|Ticket              |Order               |Time                |Time msc            |Type                |Entry               |Magic               |Reason              |Position ID        
|4                   |4                   |2016.12.09 23:59:00 |1481327940000       |DEAL_TYPE_SELL      |DEAL_ENTRY_OUT      |0                   |DEAL_REASON_CLIENT  |2                  
|Volume              |Price               |Commission          |Swap                |Profit              |Symbol              |Comment                                  |External ID        
|2.00                |79.13               |0.00                |0.00                |-1.24               |V                   |end of test                              |                   
オーダー:
|Ticket              |Time setup          |Type                |State               |Time expiration     |Time done           |Time setup msc      |Time done msc       |Type filling       
|4                   |2016.12.09 23:59:00 |ORDER_TYPE_SELL     |ORDER_STATE_FILLED  |2016.12.09 23:59:00 |2016.12.09 23:59:00 |1481327940000       |1481327940000       |ORDER_FILLING_FOK  
|Type time           |Magic               |Reason              |Position id         |Position by id     
|1970.01.01 00:00:00 |0                   |ORDER_REASON_CLIENT |2                   |0                  
|Volume initial      |Volume current      |Open price          |sl                  |tp                  |Price current       |Price stoplimit    
|2.00                |0.00                |79.13               |0.00                |0.00                |79.13               |0.00               
|Symbol              |Comment                                  |Extarnal id        
|V                   |end of test                              |                   


#2: Sell 1.0 -> Buy Stop 1.0

Sell 1.0, Buy Stop 1.0

取引:
|Ticket              |Order               |Time                |Time msc            |Type                |Entry               |Magic               |Reason              |Position ID        
|1                   |0                   |2016.12.08 00:00:00 |1481155200000       |DEAL_TYPE_BALANCE   |DEAL_ENTRY_IN       |0                   |DEAL_REASON_CLIENT  |0                  
|Volume              |Price               |Commission          |Swap                |Profit              |Symbol              |Comment                                  |External ID        
|0.00                |0.00000             |0.00                |0.00                |50000.00            |                    |                                         |                   
オーダー 0は次のデータ間でトレード履歴がありませんでした。2010.08.07 11:06:20 and 2018.08.10 00:00:00

取引:
|Ticket              |Order               |Time                |Time msc            |Type                |Entry               |Magic               |Reason              |Position ID        
|2                   |2                   |2016.12.08 00:00:00 |1481155200100       |DEAL_TYPE_SELL      |DEAL_ENTRY_IN       |15489               |DEAL_REASON_EXPERT  |2                  
|Volume              |Price               |Commission          |Swap                |Profit              |Symbol              |Comment                                  |External ID        
|1.00                |79.31               |0.00                |0.00                |0.00                |V                   |                                         |                   
オーダー:
|Ticket              |Time setup          |Type                |State               |Time expiration     |Time done           |Time setup msc      |Time done msc       |Type filling       
|2                   |2016.12.08 00:00:00 |ORDER_TYPE_SELL     |ORDER_STATE_FILLED  |2016.12.08 00:00:00 |2016.12.08 00:00:00 |1481155200100       |1481155200100       |ORDER_FILLING_FOK  
|Type time           |Magic               |Reason              |Position id         |Position by id     
|1970.01.01 00:00:00 |15489               |ORDER_REASON_EXPERT |2                   |0                  
|Volume initial      |Volume current      |Open price          |sl                  |tp                  |Price current       |Price stoplimit    
|1.00                |0.00                |79.31               |0.00                |0.00                |79.39               |0.00               
|Symbol              |Comment                                  |Extarnal id        
|V                   |                                         |                   

取引:
|Ticket              |Order               |Time                |Time msc            |Type                |Entry               |Magic               |Reason              |Position ID        
|3                   |3                   |2016.12.08 17:27:37 |1481218057877       |DEAL_TYPE_BUY       |DEAL_ENTRY_OUT      |15489               |DEAL_REASON_EXPERT  |2                  
|Volume              |Price               |Commission          |Swap                |Profit              |Symbol              |Comment                                  |External ID        
|1.00                |79.75               |0.00                |0.00                |-0.44               |V                   |                                         |                   
オーダー:
|Ticket              |Time setup          |Type                |State               |Time expiration     |Time done           |Time setup msc      |Time done msc       |Type filling       
|3                   |2016.12.08 14:30:00 |ORDER_TYPE_BUY_STOP |ORDER_STATE_FILLED  |2016.12.08 14:30:00 |2016.12.08 17:27:37 |1481207400100       |1481218057877       |ORDER_FILLING_RETURN
|Type time           |Magic               |Reason              |Position id         |Position by id     
|1970.01.01 00:00:00 |15489               |ORDER_REASON_EXPERT |2                   |0                  
|Volume initial      |Volume current      |Open price          |sl                  |tp                  |Price current       |Price stoplimit    
|1.00                |0.00                |79.74               |75.17               |0.00                |79.74               |0.00               
|Symbol              |Comment                                  |Extarnal id        
|V                   |                                         |                   


#3: Sell 2.0 -> Buy Stop 1.0

Sell 2.0, Buy Stop 1.0

取引:
|Ticket              |Order               |Time                |Time msc            |Type                |Entry               |Magic               |Reason              |Position ID        
|1                   |0                   |2016.12.08 00:00:00 |1481155200000       |DEAL_TYPE_BALANCE   |DEAL_ENTRY_IN       |0                   |DEAL_REASON_CLIENT  |0                  
|Volume              |Price               |Commission          |Swap                |Profit              |Symbol              |Comment                                  |External ID        
|0.00                |0.00000             |0.00                |0.00                |50000.00            |                    |                                         |                   
オーダー 0は次のデータ間でトレード履歴がありませんでした。2010.08.07 11:06:20 and 2018.08.10 00:00:00

取引:
|Ticket              |Order               |Time                |Time msc            |Type                |Entry               |Magic               |Reason              |Position ID        
|2                   |2                   |2016.12.08 00:00:00 |1481155200100       |DEAL_TYPE_SELL      |DEAL_ENTRY_IN       |15489               |DEAL_REASON_EXPERT  |2                  
|Volume              |Price               |Commission          |Swap                |Profit              |Symbol              |Comment                                  |External ID        
|2.00                |79.31               |0.00                |0.00                |0.00                |V                   |                                         |                   
オーダー:
|Ticket              |Time setup          |Type                |State               |Time expiration     |Time done           |Time setup msc      |Time done msc       |Type filling       
|2                   |2016.12.08 00:00:00 |ORDER_TYPE_SELL     |ORDER_STATE_FILLED  |2016.12.08 00:00:00 |2016.12.08 00:00:00 |1481155200100       |1481155200100       |ORDER_FILLING_FOK  
|Type time           |Magic               |Reason              |Position id         |Position by id     
|1970.01.01 00:00:00 |15489               |ORDER_REASON_EXPERT |2                   |0                  
|Volume initial      |Volume current      |Open price          |sl                  |tp                  |Price current       |Price stoplimit    
|2.00                |0.00                |79.31               |0.00                |0.00                |79.39               |0.00               
|Symbol              |Comment                                  |Extarnal id        
|V                   |                                         |                   

取引:
|Ticket              |Order               |Time                |Time msc            |Type                |Entry               |Magic               |Reason              |Position ID        
|3                   |3                   |2016.12.08 17:27:37 |1481218057877       |DEAL_TYPE_BUY       |DEAL_ENTRY_OUT      |15489               |DEAL_REASON_EXPERT  |2                  
|Volume              |Price               |Commission          |Swap                |Profit              |Symbol              |Comment                                  |External ID        
|1.00                |79.75               |0.00                |0.00                |-0.44               |V                   |                                         |                   
オーダー:
|Ticket              |Time setup          |Type                |State               |Time expiration     |Time done           |Time setup msc      |Time done msc       |Type filling       
|3                   |2016.12.08 14:30:00 |ORDER_TYPE_BUY_STOP |ORDER_STATE_FILLED  |2016.12.08 14:30:00 |2016.12.08 17:27:37 |1481207400100       |1481218057877       |ORDER_FILLING_RETURN
|Type time           |Magic               |Reason              |Position id         |Position by id     
|1970.01.01 00:00:00 |15489               |ORDER_REASON_EXPERT |2                   |0                  
|Volume initial      |Volume current      |Open price          |sl                  |tp                  |Price current       |Price stoplimit    
|1.00                |0.00                |79.74               |75.17               |0.00                |79.74               |0.00               
|Symbol              |Comment                                  |Extarnal id        
|V                   |                                         |                   

取引:
|Ticket              |Order               |Time                |Time msc            |Type                |Entry               |Magic               |Reason              |Position ID        
|4                   |4                   |2016.12.09 23:59:00 |1481327940000       |DEAL_TYPE_BUY       |DEAL_ENTRY_OUT      |0                   |DEAL_REASON_CLIENT  |2                  
|Volume              |Price               |Commission          |Swap                |Profit              |Symbol              |Comment                                  |External ID        
|1.00                |79.13               |0.00                |0.00                |0.18                |V                   |end of test                              |                   
オーダー:
|Ticket              |Time setup          |Type                |State               |Time expiration     |Time done           |Time setup msc      |Time done msc       |Type filling       
|4                   |2016.12.09 23:59:00 |ORDER_TYPE_BUY      |ORDER_STATE_FILLED  |2016.12.09 23:59:00 |2016.12.09 23:59:00 |1481327940000       |1481327940000       |ORDER_FILLING_FOK  
|Type time           |Magic               |Reason              |Position id         |Position by id     
|1970.01.01 00:00:00 |0                   |ORDER_REASON_CLIENT |2                   |0                  
|Volume initial      |Volume current      |Open price          |sl                  |tp                  |Price current       |Price stoplimit    
|1.00                |0.00                |79.13               |0.00                |0.00                |79.13               |0.00               
|Symbol              |Comment                                  |Extarnal id        
|V                   |end of test                              |                   


下記は、実際のアカウントとリアルタイム (テスターではない) 上の別のケースです: 2.0 のボリュームで成行買いオーダー (買いトレードオーダーは1.0 のボリュームと2つのトレードを生成- 2008749420087495)、その後、2.0 のボリュームの売りリミットが利益を出し決済しました。 その少し後で、その売りリミットは2つの取引(20088091および20088145) で完了しました。 出力結果:

Buy 2.0, Sell limit 2.0 

取引:
|Ticket              |Order               |Time                |Time msc            |Type                |Entry               |Magic               |Reason              |Position ID        
|20087494            |29080489            |2018.08.10 07:23:34 |1533885814000       |DEAL_TYPE_BUY       |DEAL_ENTRY_IN       |0                   |DEAL_REASON_CLIENT  |29080489           
|Volume              |Price               |Commission          |Swap                |Profit              |Symbol              |Comment                                  |External ID        
|1.00                |14595               |-0.10               |0.00                |0.00                |RTSGZU8             |                                         |                   
オーダー:
|Ticket              |Time setup          |Type                |State               |Time expiration     |Time done           |Time setup msc      |Time done msc       |Type filling       
|29080489            |2018.08.10 07:23:34 |ORDER_TYPE_BUY      |ORDER_STATE_FILLED  |2018.08.10 07:23:34 |2018.08.10 07:23:34 |1533885814000       |1533885814000       |ORDER_FILLING_RETURN
|Type time           |Magic               |Reason              |Position id         |Position by id     
|1970.01.01 00:00:00 |0                   |ORDER_REASON_CLIENT |29080489            |0                  
|Volume initial      |Volume current      |Open price          |sl                  |tp                  |Price current       |Price stoplimit    
|2.00                |0.00                |0                   |0                   |0                   |14588               |0                  
|Symbol              |Comment                                  |External id        
|RTSGZU8             |                                         |13_31861873584     

取引:
|Ticket              |Order               |Time                |Time msc            |Type                |Entry               |Magic               |Reason              |Position ID        
|20087495            |29080489            |2018.08.10 07:23:34 |1533885814000       |DEAL_TYPE_BUY       |DEAL_ENTRY_IN       |0                   |DEAL_REASON_CLIENT  |29080489           
|Volume              |Price               |Commission          |Swap                |Profit              |Symbol              |Comment                                  |External ID        
|1.00                |14595               |-0.10               |0.00                |0.00                |RTSGZU8             |                                         |                   
オーダー:
|Ticket              |Time setup          |Type                |State               |Time expiration     |Time done           |Time setup msc      |Time done msc       |Type filling       
|29080489            |2018.08.10 07:23:34 |ORDER_TYPE_BUY      |ORDER_STATE_FILLED  |2018.08.10 07:23:34 |2018.08.10 07:23:34 |1533885814000       |1533885814000       |ORDER_FILLING_RETURN
|Type time           |Magic               |Reason              |Position id         |Position by id     
|1970.01.01 00:00:00 |0                   |ORDER_REASON_CLIENT |29080489            |0                  
|Volume initial      |Volume current      |Open price          |sl                  |tp                  |Price current       |Price stoplimit    
|2.00                |0.00                |0                   |0                   |0                   |14588               |0                  
|Symbol              |Comment                                  |External id        
|RTSGZU8             |                                         |13_31861873584     

取引:
|Ticket              |Order               |Time                |Time msc            |Type                |Entry               |Magic               |Reason              |Position ID        
|20088091            |29080662            |2018.08.10 08:03:08 |1533888188000       |DEAL_TYPE_SELL      |DEAL_ENTRY_OUT      |0                   |DEAL_REASON_CLIENT  |29080489           
|Volume              |Price               |Commission          |Swap                |Profit              |Symbol              |Comment                                  |External ID        
|1.00                |14626               |-0.10               |0.00                |0.46                |RTSGZU8             |                                         |                   
オーダー:
|Ticket              |Time setup          |Type                |State               |Time expiration     |Time done           |Time setup msc      |Time done msc       |Type filling       
|29080662            |2018.08.10 07:27:19 |ORDER_TYPE_SELL_LIMIT |ORDER_STATE_FILLED  |2018.08.10 07:27:19 |2018.08.10 08:05:42 |1533886039000       |1533888342000       |ORDER_FILLING_RETURN
|Type time           |Magic               |Reason              |Position id         |Position by id     
|1970.01.01 00:00:00 |0                   |ORDER_REASON_CLIENT |29080489            |0                  
|Volume initial      |Volume current      |Open price          |sl                  |tp                  |Price current       |Price stoplimit    
|2.00                |0.00                |14626               |0                   |0                   |14624               |0                  
|Symbol              |Comment                                  |External id        
|RTSGZU8             |                                         |13_31862155871     

取引:
|Ticket              |Order               |Time                |Time msc            |Type                |Entry               |Magic               |Reason              |Position ID        
|20088145            |29080662            |2018.08.10 08:05:42 |1533888342000       |DEAL_TYPE_SELL      |DEAL_ENTRY_OUT      |0                   |DEAL_REASON_CLIENT  |29080489           
|Volume              |Price               |Commission          |Swap                |Profit              |Symbol              |Comment                                  |External ID        
|1.00                |14626               |-0.10               |0.00                |0.46                |RTSGZU8             |                                         |                   
オーダー:
|Ticket              |Time setup          |Type                |State               |Time expiration     |Time done           |Time setup msc      |Time done msc       |Type filling       
|29080662            |2018.08.10 07:27:19 |ORDER_TYPE_SELL_LIMIT |ORDER_STATE_FILLED  |2018.08.10 07:27:19 |2018.08.10 08:05:42 |1533886039000       |1533888342000       |ORDER_FILLING_RETURN
|Type time           |Magic               |Reason              |Position id         |Position by id     
|1970.01.01 00:00:00 |0                   |ORDER_REASON_CLIENT |29080489            |0                  
|Volume initial      |Volume current      |Open price          |sl                  |tp                  |Price current       |Price stoplimit    
|2.00                |0.00                |14626               |0                   |0                   |14624               |0                  
|Symbol              |Comment                                  |External id        
|RTSGZU8             |                                         |13_31862155871     


1.xxxのテストのメモ

  • テキストファイル内のほぼ同じ値の有価証券を維持しようとしてください。
  • テキストファイルでテストする場合は、少数のシンボルを残すことをお勧めします。 最も完璧なケースは、単一のシンボルを残して、その上にテストを実行することです。


オプション 2: "トリプルチョイス " システムとの組み合わせ

オプション 1 (1 つのチャートのすべてのインジケータ) では、トレンドインジケータは同じ期間にありました。 オプション2では、トレンドインジケータはより高い時間枠に配置されています。 したがって、1つだけの新しいパラメータが追加されます-トレンドタイムフレーム (Trend timeframe).

オプション2は、Elder-Ray 2.000.mq5 EA に実装されています。


この記事に添付されているファイル:

名前 ファイルの種類 詳細
Symbols on the specified path.mq5 スクリプト グループのシンボルを含むテキストファイルを形成し、共通データフォルダに保存されます。
Gets minimal volume.mq5 スクリプト グループの最小ボリュームに関する情報を表示します。
Elder-Ray 1.001.mq5 EA 適応インジケータの視覚化
Elder-Ray 1.010.mq5 EA テキストファイルの操作を開始し、ファイルからシンボルのインジケータを作成します。 このEA はメモリ消費を監視するために使用します
Elder-Ray 1.020.mq5 EA トレンドを定義します。 トレンド定義の妥当性の確認
Elder-Ray 1.030.mq5 EA オプション1の実行時バージョン: 1 つのチャート上のすべてのインジケータ
Elder-Ray 2.000.mq5 EA オプション 2: "トリプルチョイス " システムとの組み合わせ


結論

エルダーレイ (ブルパワーとベアパワー) トレーディングシステムは、EMAのトレンドインジケータがブルパワーとベアパワーよりも高い時間枠で計算され、"トリプルチョイス " システムとの組み合わせたときに、十分に実行可能です。

このEA をテストする際には、準備されたテキストファイルに最大100のシンボルが含まれている可能性があることに注意してください。 この数値を考慮すると、テストを開始するのに最大10分、テスト中に最大 5 GB のメモリが必要になる場合があります。 

EAに対する信頼度に関係なく、EAが動いている間に他のことをしたくなるでしょう。(かく言う私もEAをテストしながらこの記事を書いています。)

CAT および V マニュアル

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

添付されたファイル |
Elder-Ray.zip (45.08 KB)
1. テストメソッド1トレンドとレンジ戦略の組み合わせ 1. テストメソッド1トレンドとレンジ戦略の組み合わせ

トレード戦略には多くのものがあります。 トレードのために、ある戦略はトレンドを探し、またある戦略はレンジ価格変動の範囲を定義します。 この2つのアプローチを組み合わせて収益性を高めることは可能でしょうか。

データ配列間の相関を解析するためのCGraphicに基づくPairPlot グラフ (時系列) データ配列間の相関を解析するためのCGraphicに基づくPairPlot グラフ (時系列)

テクニカル分析に複数の時系列を比較することは、適切なツールを必要としますが一般的なタスクです。 この記事では、グラフィカル解析のツールを開発し、2つ以上の時系列間の相関関係を検出します。

リバーシング: 聖杯や危険な妄想? リバーシング: 聖杯や危険な妄想?

この記事では、リバーシングマーチンゲール技術を研究し、トレード戦略を向上させることができるかどうかということはもちろん、使用する価値があるかどうかを判断します。 ヒストリカルデータを操作し、リバーシングテクニックに最適なインジケータを確認するEAを作成します。 また、独立したトレードシステムとしてのインジケータなしで使用できるかどうかもチェックします。 また、リバーシングが、負けトレードから勝ちトレードに変えられるかを確かめます。

特定のディストリビューション法によるカスタムシンボルを用いた時系列モデリング 特定のディストリビューション法によるカスタムシンボルを用いた時系列モデリング

この記事では、カスタムシンボルを作成および操作するためのターミナルの機能の概要を示し、カスタムシンボル、トレンド、さまざまなチャートパターンを使用してトレードヒストリーをシミュレートするための手法を提供します。