Hoje vamos falar sobre uma funcionalidade incrível deste pequeno EA (Expert Advisor) que pode ajudar a otimizar suas operações: a função de contagem de ordens.
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 a ordem foi aberta por este EA { //--- se o break even já aconteceu /* Para compras, somente quando o StopLoss é igual ou maior que o preço de abertura. Nota: Esta implementação não é boa se você tiver ordens pendentes. É adequada apenas para compras e vendas.*/ double XBreakeven = OrderType()==OP_BUY ? OrderStopLoss() >= OrderOpenPrice() : OrderStopLoss() <= OrderOpenPrice(); if(!XBreakeven) // Se somente o Break Even e o trailing stop não aconteceram { counter++; // conta a posição } } return counter; }
Com essa contagem, estamos considerando apenas as ordens que não possuem StopLoss acima ou igual ao preço de abertura para compras, e abaixo para vendas. Em suma, contamos todas as ordens que ainda não alcançaram o break even ou em que o trailing stop não protegeu o preço de abertura.
double XBreakeven = OrderType()==OP_BUY ? OrderStopLoss() >= OrderOpenPrice() : OrderStopLoss() <= OrderOpenPrice(); if(!XBreakeven) // Se somente o Break Even e o trailing stop não aconteceram
Com isso, criamos um contador que retorna o valor que vamos usar para limitar nossa posição máxima, que neste caso está definida para 1 ordem por vez.
if(OrdersCounter()<MaximumOrders)
Portanto, sempre que o break even ocorrer, essa função não irá contar, e como neste exemplo temos apenas uma posição, ela retornará zero, permitindo que abramos outra venda e o processo continua.
Isso só seria possível porque criamos uma função de break even.
void BreakEvenFunction() { //--- for(int i=OrdersTotal()-1; i>=0; i--) if(OrderSelect(i,SELECT_BY_POS)) if(OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol()) { // para compra se o Bid estiver acima do Preço de Abertura + pips de break even. Vice-versa para vendas double xHybrid = OrderType()==OP_BUY ? (Bid>OrderOpenPrice()+BreakevenPips*_Point && OrderStopLoss()<OrderOpenPrice()) : (Ask<OrderOpenPrice()-BreakevenPips*_Point && OrderStopLoss()>OrderOpenPrice()); /* Para compras, somente quando o StopLoss é igual ou maior que o Preço de Abertura. Vice-versa para vendas */ if(xHybrid) { bool modfy = OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,clrNONE); } } }
Então, o que você está esperando? Experimente e veja a diferença nas suas operações!
Publicações relacionadas
- MACD Sample: Um Guia Prático para o Expert Advisor no MetaTrader 5
- Trader Automático: RSI e MFI com Otimização Automática para MetaTrader 4
- Como Proteger Seu Indicador/EA no MetaTrader 4 com Senha
- VR-SETKA-3: Um EA Revolutionário para MetaTrader 5
- My Line Order 2.1: O EA que Revoluciona suas Operações no MetaTrader 4