Fehler, Irrtümer, Fragen - Seite 343

 
Kairoser:

Guten Tag!

Nach dem Upgrade auf die Version 420 begann ich, meinen EA zu testen und bemerkte, dass er aus irgendeinem Grund zu "verlieren" begann. Ich habe meine Geschäfte analysiert und festgestellt, dass der Stop-Loss bei nicht existierenden Kursen ausgelöst wird. Zum Beispiel habe ich den Stop Loss bei 1.06520 für EURUSD gesetzt, aber es funktioniert, obwohl der maximale Preis 1.05920 ist. Wenn ich mich weiter umschaue, sehe ich eine Menge solcher Angebote. Der Take Profit wird nach dem gleichen Prinzip ausgelöst (bei nicht vorhandenen Kursen) - das Delta ist dasselbe - 600 Punkte. Im Testgerät auf dem Diagramm "hängen" die Auf- und Abwärtspfeile in der Luft, weit entfernt von Balken.

Ein Bildschirmfoto ist beigefügt.

Führen Sie bitte Tests mit MetaQuotes-Demo durch. Alpari hat eine eklatant fehlerhafte Chart-Historie (in Spreads).
 
Renat:
Führen Sie bitte Tests mit MetaQuotes-Demo durch. Alpari hat eine eklatant falsche Chart-Historie (in Spreads).
Ja, auf dem MetaQuotes-Demo-Server funktioniert alles einwandfrei. Vielen Dank für die Hilfe.
 

Ein paar Fragen sind von Interesse.

1. Wenn im Strategietester Indikatoren verwendet werden, wie funktioniert das System dann? Zuerst werden alle Indikatoren, für die Handles berechnet werden, und erst dann wird OnTick gestartet?

2. Wenn ja, wäre es gut, zuerst OnTick zu starten und dann einen Befehl zur Berechnung der angehängten Indikatoren auszuführen. So muss ich zum Beispiel nicht bei jedem fünfstelligen Tick Indikatoren berechnen, sondern nur bei vierstelligen. Wenn ich OnTick starte, prüfe ich den aktuellen und den vorherigen Preis und entscheide, ob die Berechnung der Indikatoren gestartet werden soll oder nicht.

Denn wenn es viele von ihnen gibt und sie ziemlich "schwer" sind, verbrauchen sie im Optimierungsmodus Ressourcen...

Sie können jedoch versuchen, Handles in ontick zu erstellen, Indikatoren am Ende zu löschen und beim nächsten Start von ontick (falls erforderlich) erneut Handles zu erstellen - es ist jedoch nicht klar, ob dies die Leistung verbessert...

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 
olyakish:

Ein paar Fragen sind von Interesse.

1. Wenn im Strategietester Indikatoren verwendet werden, wie funktioniert das System dann? Zuerst werden alle Indikatoren, für die Handles berechnet werden, und erst dann wird OnTick ausgeführt?

Ja. Die allgemeinere Antwort lautet: Alle Indikatorwerte werden vor jedem Aufruf des Ereignis-Handlers berechnet:

  • OnTick
  • OnTimer
  • OnChartEvent und so weiter
 
olyakish:
2. Wenn ja, wäre es sehr nützlich, zuerst OnTick auszuführen und dann die Berechnung der angehängten Indikatoren mit diesem Befehl durchzuführen. Ich muss zum Beispiel nicht bei jedem fünfstelligen Tick Indikatoren berechnen, sondern nur bei vierstelligen. Wenn ich OnTick starte, prüfe ich den aktuellen und den vorherigen Preis und entscheide, ob die Berechnung der Indikatoren gestartet werden soll oder nicht.

Denn wenn es viele von ihnen gibt und sie ziemlich "schwer" sind, fressen sie im Optimierungsmodus Ressourcen...

Das können Sie nicht tun. Zu Testzwecken können Sie schnellere Tick-Erzeugungsmodi verwenden:

  1. OHLC-Preise auf Minutenbalken
  2. Nur offene Preise des getesteten Zeitraums
 
Rosh:

So können Sie es nicht machen. Zu Testzwecken können Sie schnellere Tick-Erzeugungsmodi verwenden:

  1. OHLC-Preise auf Minutenbalken
  2. Nur Eröffnungspreise des Testzeitraums
Ich kenne diese Modi und ihre Eigenheiten. Ich wollte nur die Optimierung auf eine vernünftige (wahrscheinlich optimale) Weise beschleunigen.
 

Hilfe, die Datenkonvertierungsfunktionen wollen nicht funktionieren, habe ein einfaches Skript geschrieben, um es zu testen. Build 420, 64-Bit-Betriebssystem.

void OnStart()
  {
//---
   int i=0;
   bool res=false;
   string stroka1;
   string stroka2;
   string stroka3;
   string stroka4;
   string stroka5;

   datetime buf1;
   double   buf2;
   double   buf3;
   double   buf4;
   double   buf5;
   
   int filehandle=FileOpen("56451.csv",FILE_READ|FILE_CSV|FILE_ANSI,',',CP_UTF8);

   if(filehandle==INVALID_HANDLE)Print("Ошибка № - ",GetLastError());
   else
     {

      while(!res)
        {
         stroka1 = FileReadString(filehandle);
         stroka2 = FileReadString(filehandle);
         stroka3 = FileReadString(filehandle);
         stroka4 = FileReadString(filehandle);
         stroka5 = FileReadString(filehandle);

         buf1 = StringToTime(stroka1);
         buf2 = StringToDouble(stroka2);
         buf3 = StringToDouble(stroka3);
         buf4 = StringToDouble(stroka4);
         buf5 = StringToDouble(stroka5);

         res=FileIsEnding(filehandle);
         i++;
        }
      FileClose(filehandle);
     }
  }
//+------------------------------------------------------------------+
Dateien:
56451.zip  16 kb
 
sergey1294:

Hilfe, die Datenkonvertierungsfunktionen wollen nicht funktionieren, habe ein einfaches Skript geschrieben, um es zu testen. Build 420, 64-Bit-Betriebssystem.


Entfernen Sie die Anführungszeichen auf jeder Stufe....
 
AlexSTAL:
Beseitigen Sie die Anführungszeichen auf jeder Stufe....
Wie macht man das?
 
sergey1294:
Wie machen Sie das?

Stellen Sie entweder sicher, dass sie nicht von vornherein in der Datei enthalten sind, oder wenden Sie eine zusätzliche Funktion an, z. B. beim Lesen:

string StringWithoutQuotes(string Value)
{
   StringTrimLeft(Value);
   StringTrimRight(Value);
   return(StringSubstr(Value, 1, StringLen(Value) - 2));
}

..........

         stroka1 = StringWithoutQuotes(FileReadString(filehandle));
         stroka2 = StringWithoutQuotes(FileReadString(filehandle));
Grund der Beschwerde: