Ordem BuyStop não fecha a posição no take profit enviado.

 

Olá amigos.

Possuo um EA que envia ordens BuyStop e SellStop para comprar ou vender no rompimento da barra anterior, no Ativo WIN$D M1.
Em um total de 24 entradas que meu EA executou, em apenas uma delas ocorreu a seguinte situação:


1         2

A ordem é enviada com seus valores de stop loss e take profit, que são inseridos corretamente. A entrada/tomada de posição é realizada também corretamente, porém o preço atinge e supera o nivel de take profit, mas a saída não é realizada.
Executei o backtest com a seguinte configuração:

3

Envio as ordens somente no inicio de um novo candle, portanto faço um teste para verificar se um novo candle começou:

if (IsNewCandle(rates[0].time)) {
        mTrade.BuyStop(qtdEntrada, vlentrada, vlloss, vlgain1);
}


Configurações da CTrade:

   mTrade.SetTypeFilling(ORDER_FILLING_FOK); //Ou envia todos os lotes ou não envia

   mTrade.SetDeviationInPoints(200.0);


A principio pensei que pudesse ser algo relacionado a modelagem OHLC, porém a ordem de take profit foi colocada juntamente com a ordem de entrada e stop loss, então ela já está posicionada, não fazendo sentido o preço "passar" sobre ela e não executar.

Desde já agradeço quem puder me ajudar.


 

Olá! Uma questão boba que pode ocasionar isso é o tipo de conta, entre Netting e Hedging.

Será que não pode ser isso?

 
Luis Paulo Rodrigues Pastor:

Olá amigos.

Possuo um EA que envia ordens BuyStop e SellStop para comprar ou vender no rompimento da barra anterior, no Ativo WIN$D M1.
Em um total de 24 entradas que meu EA executou, em apenas uma delas ocorreu a seguinte situação:


        

A ordem é enviada com seus valores de stop loss e take profit, que são inseridos corretamente. A entrada/tomada de posição é realizada também corretamente, porém o preço atinge e supera o nivel de take profit, mas a saída não é realizada.
Executei o backtest com a seguinte configuração:



Envio as ordens somente no inicio de um novo candle, portanto faço um teste para verificar se um novo candle começou:


Configurações da CTrade:


A principio pensei que pudesse ser algo relacionado a modelagem OHLC, porém a ordem de take profit foi colocada juntamente com a ordem de entrada e stop loss, então ela já está posicionada, não fazendo sentido o preço "passar" sobre ela e não executar.

Desde já agradeço quem puder me ajudar.


Uma pergunta, acho que o tipo de conta não teria haver. Como estava durante a simulação o lucro/prejuizo? Não lembro todas as condições, mas se ele estava mostrando valor zero durante essas movimentações então diria que esta correto (mesmo claramente errado) o que o simulador fez. Outro ponto, testou trocando o filling para o padrao brasileiro que é o ORDER_FILLING_RETURN?
 
Ricardo Rodrigues Lucca #:
Uma pergunta, acho que o tipo de conta não teria haver. Como estava durante a simulação o lucro/prejuizo? Não lembro todas as condições, mas se ele estava mostrando valor zero durante essas movimentações então diria que esta correto (mesmo claramente errado) o que o simulador fez. Outro ponto, testou trocando o filling para o padrao brasileiro que é o ORDER_FILLING_RETURN?

Olá Ricardo.

Independente se executo somente essa operação (saldo zerado antes da operação), ou se deixo um período maior (saldo diferente de zero antes da operação), o problema acontece.

Sobre modificar para ORDER_FILLING_RETURN, também não resolveu, e o take profit continua sem ser executado.

 
Luis Paulo Rodrigues Pastor #:

Olá Ricardo.

Independente se executo somente essa operação (saldo zerado antes da operação), ou se deixo um período maior (saldo diferente de zero antes da operação), o problema acontece.

Sobre modificar para ORDER_FILLING_RETURN, também não resolveu, e o take profit continua sem ser executado.

Eu não tenho idéia do que pode ser, mas eu olhei os dias aqui que menciona na foto da simulação e nenhum deles bateu com a configuração da foto. Esta a validar o robo em corretora estranheira? Pergunto isso porque elas costumam encerrar em um horario antes do periodo de leilão que o mt5 não consegue interpretar direito e, além disso, elas tem na propriedade do ativo definido stop level minimo diferente de zero (mas acredito que nem deixaria colocar a ordem, então por isso descarto a hipotese e tambem não faria sentido ser só em 1 operação o erro).
 

Algumas perguntas: nenhuma mensagem aparece no log? Isso acontece em outras estratégias? Qual corretora você usa? Sua estratégia é de day trade ou swing trade? O máximo de dados que vc puder passar, melhor.

