Discussão sobre a documentação MQL4 - página 16

 
Yurixx:

E eu apreciaria uma declaração clara quando a dupla normalização for necessária.

Exatamente, há aqui um mal-entendido óbvio. A ajuda para esta função dá um exemplo onde esta função é completamente inútil:

duplo NormalizeDuplo( valor duplo, dígitos int)
Arredonda o valor do ponto flutuante para a precisão dada. Retorna valor normalizado do tipo duplo.
Os valores calculados de StopLoss e TakeProfit, assim como o preço em aberto das ordens pendentes devem ser normalizados com uma precisão cujo valor é armazenado na variável pré-definida de Dígitos.
Parâmetros:
valor - Valor do ponto flutuante.
dígitos - Formato de precisão, número de dígitos após a vírgula decimal (0-8).
Amostra:
 double var1=0,123456789; Print(DoubleToStr(NormalizeDouble(var1,5),5)); // saída: 0,12346

Esta dupla conversão foi muito confusa para mim na primeira vez que a vi. Na verdade, ao emitir o código no log do Expert Advisor, o

Print( DoubleToStr( var1, 5 ); 
Talvez o exemplo com alguma função comercial seja muito mais informativo, ou seja, é lá onde a normalização é realmente necessária. O exemplo com a função CompareDoubles() da stdlib.mq4 também seria muito informativo (este é o lugar onde os iniciantes pisam quase invariavelmente):

// Функция корректного сравнения двух переменных типа double из библиотеки stdlib.mq4
bool CompareDoubles(double number1,double number2)
{
   if(NormalizeDouble(number1-number2,8)==0) return(true);
   else return(false); 
}
Renat, isso não é uma opção?
 
Agora que estamos falando sobre isso, gostaria de fazer uma pergunta com a qual tenho lutado há algum tempo. Aqui está um código de amostra:
int start()
  {
   double haOpen, haHigh, haLow, haClose;
   if(Bars<=10) return(0);
   ExtCountedBars=IndicatorCounted();
//---- check for possible errors
   if (ExtCountedBars<0) return(-1);
Qual é a diferença fundamental entre o primeiro retorno(0) e o segundo retorno(-1)?
Como isso afeta a execução de um indicador (ou Expert Advisor)?
O que acontece quando um valor negativo é devolvido?
E posso escrever algo como:
void start()
{
  //
  //...
  //
  return;
}
 
Não há diferença de princípio, pois o valor de retorno não é analisado pelo terminal (no momento). Na verdade, este é um estilo de gravação que ajuda o próprio programador a entender que neste caso há uma terminação não padrão (valor menos 1) de início().
 
PSmith:
E posso escrever algo como:
void start()
{
  //
  //...
  //
  return;
}

É assim que venho escrevendo ultimamente. :) Além disso, eu nem sequer uso o retorno final. Parece que em algum lugar na documentação foi até mesmo dito que em funções como retorno final nulo não é necessário.
 
Aqui está outra pergunta: por que a função
duplo iVolume( símbolo de corda, int timeeframe, int shift)
retorna valor do tipo duplo?
 
Originalmente, não era o dobro, mas em algum momento, de repente, verificou-se que o tipo int nem sempre é adequado para o armazenamento de volumes (por exemplo, tomar um cronograma mensal para um instrumento altamente volátil). Neste caso, é fácil obter um erro de transbordo.
 

Da documentação (Tipos de dados): constantes inteiras podem assumir valores de -2147483648 a 2147483647. Julho de 2002, EURUSD: número máximo de carrapatos por mês na história, 670000. Levaria 3000 meses, ou seja, 250 anos, para obter um transbordo mesmo com este volume máximo de carrapato. Por outro lado, os volumes podem crescer ainda mais, por isso a figura não é tão inatingível teoricamente...

 
Mathemat:

Da documentação (Tipos de dados): constantes inteiras podem assumir valores de -2147483648 a 2147483647. Julho de 2002, EURUSD: número máximo de carrapatos por mês na história, 670000. Levaria 3000 meses, ou seja, 250 anos, para obter um transbordo mesmo com este volume máximo de carrapato. Por outro lado, os volumes podem crescer ainda mais, por isso a figura não é tão inatingível teoricamente...


Eu mesmo fiz essa pergunta e obtive exatamente essa resposta. Apesar de ser difícil de acreditar. Mas se você colocar cotações da bolsa de valores na MT4 ...
 
Mesmo mês em _DJI - 42228720! Sim...
 

Rosh, se eu entendi corretamente seu silêncio, não há uma declaração clara para quais casos e para quais expressões/variáveis a normalização é necessária. Se este for o caso, talvez uma pergunta mais simples possa ser respondida: é a normalização dos valores calculados da forma

int StLs=25;
duplo prc = Ask + StLs*Point;

Ou devo descobrir isso por conta própria, em uma experiência?

Razão: