MetaTrader4
Aumente Seus Lucros Após o Break Even: Expert para MetaTrader 4
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!
2021.07.13