Se for estratégia de day trade, sugiro usar o símbolo WIN$N ou WIN@N. Salvo engano, o WIN$D faz ajustes por diferença, então seria necessário normalizar os preços de tp/sl para um preço múltiplo da variação mínima do ativo (no caso, tp e sl devem ser múltiplos de 5 para evitar erros). O que posso imaginar é que essa execução esteja dando erro por algo assim, pois em algumas corretoras o ajuste fazia com que os preços não correspondessem a um múltiplo do tick (como é no profit).

Se possível, envie um código com uma estratégia genérica (ex. simples cruzamento de médias, caso vc não queira compartilhar sua estratégia) em que o erro seja reproduzível, assim podemos testar e tentar identificar possíveis condições em que o erro ocorre.

 
Ricardo Rodrigues Lucca #:
Eu não tenho idéia do que pode ser, mas eu olhei os dias aqui que menciona na foto da simulação e nenhum deles bateu com a configuração da foto. Esta a validar o robo em corretora estranheira? Pergunto isso porque elas costumam encerrar em um horario antes do periodo de leilão que o mt5 não consegue interpretar direito e, além disso, elas tem na propriedade do ativo definido stop level minimo diferente de zero (mas acredito que nem deixaria colocar a ordem, então por isso descarto a hipotese e tambem não faria sentido ser só em 1 operação o erro).

 Desculpe, a data em que a situação ocorreu foi 2023-07-05 e não conforme esta no print. Utilizo corretora brasileira e bem conhecida. 

 
Emanuel Amorim #:

Algumas perguntas: nenhuma mensagem aparece no log? Isso acontece em outras estratégias? Qual corretora você usa? Sua estratégia é de day trade ou swing trade? O máximo de dados que vc puder passar, melhor.

Se for estratégia de day trade, sugiro usar o símbolo WIN$N ou WIN@N. Salvo engano, o WIN$D faz ajustes por diferença, então seria necessário normalizar os preços de tp/sl para um preço múltiplo da variação mínima do ativo (no caso, tp e sl devem ser múltiplos de 5 para evitar erros). O que posso imaginar é que essa execução esteja dando erro por algo assim, pois em algumas corretoras o ajuste fazia com que os preços não correspondessem a um múltiplo do tick (como é no profit).

Se possível, envie um código com uma estratégia genérica (ex. simples cruzamento de médias, caso vc não queira compartilhar sua estratégia) em que o erro seja reproduzível, assim podemos testar e tentar identificar possíveis condições em que o erro ocorre.

No log não aparece nenhum erro conforme abaixo. 
A estratégia é de day trade, onde realizo o envio de duas ordens BuyStop separadas, com mesmo StopLoss, e StopGain diferentes.
O problema ocorre tanto na série WIN$N como na WIN$D.
O que pude perceber no testes que continuei realizando é que se coloco um alvo que fique dentro do corpo do candle, a saida no alvo é realizada, mas se coloco um alvo que esteja no pavio superior do candle, o problema acontece.

Por exemplo, este candle (2023-07-05 09:01) tem o fechamento em 120595, e a máxima em 120695, se incluo meu alvo até o valor 120595, a saída é realizada corretamente, se incluo meu alvo como 120600 a saída já não é executada.

Por conta disso acredito se tratar de um problema relacionado a integridade dos dados dos mesmos, mas não sei se da corretora ou da plataforma.


 
Luis Paulo Rodrigues Pastor #:

No log não aparece nenhum erro conforme abaixo. 
A estratégia é de day trade, onde realizo o envio de duas ordens BuyStop separadas, com mesmo StopLoss, e StopGain diferentes.
O problema ocorre tanto na série WIN$N como na WIN$D.
O que pude perceber no testes que continuei realizando é que se coloco um alvo que fique dentro do corpo do candle, a saida no alvo é realizada, mas se coloco um alvo que esteja no pavio superior do candle, o problema acontece.

Por exemplo, este candle (2023-07-05 09:01) tem o fechamento em 120595, e a máxima em 120695, se incluo meu alvo até o valor 120595, a saída é realizada corretamente, se incluo meu alvo como 120600 a saída já não é executada.

Por conta disso acredito se tratar de um problema relacionado a integridade dos dados dos mesmos, mas não sei se da corretora ou da plataforma.


Como tem multiplas operacoes em andamento com stops diferentes eh conta hedging correto? Porque veja, se for conta NETTING o SL e TP sao de uma unica posicao entao nao executou a saida no 120600 porque voce alterou a mesma para 121510 na operacao que entrou por ultimo.

 
Ricardo Rodrigues Lucca #:

Como tem multiplas operacoes em andamento com stops diferentes eh conta hedging correto? Porque veja, se for conta NETTING o SL e TP sao de uma unica posicao entao nao executou a saida no 120600 porque voce alterou a mesma para 121510 na operacao que entrou por ultimo.

Olá Ricardo. Sim, minha conta é Hedge.