Bibliotheken: SingleTesterCache - Seite 7

fxsaber #:

Ich würde den Höchstwert aufzeichnen. Der Zeitpunkt der Erstellung des nächsten TesterTradeState-Datensatzes hängt wahrscheinlich von der von den Entwicklern gewählten Häufigkeit und einigen anderen Bedingungen ab.

Wenn ich eine Aufgabe hätte, eine sehr ähnliche tst-Datei wie die ursprüngliche zu erstellen, würde ich keine identischen TesterTradeState[] erreichen .

Verstanden

Nach der Ausführung des Skripts „SingleTesterCache_Example.ex5“ wird das Testergebnis „Test.tst“ im Strategietester nicht über die Schaltfläche „Vorherige Ergebnisse“ geöffnet.

Ich füge die Ergebnisdatei des Skripts sowie den Kontostand des Kontos bei, auf dem ich das Skript ausgeführt habe.

Ich habe die Bibliothek heute aktualisiert.

MT5-Build 6230.

Dateien:
Files.zip  315 kb
Ivan Titov Strategietester nicht über die Schaltfläche „Vorherige Ergebnisse“ geöffnet.

Ich verwende die Save-Methode seit der Erstellung der Bibliothek (bald sind es sieben Jahre) nicht mehr. In dieser Zeit wurden höchstwahrscheinlich Änderungen seitens MQ vorgenommen.


Man muss die Original-TST-Datei nehmen, sie lesen und anschließend speichern. Danach muss man prüfen, worin der Unterschied besteht.

Ich selbst bin derzeit noch nicht bereit, mich damit zu befassen. Ich nutze diese Funktion nicht.

Das heißt, was das „Schreiben von TST-Dateien“ angeht, sollte mandiese Bibliothek besser nicht verwenden. Nur zum „Lesen“. Habe ich das richtig verstanden?
Ivan Titov #:
Das heißt, was das „Schreiben von TST-Dateien“ angeht, sollte mandiese Bibliothek besser nicht verwenden. Nur beim „Lesen“. Habe ich das richtig verstanden?
Wenn man zum Lesen mit dem Tester schreiben will, ist eine explizite Anpassung erforderlich. Welche genau, muss man sich ansehen.
fxsaber #:
Wenn man den Text für den Tester schreibt, sind eindeutig Nachbesserungen erforderlich. Welche genau, muss man sich ansehen.
Diese Zahl ersetzen
      this.Header.version = ::MathMax(this.Header.version, 502);

durch 505.


Wenn man die Ergebnisse eines Backtests ohne Werbung besprechen möchte (z. B. einen Expert Advisor aus dem Market), kann man die TST-Datei anonymisieren und sie problemlos im Forum veröffentlichen.

Das geht folgendermaßen:

#include <fxsaber\SingleTesterCache\SingleTesterCache.mqh> // https://www.mql5.com/de/code/27611
#include <fxsaber\MultiTester\MTTester.mqh> // https://www.mql5.com/de/code/26132

template <typename T>
void ChangeComments( T &Array[], const string NewComment = NULL )
{
  for (uint i = ArraySize(Array); (bool)i--;)
    Array[i].comment = NewComment;
    
  return;
}

void ChangeName( SINGLETESTERCACHE &SingleTesterCache, const string Name = "Deleted", const bool Comments = false )
{
  SingleTesterCache.Header.expert_name = Name;            // Name des Experten
  SingleTesterCache.Header.expert_path = Name;            // Name des Experten mit Pfad von MQL5

  if (!Comments)
  {  
    ChangeComments(SingleTesterCache.Deals);
    
    ChangeComments(SingleTesterCache.Orders);
  }
  
  return;
}

void OnStart()
{  
  uchar Bytes2[];
  
  if (MTTESTER::GetLastTstCache(Bytes2) != -1) // Wenn der letzte Cache-Eintrag eines einzelnen Durchlaufs gelesen werden konnte
  {
    SINGLETESTERCACHE SingleTesterCache(Bytes2); // Wir weisen sie dem entsprechenden Objekt zu.

    ChangeName(SingleTesterCache);
    
    SingleTesterCache.Save("ForumBacktest.tst");
  }
}


Führen Sie zunächst einen Backtest durch und starten Sie anschließend dieses Skript im Terminal. Als Ergebnis erhalten Sie Ihren Backtest ohne identifizierende Daten. Somit bleiben alle Backtest-Statistiken erhalten, die Sie bedenkenlos im Forum veröffentlichen können.

Hier im Quellcode kann man sehen, wie man den Betrieb mit einer beliebigen Anzahl von Single-Pass-Caches gleichzeitig organisieren kann.


Insbesondere werden Transaktionen auf diese Weise herausgefiltert.

struct DEAL_SIGN2 : public DEAL_SIGN
{
  bool operator =( const TradeDeal &Deal )
  {
    const bool Res = (Deal.action <= DEAL_TYPE_SELL);

    if (Res)
    {
      const double ContactSize = Deal.contract_size ? Deal.contract_size * 1000 : 1e8;

      this.Volume = (1.0 - (Deal.action << 1)) * Deal.volume / ContactSize;
      this.Time = Deal.time_create;
    }

    return(Res);
  }
};

int GetDeals( const string FileName, DEAL_SIGN &Deals[] )
{
  const SINGLETESTERCACHE SingleTesterCache(FileName);

  int Amount = 0;
  DEAL_SIGN2 Deal;

  for (int i = 0, const Size = ArrayResize(Deals, ArraySize(SingleTesterCache.Deals)); i < Size; i++)
    if (Deal = SingleTesterCache.Deals[i])
      Deals[Amount++] = Deal;

  return(ArrayResize(Deals, Amount));
}
Коэффициент НЕкорреляции.
Коэффициент НЕкорреляции.
  • www.mql5.com
При составлении портфеля ТС стараются опираться на статистику. Например, пробуют составлять таблицу корреляции на основе вычислений соответствующих коэффициента (КК). Основная причина такого подхода -