ライブラリ: BestInterval

 

BestInterval:

最良の取引間隔を計算するためのライブラリです。

BestInterval

作者: fxsaber

 

このライブラリは、標準のMT5 Testerレポートのこのようなチャートと共通点があるように思われるかもしれません。


そのようなチャートのデータを取得する方法の例を以下に示します。

#include <MT4Orders.mqh> //https://www.mql5.com/ja/code/16006
#include <fxsaber\BestInterval\BestInterval.mqh> //https://www.mql5.com/ja/code/22710

void OnStart()
{
  BESTINTERVAL BestInterval; // 最適な取引間隔を計算するオブジェクトを作成
  
  BestInterval.Set(); // 入札履歴を掲載  
  BestInterval.DeleteWorseInterval() // 悪いインターバルを捨てた

  double Profit[24], Loss[24];
  
  ArrayInitialize(Profit, 0);
  ArrayInitialize(Loss, 0);
  
  for (int i = BestInterval.GetAmount() - 1; i >= 0; i--)
  {
    const DEAL Deal = BestInterval[i];     // 再計算された取引履歴のi番目の取引
    const int hour = Deal.OpenTime % 3600; // i番目のトランザクションの時間
    
    // それぞれの配列に利益を分配する
    if (Deal.Profit > 0)
      Profit[hour] += Deal.Profit;
    else
      Loss[hour] -= Deal.Profit;    
  }
}


しかし実際には、ライブラリは単一の実行や視覚化のためのものではありません。TSの最適化には99%必要であり、そのようなモードが密かに埋め込まれている場合、そのTSのクールモードを掘り出すことができるからです。


ライブラリに表示されているログは、最適化後の解析の段階、つまりシングルランである。このログは、TSの特定のインスタンス(入力パラメーターのセット)が、計算された間隔でどのように振る舞うかを示しています。つまり、最終段階での追加コントロールです。基本は最適化である。

 

このライブラリは、MT4Orders を使用して取引履歴を取得します。

MT4Ordersを使用すべきでないさまざまな理由が考えられます。たとえば、サードパーティの取引アナライザーの場合などです。

いずれにせよ、このシナリオは提供されています:

#include <fxsaber\BestInterval\BestInterval.mqh> // 最適な取引間隔の計算

void OnDeinit( const int )
{
  BESTINTERVAL BestInterval; // 最適な取引間隔を計算するオブジェクトを作成
  
  // クロージング案件の配列
  DEAL Deals[];
  
  // 各クロージング・トランザクションについて、2つのフィールドを記述する必要がある。
  // Deals[i].Profit - ポジションを決済した取引の利益
  // Deals[i].OpenTime - ディールがクローズするポジションをオープンした(クローズしない)時間
      
// BestInterval.Set(); // プット取引履歴 - MT4Ordersを使用
  BestInterval.Set(Deals); // 自前で用意した入札談話を掲載
  
  const int AmountIntervals = 3; // ワーストケースのトレード間隔をいくつ捨てるか
  
  for (int i = 0; i < AmountIntervals; i++)
    if (BestInterval.DeleteWorseInterval()) // 何かが捨てられた場合
      Print(BestInterval.ToString());       // 得られた取引データを出力しよう
    else
      break;                                // そうでなければ退場
}

つまり、最適な間隔を計算するために必要なデータを入力することができます。ライブラリはプラットフォームに依存しない。


biblaアルゴリズムは、パラメータの内部最適化を一切行わないことに注意してください。基本がシングルパスであるため、オーバーシュートはありません:O(n) (nはポジションをクローズする 取引数)。また、「最も遅い」リンクは1つのクイックソートです:O(n*log(n))。そのため、処理が遅くならないので、最適化にぴったりです。


開発者は、(シングルパスなので)このアルゴリズムを採用し、その結果をシングルパスレポートに入れ、標準インジケーターを 作成することができます。

識別子

統計指標の説明

タイプ

STAT_PROFIT

STAT_GROSS_PROFITとSTAT_GROSS_LOSSの合計(STAT_GROSS_LOSSは常にゼロ以下)。

STAT_BESTPROFIT

最良区間での利益。

double

 

ライブラリーのアイデアは明確で、実装は驚くほど使いやすい。ありがとうございます。

しかし、作者に提案したいことがあります。特定のExpert Advisorでの使用例(ライブラリを有効にするところからフィルタの形成まで)が必要です。

 
Sergey Pavlov:

ライブラリーのアイデアは明確で、実装は驚くほど使いやすい。ありがとう。

しかし、作者に提案があります:特定のExpert Advisorでの使用例が必要です - ライブラリを有効にしてフィルタリングを形成する最初から。

101% サポート :)

 
Sergey Pavlov:

特定のExpert Advisorでの使用例(ライブラリの有効化から フィルターの形成まで)が必要です。

BestInterval_Example.mq5をご覧ください。

 

Чтобы применить найденный интервал после его расчета, нужно во входных параметрах указать BestInteval Action = true.



特徴

  • 最適なインターバルの計算とテスターへの適用は、Expert Advisorのオリジナルのソースコードを変更することなく行われます。

  • S

    上記ライブラリのBEFOREとAFTERを適用した結果を、MT4/5のシングルパスログの写真と対応する部分の形でコメントで共有してください。


    計算結果をExpert Advisorに適用するのが非常に簡単になりました。これを行うには、数回クリックするだけです。

    簡単にまとめると

    1. 任意のExpert Advisorを取り出し、その冒頭にこれらの行を記述する。

    #include <MT4Orders.mqh> //https://www.mql5.com/ja/code/16006
    
    #define  BESTINTERVAL_ONTESTER // 最適化の基準は、最良の区間の利益である。
    #include <fxsaber\Virtual\Virtual.mqh> //https://www.mql5.com/ja/code/22577
    #include <fxsaber\BestInterval\BestInterval.mqh> //https://www.mql5.com/ja/code/22710

    2.投げるインターバルの数と、それを適用しないオプションを設定する。


    3.3.最適化を設定する。ご興味があれば、テスターログに計算データがあります。

    Amount of Delete Intervals = 0
    00:00:00 - 23:59:59 : Profit = 18385.00, Total = 1070, PF = 1.61, Mean = 17.18, DD = 1769.00, RF = 10.39
    SUMMARY: 00:00:00 - 23:59:59 : Profit = 18385.00, Total = 1070, PF = 1.61, Mean = 17.18, DD = 1769.00, RF = 10.39
    
    Amount of Delete Intervals = 1
    00:00:00 - 10:07:47 : Profit = 4279.00, Total = 181, PF = 2.02, Mean = 23.64, DD = 834.00, RF = 5.13
    11:06:12 - 23:59:59 : Profit = 17349.00, Total = 768, PF = 1.95, Mean = 22.59, DD = 933.00, RF = 18.59
    SUMMARY: 00:00:00 - 23:59:59 : Profit = 21628.00, Total = 949, PF = 1.97, Mean = 22.79, DD = 862.00, RF = 25.09


    4.シングルランの後、ベストインターバルを有効にするオプションをオンにし、再度シングルランを開始します。


    5.テスターレポート


    適用されたインターバルに関するデータもログに記録されます。

    Amount of Delete Intervals = 1
    00:00:00 - 10:07:47 : Profit = 4279.00, Total = 181, PF = 2.02, Mean = 23.64, DD = 834.00, RF = 5.13
    11:06:12 - 23:59:59 : Profit = 17349.00, Total = 768, PF = 1.95, Mean = 22.59, DD = 933.00, RF = 18.59
    SUMMARY: 00:00:00 - 23:59:59 : Profit = 0.00, Total = 0, PF = Max, Mean = 0.00
    


    要約すると、ベスト・インターバルの各サブ・インターバルについて、ビフォー・アフターの全結果と詳細データ(追加された最大ドローダウンとリカバリー・ファクター - バランス別)。

     

    このアドバイザーで ライブラリーをチェックできる。

     

    どういう意味ですか?

    'OnTester' - function already defined and has body      BestInterval.mqh        504     8
    

    コンパイルできない

     
    Sergey Chalyshev:

    どういう意味ですか?

    コンパイルできない

    何をしましたか?

     
    fxsaber:

    何をしましたか?

    まだ何もしていません。このコードをコンパイルしようとしているだけです:

    #include <MT4Orders.mqh> //https://www.mql5.com/ja/code/16006
    
    #define  VIRTUAL_TESTER // 仮想取引環境での実行
    #define  BESTINTERVAL_ONTESTER // 最適化の基準は、最良の区間の利益である。
    #include <fxsaber\Virtual\Virtual.mqh> //https://www.mql5.com/ja/code/22577
    #include <fxsaber\BestInterval\BestInterval.mqh> //https://www.mql5.com/ja/code/22710
    
    #include <..\Experts\fxsaber\TesterEA\TesterEA.mq4>

    Virtual なしでもコンパイルできます、

    BestInterval なしでもコンパイルできます、

    しかし、一緒にコンパイルすることはできません。