Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 731

 
Vitalie Postolache:

10.000 x 10.000 non è bidimensionale?

double arr[10000][10000];

e tutto il resto...

Top2n:
Beh, sì, è bidimensionale, non è così che l'ho detto, apparentemente non è una matrice ma un array. Una matrice implica la multidimensionalità?
Sono d'accordo. Non è quello che è stato detto, inoltre è stato frainteso.

Ciò che frena in questo codice non è la scrittura di un array ma un ciclo in un ciclo.
 
Alexey Viktorov:
D'accordo. Non è quello che è stato detto ed è stato frainteso.

Ciò che frena in questo codice non è la scrittura di un array ma un ciclo in un ciclo.

È necessario fare il porting a un altro ambiente di programmazione, o questo non è un problema comune a tutti i tipi di linguaggio? Quale può essere la soluzione per accelerare?

Se un ciclo e aumentare il valore della variabile dal ciclo cancellato

         for(int q=0; q<ARRAY_SIZE_X*ARRAY_SIZE_Y; q++) // Перебор по периоду, колонка X
                 {
                  int arr++
                  if(arr=ARRAY_SIZE_X) {z++;arr=0;}

                  arra[q]=sm.d[q].m[nBar-z];                // M(I) SMA              
                 }
         //--- запишем данные массива в конец файла FileTell IsFileLineEnded
               FileSeek(handle,0,SEEK_END);
               FileWriteArray(handle,arra);


Potrei averlo controllato, ma non voglio disturbare il computer - se non accelera, lo stress extra sarà messo di nuovo sul disco rigido)))

 
Top2n:

È necessario passare a un altro ambiente di programmazione, o questo non è un problema comune a tutti i tipi di linguaggio? Quale può essere la soluzione per accelerare?

Se si fa un ciclo e si aumenta il valore della variabile del ciclo cancellato in esso, si accelera?

Potrei controllarlo, ma non voglio torturare il computer, se non è accelerato, metterà di nuovo sotto stress il disco rigido)))

E non puoi scrivere l'array dopo il ciclo? Si può fare solo su ogni linea? Mi riferisco alla prima variante, dove il ciclo è nel ciclo.
 
Vitalie Postolache:
Non puoi scrivere l'array dopo il ciclo? È possibile farlo solo su ogni linea? Mi riferisco alla prima variante in cui il ciclo è nel ciclo.
Un array di queste dimensioni non entrerebbe nella RAM allocata.

Naturalmente, si può anche inserire un contatore e scrivere su questo contatore, non su ogni linea separatamente, ma è improbabile che acceleri così tanto il processo da essere percepibile senza misurazioni.
 
Alexey Viktorov:
Un array di queste dimensioni non entrerebbe nella RAM allocata.

Naturalmente, si può anche inserire un contatore e registrare in base a questo contatore, non ogni riga separatamente, ma è improbabile che acceleri così tanto il processo da essere percepibile senza misurazioni.

Per favore, ditemi che la documentazione dice (e anche il compilatore) che:"Il flagAS_SERIES non può essere impostato per gli array multidimensionali"

Domanda: Come posso ordinare un array in mql5?

void Func()
{
double m[][3];

if(условия)
  {
   // много кода
         c++;
         ArrayResize(m, c);
         m[c-1][0]= Lots();
         m[c-1][1]= Ticket();
         m[c-1][2]= Profit();
  }
 BySort(m); // передаём в функцию "BySort"
}

void BySort(double &mas[][3])
{
// Сортируем по размеру лота от большего к меньшему
  ArraySort(mas);
  ArraySetAsSeries(mas,true); // при такой записи mql5 ругается, в mql4 работает

 ... здесь работа с массивом и основной код 

}
 
Vitaly Muzichenko:

Per favore avvisate, la documentazione dice (e anche il compilatore) che:"Il flagAS_SERIES non può essere impostato per gli array multidimensionali".

Domanda: come ordinare l'array:

double m[][3];

if(условия)
 {
// много кода
         c++;
         ArrayResize(m, c);
         m[c-1][0]= Lots();
         m[c-1][1]= Ticket();
         m[c-1][2]= Profit();
 }

void BySort(double &mas[][3])// выделенное лишнее
 {
// Сортируем по размеру от большего к меньшему
  ArraySort(mas, WHOLE_ARRAY, 0, MODE_DESCEND); // вот это не работает в mql5

  ArraySort(mas);
  ArraySetAsSeries(mas,true);
// а при такой записи ругается // это тоже лишнее
 }
AS_SERIES e l'ordinamento sono concetti completamente diversi.

1 - cambia la direzione dell'indicizzazione delle celle dell'array senza cambiare il loro contenuto e 2 - cambia il contenuto delle celle senza cambiare la loro indicizzazione in modo che siano ordinate in ordine crescente o decrescente.

Inoltre, la documentazione dice che l'array può essere ordinato solo per la prima dimensione.
 
Alexey Viktorov:
AS_SERIES e l'ordinamento sono concetti completamente diversi.

1 - cambia la direzione dell'indicizzazione delle celle dell'array senza cambiare il loro contenuto, e 2 - senza cambiare l'indicizzazione cambia il contenuto delle celle in modo che siano ordinate in ordine crescente o decrescente.

Inoltre, la documentazione dice che l'array può essere ordinato solo per la prima dimensione.

Qui si ordina in ordine crescente

ArraySort(mas);

Come posso invertire la rotta ora? Deve essere in ordine decrescente, sta ordinando i lotti.

 
Vitaly Muzichenko:

Qui si ordina in ordine crescente

ArraySort(mas);

Come posso invertire la rotta ora? Ti serve in ordine decrescente, ordina i lotti.

Wow. È la prima volta che guardo l'ordinamento in mql5. Sto usando mql4 a memoria. Se questo è il caso, potete invertire il ciclo di lettura. Se avete bisogno di cercare un valore specifico, restituirà l'indice dell'array, non importa come lo ordinate.

E l'opzione più stupida è riscrivere l'intero array in ordine inverso. Ne vale la pena?
 
Vitaly Muzichenko:

Qui si ordina in ordine crescente

ArraySort(mas);

Come posso invertire la rotta ora? Ti serve in ordine decrescente, ordina i lotti.

E se dopo l'ordinamento cambia l'ordine di indicizzazione usando ArraySetAsSeries?
 
Vitalie Postolache:
Cosa succede se, dopo l'ordinamento, cambiate l'ordine di indicizzazione usando ArraySetAsSeries?

Allora va così: