MQL: la funzione OrderSelect

Marco FoxTrade

28 Maggio 2011 - 13:38

MQL: la funzione OrderSelect

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.

Iscriviti a Money.it

Trading online
in
Demo

Fai Trading Online senza rischi con un conto demo gratuito: puoi operare su Forex, Borsa, Indici, Materie prime e Criptovalute.