Ecco un esempio di scrittura e lettura di un array
Eseguilo due volte in modalità debug e vedi quanto tempo ci vuole per scrivere e leggere l'array. La prima esecuzione scriverà l'array su file, e la seconda lo leggerà e inizierà a stampare le date dall'array. Poi capire la parte evidenziata, se IS_DEBUG_MODE deve essere rimosso, e se IsOptimization() deve essere inserito nella condizione.
C'è una funzione, qualcosa come FileWriteInteger(). Identificare per posizione, la variabile deve essere all'inizio del file, dopo averla letta il puntatore si sposterà alla sua fine, cioè all'inizio dell'array, dopo aver letto l'array il puntatore sarà prima della variabile successiva...
Un articolo sul lavoro con i file sarà pubblicato presto.
Volevo scrivervi che non c'è nessun articolo sulle operazioni su file. Lei li rende informativi e lucidi, li leggerò sicuramente quando appariranno.
Se non impostato all'inizio, stampa la data 1971, cioè l'array è vuoto
for (int x=0;x<=39;x++)
{
Print("T[x]=",T[x],"x=",x);
}
Se riempio l'array all'inizio, i valori appaiono. Può essere la ragione, che l'array è reinizializzato datetaime, ma senza di esso il codice non compila?
Se non impostato all'inizio, stampa la data 1971, cioè l'array è vuoto
Se riempio l'array all'inizio, i valori appaiono. Può essere la ragione, che l'array è reinizializzato datetaime, ma senza di esso il codice non compila?
L'array scompare. Cosa faccio di sbagliato?
Guarda cosa dice il compilatore.
ArrayResize(T,40);
datetime T[40]=
Con una mossa così semplice avete definito un array locale T che svanirà all'uscita di OnInit...
controllare l'avvertimento che il compilatore genera.
Con una mossa così semplice, avete definito un array locale T che sarà perso quando uscite da OnInit...
Dice che c'è già una dichiarazione globale)
la dichiarazione di 'T' nasconde la dichiarazione globale alla linea 40
Ma, come farlo bene. Non avevo mai dichiarato un array usando le parentesi graffe. L'ho inizializzato con zero e ho impostato la sua dimensione e poi l'ho riempito con il ciclo. C'è un altro modo per farlo?
Se cancello il datetime nell'inite, il codice non compila, ma scrive due errori:
la dichiarazione di 'T' nasconde la dichiarazione globale alla linea 40
Ma, come farlo bene. Non avevo mai dichiarato un array usando le parentesi graffe. L'ho inizializzato con zero e ho impostato la sua dimensione e poi l'ho riempito con il ciclo. C'è un altro modo per farlo?
Se cancello il datetime nell'inite, il codice non compila, ma scrive due errori:
'{' - espressione attesa
'=' - uso di operazioni illegali
La dichiarazione dell'array insieme all'inizializzazione delle costanti potrebbe (e dovrebbe) essere fatta a livello globale.
la dichiarazione di 'T' nasconde la dichiarazione globale alla linea 40
Ma, come farlo bene. Non avevo mai dichiarato un array usando le parentesi graffe. L'ho inizializzato con zero e ho impostato la sua dimensione e poi l'ho riempito con il ciclo. C'è un altro modo per farlo?
Se cancello il datetime nell'inite, il codice non compila, ma scrive due errori:
'{' - espressione attesa
'=' - uso di operazioni illegali
Con '=' potete inizializzare gli array solo quando li dichiarate. Sembra essere un residuo di C, ma è così che si fa qui :-)
La dichiarazione dell'array insieme all'inizializzazione delle costanti avrebbe potuto (e dovuto) essere fatta a livello globale.
Sì, ho provato e funziona. E non puoi farlo senza livello globale, l'ho fatto solo per ridurre il costo computazionale, per riempire l'array una volta nell'init e poi usare i valori dell'array?
Anche se logicamente le variabili a livello globale sono sempre costanti, quindi il calcolo viene eseguito una sola volta all'inizio del programma?
Sì, ho provato e funziona. E non puoi farlo senza livello globale, l'ho fatto solo per ridurre il costo computazionale, per riempire l'array una volta nell'init e poi usare i valori dell'array?
Anche se logicamente le variabili a livello globale sono sempre costanti, quindi il calcolo viene eseguito una sola volta all'inizio del programma?
Sì, quando si prepara un binario ex4 ex5 per l'esecuzione dal terminale. Si può pensare che siano solo collegamenti all'array di dati descritto (e salvato all'interno di ex4/5 al momento della compilazione), e questo è molto veloce...
la dichiarazione di 'T' nasconde la dichiarazione globale alla linea 40
Ma, come farlo bene. Non avevo mai dichiarato un array usando le parentesi graffe. L'ho inizializzato con zero e ho impostato la sua dimensione e poi l'ho riempito con il ciclo. C'è un altro modo per farlo?
Se cancello il datetime nell'inite, il codice non compila, ma scrive due errori:
'{' - espressione attesa
'=' - uso di operazioni illegali
Non ha molta importanza come viene riempito l'array. Dovete semplicemente impostare una condizione per cui se la dimensione dell'array è zero, deve essere valutata, riempita e scritta in un file. E in OnInit(), provate a leggere nell'array dichiarato usando il mio esempio. Di conseguenza, se c'è un array di file, viene letto e l'array viene riempito, l'array non verrà ricalcolato e riempito di nuovo.
Ecco un esempio di scrittura e lettura di un array
Eseguilo due volte in modalità debug e vedi quanto tempo ci vuole per scrivere e leggere l'array. La prima esecuzione scriverà l'array su file, e la seconda lo leggerà e inizierà a stampare le date dall'array. Poi capire la parte evidenziata, se IS_DEBUG_MODE deve essere rimosso, e se IsOptimization() deve essere inserito nella condizione.
C'è una funzione, qualcosa come FileWriteInteger(). Identificare per posizione, la variabile deve essere all'inizio del file, dopo averla letta il puntatore si sposterà alla sua fine, cioè all'inizio dell'array, dopo aver letto l'array il puntatore sarà prima della variabile successiva...
Un articolo sul lavoro con i file sarà pubblicato presto.
Volevo scrivervi che non c'è nessun articolo sulle operazioni su file. Lei li rende informativi e lucidi, li leggerò sicuramente quando appariranno.
Provato a dichiarare un array a livello globale (codice mql4)
datetime T[];riempire l'inite
Se non impostato all'inizio, stampa la data 1971, cioè l'array è vuoto
Se riempio l'array all'inizio, i valori appaiono. Può essere la ragione, che l'array è reinizializzato datetaime, ma senza di esso il codice non compila?
L'array scompare. Cosa faccio di sbagliato?
Provato a dichiarare un array a livello globale (codice mql4)
riempire l'inite
Se non impostato all'inizio, stampa la data 1971, cioè l'array è vuoto
Se riempio l'array all'inizio, i valori appaiono. Può essere la ragione, che l'array è reinizializzato datetaime, ma senza di esso il codice non compila?
L'array scompare. Cosa faccio di sbagliato?
Guarda cosa dice il compilatore.
Con una mossa così semplice avete definito un array locale T che svanirà all'uscita di OnInit...
controllare l'avvertimento che il compilatore genera.
Con una mossa così semplice, avete definito un array locale T che sarà perso quando uscite da OnInit...
Dice che c'è già una dichiarazione globale)
la dichiarazione di 'T' nasconde la dichiarazione globale alla linea 40
Ma, come farlo bene. Non avevo mai dichiarato un array usando le parentesi graffe. L'ho inizializzato con zero e ho impostato la sua dimensione e poi l'ho riempito con il ciclo. C'è un altro modo per farlo?
Se cancello il datetime nell'inite, il codice non compila, ma scrive due errori:
'{' - espressione attesa
'=' - uso di operazioni illegali
Dice che c'è già una dichiarazione globale)
la dichiarazione di 'T' nasconde la dichiarazione globale alla linea 40
Ma, come farlo bene. Non avevo mai dichiarato un array usando le parentesi graffe. L'ho inizializzato con zero e ho impostato la sua dimensione e poi l'ho riempito con il ciclo. C'è un altro modo per farlo?
Se cancello il datetime nell'inite, il codice non compila, ma scrive due errori:
'{' - espressione attesa
'=' - uso di operazioni illegali
La dichiarazione dell'array insieme all'inizializzazione delle costanti potrebbe (e dovrebbe) essere fatta a livello globale.
Dice che c'è già una dichiarazione globale)
la dichiarazione di 'T' nasconde la dichiarazione globale alla linea 40
Ma, come farlo bene. Non avevo mai dichiarato un array usando le parentesi graffe. L'ho inizializzato con zero e ho impostato la sua dimensione e poi l'ho riempito con il ciclo. C'è un altro modo per farlo?
Se cancello il datetime nell'inite, il codice non compila, ma scrive due errori:
'{' - espressione attesa
'=' - uso di operazioni illegali
La dichiarazione dell'array insieme all'inizializzazione delle costanti avrebbe potuto (e dovuto) essere fatta a livello globale.
Sì, ho provato e funziona. E non puoi farlo senza livello globale, l'ho fatto solo per ridurre il costo computazionale, per riempire l'array una volta nell'init e poi usare i valori dell'array?
Anche se logicamente le variabili a livello globale sono sempre costanti, quindi il calcolo viene eseguito una sola volta all'inizio del programma?
Sì, ho provato e funziona. E non puoi farlo senza livello globale, l'ho fatto solo per ridurre il costo computazionale, per riempire l'array una volta nell'init e poi usare i valori dell'array?
Anche se logicamente le variabili a livello globale sono sempre costanti, quindi il calcolo viene eseguito una sola volta all'inizio del programma?
Dice che c'è già una dichiarazione globale)
la dichiarazione di 'T' nasconde la dichiarazione globale alla linea 40
Ma, come farlo bene. Non avevo mai dichiarato un array usando le parentesi graffe. L'ho inizializzato con zero e ho impostato la sua dimensione e poi l'ho riempito con il ciclo. C'è un altro modo per farlo?
Se cancello il datetime nell'inite, il codice non compila, ma scrive due errori:
'{' - espressione attesa
'=' - uso di operazioni illegali