Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 578
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
DataCandles è una struttura. L'array dove scriviamo le candele della storia è array[]. Quindi abbiamo bisogno di renderla una serie temporale in modo che la sua indicizzazione coincida con l'indicizzazione delle candele sul grafico. Cioè la cella zero dell'array[] corrisponderà alle candele più vicine alla data corrente.
Cioè: 1. copiamo le candele nell'array array[], 2. le facciamo diventare una serie temporale, e poi leggiamo i valori da essa nella struttura.
Si può fare a meno di array[] - basta scrivere i dati direttamente dal grafico nella struttura, ma ho suggerito questo per compatibilità con Five - permette di copiare direttamente solo nell'indicatore usando high[i], low[i] e altri dati, ma nello script o Expert Advisor, dovremo prima copiare l'intervallo storico necessario nell'array, cosa che ho fatto.
Allarme (serie);
come questo?
Entrambi gli avvisi restituiscono ancora false
Allarme (serie);
come questo?
Entrambi gli avvisi restituiscono ancora false
Quindi, questo è un bug che dovrebbe essere segnalato in "Errori, bug, domande".
Ecco uno script di controllo che mostra il tempo delle candele copiate nelle celle zero e ultime dell'array[]:
Quindi questo è un bug che dovrebbe essere riportato in "Errori, bug, domande".
Ecco uno script di controllo che mostra il tempo delle candele copiate nelle celle zero e ultime dell'array[]:
Emette questo:
Array è serie: falso
array tempo[0]: 2016.05.12 21:00
array tempo[9]: 2016.05.12 12:00
Viene fuori questo:
Array è serie: falso
array tempo[0]: 2016.05.12 21:00
array tempo[9]: 2016.05.12 12:00
Ho controllato - sempre falso, ma il tempo è corretto: se all'inizio dello script seleziona Array array come serie temporale "Yes", allora:
Se si seleziona "No", allora:
i tempi delle candele scritte nell'array sono invertiti, il che significa che ArraySetAsSeriess() funziona correttamente, ma ArrayIsSeries() no, emette sempre false, cosa che ho già scritto nel thread del bug di cui sopra.
Oh, questa programmazione. Più avanti nel bosco....
Capite, non avete bisogno di conoscere la direzione della matrice. L'algoritmo cerca le ripetizioni. Quindi non si preoccupa dell'ordine in cui le barre vengono elaborate.
di cui hai bisogno. Perché poi ho bisogno di scoprire quali candele hanno formato una corrispondenza e prendere il prezzo Low dalla più vicina al prezzo corrente.
C'è un tempo di candela nella struttura per questo, con il quale si può trovare la candela più vicina a qualsiasi tempo necessario.
E non è necessario emettere i numeri delle candele - non coincidono con i numeri delle barre reali. Perché riempiamo l'array, e gli indici nell'array appartengono solo al numero della candela nell'array, non sul grafico.
Ho controllato cosa produce - sempre falso, ma il tempo è corretto: se si seleziona Array array come serie temporale "Yes" quando si esegue lo script, allora:
Se si seleziona "No", allora:
I tempi delle candele scritte nell'array sono invertiti, il che significa che ArraySetAsSeriess() funziona correttamente, ma ArrayIsSeries() no, emette sempre false, cosa che ho già scritto nel thread del bug di cui sopra.
Ho modificato leggermente il codice:
ArraySetAsSeries(array,true); //qui ha appena messo true
e poi ha aggiunto numeri di candele per l'autocontrollo:
Alert("Array is series: ",ArrayIsSeries(array),
"\nCandle "+IntegerToString(0,2,'0')+" time array[0]: ",TimeToString(array[0].time,TIME_DATE|TIME_MINUTES),
"\nSwitch "+IntegerToString(searchperiod-1,2,'0')+" time array[",string(searchperiod-1),"]:",TimeToString(array[ArraySize(array)-1].time,TIME_DATE|TIME_MINUTES));
Dà il seguente output:
Array è serie: falso
Candela 00 array tempo[0]: 2016.05.12 22:00
Candela 09 array tempo[9]: 2016.05.12 13:00
Per fare questo, c'è un tempo di candela nella struttura, con il quale si può trovare la candela più vicina a qualsiasi tempo necessario.
Ho cambiato un po' il codice:
ArraySetAsSeries(array,true); //qui ha appena messo true
e poi ha aggiunto numeri di candele per l'autocontrollo:
Alert("Array is series: ",ArrayIsSeries(array),
"\nCandle "+IntegerToString(0,2,'0')+" time array[0]: ",TimeToString(array[0].time,TIME_DATE|TIME_MINUTES),
"\nSwitch "+IntegerToString(searchperiod-1,2,'0')+" time array[",string(searchperiod-1),"]:",TimeToString(array[ArraySize(array)-1].time,TIME_DATE|TIME_MINUTES));
Dà il seguente output:
Array è serie: falso
Candela 00 array tempo[0]: 2016.05.12 22:00
Candela 09 array tempo[9]: 2016.05.12 13:00