Einzelne Array-Berechnung während der Optimierung - Seite 3

 
forexman77:

Die Kosten sind eindeutig höher. Es gibt zwei Varianten mit unveränderten Indikatoreinstellungen und mit denselben Werten, die jedoch bereits in eine Datei geschrieben wurden, die in ein Array gedumpt wird.

Die Variante mit der Datei dauert um ein Vielfaches länger als die Variante mit Indikatorberechnung im Expert Advisor.

Ich dachte nur, dass es vielleicht eine Möglichkeit gibt, das Array einmal zu speichern und es für alle Optimierungsdurchläufe zu verwenden, wodurch der Algorithmus entlastet wird.

Gibt es eine Möglichkeit, das Array zu schreiben und zu lesen, die länger dauert als die Berechnung des Indikators?

 
forexman77:
Wenn Sie dies tun, wird dann das Array gespeichert, wenn Sie zu einem neuen Pass wechseln?
Ja, es muss...
 
Dmitry Fedoseev:
Ja. Es ist weder schwierig noch kostspielig. Sie können den Binärmodus verwenden. Sie müssen nicht die gesamte Datei lesen, sondern können an der Stelle beginnen, die Sie benötigen.
int init()
  {
   int k;
   string Skip;
   datetime Str_DtTm;
   double L;
   Handle=FileOpen(File_Name,FILE_CSV|FILE_READ|FILE_BIN,",");
   ResetLastError();
   if(Handle<0) // Failure when opening a file
     {
      if(GetLastError()==4103)
         Alert("There is no file named ",File_Name);
      else
         Alert("Error when opening a file ",File_Name);
      PlaySound("Bzrrr.wav");
      return(0);
     }
   ArrayInitialize(T,0);
   ArrayInitialize(dn,0);
   ArrayResize(T,stroki);
   ArrayResize(dn,stroki);
   for(k=stroki-1;k>=0;k--)
     {
      //--------------------------------------------------------- 5 --
      Str_DtTm=FileReadDatetime(Handle);// строка даты
      L=FileReadDouble(Handle);
      Skip=FileReadString(Handle);//пропускаем
      //--------------------------------------------------------- 6 -- 
      T[k]=Str_DtTm;   
      dn[k]=L;   
      //--------------------------------------------------------- 7 --
      if(FileIsEnding(Handle)==true){ Print("Конец отсчета=",TimeToString(T[k]));break;}//завершили отсчет

     }
   FileClose(Handle);

   return(0);
  }

Binärmodus bedeutet, dass es keine Umwandlung von Zeilen in Zahlen gibt?

Ich würde auch hinzufügen, dass die Optimierung auf einem 1-Minuten-Chart auf eine große Geschichte.

 
Handlungen zur Zusammenstellung enthalten. Wer wird die Daten zusammenstellen? Vielleicht hängt dieses Feld von den Optimierungsparametern ab? Daher müssen wir das Array vor jeder Optimierung erstellen und kompilieren. Das ist eine schwache Lösung.
 
Dmitry Fedoseev:
Handlungen zur Zusammenstellung enthalten. Wer wird die Daten zusammenstellen? Vielleicht hängt dieses Feld von den Optimierungsparametern ab? Daher müssen wir das Array vor jeder Optimierung erstellen und kompilieren. Das ist eine schwache Lösung.
Erfinde das nicht - TC hat eindeutig gesagt, dass die Anordnung unverändert bleibt.
 
forexman77:
Binärmodus bedeutet, dass es keine Konvertierung von Zeichenfolgen in Zahlen gibt?

https://www.mql5.com/ru/docs/files/filereadarray

https://www.mql5.com/ru/docs/files/filewritearray

Die Links enthalten auch Beispiele.

 
Maxim Kuznetsov:
Erfinden Sie das nicht - der TC hat eindeutig gesagt, dass die Anordnung unverändert ist.
Unverändert während einer Optimierung. Es gab nichts über die andere Invarianz.
 
Natürlich ist es besser, das Array in den EA-Code einzubeziehen, wenn es immer und vollständig unverändert bleibt. Sie können sie direkt in die EA-Datei aufnehmen, ohne sie einzubinden.
 
Maxim Kuznetsov:
ja, du musst...
Dmitry Fedoseev:
Wenn das Array immer und absolut unveränderlich ist, ist es natürlich besser, es in den Code des Expert Advisors aufzunehmen. Sie können dies direkt in der Datei des Expert Advisors ohne Include tun.
Ich bin noch nicht auf ein Includegestoßen. Bitte sagen Sie mir, wie ich das ungefähr machen soll.
 
forexman77:
Ich bin noch nicht darauf gest oßen.Zeigen Sie mir die richtige Richtung, wie man es ungefähr macht.
Sie können es ohne das Inlude machen, den Array-Code mit dem Skript erzeugen, ihn in eine Datei schreiben (Sie können ihn auch mit Alert() ausgeben) und ihn dann mit der Maus in den EA-Code übertragen.