Duplicidade de ordens

caio andrade  

Prezados, boa noite, gostaria de uma ajuda com esse problema de execução que estou tendo e gostaria de opiniões para solucionar

Vou detalhar os acontecimentos para identificação de brechas na execução:

1 º - Hoje por volta das 06:30 abri o meta, abri o grafico de Mils3, coloquei no prazo de operação, inseri o EA, habilitei ele para realizar operações e alterar o sinal, configurei os parametros e dei "ok";

2º - repeti o processo para os demais ativos com números magicos diferentes;

3º - Eu acompanho as operações pelo celular, não consigo acompanhar pelo computador;

4º - por volta das 09:00 pelo meta do celular eu vejo que ele já plotou as ordens no grafico e estão como "placed".

OBS: Nesse momento todas as ordens batem e constam somente 01 ordem para cada ativo que foi inserido, porem o preço de entrada está baseado em D+2, exemplo:

Hoje é 04/11, quando o EA plota a ordem ele entende que o fechamento anterior é 02/11, pois o dia 04/11 ainda não iniciou. E para estrategia o preço de entrada para 04/11 é o fechamento do dia 03/11

5º - Por volta das 10h que é o horario que abre o mercado avista que acontece a duplicidade de ordens

OBS: Eu, leigo, acredito que seja no momento em que o EA por exemplo vai alterar de "buy limit" para "buy stop", dependendo da abertura do dia atual, e nesse momento as 02 ordens são executadas.

O EA utiliza o preço de fechamento do ultimo candle para calcular a entrada para o dia atual e só deveria realizar 01 operação por dia.

Sugestão, e vejam se faz sentido e se é possivel:

o EA só enviar a ordem 01 segundo após a identificação do primeiro tick do dia atual.

Exemplo

- Hoje é 04/11/2022, o primeiro tick do dia foi as 10h 01min e 05s (10:01:05)

- O EA irá calcular a entrada de hoje 04/11, ás 10h 01min e 06s (10:01:05), seguindo os parâmetros configurados.

OBS: se o 1º tick do dia for em cima do preço de entrada (baseado no fechamento anterior) a ordem será "limit"; ou, se o 1º tick do dia for a baixo do preço de entrada (baseado no fechamento anteriro) a ordem será "stop".

Agradeço desde já.

Ricardo Almeida Branco  
caio andrade:

Prezados, boa noite, gostaria de uma ajuda com esse problema de execução que estou tendo e gostaria de opiniões para solucionar

Vou detalhar os acontecimentos para identificação de brechas na execução:

1 º - Hoje por volta das 06:30 abri o meta, abri o grafico de Mils3, coloquei no prazo de operação, inseri o EA, habilitei ele para realizar operações e alterar o sinal, configurei os parametros e dei "ok";

2º - repeti o processo para os demais ativos com números magicos diferentes;

3º - Eu acompanho as operações pelo celular, não consigo acompanhar pelo computador;

4º - por volta das 09:00 pelo meta do celular eu vejo que ele já plotou as ordens no grafico e estão como "placed".

OBS: Nesse momento todas as ordens batem e constam somente 01 ordem para cada ativo que foi inserido, porem o preço de entrada está baseado em D+2, exemplo:

Hoje é 04/11, quando o EA plota a ordem ele entende que o fechamento anterior é 02/11, pois o dia 04/11 ainda não iniciou. E para estrategia o preço de entrada para 04/11 é o fechamento do dia 03/11

5º - Por volta das 10h que é o horario que abre o mercado avista que acontece a duplicidade de ordens

OBS: Eu, leigo, acredito que seja no momento em que o EA por exemplo vai alterar de "buy limit" para "buy stop", dependendo da abertura do dia atual, e nesse momento as 02 ordens são executadas.

O EA utiliza o preço de fechamento do ultimo candle para calcular a entrada para o dia atual e só deveria realizar 01 operação por dia.

Sugestão, e vejam se faz sentido e se é possivel:

o EA só enviar a ordem 01 segundo após a identificação do primeiro tick do dia atual.

Exemplo

- Hoje é 04/11/2022, o primeiro tick do dia foi as 10h 01min e 05s (10:01:05)

- O EA irá calcular a entrada de hoje 04/11, ás 10h 01min e 06s (10:01:05), seguindo os parâmetros configurados.

OBS: se o 1º tick do dia for em cima do preço de entrada (baseado no fechamento anterior) a ordem será "limit"; ou, se o 1º tick do dia for a baixo do preço de entrada (baseado no fechamento anteriro) a ordem será "stop".

Agradeço desde já.

Boa noite .

A primeira pergunta acho que é: "Quem programou o EA?". Para entender pq ele está funcionando assim, só vendo o código...

Mas tenho outras perguntas... Uma me parece ser a respeito da corretora... Se a negociação das ações começa às 10 horas, como ela aceita uma ordem as 9 horas? Nunca acompanhei ações, então não sei se todas as corretoras trabalham assim.

Uma possível solução seria colo ar um limitador de horário, para ele não colocar as ordens antes das 10;00, isso resolveria, no seu ponto de vista?

