BuyStop com erro na conta Demo Modalmais

Para adicionar comentários, por favor Faça o login ou registrar
Ruy Christian Hoffmann
707
Ruy Christian Hoffmann  

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?

Ivan Ronchi
340
Ivan Ronchi  

Ruy,


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

Gabriel ...
895
Gabriel ...  
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
Ruy Christian Hoffmann
707
Ruy Christian Hoffmann  
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,

Ruy Christian Hoffmann
707
Ruy Christian Hoffmann  
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.

Ruy Christian Hoffmann
707
Ruy Christian Hoffmann  
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;      
}
Flavio Jarabeck
130711
Flavio Jarabeck  
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!

;)

Ruy Christian Hoffmann
707
Ruy Christian Hoffmann  
Flavio Jarabeck:

Apanhei com isso quando comecei...


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



Abração!

;)

Flávio, obrigado!!! :)

Jonathan Pereira
962
Jonathan Pereira  
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());
Rogerio Giannetti Torres
3139
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.



Ruy Christian Hoffmann
707
Ruy Christian Hoffmann  
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!!

12
Para adicionar comentários, por favor Faça o login ou registrar