Aprire posizioni con OrderSend in linguaggio MQL
L’ apertura e la chiusura delle posizioni sono componenti essenziali di ogni Expert Advisor.
Per svolgere questi due compiti ci vengono incontro le funzioni OrderSend per l’ apertura
e OrderClose per la chiusura. Oggi ti mostrerò la prima.
OrderSend è una funzione con 7 parametri obbligatori e 4 facoltativi
int OrderSend ( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE )
Parametri obbligatori:
- symbol: viene richiesta una stringa con il nome esatto del pair/indice su cui aprire la posizione, ad esempio EURUSD
- cmd: è il tipo di operazione da effettuare, e accetta valori int da 0 a 5 con il seguente criterio
- 0: ordine Buy
- 1: ordine Sell
- 2: ordine pendente Buy Limit
- 3: ordine pendente Sell Limit
- 4: ordine pendente Buy Stop
- 5: ordine pendente Sell Stop
- volume: lotto da utilizzare per l’ apertura, ad esempio 0.1. Il valore deve essere di tipo double
- price: il prezzo a cui deve scattare l’ ordine. Bisogna porre attenzione a questo parametro, e tenere conto del
fatto che per le operazioni Long bisogna prendere come riferimento il prezzo Ask ( che rappresenta il prezzo
effettivo di acquisto ) e per le operazioni Short bisogna utilizzare invece il prezzo Bid ( che rappresenta
il prezzo di vendita ). Se non si tiene presente questo si può incorrere in un errore. Il tipo di dato deve essere double
- slippage: è lo slippage tollerato per l’ apertura della posizione, ed è espresso in pips con un valore intero.
- stop loss: è un valore a virgola mobile ( double ), e rappresenta il prezzo di stop loss per la posizione che stiamo inviando.
Lo stop scatterà al raggiungimento di questo valore da parte del Bid in caso di Long e dell’ Ask in caso di short
- take profit: come sopra, rappresenta il livello di prezzo al quale prendere profitto.
Questi erano i parametri indispensabili per l’ invio di un ordine; i successivi sono facoltativi, e contengono informazioni
che possono essere omesse nel caso non vi siano necessità particolari.
- comment: è un valore di tipo stringa che può essere usato per aggiungere una nota nel campo Commenti nel riepilogo
degli ordini su Metatrader ( sia sugli ordini aperti/pendenti che sugli ordini storici ). Può essere utile
nel caso si stia tradando con più EA per distinguere le diverse operazioni che aprono.
- magic: questo valore intero serve a dare un identificativo unico ad ogni posizione, cui ci si può riferire con
la funzione OrderMagicNumber().
- expiration: l’ expiration time, passato come valore datetime, rappresenta il momento di scadenza dell’ operazione:
se l’ apertura non è avvenuta entro la data/ora segnata, il trade viene cancellato. E’ utilizzabile solo sugli
ordini pendenti. Per impostare correttamente questo valore è possibile prima creare una stringa in questo modo
string stringaScadenza=«2011.6.20 20:00»; // anno, mese, giorno, ore, minuti
e successivamente effettuare una conversione dal tipo stringa al tipo datetime con la funzione StrToTime()
datetime tempoScadenza=StrToTime(stringaScadenza);
passando quindi tempoScadenza come parametro.
- color: questo ultimo parametro ci consente di disegnare una freccia sul punto di apertura. Tale freccia sarà del colore
desiderato. La via più comoda per specificarne uno è scrivere il colore tra doppi apici, ad esempio «Red».
A questo indirizzo puoi trovare una lista dei colori supportati.
Il valore di ritorno della funzione OrderSend è -1 se l’ operazione fallisce, oppure è un numero intero che rappresenta il
ticket number dell’ ordine aperto. Per conoscere nello specifico l’ eventuale errore che si presenta puoi utilizzare
la funzione GetLastError() e poi consultare questa pagina per vedere di cosa si tratta.
Note conclusive:
Nell’ utilizzo della funzione OrderSend è molto importante tenere presente che Metatrader considera il pip come il valore
di precisione più piccolo presente su un determinato cross. Sui conti Fixed Spread, ad esempio, il valore su eurusd
corrisponderà a 0.0001, mentre su un conto a spread variabile sarà di 0.00001. Questo particolare rende necessaria
un’ attenzione in più quando si parla di slippage. Se impostiamo ad esempio slippage=4, su un conto Fixed avrai una
tolleranza di apertura di 0.0004 ( sempre su eurusd ) mentre su un conto a spread variabile avrai una tolleranza di
soli 0.00004, il che potrebbe facilmente compromettere l’ entrata dell’ ordine.
Nel prossimo articolo vedremo la funzione di chiusura ordine OrderClose.
© RIPRODUZIONE RISERVATA