Gli ORDINI nella programmazione MQL4 – Lezione #4

0
4982

Non vorrei sembrare troppo banale, ma è evidente che non potrai MAI realizzare un trading system se non conosci Sua Maestà.

Di chi sto parlando?

DELLA FUNZIONE OrderSend.

 

La funzione OrderSend è tutto ciò che ti serve per poter inserire degli ordini , pendenti oppure direttamente a mercato.

Ma procediamo un passo alla volta. Prima cosa te la voglio presentare, eccola qui:

int  OrderSend(
   string   symbol,              // symbol
   int      cmd,                 // operation
   double   volume,              // volume
   double   price,               // price
   int      slippage,            // slippage
   double   stoploss,            // stop loss
   double   takeprofit,          // take profit
   string   comment=NULL,        // comment
   int      magic=0,             // magic number
   datetime expiration=0,        // pending order expiration
   color    arrow_color=clrNONE  // color
   );

Se quello che hai appena letto ti sembra arabo, ti consigli di guardare il VIDEO dove ti spiego passo passo cose sono le funzioni. Ti chiarirà le idee, eccolo qui.

Ma torniamo a noi, come puoi vedere la funzione OrderSend vuole 11 parametri in ingresso. Analizziamoli uno per uno e infine facciamo un esempio in modo da eliminare qualsiasi dubbio.

  • symbol: se vuoi inserire un ordine sul grafico in cui stai facendo girare il tuo sistema sarà sufficiente scrivere Symbol() e il gioco è fatto;
  • cmd: qui la situazione si fa più seria, dobbiamo indicare quale tipo di ordine vogliamo venga eseguito;
Tipo di ordine Comando
A MERCATO BUY OP_BUY
A MERCATO SELL OP_SELL
PENDENTE BUY LIMIT OP_BUYLIMIT
PENDENTE SELL LIMIT OP_SELLLIMIT
PENDENTE BUY STOP OP_BUYSTOP
PENDENTE SELL STOP OP_SELLSTOP
  • volume: non è altro che la size dell'ordine che vuoi inserire. Se vuoi piazzare un ordine con un lotto scriverai 1, con un minilotto 0.1 e così via. Semplice!!!;
  • price: indica il prezzo d'ingresso del tuo ordine. Qui è doveroso fare alcune precisazioni. Leggi con molta attenzione. Se l'ordine che vuoi inserire è un'ordine che entra direttamente a mercato sarà sufficiente indicare Ask per un buy e Bid per un sell. Se invece stai inserendo un ordine pendente, il prezzo d'ingresso dovrà essere coerente con il prezzo attuale che il cambio o il cross sta battendo;

 Esempio: cambio EURUSD batte il prezzo 1.1638. Vuoi inserire un ordine BUY STOP. Quest'ultimo dovrà aver un prezzo d'ingresso superiore a quello di mercato (es. 1.1758), se così non fosse ti verrebbe restituito un errore e nessun ordine verrebbe piazzato!!!!!!!!! 

  • slippage: è il massimo valore di slippage che intendiamo accettare. Occorre riempire questo campo indicando un valore in punti. Quindi se piazziamo un ordine BUY a 1.21548 e specifichiamo un slippage di 20 (quindi 2 pips) l'ordine potrà essere eseguito massimo a 1.21568. Sogno o realtà? Io non sono così convinto che il Broker rispetti a pieno questa direttiva. FIDARSI E' BENE MA NON FIDARSI E' MEGLIO!!!!;
  • stoploss: niente di più semplice, devi semplicemente inserire il prezzo a cui piazzare lo stoploss. ATTENZIONE, non i pips di stoploss ma il PREZZO!!!;
  • takeprofit: vale lo stesso discorso dello stoploss. Non servono altre parole;
  • comment: tra gli apici devi riportare il commento che vuoi venga associato all'ordine in questione. es. ” Ordine BUY della strategia pippo”;
  • magic: il magic number meriterebbe un articolo tutto per lui. E a breve arriverà. Per ora posso dirti che puoi associare ad ogni trading system un valore univoco in modo da individuare gli ordini appartenenti ad un unica strategia. Ti consiglio vivamente di abituarti ad utilizzarlo, più avanti quando ti troverai a dover gestire decine di sistemi ti tornerà davvero utile. Anzi sarà indispensabile. Inserisci quindi un valore a tuo piacimento da associare all'EA che stai realizzando;
  • expiration: è un parametro da utilizzare solo se si stanno inserendo degli ordini pendenti. Rappresenta il momento in cui l'ordine va in scadenza, ovvero, se non eseguito viene cancellato. Più avanti nell'esempio capirai meglio;
  • arrow_color: non è altro che il colore della freccetta che viene rappresentata sul grafico quando viene inserito un ordine da un expert advisor, pura grafica niente di più;

È arrivato il momento di passare dalla teoria alla pratica, facciamo un paio di esempi

Esempio 1

Vogliamo inserire un ordine BUY direttamente a mercato con stoploss di 20 pips e takeprofit di 40. Vogliamo entrare a mercato con 1.4 lotti. Ecco come dovrebbe apparire la nostra linea di codice

OrderSend(Symbol(),OP_BUY,1.4,Ask,0,Ask-0.002,Ask+0.004,"Ordine di esempio",123,0,clrAliceBlue);

Vorrei far notare alcune cose:

  • ho inserito un commento (“Ordine di esempio) e che il colore della freccia che verrà rappresentata sul grafico è AliceBlue;
  • nei campi “slippage” ed “expiration” ho inserito zero. Questo perchè nel primo caso non voglio impostare nessun valore di slippage mentre nel secondo caso non ha senso dare una data/orario di scadenza per un ordine che va direttamente a mercato;
  • il magic number associato a questo ordine/strategia è 123

N.B. Per tutti i campi non obbligatori puoi inserire zero ed evitare di dare un valore al campo in questione.

Esempio 2

Vogliamo inserire un ordine pendente SELL STOP  a 1.32580 con stoploss di 30 pips e nessun take profit ed entrare a mercato con 1 minilotto. Se l'ordine non viene eseguito entro un'ora deve essere cancellato automaticamente.

Ecco come dovrebbe apparire la nostra linea di codice

OrderSend(Symbol(),OP_SELLSTOP,0.1,1.32580,0,1.3288,0,"Ordine di esempio",123,TimeCurrent()+3600,clrAliceBlue);

Penso non ci sia molto da aggiungere rispetto a quanto detto per l'esempio 1. Vale la pena spendere soltanto due righe per l'orario di scadenza. Come puoi vedere ho inserito TimeCurrent()+3600. Cosa significa? Semplicemente ho sommato 3600 secondo (1 ora) alla data di immissione dell'ordine, tradotto in parole povere l'ordine scadrà dopo un'ora dalla sua immissione.

Mi rendo conto che ci sono ancora tantissime cose da poter dire sugli ordini ma questo è davvero molto più di quello che può servirti per iniziare a programmare in modo serio e consapevole.

Per vedere praticamente alcuni esempi di operatività ti consiglio di guardare il video che ho caricato sul mio canale YouTube. Eccoli qui.

BUONA VISIONE