ライブラリ: BestInterval - ページ 24

 
Enrique Dangeroux:
int=>boolに変更しました。あるいは、代わりにAmountDeleteIntervalsを返すように提案してもよいでしょうか。

ありがとう。

 

AverageHoldingをライブラリに加えることを検討してください。

インターバル.mqh

  datetime AverageHolding;

  void CalculateFinal( void )
  {
    this.ProfitMinus = this.Profit - this.ProfitPlus;

    this.ProfitFactor = this.ProfitMinus ? -this.ProfitPlus / this.ProfitMinus : DBL_MAX;
    this.Mean = this.Total ? this.Profit / this.Total : 0;

    this.TotalMinus = this.Total - this.TotalPlus;
    
    this.AverageHolding = this.Total ? this.AverageHolding / this.Total : 0;

    return;
  }

  void Calculate( const DEAL &Deals[], const int Left, const int Right )
  {
    this.Init();

    for (int i = Left; i < Right; i++)
      if (!Deals[i].IsNull())
      {
        if (Deals[i].Profit > 0)
        {
          this.ProfitPlus += Deals[i].Profit;

          this.TotalPlus++;
        }
        
        this.AverageHolding += Deals[i+1].OpenTime - Deals[i].OpenTime;
        this.Profit += Deals[i].Profit;
        this.Total++;
      }

    this.CalculateFinal();

    this.OpenTime = Deals[Left-1].OpenTime + 1;
    this.CloseTime = Deals[Right].OpenTime - 1;

    
    return;
  }



ベスト・インターバル.mqh

#define  MACROS_GET(A, B)         \
  B Get##A( void ) const         \
  {                              \
    return(this.FullInterval.A); \
  }

  MACROS_GET(Profit, double)
  MACROS_GET(ProfitPlus, double)
  MACROS_GET(ProfitMinus, double)

  MACROS_GET(Total, int)
  MACROS_GET(TotalPlus, int)
  MACROS_GET(TotalMinus, int)

  MACROS_GET(ProfitFactor, double)
  MACROS_GET(Mean, double)

  MACROS_GET(MaxDrawDown, double)
  MACROS_GET(RecoveryFactor, double)
  
  MACROS_GET(AverageHolding, datetime)
#undef  MACROS_GET
 
Enrique Dangeroux:

AverageHoldingをライブラリーに加えてください。

クローズド・ポジションの 平均保有期間 - 何のためにあるのですか?

これは計算されるべきではありません。クローズ時間を知る必要があります。

 
fxsaber:

クローズド・ポジションの 平均寿命 - 何のために?

ポジションの平均ライフタイム(OrderCloseTime - OrderOpentime)のことです。これはGAのカスタム基準として有用です。例えば、取引頻度と取引ごとの最低利益のしきい値を組み合わせて GA を導きます。


fxsaber

それは計算方法ではない。終値を知る必要があります。

DEAL IN / OUT ネッティング口座の場合、計算にはオープン時間で十分ですが、適切な実装にはクローズ時間を使用する必要があります。

残る問題がある。テスターは最後のポジションのクローズを強制します。アトミッククロックの精度はすべての戦略に必要ではないかもしれないが、問題は残るだろう。またGAは、例えばあなたがどこかの投稿で書いたように、BestInterval.GetTotal() <xxx のときに単純に0を返すことで、より高い取引頻度に誘導することができます。

そうすることで、問題を追いかけている間は無価値に見える。

 
Enrique Dangeroux:

私はポジションの平均ライフタイム(OrderCloseTime - OrderOpentime)を参照しています。これはカスタム GA 基準として有用である。例えば、取引頻度を増加させるGAを、取引ごとの最小利益閾値と組み合わせる。

OnTester関数の概略ソースコードとして最適化 基準を与える。

 

取引、自動取引システム、取引戦略のテストに関するフォーラム

ライブラリ: BestInterval

fxsaber, 2019.12.05 13:48 PM.

嬉しいというのは明らかに控えめな表現です...。BestIntervalはもう最高です。しかも変更は最小限。いつものように例を。


ここに24時間のパスがある。


古典的なBestIntervalを適用します。

