- Risco de pular stop
- Como impedir de comprar ou vender mais de 1 vez na mesma barra / timeframe?
- Stop Loss e Gain não insere junto com a ordem
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
- 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