Was in aller Welt geht hier vor? - Seite 2

 

Ich habe einen anderen Trick. Der Berater setzt zu Beginn jeder Stunde einen Verkauf an. Für den Euro funktioniert es einwandfrei, aber für benutzerdefinierte Symbole ist unklar, wie

Im visuellen Modus fehlen einige Candlesticks


Dateien:
MySymbol.mq5  4 kb
Test.mq5  2 kb
 
Сергей Таболин:

Hier geht es wieder einmal um den Tester/Optimierer...

Es wurden Diskrepanzen zwischen den Ergebnissen der Optimierung und des Einzeltests festgestellt. Terminal neu gestartet, Einstellungen geändert (nur um sicherzugehen). Begonnene Optimierung.

Habe einen einzigen Test durchgeführt...

Wie kann das sein? Woher kommt dieser Unsinn?

Es war derselbe Weg. Zwischen den Optimierungsdurchläufen wurden nicht immer oder nicht alle Variablen so initialisiert, wie sie es vor einem einzelnen Durchlauf waren. Ich begann, alles zu initialisieren, und das Problem verschwand.

Ein anderes Mal hatte ich ein ähnliches Problem aufgrund von iSAR, bei minimalen Schritten.

 

Ein Kunde hatte ein Problem. Sein Expert Advisor testete und lieferte Ergebnisse im Tester, aber im Optimierer waren alle Läufe null.

Der Algorithmus seines Expert Advisors für die Eröffnung von Geschäften basierte auf dem Lesen der Beschriftung der Schaltfläche, die sich je nach Situation änderte. Da grafische Objekte während der Optimierung nicht gerendert werden, führte diese Anfrage immer zu einem negativen Ergebnis.

Wenn der Algorithmus Ihres Expert Advisors Daten aus grafischen Objekten verwendet, kann es ebenfalls erhebliche Unterschiede zwischen Test und Optimierung geben.

 
Сергей Таболин:


Wie war das? Beide sind identisch. Wie kann es da einen Unterschied geben? Zumal fast alle Daten in einer Schleife initialisiert werden. Und wenn dort etwas nicht initialisiert ist, erhalten Sie eine Fehlermeldung.


Wenn Sie können, erläutern Sie das. Ich würde gerne die Initialisierung in der Schleife sehen. Ich werde es meiner Enkelin zeigen.

 
Dass ich das nie wieder mache.
 
Алексей Тарабанов:

Wenn möglich, mehr Details. Ich würde gerne die Initialisierung in der Schleife sehen. Ich werde es meiner Enkelin zeigen.

int sum = 0;

for ()

  sum = 0;

  for ()

    sum += ....

Oder besser noch, Ihre Enkelin wird die Bedeutung nicht verstehen:

int sum;

for ()

  sum = 0;

  for ()

    sum += ....
 
Andrey Barinov:
Sie brauchen nur zu vergessen, etwas in Ihrem Code zu initialisieren, und schon gibt es einen Unterschied. Prüfen Sie den Code.

Ich habe alles noch einmal überprüft - alle Variablen sind initialisiert.

@Andrey Kaunov, danke, aber ich verwende überhaupt keine grafischen Objekte.

Alexej Tarabanow:

Wenn Sie können, erläutern Sie das. Ich würde gerne die Initialisierung in der Schleife sehen. Ich werde es meiner Enkelin zeigen.

Um Gottes willen )))) Ich habe es ein wenig übertrieben - natürlich nicht alle, aber nur die Griffe des Indikators ))))

int      ind_handle[];

int OnInit()
{
...........
   if(!nc_getHandles()) return(INIT_FAILED);
...........
}
//+------------------------------------------------------------------+
bool  nc_getHandles(void)
{
   ind_nums = ArraySize(indicators);
   ArrayResize(ind_handle, ind_nums);

   for(int i = 0; i < ind_nums; i++)
   {
      ind_handle[i]  = iCustom(Symbol(), Period(), folder+indicators[i]);
      if(ind_handle[i] == INVALID_HANDLE)
      {
         Print("Ошибка получения хандла индикатора >>> "+indicators[i]);
         writeErrorFile(program_name,program_version,"Ошибка получения хандла индикатора >>> "+indicators[i]);
         return(false);
      }
   }
   Print("Получены хэндлы всех индикаторов >> ",ArraySize(indicators));
//-----------------------------------
   return(true);
}
 

Nun zur Sache.

Alle Protokolle und Caches wurden vollständig gelöscht.

Starten Sie den Editor, kompilieren Sie den Expert Advisor neu.

Öffnete das Terminal.

Startet die genetische Optimierung.

Ich warte...


Durchführung eines einzelnen Tests.

Ich prüfe, ob die Parameter richtig sind - sie werden korrekt übergeben.

Ich öffne die Registerkarte Backtest.

Gewinne - 697 / 247

Berufe - 44 / 56.

Ich werde jetzt Protokolle sammeln und sie anhängen.

Dateien:
mt5logs.zip  288 kb
 

Sehen Sie sich den Code an und versuchen Sie herauszufinden, was mit den Transaktionen im Rahmen der Optimierung und mit einem einzelnen Walkthrough geschieht.

Drucken Sie es aus und legen Sie es selbst in eine Akte.

Es geht um die Logik innerhalb Ihres Programms. Die niemand außer Ihnen sehen kann und für die es daher keine Hilfe geben wird.

 
Renat Fatkhullin:

Sehen Sie sich den Code an und versuchen Sie herauszufinden, was mit den Transaktionen im Rahmen der Optimierung und mit einem einzelnen Walkthrough geschieht.

Drucken Sie es aus und legen Sie es selbst in eine Datei.

Es geht um die Logik innerhalb Ihres Programms. Die niemand außer Ihnen sehen kann, und deshalb wird es keine Hilfe geben.

Renat, ich danke dir. Aber erklären Sie mir, wer kennt nicht den Unterschied zwischen 2*2+2*3 im Optimierer und Single Pass? Geben Sie mir wenigstens einen Hinweis darauf, wo genau es eine Diskrepanz geben könnte?

Und, da Sie es erwähnt haben, geben Sie mir einen Tipp, wo und wie man Unterschiede zwischen dem EA im Strategy Tester und auf einem echten Konto findet?

Ich habe, vielleicht aus meiner eigenen Dummheit heraus, immer geglaubt, dass der geschriebene Code (egal ob er Fehler hat oder nicht, egal ob er optimiert ist oder nicht) kompiliert ist, und deshalb sollte er genauso funktionieren, egal ob im Optimierer, oder im Tester, oder auf einem echten Konto...

Nun, nehmen Sie einfach die Position eines gewöhnlichen Programmierers ein - wo, wie und mit welchen Mitteln sollte man nach einem unklaren Unterschied in der Ausführung eines (kompilierten) Codes in diesen drei Zuständen suchen?

Ich, als Benutzer, sehe nur, dass eine ausführbare Datei nicht das gleiche in Optimierer und Tester, was bedeutet, dass im wirklichen Leben wird es die gleiche Art und Weise ..... arbeiten.


Ein Gedanke kam mir in den Sinn: Was, wenn man einen EA testet und er... Nun, das ist nicht gut. Was ist, wenn ich es für den echten Handel verwende? Und wenn es der Heilige Gral ist? ))))