Robo não acerta ordem normaliza preço da ordem para enviar

 

Boa noite a todos,

não achei nada sobre o que estou  procurando,  então abri esse topico, vou tentar ser breve, desenvolvi um robo e a abertura de ordem depende de um calculo que ele faz com os preços, assim sendo, quando o resultado do calculo apresenta o preço dentro do padrão de variação do ativo, ele executa normal, mas quando o resultado fica fora do padrão ele não executa a ordem.

Tentei usar a função NormalizeDouble, para tentar arredondar o valor para o intervalo da  variação mas não deu certo. alguém  poderia me ajudar ?      O ativo em questão é o Mini Indice (B3).

A parte do código que faz a validação e execução da ordem.

Anexo  as imagens, minha primeira postagem, então não sabia muito bem como fazer.

Arquivos anexados:
 
RodolphoR:

Boa noite a todos,

não achei nada sobre o que estou  procurando,  então abri esse topico, vou tentar ser breve, desenvolvi um robo e a abertura de ordem depende de um calculo que ele faz com os preços, assim sendo, quando o resultado do calculo apresenta o preço dentro do padrão de variação do ativo, ele executa normal, mas quando o resultado fica fora do padrão ele não executa a ordem.

Tentei usar a função NormalizeDouble, para tentar arredondar o valor para o intervalo da  variação mas não deu certo. alguém  poderia me ajudar ?      O ativo em questão é o Mini Indice (B3).

A parte do código que faz a validação e execução da ordem.

Anexo  as imagens, minha primeira postagem, então não sabia muito bem como fazer.

Bom dia!


A função abaixo está disponível também na classe SymbolInfo. Utilize essa função em vez de NormalizeDouble()...

//+--------------------------------------------------------------------------------------------------------------------+
//| This function normalizes and adjusts the price to the TICK SIZE                                                    |
//+--------------------------------------------------------------------------------------------------------------------+
double NormalizePrice(double price)
  {
//--- Get the minimal price change
   double tick_size = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_SIZE);

//--- Return the price normalized
   if(tick_size == 0.0)
     {
      return(NormalizeDouble(price, _Digits));
     }

//--- Return the price normalized and adjusted to the TICK SIZE
   return(NormalizeDouble(MathRound(price / tick_size) * tick_size, _Digits));
  }
 
Vinicius de Oliveira #:

Bom dia!


A função abaixo está disponível também na classe SymbolInfo. Utilize essa função em vez de NormalizeDouble()...

Vinicius, bom dia.


Obrigado pela ajuda ! problema Resolvido.

 
RodolphoR #:

Vinicius, bom dia.


Obrigado pela ajuda ! problema Resolvido.

👍