Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Certo che sì.
Ogni programmatore che rispetta se stesso e i suoi programmi non lascerà che le cose facciano il loro corso. 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 "grossolanamente", non pensa a tale controllo, e "la cosa principale è che funzioni, ma come funziona - 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 all'inizio pensavano e creavano il codice con i controlli e il controllo dei dati ricevuti, non hanno notato alcuna differenza nella complessità dei linguaggi, e ora si chiedono - "dov'è la complessità - è lo stesso...".
Nikolai, non preoccuparti per MQL4, lì va tutto bene. Il topicstarter riempie gli array a suo piacimento. Tutto.
Certo che sì.
Qualsiasi programmatore, che rispetta se stesso e i suoi programmi, non lascerà correre. 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...".
Che peccato!
Bene, Petr, grazie al rigore di MQL5, hai la possibilità di mettere il codice in ordine relativo e di eliminare il mucchio di spazzatura.
Puoi anche provare a compilare il codice fisso con #property strict di nuovo in MQL4 e forse funzionerà più velocemente su MT4
Che sfiga!
Bene, Peter, grazie alla severità di MQL5, abbiamo la possibilità di mettere il codice in ordine relativo e cancellare i mucchi di spazzatura.
Puoi anche provare a compilare il codice fisso in MQL4 con #property strict e forse funzionerà più velocemente in MT4
È così che, a priori, avete deciso che il mio codice è pieno di spazzatura.
Mi spiego: il kernel viene riempito a tappe, in diversi passi. Se quando si dichiara l'array in MT5 c'è della spazzatura in esso (cosa che non sapevo), allora durante i primi passi della costruzione del kernel nelle funzioni, c'è un overflow fuori dall'array, perché invece dei puntatori alle variabili, mi riferisco a una cella del kernel attraverso un'altra. Se contiene zero, va bene, e ottiene il valore giusto nella seconda esecuzione, ma se contiene spazzatura, si verifica un errore critico.
Vi è chiaro?
Peter, non so cosa vuoi dire.
Esattamente, non capisci. Stai paragonando i miei compiti ai tuoi...
Non ho alcun overflow. Considera le specifiche della mia tecnologia (dimenticato che la stai ignorando). Se usi un'altra cella dell'array come puntatore a una cella, e c'è della spazzatura dentro, allora sei fuori dall'array. Il problema è che per far sì che la cella a cui ti riferisci ottenga il valore corretto, devi passare al secondo giro di costruzione del kernel. E al secondo giro, il valore sarà corretto. Ma non si arriva al secondo turno a causa di un errore critico.
Tutto questo è dovuto alla spazzatura nell'array dichiarato.
Quindi, dobbiamo inventare dei meccanismi per cancellare l'array bidimensionale (kernel) nella fase della prima impostazione delle dimensioni (costruzione dell'area regolare) e nella fase del secondo ridimensionamento del kernel, quando si costruisce l'area utente.
Esattamente, non capisci. A confronto, i miei compiti e i vostri...
Vai avanti e crea un monologo - altri 10 post di fila.
È così che, a priori, avete deciso che il mio codice è pieno di spazzatura.
Mi spiego: il kernel viene riempito a tappe, in diversi passi. Se quando si dichiara l'array in MT5 c'è della spazzatura in esso (cosa che non sapevo), allora durante i primi passi della costruzione del kernel nelle funzioni, c'è un overflow fuori dall'array, perché invece dei puntatori alle variabili, mi riferisco a una cella del kernel attraverso un'altra. Se contiene zero, va bene, e ottiene il valore giusto nella seconda esecuzione, ma se contiene spazzatura, si verifica un errore critico.
Vi è chiaro?
Non èaffatto così. Non è colpa della spazzatura, ma dell'assenza di #property strict in mql4. Senza di esso, si ottiene 0 invece di array overrun, e in mql5 è già un errore critico. Probabilmente, è meglio controllare la lunghezza dell'array invece del contenuto di un indice di array inesistente.
Retag non è affatto così. Non è colpa della spazzatura, è la mancanza di #property strict in mql4. Senza questo espediente si ottiene 0 invece di array overrun, e in mql5 già errore critico. Probabilmente, è meglio controllare la lunghezza dell'array invece del contenuto di un indice di array inesistente.
Il fuori limite si verifica perché c'è della spazzatura nella cella indicatrice.
Per esempio:
Iniziale:
G_CORE[Oggetto][Kanvas] = -123423452345; (spazzatura)
G_CORE[Window][His_canvas]= -452345; (spazzatura)
//-----------------------------------------------------------------
Il risultato è fuori dalla matrice.
Per ribadire. Alcune celle hanno valori zero in MT4 e sono riempite al secondo giro nella prima fase di riempimento del nucleo.
In MT5, a causa della spazzatura nelle celle, c'è un errore critico al primo turno.
Se le celle dell'array avessero degli zeri, non ci sarebbe alcun errore e il kernel si riempirebbe in modo sequenziale (come dovrebbe).
Ecco un esempio più preciso:
Il primo ciclo di costruzione del kernel. In una delle funzioni:
Il fuori limite si verifica perché c'è della spazzatura nella cella indicatrice.
Per esempio:
Iniziale:
G_CORE[Oggetto][Kanvas] = -123423452345; (spazzatura)
G_CORE[Window][His_canvas]= -452345; (spazzatura)
//-----------------------------------------------------------------
Il risultato è fuori dalla matrice.
Per ribadire. Alcune celle hanno valori zero in MT4 e sono riempite al secondo turno nella prima fase di riempimento del nucleo.
In MT5, a causa della spazzatura nelle celle, c'è un errore critico al primo turno.
Se ci fossero degli zeri nelle celle dell'array, non ci sarebbe nessun errore e il kernel sarebbe riempito in modo sequenziale (come dovrebbe essere).
La non inizializzazione dell'array è interamente colpa del kodopistael. Cercate l'errore nel vostro ambiente. Ricostruisci il tuo algoritmo.