www.sapienzafinanziaria.com
Corso Sapienza Trading Automatico
la formazione finanziaria è il miglior investimento per il tuo domani
Coaching n. 3 Edizione marzo 2015
Ordini, altre funzioni custom ed errori comuni
www.sapienzafinanziaria.com
• Conoscere le funzioni per gestire le operazioni di trading
• Creare una funzione per verificare i livelli di ingresso a mercato e stoploss
• Creare una funzione per il calcolo del size
Obiettivi di questa coaching
I tipi di ordine
Tipo Ordine Prezzo Apertura Prezzo chiusura
Buy Ask Bid
Sell Bid Ask
I tipi di ordine
Tipo Ordine Prezzo apertura ordine pendente Trasformazione da ordine pendente a ordine effettivo
Buy Stop Sopra il prezzo Ask corrente Il prezzo Ask raggiunge il prezzo di apertura ordine
Buy Limit Sotto il prezzo Ask corrente Il prezzo Ask raggiunge il prezzo di apertura ordine
Sell Stop Sotto il prezzo Bid corrente Il prezzo Bid raggiunge il prezzo di apertura ordine
Sell Limit Sopra il prezzo Bid corrente Il prezzo Bid raggiunge il prezzo di apertura ordine
• int OrdersTotal()
• bool OrderSelect( int index, int select, int pool )
Funzioni di trading
//Selezione di un ordine attivo usando il suo indice OrderSelect(12, SELECT_BY_POS); OrderSelect{14, SELECT_BY_POS, MODE_TRADES); //Selezione di un ordine storico usando il suo indice OrderSelect (2, SELECT_BY_POS, MODE_HISTORY) ; //Selezione di un ordine attivo usando il suo ticket OrderSelect(41926833, SELECT_BY_TICKET); //Ciclo per selezione degli ordini attivi usando i loro indici for(int i=0; i<OrdersTotal() ; i++) { OrderSelect(i, SELECT_BY_POS); //fai qualcosa }
• bool OrderClose(int ticket, double lots, double price, int slippage, color
arrow_color)
• bool OrderDelete( int ticket, color arrow_color )
• int OrderSend(string symbol, int cmd, double volume, double price, int slippage, double stoploss,
double takeprofit, string comment, int magic, datetime expiration, color arrow_color)
• bool OrderModify(int ticket, double price, double stoploss, double takeprofit, datetime
expiration, color arrow_color)
Funzioni di trading
• int OrderTicket()
• int OrderMagicNumber()
• int OrderType()
• string OrderSymbol()
• double OrderOpenPrice()
• double OrderStopLoss()
• double OrderTakeProfit()
• double OrderLots()
• double OrderProfit()
Funzioni di trading
Funzione di conteggio ordini
Funzione di conteggio ordini
int CountOrders(int tipo,int NumeroMagico) { int result; int OrderCount=0; for(int i=0;i<OrdersTotal();i++) { result=OrderSelect(i,SELECT_BY_POS); if(OrderMagicNumber()==NumeroMagico && OrderSymbol()==Symbol() && OrderType()==tipo) { OrderCount++; } } return(OrderCount); }
Funzione di chiusura ordini
Funzione di chiusura ordini
void CloseOrder(int tipo,int NumeroMagico) { int result; int slippage_points =5; for(int i=0;i<OrdersTotal();i++){ result=OrderSelect(i,SELECT_BY_POS,MODE_TRADES); if(tipo==OP_BUY && OrderType()==OP_BUY){ if(OrderSymbol()==Symbol() && OrderMagicNumber()==NumeroMagico) { RefreshRates(); while(IsTradeContextBusy()) { Sleep(10); } result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),slippage_points,Magenta); } } if(tipo==OP_SELL && OrderType()==OP_SELL) { if(OrderSymbol()==Symbol() && OrderMagicNumber()==NumeroMagico) { RefreshRates(); while(IsTradeContextBusy()) { Sleep(10); } result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),slippage_points,Magenta); } } }//fine istruzione for }// fine funzione CloseOrder
• bool SendNotification(…)
• bool SendMail( string oggetto, string testo mail)
Le funzioni comuni
SendNotification (“Trading signal :”+Close[1]);
SendMail (“EA xyz”,“Trading signal :”+Close[1]);
• double Marketlnfo(string symbol, int tipo)
Funzioni di interrogazione mercato
tipo valore descrizione
MODE_LOW 1 Livello di prezzo minimo di giornata
MODE_HIGH 2 Livello di prezzo massimo di giornata
MODE_TIME 5 Orario dell’ultima quotazione (Tick) ricevuta (ultimo orario comunicato dal server del brocker)
MODE_BID 9 Ultima quotazione di prezzo BID (offerta) ricevuta
MODE_ASK 10 Ultima quotazione di prezzo ASK (richiesta) ricevuta
MODE_POINT 11 Valore di un punto nella quotazione di un dato strumento
MODE_DIGITS 12 Numero di Digits dopo il punto decimale della quotazione di uno stumento finanziario
MODE_SPREAD 13 Valore dello Spread in punti
MODE_STOPLEVEL 14 Valore dello StopLevel in punti (distanza minima tra prezzo di ingresso e stoploss)
MODE_LOTSIZE 15 Dimensione di un contratto (Lotto) espressa nella valuta base dello strumento di trading
MODE_TICKVALUE 16 Valore del Tick di prezzo espresso nella valuta del proprio conto trading (se il conto è in EURO questo valore sarà
EURO)
MODE_TICKSIZE 17 Fornisce a dimensione del Tick nella quotazione di un dato strumento (da quanti Tick è formato un punto di
prezzo)
MODE_MINLOT 23 Minimo valore di volume ammesso per una operazione singola (in lotti)
MODE_LOTSTEP 24 Step minimo di variazione del volume di una operazione (in lotti)
MODE_MAXLOT 25 Massimo valore di volume ammesso per una operazione singola (in lotti)
Comment (MarketInfo(NULL, MODE_SPREAD) );
Funzione di Verifica Stoplevel
double Verifica_StopLevel(double PrezzoRiferimento, double PrezzoControllo){ double NR_PUNTI_DIFF=MathAbs(PrezzoRiferimento-PrezzoControllo)/MarketInfo(Symbol(),MODE_POINT); double NR_PUNTI_STOPLEVEL=MarketInfo(Symbol(),MODE_STOPLEVEL); if( NR_PUNTI_DIFF > (NR_PUNTI_STOPLEVEL+1)) { return (PrezzoControllo); }else{ double STOPLEVEL_REALE =( MarketInfo(Symbol(),MODE_STOPLEVEL)+1 )*Point; double NuovoPrezzoControllo; if(PrezzoRiferimento>PrezzoControllo) { NuovoPrezzoControllo=NormalizeDouble((PrezzoRiferimento-STOPLEVEL_REALE),Digits); }else{ NuovoPrezzoControllo=NormalizeDouble((PrezzoRiferimento+STOPLEVEL_REALE),Digits); } return (NuovoPrezzoControllo); } }
Funzione di Verifica Stoplevel
Funzione di Money Management
L’identificatore di una variabile coincide con una parola riservata
Caratteri speciali nei nomi di variabili e funzioni
Gli errori più comuni di compilazione
Sintassi non corretta
Funzioni che non restituiscono nessun risultato (eccetto le void)
Gli errori più comuni di compilazione
Errore Zero Divide
Uso di 0 al posto di NULL
In questo caso non viene dato nessun errore però l’EA manifesta comportamenti anomali
Gli errori più comuni di esecuzione
errori strani dovuti ad una serie storica non di buona qualità
impostazione errata di SL/TP oppure SL/TP inferiore a STOPLEVEL
impostazione errata volume operazione
errore di requote nell'istruzione OrderSend()
Troppi ordini pendenti
Gli errori più comuni in real time 2 ERR_COMMON_ERROR
0 ERR_NO_ERROR
129 ERR_INVALID_PRICE
130 ERR_INVALID_STOPS
131 ERR_INVALID_TRADE_VOLUME
138 ERR_REQUOTE
148 ERR_TRADE_TOO_MANY_ORDERS
Ora siamo in possesso di tutti gli elementi di MQL necessari per poter tradurre in codice una qualsiasi strategia.
Da qui in poi assumerà una grande importanza la capacità di ciascuno di noi a costruire una valida logica attorno alla nostra strategia mettendo assieme le cose fin qui apprese.
Le prossime lezioni saranno dedicate alla costruzione di strategie automatiche mediante la programmazione MQL.
Conclusioni