Segui Money.it su Google Aggiungici alle fonti preferite per vedere più spesso le nostre notizie nei risultati di ricerca.
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.
Commenti
0Nessun commento: scrivi tu il primo.