Como é que passo por uma enumeração de forma consistente? - página 4

 
fxsaber:
Quase quatro vezes mais rápido que o normal NormalizeDouble (construir 1395)... é uma muleta dos criadores.

O que é quase quatro vezes mais rápido? Mostre-me o código!
 
Também estou surpreendido com as 4 vezes...
E não é realmente claro como é que as matrizes ou o interruptor caem lá em baixo. É pura matemática.
 
Dmitry Fedoseev:
O que é quase quatro vezes mais rápido? Dê-me o código!
Não há como saber quantos dias na base de código para inspecção. O verificador deve estar de férias.
 
fxsaber:
No kodobaza para uma inspecção durante um número desconhecido de dias. O inspector está provavelmente de férias.
Penso que começaram a publicá-lo hoje. Talvez eles também venham até nós ))))
 
Ihor Herasko:
Penso que começaram a publicá-lo hoje. Talvez eles também nos alcancem ))))
Conseguiu-o. Não tenho.
 
Dmitry Fedoseev:
O que é quase 4 vezes mais rápido? Código, por favor!

https://www.mql5.com/ru/code/16169

// Почти в четыре раза быстрее соответствующей стандартной функции (build 1395)
#define NormalizeDouble PRICE_COMPARE::MyNormalizeDouble
Price_Compare
Price_Compare
  • votos: 1
  • 2016.08.25
  • fxsaber
  • www.mql5.com
Изящное и шустрое сравнение double-значений "цены".
 

Tenha cuidado ao utilizar esta função, ela funcionará correctamente numa gama de valores menor do que a NormalizeDouble.

Não vou explicar porquê - adivinhe por si mesmo.

A função "NormalizeDouble" funciona:

  1. A parte inteira é seleccionada - I
  2. A parte fracionária é seleccionada - F
  3. F = F * 10^digitos
  4. F = F (+ ou - dependendo do sinal) 0,5
  5. F = (parte inteira de F) / 10^digitos
  6. resultado = I + F
 
Tudo considerado, não houve sensação.
 
Ilyas:

Tenha cuidado ao utilizar esta função, ela funcionará correctamente numa gama de valores menor do que a NormalizeDouble.

Não vou explicar porquê - adivinhe por si mesmo.

A função "NormalizeDouble" funciona:

  1. A parte inteira é detectada - I
  2. A parte fracionária é seleccionada - F
  3. F = F * 10^digitos
  4. F = F (+ ou -, dependendo do sinal) 0,5
  5. F = (parte inteira de F) / 10^digitos
  6. resultado = I + F

A descrição da função contém a seguinte nota

Osvalores calculados de StopLoss e TakeProfit, bem como os valores dos preços em aberto para encomendas pendentes devem ser normalizados com a exactidão que pode ser obtida porDígitos().

Isto só é verdade para símbolos que têm um preço mínimo de 10^N, onde N é um número inteiro e não positivo. Se a etapa de preço mínimo tiver um valor diferente, então a normalização dos níveis de preços antes da OrderSend é uma operação sem sentido, o que na maioria dos casos resultará no retorno de OrderSend falso.


É uma boa ideia corrigir representações desactualizadas na ajuda.

NormalizeDouble está completamente desacreditado. Não só a implementação é retardada, como também não faz sentido em múltiplos símbolos de troca (por exemplo, RTS, MIX, etc.).

Quanto à implementação alternativa apresentada, é tão exacta como a original, tanto para o positivo como para o negativo. E faz o arredondamento da mesma forma. Só funciona 4 vezes mais rápido.

 
fxsaber:

Isto só é verdade para personagens que têm um preço mínimo de 10^N, onde N é um número inteiro e não positivo. Se a etapa de preço mínimo tiver um valor diferente, então a normalização dos níveis de preços antes da OrderSend é uma operação sem sentido, o que na maioria dos casos causará a devolução da OrderSend falsa.

Porque deveria?