Outra opção seria ver se o ativo está em leilão e se estiver não colocar a ordem. Acho que as 9 horas ele estará em leilão...

Responda essas perguntas e vamos ver se eu ou outra pessoa consegue ir ajudando.

Abs

PS: se o EA estiver trabalhando no onTick e ele colocou uma ordem as 9:00 é pq ele identificou alguma mudança que ativa o onTick (mudança de preço, de lotes, de ordens pendentes).
caio andrade  
Ricardo Branco #:
Boa noite .

A primeira pergunta acho que é: "Quem programou o EA?". Para entender pq ele está funcionando assim, só vendo o código...

Mas tenho outras perguntas... Uma me parece ser a respeito da corretora... Se a negociação das ações começa às 10 horas, como ela aceita uma ordem as 9 horas? Nunca acompanhei ações, então não sei se todas as corretoras trabalham assim.

Uma possível solução seria colo ar um limitador de horário, para ele não colocar as ordens antes das 10;00, isso resolveria, no seu ponto de vista?

Outra opção seria ver se o ativo está em leilão e se estiver não colocar a ordem. Acho que as 9 horas ele estará em leilão...

Responda essas perguntas e vamos ver se eu ou outra pessoa consegue ir ajudando.

Abs

PS: se o EA estiver trabalhando no onTick e ele colocou uma ordem as 9:00 é pq ele identificou alguma mudança que ativa o onTick (mudança de preço, de lotes, de ordens pendentes).

Ricardo, boa noite e obrigado pela ajuda.

Contratei um programador aqui pelo meta mesmo.

Exatamente, talvez isso só ocorra a pois a corretora deve liberar o envio de ordens no mercado a vista a partir desse horário/momento mencionado, até pq no log aparece essa informação, "negocio aceito" ou algo do tipo.

A melhoria que foi implementada no código é essa que comentei, só enviar a ordem assim que o ocorrer o primeiro tick do dia, ai segunda feira agora vou testar e ver se vai ocorrer essa mudança ou duplicidade.

O limitador de Horário tbm é uma opção viável, mas espero que essa melhoria do primeiro tick resolva.

void OnTick() { if(IsTimeToClose(in_time_to_close)) { CloseAll(in_magic,Symbol()); return; } if(IsNewBar()) OnBar();

Ricardo Rodrigues Lucca  
caio andrade #:

Ricardo, boa noite e obrigado pela ajuda.

Contratei um programador aqui pelo meta mesmo.

Exatamente, talvez isso só ocorra a pois a corretora deve liberar o envio de ordens no mercado a vista a partir desse horário/momento mencionado, até pq no log aparece essa informação, "negocio aceito" ou algo do tipo.

A melhoria que foi implementada no código é essa que comentei, só enviar a ordem assim que o ocorrer o primeiro tick do dia, ai segunda feira agora vou testar e ver se vai ocorrer essa mudança ou duplicidade.

O limitador de Horário tbm é uma opção viável, mas espero que essa melhoria do primeiro tick resolva.

void OnTick() { if(IsTimeToClose(in_time_to_close)) { CloseAll(in_magic,Symbol()); return; } if(IsNewBar()) OnBar();

Acredito que voce vai ter ainda o mesmo problema com a solução do primeiro tick e no horario. O que parece estar acontecendo com as ordens duplicadas na minha opinião é a não previsão do leilão. O que quero dizer com isso, quem programou colocou a ordem limit em digamos 7.22 e dai ela foi executada a 7.2. Como o robo desconhece essa ordem ele ignora e coloca outra. Outra possibilidade, seria que a corretora demora um pouco para responder que a compra foi efetivada, isso é, a ordem que tava placed foi transformada em filled. Mas a posição ser criada demora digamos 1 minuto (seja la por qual motivo) e nesse intervalo o robo abre nova ordem porque não tem a posição e não teria uma ordem aguardando...
caio andrade  
Ricardo Rodrigues Lucca #:
Acredito que voce vai ter ainda o mesmo problema com a solução do primeiro tick e no horario. O que parece estar acontecendo com as ordens duplicadas na minha opinião é a não previsão do leilão. O que quero dizer com isso, quem programou colocou a ordem limit em digamos 7.22 e dai ela foi executada a 7.2. Como o robo desconhece essa ordem ele ignora e coloca outra. Outra possibilidade, seria que a corretora demora um pouco para responder que a compra foi efetivada, isso é, a ordem que tava placed foi transformada em filled. Mas a posição ser criada demora digamos 1 minuto (seja la por qual motivo) e nesse intervalo o robo abre nova ordem porque não tem a posição e não teria uma ordem aguardando...

Então, identificamos que a partir do momento que a corretora aceita ordens o EA já envia, porém quando inicia o novo dia ele precisa recalcular as entradas e alterar de buylimit para buystop ou vice versa, enfim, já alteramos e agora o EA só envia ordem a partir do momento que recebe um novo tick do grafico e não mais do book de ofertas.

Estou testando e tem dado certo.

Qualquer outra fragilidade me informe, quanto mais seguro melhor.

Obrigado pelas informações.

Abraços.

Razão: