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
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,
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; }
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!
;)
Apanhei com isso quando comecei...
Segue minha contribuição - direto do meu baú de Libraries:
Abração!
;)
Flávio, obrigado!!! :)
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.
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!!
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
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?