Ordem stop executado a dobrada às vezes.
- Stop Loss e Gain não insere junto com a ordem
- Ordem sem Stop Loss e Take Profit
- Como executar comando apenas quando o indicador for incluído no gráfico?
Olá João,
se fosse problema no MT5 ou na CORRETORA esse fórum estaria pipocando de casos. Certamente o EA não está testando que já foi dado um ORDER_SEND e emite outro ORDER_SEND, lembre-se que emitir a ordem não significa que vai ser executada imediatamente, em outras palavras, DONE não é FILLED.
está usando EA?...ele pode estar fazendo preço médio em vez de stopar
Olá João,
se fosse problema no MT5 ou na CORRETORA esse fórum estaria pipocando de casos. Certamente o EA não está testando que já foi dado um ORDER_SEND e emite outro ORDER_SEND, lembre-se que emitir a ordem não significa que vai ser executada imediatamente, em outras palavras, DONE não é FILLED.
Por se tratar de uma ordem stop (compra por exemplo), eu posiciono ela acima do preço e espero que o preço "atropele" a ordem para que ocorra o aumento ou abertura de posição. Abaixo é o código que eu estou utilizando.
void CompraSTOP(double preco, double volume, string comment) {
TKP = NormalizeDouble(preco + tkp, _Digits);
STL = NormalizeDouble(preco - stl, _Digits);
MqlTradeRequest request={};
MqlTradeResult result={0};
request.action = TRADE_ACTION_PENDING;
request.type_filling = preenchimento;
request.symbol = _Symbol;
request.volume = volume;
request.type_time = ORDER_TIME_DAY;
request.expiration = 0;
request.deviation = desvPts;
request.magic = magicNum;
request.type = ORDER_TYPE_BUY_STOP;
request.price = PRC;
request.sl = STL;
request.tp = TKP;
request.comment = comment;
if(!OrderSend(request,result)){
Print("Ordem de Compra - com falha.");
} else {
Print("Ordem de Compra - sem falha.");
}
}
A minha impressão é que a ordem é atropelada e algumas vezes ocorre o disparo duas vezes para a corretora. Será isso possível ou é uma impressão minha?
Como essa ordem é posicionada muito antes de ser executada, como eu poderia fazer uma verificação para impedir essa execução duas vezes? Você tem alguma boa prática para recomendar?
Muito obrigado novamente.
João
void CompraSTOP(double preco, double volume, string comment) { static contador; contador++; Print("Ordem pendente executada ",contador," vezes."); PRC = NormalizeDouble(preco, _Digits); TKP = NormalizeDouble(preco + tkp, _Digits); STL = NormalizeDouble(preco - stl, _Digits); MqlTradeRequest request={}; MqlTradeResult result={0}; request.action = TRADE_ACTION_PENDING; request.type_filling = preenchimento; request.symbol = _Symbol; request.volume = volume; request.type_time = ORDER_TIME_DAY; request.expiration = 0; request.deviation = desvPts; request.magic = magicNum; request.type = ORDER_TYPE_BUY_STOP; request.price = PRC; request.sl = STL; request.tp = TKP; request.comment = comment; if(!OrderSend(request,result)){ Print("Ordem de Compra - com falha."); } else { Print("Ordem de Compra - sem falha."); } }
Aproveitando o conselho do amigo Rogerio, fica ai uma sugestão para vc ver se é o seu codigo que está se repetindo ou problemas da corretora.
João,
printa o LOG DIÁRIO completo do dia que apresentou o erro. Deviation não funciona para exchagens ordem a mercado.

- Aplicativos de negociação gratuitos
- VPS Forex grátis por 24 horas
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso