Ciao a tutti, oggi parliamo di un argomento che interessa a molti trader: come ottimizzare i propri trade dopo aver raggiunto il break even grazie a un Expert Advisor (EA). Questo piccolo gioiello di EA ha una funzione fondamentale: il conteggio degli ordini.
Funzione OrdersCounter
int OrdersCounter() {
int counter=0;
//---
for(int i=OrdersTotal()-1; i>=0; i--)
if(OrderSelect(i,SELECT_BY_POS))
if(OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol()) {
// se l'ordine è stato aperto da questo EA
//--- se è avvenuto il break even
double XBreakeven = OrderType()==OP_BUY ? OrderStopLoss() >= OrderOpenPrice() : OrderStopLoss() <= OrderOpenPrice();
if(!XBreakeven) {
counter++; // conta la posizione
}
}
return counter;
}
Questa funzione conta solo gli ordini che non hanno uno stop loss superiore o uguale al prezzo di apertura per gli acquisti e inferiore per le vendite. In breve, stiamo contando tutti gli ordini che non sono andati in break even o che non hanno un trailing stop che protegge il prezzo di apertura.
double XBreakeven = OrderType()==OP_BUY ? OrderStopLoss() >= OrderOpenPrice() : OrderStopLoss() <= OrderOpenPrice();
if(!XBreakeven) // se solo il break even e il trailing stop non sono avvenuti
Attraverso questo contatore, otteniamo un valore che utilizzeremo per limitare la nostra posizione massima, che in questo caso è impostata a 1 ordine alla volta.
if(OrdersCounter()<MaximumOrders) Quindi, ogni volta che si verifica un break even, questa funzione ignorerà il conteggio, permettendo di aprire un altro ordine di vendita, e il ciclo continua.
Naturalmente, tutto ciò non sarebbe possibile senza una funzione di break even.
void BreakEvenFunction() {
//---
for(int i=OrdersTotal()-1; i>=0; i--) {
if(OrderSelect(i,SELECT_BY_POS)) {
if(OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol()) {
// per acquisti se il Bid è sopra il prezzo di apertura + pips di break even, viceversa per le vendite
double xHybrid = OrderType()==OP_BUY ? (Bid>OrderOpenPrice()+BreakevenPips*_Point && OrderStopLoss()<OrderOpenPrice()) : (Ask<OrderOpenPrice()-BreakevenPips*_Point && OrderStopLoss()>OrderOpenPrice());
/* per acquisti solo se lo StopLoss è uguale o superiore al prezzo di apertura, viceversa per le vendite */
if(xHybrid) {
bool modfy = OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,clrNONE);
}
}
}
}
Che ne dite? Vale la pena provarlo!
Post correlati
- Dematus: Il Sistema di Trading per MetaTrader 5
- MQL5 Wizard: Creare Trading Signals con Morning/Evening Stars e MFI per MetaTrader 5
- Utilizzare MQL5 Wizard per generare segnali di trading: Hammer e Hanging Man con CCI
- MQL5 Wizard: Strategia di Trading con Dark Cloud Cover/Piercing Line e RSI
- MQL5 Wizard: Crea Expert Advisor per segnali di trading basati su Dark Cloud Cover e Piercing Line con CCI