Durante lo sviluppo di un EA ti capiterà spesso di dover analizzare le posizioni aperte, chiuse o pendenti.
Nel linguaggio MQL, per ottenere informazioni su una posizione, è necessario innanzitutto selezionarla
Selezione ordine => Richiesta dati su questo ordine
La funzione OrderSelect ti consente di selezionare uno specifico ordine e di andarne a vedere ogni singolo aspetto grazie ad una moltitudine di funzioni accessorie. La sintassi di OrderSelect è semplice, ma necessita di un po d’ attenzione nella sua analisi
bool OrderSelect ( int index, int select, int pool=MODE_TRADES )
I parametri sono i seguenti
- index è un valore intero, il cui significato sarà visto poco sotto
- select è un valore intero, ma solitamente, anche per una questione di chiarezza del codice, viene utilizato scrivendo una delle seguenti stringhe
a) SELECT_BY_POS: si indica alla funzione che il numero index fa riferimento alla posizione del trade nel gruppo selezionato
b) SELECT_BY_TICKET: si indica alla funzione che index è un numero di ticket
- pool è un parametro opzionale, ed è un valore intero o stringa che va ad indicare alla funzione il gruppo da cui pescare l’ ordine. Il gruppo può essere
a) MODE_TRADES: l’ ordine verrà selezionato nel gruppo degli ordini aperti o pendenti. Questo valore è impostato di default, quindi la funzione, in caso di omissione, farà riferimento agli ordini aperti
b) MODE_HISTORY: l’ ordine verrà selezionato nel gruppo degli ordini chiusi o cancellati
Teoria a parte, una trattazione pratica è sicuramente più esplicativa.
Supponiamo di avere tre ordini aperti e di voler selezionare il primo
OrderSelect(0,SELECT_BY_POS);
volendo invece selezionare il primo ordine nello storico avremmo scritto
OrderSelect(0,SELECT_BY_POS,MODE_HISTORY);
Nei casi sopra citati utilizziamo due gruppi differenti, rispettivamente il gruppo degli ordini aperti/pendenti e il gruppo degli ordini chiusi/cancellati.
Diverso è il caso di SELECT_BY_TICKET. Utilizzando la selezione tramite ticket, che è l’ identificativo unico di ogni ordine, non abbiamo bisogno di selezionare alcun gruppo. Infatti il server è in grado di riconoscere l’ ordine che desideriamo proprio attraverso il ticket number
OrderSelect(1234567,SELECT_BY_TICKET);
In questo caso abbiamo selezionato l’ ordine 1234567. Ti ricordo che il numero di ticket di ogni posizione che apriamo ( diretta o pendente che sia ) ci viene passato dal valore di ritorno della funzione OrderSend
La funzione OrderSelect ritorna un valore di tipo booleano: True se l’ ordine viene effettivamente selezionato, False se l’ ordine non è stato trovato.
Nel prossimo articolo tratterò in modo completo le principali funzioni di richiesta dati sui singoli ordini; la lista completa di tali funzioni è presente sul sito ufficiale MQL.
© RIPRODUZIONE RISERVATA