Cancellazione forzata dell'array in MT5?

 

Non ho mai lavorato seriamente con MT5, e ora ci sto trasferendo un progetto enorme in una volta sola. Naturalmente, ci sono delle difficoltà, una delle quali è andare costantemente fuori dalla matrice. MT4 non ha avuto un tale problema, come si è scoperto, anche perché gli array non hanno avuto bisogno di essere appositamente cancellati dopo l'annuncio. Ma in MT5 è necessario. La mia tecnologia richiede un riempimento graduale del kernel insieme a cambiamenti delle sue dimensioni. La dimensione esatta di alcuni array non è nota in anticipo. Allo stesso tempo, a causa del gran numero di loop sugli array nel processo del loro riempimento, tutto sarebbe fuori ordine. Se non ci fossero rifiuti nelle celle, tutto avrebbe funzionato da tempo.

Cioè, c'è la spazzatura negli array da una parte e l'errore critico degli overrun dall'altra. È come una condizione draconiana...

Voglio capire perché hanno dovuto rimuovere la cancellazione automatica degli array e ridurre a zero le variabili dichiarate, come in MT4?

Se possiamo tollerare le variabili, dovremo affrontare il problema della costante raccolta di spazzatura nei grandi array, e dovremo ripulirli non solo quando si dichiarano, ma anche quando si ridimensionano... Perché?

 

La ragione per andare fuori dai limiti è che gli array sono riempiti gradualmente con valori in diverse funzioni, e in questo processo, si accede a una cella attraverso un'altra cella. Alcune funzioni sono chiamate due volte e riempiono l'array in modo sequenziale. Ma, se c'è spazzatura nelle celle, c'è un superamento del primo riempimento.

Immagino che il problema possa essere risolto cancellando gli array in anticipo, ma ovviamente questo è un ulteriore mal di testa. Peccato.

 
Ok, non lamentiamoci. )) Ci vuole solo un po' di tempo per abituarsi. ))
 

Abituatevi.

Dichiaro sempre un array, imposto la dimensione prevista, lo riempio di valori (lo inizializzo). Spesso è meglio inizializzare con un valore non nullo - è più facile trovare un errore in questo modo.

 
Peter, non so cosa intendi?
C'è un array dinamico, c'è la dimensione attuale di questo array, c'è un controllo di overflow.
Personalmente, cerco di evitare il controllo dell'overflow, e lo uso solo in fase di progettazione, perché se l'algoritmo è competente senza errori, gli overflow non si verificano. Perché avete bisogno di controlli inutili?
Se si verifica un overflow, cercate gli errori. Un debugger con punti di interrupt vi aiuta o senza punti di interrupt, perché il programma si ferma in modalità debug quando si verifica un overflow e potete guardare le variabili.
E se c'è della spazzatura, è la tua spazzatura che non hai pulito.
 
Реter Konow:

Non ho mai lavorato seriamente con MT5, e ora ci sto trasferendo un progetto enorme in una volta sola. Naturalmente, ci sono delle difficoltà, una delle quali è che l'array è sempre fuori portata. MT4 non ha avuto un tale problema, come si è scoperto, anche perché gli array non hanno avuto bisogno di essere appositamente cancellati dopo l'annuncio. Ma in MT5 è necessario. La mia tecnologia richiede un riempimento graduale del kernel insieme ai cambiamenti delle sue dimensioni. La dimensione esatta di alcuni array non è nota in anticipo. Allo stesso tempo, a causa del gran numero di loop sugli array nel processo del loro riempimento, tutto sarebbe fuori ordine. Se non ci fossero rifiuti nelle celle, tutto avrebbe funzionato da tempo.

Cioè, c'è la spazzatura negli array da una parte e l'errore critico degli overrun dall'altra. È come una condizione draconiana...

Voglio capire perché hanno dovuto rimuovere la cancellazione automatica degli array e ridurre a zero le variabili dichiarate, come in MT4?

Se possiamo tollerare le variabili, dovremo affrontare il problema della costante raccolta di spazzatura nei grandi array, e dovremo ripulirli non solo quando si dichiarano, ma anche quando si ridimensionano... Perché?

Anche lui ha incontrato difficoltà simili all'inizio.

Secondo me, gli array sono riempiti in un modo specifico, questo dovrebbe essere preso in considerazione nei loop spesso.

 
Nikolai Semko:
Peter, non so cosa intendi?

tutti sullo stessohttps://www.mql5.com/ru/forum/293630/page179#comment_10802823

ora è colpa di MQL5... ;)

Мой подход. Ядро - Движок.
Мой подход. Ядро - Движок.
  • 2019.02.28
  • www.mql5.com
В этой ветке, я хочу рассказать о своем подходе в программировании. Заранее предупреждаю, - здесь не будет обсуждений GUI...
 
Igor Makanu:

tutti sullo stessohttps://www.mql5.com/ru/forum/293630/page179#comment_10802823

ora è colpa di MQL5... ;)

Giusto, non sono abituato a MQL4.
Davvero non c'è bisogno di controllare gli overflow? Ma è terribile. Come si catturano gli errori?
 
Nikolai Semko:
Sì, non sono abituato a MQL4.
Davvero non c'è bisogno di controllare gli overflow? Ma è terribile, vero? Come faccio a catturare gli errori?

Nikolay, non preoccuparti per MQL4, lì va tutto bene. Il topic-starter riempie gli array a suo piacimento. Questo è tutto.

 
Nikolai Semko:
Beh, sì, non sono abituato a MQL4.
Davvero non c'è bisogno di controllare gli overflow? Ma è terribile, vero? Come si catturano gli errori?

Certo che sì.

Ogni programmatore che rispetta se stesso e i suoi programmi non si lascia sfuggire nulla. In MQL4, se non si usa #property strict, si può fare riferimento ad una matrice con dimensione 10 per indice 20. E non succederà nulla - il programma continuerà a funzionare, ma sta al programmatore decidere cosa usare dopo. Se è intelligente, certamente controllerà e controllerà tutto, in modo da non ottenere valori al di fuori dell'array, ma se lo fa "di botto", non gli importa di questo controllo, e "l'importante è che funzioni, ma come funzionerà in qualche modo...".
La maggior parte degli utenti, che non si sono preoccupati di questo, si sono lamentati del "cattivo, malvagio e complicato MQL5", perché non permette loro di falsificare le proprie creazioni come prima. Ma coloro che originariamente pensavano e creavano il codice con la verifica e il controllo dei dati ricevuti, non hanno notato alcuna differenza nella complessità dei linguaggi, e ora si chiedono - "dov'è la complessità - è lo stesso...".

 
Реter Konow:

Non ho mai lavorato seriamente con MT5, e ora ci sto trasferendo un progetto enorme in una volta sola.

Grave differenza negli array quando si riscrive

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Caratteristiche del linguaggio mql4, sottigliezze e trucchi

fxsaber, 2019.02.12 13:12

Caratteristiche di ArrayResize per array multidimensionali
void OnStart()
{
  int Array[][2];
  
  Print(ArrayResize(Array, 7)); // MQL5 - 7, MQL4 - 14
  Print(ArraySize(Array));      // 14
}
Motivazione: