Position Modify failing. Msg: Invalid stops

 
Trying to modify the SL and TP of a open position with the following code:
            case KEY_S:        
               precoclicado=NormalizeDouble(precoclicado,
_Digits );
               if(posInfo.Select(_Symbol))
               {
                  if(EnumToString(posInfo.PositionType())=="POSITION_TYPE_BUY")   
                     {trade.PositionModify(_Symbol,precoclicado,PositionGetDouble(POSITION_TP));ObjectDelete(0,"nivelAbaixo");break;}
                                 

                  if(EnumToString(posInfo.PositionType())=="POSITION_TYPE_SELL")   
                     {trade.PositionModify(_Symbol,precoclicado,PositionGetDouble(POSITION_TP)); ObjectDelete(0,"nivelAcima");}                                
                }     
               break;

But the position modify command fails, with the following message:

fail msg for position modify

it says: invalid stops, but I am pretty sure those price levels are acceptable. Anyway what solution would you guys suggest of a piece of code to check/look for to a acceptable stop level in the neighborhood of the price that I clicked ?

 

Boa tarde,


O tick do WIN é de 5 pontos, não é possível colocar stops em valores "quebrados" como 106613.

Eu uso o código abaixo para fazer esse ajuste.


double tickSize = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_SIZE);
double precoEntrada = round(PositionGetDouble(POSITION_PRICE_OPEN)/ tickSize) * tickSize;

Ai é só adaptar aos valores que você!

 
Davi Monteiro Fiquer Correa #:

Boa tarde,


O tick do WIN é de 5 pontos, não é possível colocar stops em valores "quebrados" como 106613.

Eu uso o código abaixo para fazer esse ajuste.


Ai é só adaptar aos valores que você!

So complementando, nao eh possivel colocar stops e nem o preco do ativo nesses valores "quebrados" na ordem enviada. Alem disso, uma coisa que aqui no brasil nao fazemos eh checar o stop que queremos colocar contra o stop level do ativo. Vai que voce descobre que sua corretora exige um stop minimo de 100 pts?
 
Davi Monteiro Fiquer Correa #:

Boa tarde,


O tick do WIN é de 5 pontos, não é possível colocar stops em valores "quebrados" como 106613.

Eu uso o código abaixo para fazer esse ajuste.


Ai é só adaptar aos valores que você!

Boa noite, obrigado Davi e Ricardo. Mas se vcs verem os valores que foram rejeitados, entre eles tem o 106870, que deveria ser aceito, pois é redondo...

Na verdade descobri recentemente que o código precisa de mais umas linhas:

//--------isso no começo do codigo:

#include <Trade\SymbolInfo.mqh>         

CSymbolInfo       cSymbol;

//----------------------na OnInit:

  if(!cSymbol.Refresh())

      return(INIT_FAILED);

//---------------------------------------------Na hora de chamar o PositionModify:

precoclicado=cSymbol.NormalizePrice(precoclicado);


Valeeuu