MetaTrader 5 Strategy Tester: Bugs, Bugs, Verbesserungsvorschläge - Seite 47

 
traveller00:

Build 2280. Börse, Terminmarkt. Der gesamte Verlauf wird geladen, aber die Tests werden offline durchgeführt. iBarShift funktioniert seltsam in Indikatoren. Und derselbe Code funktioniert auch im Skript. Ist das ein Fehler oder übersehe ich etwas?

Es gibt einen solchen Kodex. Es durchläuft im Wesentlichen alle Symbole aus der Marktübersicht und zieht deniBarShift ab. Derselbe Code funktioniert im Skript einwandfrei. Der Indikator erzeugt -1 für alle Symbole, außer für das aktuelle (auf dem Chart, auf dem er läuft), mit dem Fehler, dass es keine Historie gibt. Gleichzeitig wird beim zweiten Durchlauf der Verlauf geladen und normal angezeigt.

Die Verfügbarkeit der Daten im Indikator ist nicht garantiert, daher sollten Sie den Erfolg des Abrufs überprüfen. Wenn dies fehlschlägt, versuchen Sie es inOnCalculate erneut. Ein Verweis auf die Daten in OnInit ist keine gute Idee.


#property indicator_separate_window

void OnInit()
{
}

int OnCalculate(const int rates_total,const int prev_calculated,const datetime& time[],const double& open[],const double& high[],
  const double& low[],const double& close[],const long& tick_volume[],const long& volume[],const int& spread[])
{
  static bool printed = false;
  
  if( !printed ){
    printed = TryToPrint();
  }
  return 0;
}

bool TryToPrint(){


  datetime Time[];
  ArraySetAsSeries(Time, true);
  Print("try");
  if( CopyTime(_Symbol,_Period,0,1,Time) != 1 )return false;

  int Shift=iBarShift(_Symbol,_Period,Time[0]);
  
  bool fail = false;
  if( Shift < 0 )fail = true; 
  string toprint = "Symbol="+_Symbol+", Shift="+(string)Shift;
  
  

  for(int i=0;i!=SymbolsTotal(true);++i)
  {
    const string SymbName=SymbolName(i,true);
    Shift=iBarShift(SymbName,_Period,Time[0]);
    
    if( Shift < 0 )fail = true;
    toprint = toprint + "\r\n" + "Symbol="+SymbName+", Shift="+(string)Shift;

  }
  if( !fail ) Print( toprint );
  
  return !fail;
}
 

Der Servername wird nicht immer in den Cache-Einträgen angezeigt.


 
Im tst-Format werden die Zeiten von Geschäften/Aufträgen nur in Sekunden angegeben (datetime). Es gibt keine Millisekunden.
 
Ist es richtig, dass die tst-Datei für einen solchen EA nicht erstellt wird?
input int i = 0;

void OnInit() {}


Welche Bedingung muss erfüllt sein, um einen Single-Pass-Cache zu erstellen?

 
fxsaber:
Ist es richtig, dass die tst-Datei für einen solchen EA nicht erstellt wird?


Welche Bedingung muss erfüllt sein, um einen Single-Pass-Cache zu erstellen?

Ja, richtig.

Wenn keine Abschlüsse vorhanden sind, wird die tst-Datei nicht gespeichert.

 
Slava:

Ja, das ist richtig.

Wenn keine Abschlüsse vorhanden sind, wird die tst-Datei nicht gespeichert.

Ich danke Ihnen.

 
Ich werde meine Frage wiederholen (sie ist offenbar verloren gegangen):

Entwickler, eine Frage an Sie. Ist es möglich, die Parameterdes genetischen Algorithmus anzupassen? Zum Beispiel, um Stopp- und Mutationskriterien festzulegen?

Ich treffe oft auf Situationen, in denen ein Stopp erfolgt, bevor die Extremwerte erreicht sind.

Auch eine Frage. Beabsichtigen Sie, andere Methoden zu implementieren, z. B. Simulated Annealing?

 
Hallo zusammen, ich bin von mt4 zu mt5 gewechselt und verstehe nicht, wie man Set-Dateien im Tester speichert. Können Sie uns bitte beraten. Konnte nur finden, wie man ini und opt speichert
 

Ich lasse den Roboter im Prüfgerät laufen. Ich handle mit einem bestimmten Symbol. Ich gebe den Kurs per OnTimer ein und entnehme ihn dem SymbolInfoTick.

Wenn ich verschiedene Symbole verwende (wenn ich mit demselben Symbol handle), dann sind die Ergebnisse aus irgendeinem Grund sehr unterschiedlich. Vielleicht hat jemand dieses Problem schon einmal gehabt? Ich bin gerade dabei, dieses Verhalten genauer zu untersuchen.

PS. Jeder Tick basiert auf einem echten Tick und wird perfekt und ohne Verzögerung ausgeführt.
 

Ich habe es herausgefunden. Um CPU-Ressourcen zu sparen, prüfe ich TimeCurrent in OnTimer, und wenn es sich seit der letzten Aktualisierung nicht geändert hat, muss nichts getan werden. Wenn es keine Anführungszeichen gibt, bleibt der Status gleich. Wenn Sie Handelssitzungen verfolgen, ist das ein sehr aufwendiger Vorgang.

Bei mehreren Symbolen funktioniert alles einwandfrei. Aber wenn es nur zwei von ihnen gibt, hängt alles von den Kursen ab, die kommen und den Zeitpunkt der Eröffnungspositionen und andere Dinge verschieben. Infolgedessen sind die Ergebnisse imStrategietester unterschiedlich.

PS. Im Allgemeinen prüfe ich die Symbolzustände einzeln überSymbolInfoTick