Problema com ao pegar valor de abertura da posição.

 

Boa tarde pessoal, estou tendo um problema ao pegar o valor de abertura de uma posição e depois adicionar a esse valor um determinado número de ticks (Em baixo tem o código usado). O problema maior é que na minha conta demo funciona tudo certinho, perfeito. Mas na conta real não contabiliza o valor do preço de abertura ao somar com os ticks, então ele tenta usar apenas o valor do tick e da erro 10016-invalid stops. Alguém poderia me ajudar?

No caso abaixo se eu estiver posicionado com o valor de abertura no WIN em 125000, quero acrescentar a esse valor 5 ticks para ser meu TakeProfit, então ficaria 125025. Na conta demo esse código funciona, na conta real ele tenta adicionar como TakeProfit o valor de 25 e aí gera o erro 10016-invalid stops


if(trade.Buy(5, _Symbol, 0.0, 0.0, 0.0))
 { 
   PositionSelect(_Symbol);
   TP = PositionGetDouble(POSITION_PRICE_OPEN) - (SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_SIZE) * 5);
   if(!trade.PositionModify(_Symbol, 0.0, TP))
    {
       Print("Falha ao mudar níveis de TP. ResultRetCode: ", trade.ResultRetcode(), " | ResultRetCodeDescription: ", trade.ResultRetcodeDescription());
    }
 }
Documentação sobre MQL5: Constantes, Enumeradores e Estruturas / Códigos de Erros e Avisos / Códigos de Retorno do Servidor de Negociação
Documentação sobre MQL5: Constantes, Enumeradores e Estruturas / Códigos de Erros e Avisos / Códigos de Retorno do Servidor de Negociação
  • www.mql5.com
Códigos de Retorno do Servidor de Negociação - Códigos de Erros e Avisos - Constantes, Enumeradores e Estruturas - Referência MQL5 - Referência sobre algorítimo/automatização de negociação na linguagem para MetaTrader 5
 
vih6460:


Olá,

você não está acrescentando 5 ticks está subtraindo.

 
Rogerio Giannetti Torres:

Olá,

você não está acrescentando 5 ticks está subtraindo.

Na hora que escrevi o código aqui troquei o sinal, mas no meu código está acrescentando com o sinal certo, e no caso de posição de venda subtraindo, o cálculo de + e - está funcionando, o que não está é chegando o valor de abertura da posição que está vindo como 0.0 na conta real e na conta demo funciona certinho.

 
vih6460:

Na hora que escrevi o código aqui troquei o sinal, mas no meu código está acrescentando com o sinal certo, e no caso de posição de venda subtraindo, o cálculo de + e - está funcionando, o que não está é chegando o valor de abertura da posição que está vindo como 0.0 na conta real e na conta demo funciona certinho.

Olá,

1) Isso acontece em modo AsyncMode .

2) Teste o return code das operações de compra e venda.

3) Use  while(!PositionSelect(_Symbol)) Sleep(5), mesmo que não esteja em  AsyncMode.

4)  Mas não se esqueça que o TP deve ser sempre >= ASK, então eventualmente vai acontecer um 10016 para um valor de TP calculado  "corretamente" ...

 
Rogerio Giannetti Torres:

Olá,

1) Isso acontece em modo AsyncMode .

2) Teste o return code das operações de compra e venda.

3) Use  while(!PositionSelect(_Symbol)) Sleep(5), mesmo que não esteja em  AsyncMode.

4)  Mas não se esqueça que o TP deve ser sempre >= ASK, então eventualmente vai acontecer um 10016 para um valor de TP calculado  "corretamente" ...

Resolveu o problema, acrescentando o laço de repetição com o delay. Muito obrigado pela sua ajuda.