Arredondamento de números em MT4 via NormalizeDouble - página 15

 
pavlick_:
Alguns números só podem ser representados como uma fração infinita, como por exemplo 1/3 no sistema decimal. Mas 1/3 não é uma fração infinita no sistema terciário, aí ele == 0,1. Ou seja, sistemas de números diferentes têm suas próprias frações infinitas. Portanto, uma fração não infinita em decimal pode ser uma fração em binário. Por exemplo: 0,1, 0,2, 0,3, 0,4, ... não têm representação binária exata. Se você ligar para NormalizeDouble dez vezes, será 0,19999999999...1 ou 0,200000...1. Não sei, talvez isto seja novidade.

Você está dizendo a verdade! Para ser claro, ND é necessário SOMENTE para comparação, não para representação. E há muito tempo que é obsoleto.

 
pavlick_:
Alguns números só podem ser representados como frações infinitas, por exemplo, 1/3 no sistema decimal. Mas 1/3 não é uma fração infinita no sistema terciário, aí ele == 0,1. Ou seja, sistemas de números diferentes têm suas próprias frações infinitas. Portanto, uma fração não infinita em decimal pode ser uma fração em binário. Por exemplo: 0,1, 0,2, 0,3, 0,4, ... não têm representação binária exata. Se você ligar para a NormalizeDouble dez vezes, será 0,19999999999...1 ou 0,200000...1. Não sei, talvez isto seja novidade.

Lembro-me disso, mas neste caso é 0+0 e não é 0.

 
transcendreamer:

Lembro-me disso, mas neste caso é 0+0 e não é 0.

Em que caso? Dê-me um exemplo de quando este é o caso.
 
fxsaber:

Você está dizendo a verdade! Para ser claro, ND é necessário SOMENTE para comparação, não para representação. E está há muito tempo obsoleto.

NormalizeDouble só é necessário para normalizar o preço ao fazer pedidos pendentes e paradas. Não é necessário para mais nada.

Isto está claramente indicado na documentação

Os valores calculados de StopLoss e TakeProfit, assim como os valores de preços em aberto para pedidos pendentes, devem ser normalizados com a precisão, cujo valor pode ser obtido por Dígitos().

 
Sergei Vladimirov:
Em que caso em particular? Dê-me um exemplo de quando isso acontece.

isto acontece quando havia 0 na variável e 0 é adicionado a ela

(suspeito que não seja realmente 0)

 
Slawa:

NormalizeDuplo só é necessário para normalizar o preço ao fazer pedidos pendentes e paradas. Não é necessário para mais nada.

Isto está claramente indicado na documentação

Mas que tal comparar números reais...
 
transcendreamer:

isto acontece quando havia 0 na variável e 0 é adicionado a ela

(suspeito que não seja realmente 0)


Exatamente. Os zeros "reais" em adição e subtração permanecem zeros. É por isso que lhes ofereci um exemplo.

 
Alexander Bereznyak:
Que tal comparar números reais...

Um efeito colateral relacionado.

Acabou se revelando conveniente. Mas não se destinava originalmente a ser usado desta forma.

Existem funções especiais para imprimir o número real com a precisão certa.

Diga-me, por que você precisa arredondar números reais nos cálculos? Porque neste caso, a precisão dos cálculos é perdida!

 
Sergei Vladimirov:

Exatamente. Os zeros "reais" em adição e subtração ainda são zeros. É por isso que lhes ofereci um exemplo.

Eu estava começando a adivinhar queNormalizeDouble(new_lot-sum_lots,Lots_Digits); não sai exatamente 0 e armazena alguma cauda
 
Slawa:

NormalizeDuplo só é necessário para normalizar o preço ao fazer pedidos pendentes e paradas. Não é necessário para mais nada.

Isto está claramente indicado na documentação

Obsoleto

Fórum sobre comércio, sistemas automatizados de comércio e testes estratégicos

Implementações alternativas de funções/abordagens padrão

Renat Fatkhullin, 2016.09.02 00:55

Esta não é a maneira de sobrecarregar. As mesmas assinaturas de função.

Mas a idéia é clara - a função da normalização levando em conta a granulação do carrapato.