Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1005

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
Ecco come funziona.
Ecco come funziona.
Sei sicuro di aver letto tutto nella documentazione? Avete anche letto questo:
Nota
La funzione può essere applicata solo agli array dinamici. Dovreste tenere a mente che gli array dinamici assegnati come buffer di indicatori dalla funzione SetIndexBuffer() non possono essere ridimensionati. Tutte le operazioni relative al ridimensionamento dei buffer degli indicatori sono eseguite dal sottosistema esecutivo del terminale.
Il numero totale di elementi in una matrice non può superare 2147483647.
Se la memoria viene allocata frequentemente, si raccomanda di utilizzare il terzo parametro che specifica la riserva per ridurre la quantità di allocazione della memoria fisica. Tutte le chiamate successive alla funzione ArrayResize non risulteranno in una riallocazione della memoria fisica, solo un ridimensionamento della prima dimensione dell'array all'interno della memoria riservata. Tenete a mente che il terzo parametro sarà usato solo quando l'allocazione della memoria fisica è in corso, per esempio:
ArrayResize(arr,1000,1000);
for(int i=1;i<3000;i++)
ArrayResize(arr,i,1000);
In questo caso ci saranno 2 allocazioni di memoria, una volta prima di entrare nel ciclo per 3000 iterazioni, con la dimensione dell'array impostata a 1000 e la seconda a i uguale a 2000. Se il terzo parametro viene omesso, ci saranno 2.000 riallocazioni di memoria fisica e questo rallenterà l'esecuzione del programma.
Cosa non è chiaro?
Sei sicuro di aver letto tutto nella documentazione? Leggi anche questo:
Cosa non è chiaro in questo?
Beh, questo è il punto che non ci sono immagini o esempi, e si può indovinare cosa significano queste ridistribuzioni, e come usarle al 100% secondo l'idea degli sviluppatori se non è spiegato. A giudicare da queste 3 righe che sono scritte qui, penso che ArrayResize(arr,1000,1000); crea un array di 2 mila elementi. Ma qui non è chiaro. Se faccio ArrayResize(arr,1,1000); per esempio, 1000 si blocca finché l'array non arriva a 1000.
Oppure il programma userà questo frammento prima dell'overclock, incrementando solo il contatore. Oppure questo 1000 è solo in giro per ottenere rapidamente la memoria dalla CPU, se è così allora anche la memoria di backup dovrà essere trasferita, allora è più facile lavorare senza backup. In generale, nessun codice, nessuna informazione, nessuna immagine, nessuna idea di come funziona.
Vi è mai capitato che il vostro disco rigido si avvii al 100% con una classe di sistema di qualche tipo (su 10)? Succede anche con il terminale alps... Di solito i terminali caricano il disco durante i test, ma qui è solo kabbda... Non lungo, 3-5 secondi, ma concreto
succede, ma dopo il riavvio del PC
a 10-15 minuti dopo il riavvio del PC, Windows Defender "mastica il disco" e le statistiche di utilizzo del PC vengono raccolte
soluzione - sospendere il PC, il mio PC può andare un mese senza riavviarsi, premo il pulsante di sospensione sulla tastiera invece di spegnere il PC - un paio di volte la corrente è andata via, nessun problema con l'avvio di Win10 se il PC era in sospensione
Questo è il punto, non ci sono immagini o esempi, e si può indovinare cosa significano queste ridistribuzioni, e come usarle al 100% secondo l'idea degli sviluppatori se non è spiegato. A giudicare da queste 3 righe che sono scritte qui, penso che ArrayResize(arr,1000,1000); crea un array di 2 mila elementi. Ma qui non è chiaro. Se faccio ArrayResize(arr,1,1000); per esempio, 1000 si blocca finché l'array non arriva a 1000.
Oppure il programma userà questo frammento prima dell'overclock, incrementando solo il contatore. In generale, dico che non è chiaro e questo è tutto. O questo 1000 è solo stupido in giro per rapidamente scoop memoria dal processore, se è così allora tutto lo stesso e la memoria di backup, anche, dovrà trasferire allora è più facile lavorare senza la riserva. In generale, nessun codice, nessuna informazione, nessuna immagine, nessuna idea di come funziona.
Dovreste leggere non solo le tre linee di codice, ma anche il testo che spiega tutto abbastanza chiaramente.
La memoria riservata e la dimensione dell'array sono nozioni diverse. Se sovrascrivete la dimensione dell'array con ArrayResize(arr,1000,1000); l'ultimo elemento dell'array sarà 999 e non più. Ma se avete bisogno di aumentare le dimensioni dell'array, non ci sarà alcuna riallocazione di memoria. Se non avete bisogno di una tale riserva di dimensioni dell'array, fatela più piccola o non riservatela affatto.
Buon pomeriggio!
Voglio mettere un parametro come array in una funzione. Non riesco a capire come farlo bene. Puoi correggere l'esempio?
Buon pomeriggio!
Voglio mettere un parametro come array in una funzione. Non riesco a capire come farlo bene. Puoi correggere l'esempio?
Grazie!