Calcolo di un singolo array durante l'ottimizzazione - pagina 3

 
forexman77:

I costi sono maggiori in modo inequivocabile. Ci sono due varianti con impostazioni dell'indicatore invariate e con gli stessi valori, ma già scritti in un file, che vengono scaricati in un array.

La variante con il file impiega molte volte più tempo per essere calcolata rispetto alla variante con il calcolo dell'indicatore nell'Expert Advisor.

Stavo solo pensando che forse c'è un modo per salvare l'array una volta e usarlo per tutti i passaggi di ottimizzazione, alleggerendo così il carico sull'algoritmo.

C'è un modo di scrivere e leggere l'array che richiede più tempo del calcolo dell'indicatore?

 
forexman77:
Se si fa questo, l'array sarà salvato quando si passa a un nuovo passaggio?
Sì, deve...
 
Dmitry Fedoseev:
Sì, non è difficile o costoso. Potete usare la modalità binaria. Non potete leggere l'intero file, ma iniziate dalla posizione che vi serve.
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);
  }

La modalità binaria è quando non ci sono conversioni da linea a numero?

Aggiungerei anche che l'ottimizzazione su un grafico a 1 minuto su una grande storia.

 
includono atti di compilazione. Chi compilerà? Forse questo array dipende dai parametri di ottimizzazione? Quindi dobbiamo generare l'array prima di ogni ottimizzazione e compilarlo. E' una soluzione zoppa.
 
Dmitry Fedoseev:
includono atti di compilazione. Chi compilerà? Forse questo array dipende dai parametri di ottimizzazione? Quindi dobbiamo generare l'array prima di ogni ottimizzazione e compilarlo. E' una soluzione zoppa.
Non inventare - TC ha detto chiaramente che l'array è invariato.
 
forexman77:
La modalità binaria è quando non c'è conversione da stringa a numero?

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

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

Anche i link hanno degli esempi.

 
Maxim Kuznetsov:
Non inventare - il TC ha detto chiaramente che la matrice è invariata.
Invariato durante un'ottimizzazione. Non c'era nulla sull'altra invarianza.
 
Naturalmente, se l'array è sempre e completamente invariato, è meglio includerlo nel codice EA. Potete includerlo direttamente nel file EA senza includerlo.
 
Maxim Kuznetsov:
sì, devi...
Dmitry Fedoseev:
Naturalmente, se l'array è sempre e assolutamente immutabile, è meglio includerlo nel codice dell'Expert Advisor. Potete farlo direttamente nel file dell'Expert Advisor senza includere.
Non ho incontrato un include.Per favore, indirizzatemi su come farlo approssimativamente.
 
forexman77:
Non l'ho ancora incontrato. Indicami la direzione giusta, come farlo in modo approssimativo.
Puoi farlo senza l'inlude, generare il codice dell'array con lo script, scriverlo in un file (puoi anche mandarlo in output ad Alert()), poi trasferirlo al codice EA con il mouse.