Duplicação de ordens

 
O meu EA operando o mini índice em conta real está duplicando as ordens mesmo com um SLEEP(1000) após as mesmas, alguém sabe dizer o que preciso fazer para evitar esse problema ?
 

provavelmente sua ordem está sendo criada no OnTick(). Faça uma função fora e aguarde a resposta, ao mesmo tempo impeça novas criações até a resposta chegar.

Grande abraço

 
neryfonseca:
O meu EA operando o mini índice em conta real está duplicando as ordens mesmo com um SLEEP(1000) após as mesmas, alguém sabe dizer o que preciso fazer para evitar esse problema ?

Nery,

só por curiosidade, pode anexar o log DIÁRIO, quero saber o tempo de execução desde a emissão da ordem até o último deal.

ps: não preciso saber seu login, cuidado com hackers

 

Bom dia senhores,


Oi Cezar, agradeço a dica, vou tentar fazer isso.


Oi Rogerio,

Segue o trecho do log que tem as duas ordens de compra, desde já agradeço mais uma vez sua atenção e orientações.

Arquivos anexados:
 
neryfonseca #:

Bom dia senhores,


Oi Cezar, agradeço a dica, vou tentar fazer isso.


Oi Rogerio,

Segue o trecho do log que tem as duas ordens de compra, desde já agradeço mais uma vez sua atenção e orientações.

Você cortou demais, gostaria de ver o horário que a ordem 1974594060 (DEAL sublinhado)  foi emitida.

O tempo de execução da ordem 1974594070 está um pouco alto 59 ms, creio que você não opera usando VM, mas isso não é problema, de qualquer forma vale a orientação do Cesar liga uma flag quando emitir a ordem e desliga quando receber o DEAL ou a POSIÇÃO abrir. Enquanto tal flag estiver ligada você não emite nova ordem.

Isso é só uma sugestão.

Bons trades.



JL 0 13:12:00.325 Trades '2002217668': exchange buy 1 WINQ22 at market sl: 99015 tp: 102185

RI 0 13:12:00.370  Trades '2002217668': deal #309453582 buy 1 WINQ22 at 99190 done (based on order #1974594060)


NG 0 13:12:00.373 Trades '2002217668': accepted exchange buy 1 WINQ22 at market sl: 99015 tp: 102185

RF 0 13:12:00.374 Trades '2002217668': exchange buy 1 WINQ22 at market sl: 99015 tp: 102185 placed for execution (Order Ack. Sending to OMS...)

KH 0 13:12:00.384 Trades '2002217668': order #1974594070 buy 1 / 1 WINQ22 at market done in 58.820 ms

MS 0 13:12:00.401 Trades '2002217668': deal #309453583 buy 1 WINQ22 at 99190 done (based on order #1974594070)

 

Oi Rogerio,


Uso a VPS do MT5 e no log não há outros registros referentes as ordens de compra. Veja no anexo, que acrescentei registros anteriores e posteriores.


Grato,


Nery

Arquivos anexados:
 

Bom dia Rogério,

Qual a opção do ORDER_FILLING você orienta usar, trabalho com as corretoras Rico e Clear ?

Grato,

Nery

 
void Abrir_nova_posicao()
{
 if( !PositionSelect(_symbol) )

 {

//Não estou posicionado e posso abrir posições

 }else   

 {

// Estou posicionado e devo acompanhar meu lucro/prejuízo

 }
}

Isso resolve.

 

Bom dia Adailton,

Eu fazia isso dentro da OnTick e talvez por isso algumas vezes falhasse. Estou fazendo agora numa função fora, como no seu exemplo. Só não entendo a razão da falha, mesmo na OnTick, porque tinha um Sleep(1000/5000), após as operações de compra/venda e antes é feita a verificação se há posição aberta.

Grato pela orientação.

Nery

 
neryfonseca #:

Oi Rogerio,


Uso a VPS do MT5 e no log não há outros registros referentes as ordens de compra. Veja no anexo, que acrescentei registros anteriores e posteriores.


Grato,


Nery

Olá bom dia

se no LOG não aparece a ORDEM DE COMPRA  #1974594060 então ela foi emitida por outra instância do MT5 e não pelo seu EA na VPS.  

OBS: Ao sincronizar o TERMINAL com o VPS o TERMINAL fica  "setado' para não efetuar TRADING ( botão algotrading off) e assim deve ficar, pois senão as ordens serão emitidas no VPS e no TERMINAL.

 
neryfonseca #:

Bom dia Rogério,

Qual a opção do ORDER_FILLING você orienta usar, trabalho com as corretoras Rico e Clear ?

Grato,

Nery

Olá

Nery, eu trabalho com as classes de negociação do MQL5, abaixo segue o código do ajuste do modo de preenchimento que faço no OnInit().

   
int fill = (int)(SymbolInfoInteger(_Symbol, SYMBOL_FILLING_MODE));
cTrade.SetTypeFilling((ENUM_ORDER_TYPE_FILLING)(fill == 0 ? 2 : fill - 1));
Razão: