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

 
forexman77:

Ho provato a dichiarare un array a livello globale (codice mql4)

riempire l'inite

Se non impostato all'inizio, stampa la data 1971, cioè l'array è vuoto

Se riempio l'array all'inizio, i valori appaiono. Può essere la ragione, che l'array è reinizializzato datetaime, ma senza di esso il codice non compila?

L'array scompare. Cosa sto facendo di sbagliato?

Qui ho un'idea, se anche qualcuno ne ha bisogno. Ho copiato un array in un altro.

datetime T_[];//на глобальном уровне
//////////////////////////////////////////////////////////////////
int init()
  {
   ArraySetAsSeries(T_,true);
   massiv();

   return(0);
  }
/////////////////////////////////////////////////////////////////
int start()
  {
   if(ArraySize(T_)==0)
   massiv();

  return(0);  
  }
////////////////////////////////////////////////////////////////
void massiv()
  {
   datetime T[40]=
   {
   1262731020,1262735700,1262821920,1262903400,1262989740,1263247200,1263339060,1263420000,1263507480,1263595500,
   1265324700,1265407200,1265752980,1265926500,1265930820,1267657200,1267740300,1267826460,1268175840,1268346360,
   1270504920,1270684140,1270768500,1272924180,1273011720,1273097100,1273272240,1273528800,1273617180,1275344100,
   1275516000,1275602400,1275689160,1276034400,1276124580,1276208700,1276211640,1278027960,1278369780,1278373920
   };
   ArraySetAsSeries(T,true);
   ArrayInitialize(T_,0);
   ArrayResize(T_,40);
   ArrayCopy(T_,T,0,0,WHOLE_ARRAY);
   ArrayFree(T);
  }
 
forexman77:

Ecco un'idea, se anche qualcuno ne ha bisogno. Copiare una matrice in un'altra.

A cosa serve questo?

La domanda originale era che l'array non sarebbe stato ricalcolato nelle successive iterazioni di ottimizzazione. Ora è semplicemente riempito e copiato nell'altro. Non servirà a niente. Immagino che questo array T[40] sia rappresentato in questo modo solo a scopo illustrativo, mentre in realtà dovrebbe essere calcolato e riempito in modo sequenziale. Ogni prossima ottimizzazione ricalcolerà questo array come prima, l'unica differenza è che è organizzato in modo diverso.

 
Alexey Viktorov:

A cosa serve?

La domanda originale era che l'array non sarebbe stato ricalcolato nelle successive iterazioni di ottimizzazione. E ora è semplicemente riempito e copiato in un altro. Non servirà a niente. Immagino che questo array T[40] sia rappresentato in questo modo solo a scopo illustrativo, mentre in realtà dovrebbe essere calcolato e riempito in modo sequenziale. Ad ogni successiva esecuzione di ottimizzazione, questa matrice sarà ricalcolata come lo era prima, con l'unica differenza che è disposta in modo diverso.

L'array dichiarato attraverso le parentesi graffe non è stato salvato; non poteva essere dichiarato globalmente e poi riempito nell'inite (l'array non è stato salvato all'interno di una corsa).

Tra un'iterazione e l'altra dell'ottimizzazione, come ho capito, l'array non viene salvato, cioè il programma resetta tutto ciò che era.

 
forexman77:

L'array dichiarato con le parentesi graffe non è stato salvato, non poteva essere dichiarato globalmente e poi riempito nell'inite (l'array non è stato salvato in una corsa).

Tra un'iterazione e l'altra dell'ottimizzazione, come ho capito, l'array non viene salvato, cioè il programma resetta tutto ciò che era.

Non ci vorrà molto a riempire il ciclo in questo modo. Ma è un altro problema, se il calcolo degli elementi dell'array richiede molto tempo. Se questo è il caso, non servirà: gli elementi dell'array saranno ancora ricalcolati ad ogni iterazione. E se l'array è riempito in questo modo, puoi anche enumerare globalmente tutti gli elementi tra parentesi graffe. Non capisco il senso di questa magia...
 
Alexey Viktorov:
E se l'array è riempito in questo modo, puoi anche elencare tutti gli elementi tra parentesi graffe a livello globale. qualcosa che non capisco il senso di questa magia...
Puoi farlo anche a livello globale. Ma non mi piace avere una torre di diverse migliaia di elementi in cima)
 
forexman77:
Potresti farlo su un globale. Ma non mi piaceva l'idea di costruirci sopra una torre di diverse migliaia di elementi).

Grazie a Dio tutto è andato come volevi tu.

La velocità è aumentata?

 
Alexey Viktorov:

Grazie a Dio tutto è andato come volevi tu.

La velocità è aumentata?

Sta diventando più veloce.
 

Non ho creato un nuovo argomento.

Ora sto cercando di fare quanto segue: c'è un array con primo valore data, secondo e terzo numero doppio. Ho bisogno di ordinare l'array per data, ma voglio che il secondo e il terzo valore siano legati alla data.

Poi ho intenzione di raggruppare diversi array in uno solo e ordinarli per data.

Ho provato in questo modo, ma per quanto ho capito, l'ordinamento viene eseguito per indice dell'array, cioè per i.

double m[215][3];
m[i][0]=Data;
m[i][1]=f1;
m[i][2]=f2;
 
forexman77:

Non ho creato un nuovo argomento.

Ora sto cercando di fare quanto segue: c'è un array con primo valore data, secondo e terzo numero doppio. Ho bisogno di ordinare l'array per valore di data, ma avere il secondo e il terzo valore legati alla data.

...

Vedi qui:https://www.mql5.com/ru/forum/42036
Сортировка двухмерного массива.
Сортировка двухмерного массива.
  • www.mql5.com
Форум трейдеров MQL5.community
 
Anatoli Kazharski:
Guarda qui:https://www.mql5.com/ru/forum/42036

È soprattutto sulle classi, che per me sono una foresta oscura. Ma alcuni pensieri sono venuti fuori. Fate un array con date e numeri separatamente. Solo, come ottenere il numero di indice dove sono le date dopo l'ordinamento, cioè ottenere la i che è nella seconda dimensione?

datetime m[215][1];
double d[215][2];

m[0][i]=Dat_DtTm;
d[i][0]=f1;
d[i][1]=f2;