BuyStop com erro na conta Demo Modalmais

 

Olá pessoal,

Não sei se é eu que estou assombrado ou é minha conta Demo Modalmais. Mesmo EA rodando sem interrupção, uma hora ele abre ordens tipo BuyStop outras não, em histórico WIN backtest, mas vejam:

AT está bem superior ao valor atual (mínimo de +80 pontos),

SL está abaixo do AT,

TP está acima do AT...

... aparentemente não era para rejeitar. Abaixo imagem do exato momento que as vezes há erro, vejam, valores ok, gráfico ok, Janela de dados do candle zero (primeiro da direita) também com os valores ok, realmente não sei porque rejeita como "invalid price" se aparentemente os preços estão dentro das regras do BuyStop. E outra coisa, as vezes abre! no candle seguinte pode abrir sem erro, no outro não, e assim vai sucessivamente durante a execução do EA.





Alguém poderia me dar uma ajudinha?

 

Ruy,


Você não deveria estar comprando ao preço corrente 102055?

 
o seu preço de entrada esta errado, o tick do indice é de 5 em 5.. neste caso vc esta pedindo pra comprar em 102142.. não vai aceitar.. precisa aredondar antes de enviar a ordem. abraço
 
Daniel Cousseau:
o seu preço de entrada esta errado, o tick do indice é de 5 em 5.. neste caso vc esta pedindo pra comprar em 102142.. não vai aceitar.. precisa aredondar antes de enviar a ordem. abraço

Puts Daniel, deve ser isso então, vou testar. E interessante que exatamente esse mesmo código fazia testes com a Clear (antes de 30/12/2019) e não rejeitava ordens. Nunca reparei se ela estava arredondando.

Obrigado,

 
Ivan Ronchi:

Ruy,


Você não deveria estar comprando ao preço corrente 102055?

Ivan, se fosse À Mercado sim, mas neste caso eu estou colocando em BuyStop, ou seja, pré-programado para quando atingir o valor desejado.

 
Daniel Cousseau:
o seu preço de entrada esta errado, o tick do indice é de 5 em 5.. neste caso vc esta pedindo pra comprar em 102142.. não vai aceitar.. precisa aredondar antes de enviar a ordem. abraço

Daniel, obrigado!!

Era isso mesmo, arredondei o inteiro para o próximo final 5 ou 0 e deu certo.

Para quem tiver esse mesmo problema e quiser saber como fazer o código para arredondar, apenas fiz um "for":

double FRound(int ValorParaArredondar)  //Arredonda um número inteiro para o próximo final 5 ou 0
{
   double VTemp1=0;
   int VMultiplicador=5;
   for(int x=5;x>0;x--)
   {
      VTemp1=fmod(ValorParaArredondar,VMultiplicador);
      if(VTemp1==0)
         x=0;
      else
         ValorParaArredondar++;
   }
   return ValorParaArredondar;      
}
 
Ruy Christian Hoffmann:

Daniel, obrigado!!

Era isso mesmo, arredondei o inteiro para o próximo final 5 ou 0 e deu certo.

Para quem tiver esse mesmo problema e quiser saber como fazer o código para arredondar, apenas fiz um "for":

Apanhei com isso quando comecei...


Segue minha contribuição - direto do meu baú de Libraries:


//----------------------------------------------------------------------------------------------------------------
// ROUND PRICE TO TICK     Round numbers to the best optimal values of Tick value
//----------------------------------------------------------------------------------------------------------------
double ML_MATH_RoundPriceToTick( double number, double tick ) {
    return  MathRound(number / tick) * tick;
}


Abração!

;)

 
Flavio Jarabeck:

Apanhei com isso quando comecei...


Segue minha contribuição - direto do meu baú de Libraries:



Abração!

;)

Flávio, obrigado!!! :)

 
Ruy Christian Hoffmann:

Flávio, obrigado!!! :)


Bom dia,

Segue minha versão para o mesmo problema.


double CSymbol::NormalizePrice(const double price) const
  {
     if(m_tick_size!=0)
      return(NormalizeDouble(MathRound(price/m_tick_size)*m_tick_size,m_digits));
//---
   return(round(NormalizeDouble(price,m_digits)));
  }

double CSymbol::PriceStep(void)
{
   double price = SymbolInfoDouble(m_symbol, SYMBOL_POINT);
   return price;
}

para usar faço assim:

double targetTake=WS.NormalizePrice(pos.EntryPrice()+WS.PriceStep()*GetObjetivo());
 

Boa tarde Ruy,

veja abaixo nas especificações de WIN$ e WIN$D na XP DEMO,   os valores de TICKSIZE e TICKVALUE, compare com a MODAL DEMO, eu acho que são iguais na duas corretores, OK ?  Mas o que quero lhe dizer é para não usar WIN$ ou WIN@ para otimização, pois os resultados ficam bem distorcidos quando comparados  WIN$D ou WIN@D, cujos TICKSIZE e TICKVALUE estão corretos.

PS: Se você está usando ordem a mercado experimente colocar 0(zero) no preço.



 
Rogerio Giannetti Torres:

Boa tarde Ruy,

veja abaixo nas especificações de WIN$ e WIN$D na XP DEMO,   os valores de TICKSIZE e TICKVALUE, compare com a MODAL DEMO, eu acho que são iguais na duas corretores, OK ?  Mas o que quero lhe dizer é para não usar WIN$ ou WIN@ para otimização, pois os resultados ficam bem distorcidos quando comparados  WIN$D ou WIN@D, cujos TICKSIZE e TICKVALUE estão corretos.

PS: Se você está usando ordem a mercado experimente colocar 0(zero) no preço.



Rogério, caramba, que dica excelente! não sabia dessa do WIN$D e WIN@D, sempre usava o WIN@ ou WIN$.

Nas duas corretoras são iguais sim.

Vou tentar com o valor zero.

Obrigado!!

Razão: