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.
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.
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
tutti sullo stessohttps://www.mql5.com/ru/forum/293630/page179#comment_10802823
ora è colpa di MQL5... ;)
Sì, non sono abituato a MQL4.
Nikolay, non preoccuparti per MQL4, lì va tutto bene. Il topic-starter riempie gli array a suo piacimento. Questo è tutto.
Beh, sì, non sono abituato a MQL4.
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...".
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 multidimensionalivoid OnStart() { int Array[][2]; Print(ArrayResize(Array, 7)); // MQL5 - 7, MQL4 - 14 Print(ArraySize(Array)); // 14 }
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Accetti la politica del sito e le condizioni d’uso
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é?