Profit = 8018.00 = 8018.00 + 0.00 (0.00%) - Amount of Delete Intervals = 0 (2019.09.14 - 2019.12.04)
00:00:00 - 23:59:59 : Profit = 8018.00 (100.00%), Total = 739 (73.34%), PF = 1.44, Mean = 10.85, DD = 1317.00, RF = 6.09
SUMMARY: 00:00:00 - 23:59:59 : Profit = 8018.00 (100.00%), Total = 739 (73.34%), PF = 1.44, Mean = 10.85, DD = 1317.00, RF = 6.09

Profit = 10721.00 = 8018.00 + 2703.00 (33.71%) - Amount of Delete Intervals = 1 (2019.09.14 - 2019.12.04), 13:00 - 08:00, CountHours = 18
00:00:00 - 08:03:48 : Profit = 3278.00 (30.58%), Total = 161 (79.50%), PF = 2.21, Mean = 20.36, DD = 518.00, RF = 6.33
13:07:59 - 23:59:59 : Profit = 7443.00 (69.42%), Total = 389 (74.55%), PF = 2.14, Mean = 19.13, DD = 417.00, RF = 17.85
SUMMARY: 00:00:00 - 23:59:59 : Profit = 10721.00 (100.00%), Total = 550 (76.00%), PF = 2.16, Mean = 19.49, DD = 536.00, RF = 20.00

利益が3分の1増加し、他の指標も良くなっているのがわかる。


しかし、私たちは柔軟性を求めました。それがこれだ。

Profit = 8018.00 = 8018.00 + 0.00 (0.00%) - Amount of Delete Intervals = 0 (2019.09.14 - 2019.12.04)
00:00:00 - 23:59:59 : Profit = 8018.00 (100.00%), Total = 739 (73.34%), PF = 1.44, Mean = 10.85, DD = 1317.00, RF = 6.09
SUMMARY: 00:00:00 - 23:59:59 : Profit = 8018.00 (100.00%), Total = 739 (73.34%), PF = 1.44, Mean = 10.85, DD = 1317.00, RF = 6.09

Profit = 4868.00 = 8018.00 + -3150.00 (-39.29%) - Amount of Delete Intervals = 1 (2019.09.14 - 2019.12.04), 20:00 - 01:00, CountHours = 4
00:00:00 - 01:31:54 : Profit = 1067.00 (21.92%), Total = 32 (87.50%), PF = 4.63, Mean = 33.34, DD = 177.00, RF = 6.03
19:29:54 - 23:59:59 : Profit = 3801.00 (78.08%), Total = 118 (83.90%), PF = 5.53, Mean = 32.21, DD = 249.00, RF = 15.27
SUMMARY: 00:00:00 - 23:59:59 : Profit = 4868.00 (100.00%), Total = 150 (84.67%), PF = 5.29, Mean = 32.45, DD = 310.00, RF = 15.70


利益は増加せず、減少した!しかし、他の指標を見てください。最も高い利益とフィットする確率を持つ区間を見つける代わりに、はるかに狭い区間が見つかったが、古典的なものよりもはるかにおいしい。


イノベーションはこのように追加される。

#define  BESTINTERVAL_SLIPPAGE // BestIntervalを計算するために人工的なフィルタを作成する。


市場パターン・リサーチの質が非常に向上した。マルチ・テスターの仕事にとって重要な意味を持つ。


発見されたとても美味しい区間をTSに詰め込み、その中で最大の利益を得るために最適化を始めると、高い確率ででたらめが発見されることは興味深い。


そしてもうひとつ。例えば、BestIntervalは、0時から1時間以内にオープンされた取引を無視する。これは、2時にオープンのシグナルが来ても、BestIntervalがオープンさせるという意味ではありません。Biblaは、0時からの無視されたポジションが「クローズ」された場合のみ、それをオープンします。したがって、厳密に設定された間隔でTSを最適化すると、BestIntervalが示すよりも悪い結果になることがよくわかります。


最も明白な例は、トレンドのカウンタートレンドTSです。TSが売りシグナルを出し、トレンドが上昇しているとします。BestIntervalはこれらのシグナルを無視します。

 

私の経験に基づいて、そのような特殊性に気づきました。


最適化の基準が プロファイル曲線の滑らかさとは無関係である場合。そして、最良の結果が滑らかな曲線を与えるのであれば、それはフィッティングではない。

例えば、最大利益が基準だとします。そしてベストパスの結果はまっすぐな上向きカーブになる。それはフィッティングではない。

しかし、基準が最小R^2である場合。そして、最良のパスは直線的な上向きとなる。それはおそらくフィットしている。


BestIntervalは独立した最適化基準なのだろうか?特にスリッページ割り当てのトリックは。

 
上記の具体例。EURUSDで 24時間のTSを取り、BestIntervalとSlipPage ~ -12pipsを使って最適化しました。これがその画像です。
Profit = 490.00 = 490.00 + 0.00 (0.00%) - Amount of Delete Intervals = 0 (2020.07.01 - 2020.08.14)
00:00:00 - 23:59:59 : Profit = 490.00 (100.00%), Total = 183 (69.95%), PF = 1.03, Mean = 2.68, DD = 2441.00, RF = 0.20
SUMMARY: 00:00:00 - 23:59:59 : Profit = 490.00 (100.00%), Total = 183 (69.95%), PF = 1.03, Mean = 2.68, DD = 2441.00, RF = 0.20

Profit = 4858.00 = 490.00 + 4368.00 (891.43%) - Amount of Delete Intervals = 1 (2020.07.01 - 2020.08.14), 18:00 - 12:00, CountHours = 17
00:00:00 - 11:42:21 : Profit = 2925.00 (60.21%), Total = 68 (75.00%), PF = 1.89, Mean = 43.01, DD = 847.00, RF = 3.45
17:53:40 - 23:59:59 : Profit = 1933.00 (39.79%), Total = 36 (77.78%), PF = 2.06, Mean = 53.69, DD = 859.00, RF = 2.25
SUMMARY: 00:00:00 - 23:59:59 : Profit = 4858.00 (100.00%), Total = 104 (75.96%), PF = 1.95, Mean = 46.71, DD = 916.00, RF = 5.30

つまり、18:00-12:00のインターバルに入らないトレードをすべて無視すれば、履歴上はすべて美しくなるそうです。


私はこの間隔をTSに縫い込み、TSをもはや24時間体制ではなくして、最大の利益が得られるように最適化する。

Profit = 1924.00 = 1924.00 + 0.00 (0.00%) - Amount of Delete Intervals = 0 (2020.07.01 - 2020.08.14)
00:00:00 - 23:59:59 : Profit = 1924.00 (100.00%), Total = 163 (69.94%), PF = 1.20, Mean = 11.80, DD = 2075.00, RF = 0.93
SUMMARY: 00:00:00 - 23:59:59 : Profit = 1924.00 (100.00%), Total = 163 (69.94%), PF = 1.20, Mean = 11.80, DD = 2075.00, RF = 0.93

遺伝学のベストパスは、控えめに言ってもゴミのようなものだ。


ZY これはまだ弱い例だ。BestIntervalがPF > 3で、OptimiserがPF < 1を出したときに発生する。

 
fxsaber:

BestIntervalは独立した最適化基準なのだろうか?特に、スリッページ・タスク・チップの場合。

実際、スリッページは手数料である。手数料が高ければ高いほど、BestIntervalはヒストリーにきれいな結果を表示する。

手数料は市場パターンとは無関係のようだ。

 

取引、自動取引システム、取引戦略のテストに関するフォーラム

エキスパートアドバイザー:検証

fxsaber, 2020.08.23 07:44 AM

たぶん書いたときはCloseByのトレードは計算に入れてなかったと思います。もう何も覚えていません。BestIntervalも同じ病気の可能性が高いです。編集する気になれません。情報ありがとうございます。


おっしゃる通りのようです。BestIntervalは潜在的利益とネットとヘッジの時間間隔の両方で異なる結果を与えます。詳細はまだ見ていませんが、Deals listは一見間違っているように見えますが、CloseBy closesの開始時刻は、ほとんどがclosing orderの開始時刻に重なっています。