Problemas no trailing

 

Bom dia amigos, fiz um robô que utiliza o trailing stop, no índice ele funciona perfeitamente, já no dólar esta acusando o seguinte erro:


"2019.02.03 09:59:33.589 2019.01.31 09:00:35   failed modify #2 sell 5.00 WDOH19 sl: 3690.000, tp: 3670.000 -> sl: 3689.990, tp: 3673.500 [Invalid stops]"


O código que modifica a ordem é o seguinte:


cTrade.PositionModify(PositionTicket,NormalizeDouble(CurrentStopLoss-trai*_Point,_Digits),bid-inpTakeProfit);


Agradeço se os amigos experientes puderem ajudar!

 
jdmaster:

Bom dia amigos, fiz um robô que utiliza o trailing stop, no índice ele funciona perfeitamente, já no dólar esta acusando o seguinte erro:


"2019.02.03 09:59:33.589 2019.01.31 09:00:35   failed modify #2 sell 5.00 WDOH19 sl: 3690.000, tp: 3670.000 -> sl: 3689.990, tp: 3673.500 [Invalid stops]"


O código que modifica a ordem é o seguinte:



Agradeço se os amigos experientes puderem ajudar!

O trecho de código que postou não permite avaliar se ha erro na logica do Trailing.

[ ]'s

 
jdmaster:

"2019.02.03 09:59:33.589 2019.01.31 09:00:35   failed modify #2 sell 5.00 WDOH19 sl: 3690.000, tp: 3670.000 -> sl: 3689.990, tp: 3673.500 [Invalid stops]"


Olá JD,

o valor SL não é valido ter obedecer o TickSize que é de 0.500  

 
Joscelino Celso de Oliveira:

O trecho de código que postou não permite avaliar se ha erro na logica do Trailing.

[ ]'s

Olá Joscelino, obrigado pela atenção, sim, de fato, coloquei o código reduzido para facilitar o trabalho, o que acontece é que como nosso amigo Rogério disse o tick é 0.500 e algumas vezes o cálculo para o trailing dá valores que não são múltiplos do tick, por exemplo: 95453 ao invés de 95450. Estou pensando em criar uma função para solucionar o problema, mandei a mensagem no intuito de descobrir se já existe algo pronto que resolva esse problema.


Obrigado.

 
Rogerio Giannetti Torres:


Olá JD,

o valor SL não é valido ter obedecer o TickSize que é de 0.500  

Olá novamente caro Rogério e obrigado mais uma vez pela atenção...


Sim, perfeita colocação, é o problema que ocorre, ele dá números quebrados, por exemplo, ao invés de 95450 ele tenta colocar o 95453, penso em criar uma função para resolver isso, caso não exista alguma ferramenta já pronta.


Obrigado.

 
jdmaster:


Olá,

use a função da classe cSymbol... abaixo um exemplo.

TP=cSymbol.NormalizePrice(inpTakeProfit*Pnt);

SL=cSymbol.NormalizePrice(inpStopLoss*Pnt);


At.te

Rogério

 
Rogerio Giannetti Torres:

Olá,

use a função da classe cSymbol... abaixo um exemplo.

TP=cSymbol.NormalizePrice(inpTakeProfit*Pnt);

SL=cSymbol.NormalizePrice(inpStopLoss*Pnt);


At.te

Rogério

t


Erro


Em azul esta a posição colocada perfeitamente e em vermelho a mudança de posição...

Arquivos anexados:
TRAILING.png  38 kb
 
Rogerio Giannetti Torres:

Olá,

use a função da classe cSymbol... abaixo um exemplo.

TP=cSymbol.NormalizePrice(inpTakeProfit*Pnt);

SL=cSymbol.NormalizePrice(inpStopLoss*Pnt);


At.te

Rogério

Sua sugestão foi perfeita, deu certo, não temos mais valores quebrados, mas perceba que o erro continua....

 
jdmaster:

Sua sugestão foi perfeita, deu certo, não temos mais valores quebrados, mas perceba que o erro continua....

Olá

antes de emitir o modify  tem que garantir que o  SL<Bid e o TP>Ask  

Obs:  Mesmo assim qdo. os stops são muito curtos  ou em momentos de alta volatilidade,  a ordem ao chegar no servidor MT5  o preço já pode ter ultrapassado o SL ou TP.

 
Rogerio Giannetti Torres:

Olá

antes de emitir o modify  tem que garantir que o  SL<Bid e o TP>Ask  

Obs:  Mesmo assim qdo. os stops são muito curtos  ou em momentos de alta volatilidade,  a ordem ao chegar no servidor MT5  o preço já pode ter ultrapassado o SL ou TP.

Boa noite caro Rogério, acredito que é isso mesmo que esteja acontecendo, devido aos stops curtos...mais uma vez, grato pela atenção, é sempre de grande ajuda...