Discussione sulla documentazione MQL4 - pagina 16

 
Yurixx:

E apprezzerei una chiara dichiarazione quando la doppia normalizzazione è necessaria.

Esattamente, qui c'è un evidente malinteso. L'aiuto per questa funzione fornisce un esempio in cui questa funzione è completamente inutile:

doppio NormalizeDouble( valore doppio, int cifre)
Arrotonda il valore in virgola mobile alla precisione data. Restituisce il valore normalizzato del tipo doppio.
I valori di StopLoss e TakeProfit calcolati, così come il prezzo aperto degli ordini in sospeso, devono essere normalizzati con una precisione il cui valore è memorizzato nella variabile predefinita di Digits.
Parametri:
valore - Valore in virgola mobile.
cifre - Formato di precisione, numero di cifre dopo la virgola (0-8).
Campione:
 double var1=0.123456789; Print(DoubleToStr(NormalizeDouble(var1,5),5)); // output: 0.12346

Questa doppia conversione mi ha confuso molto la prima volta che l'ho vista. In effetti, quando viene emesso nel registro dell'Expert Advisor, il

Print( DoubleToStr( var1, 5 ); 
Forse l'esempio con qualche funzione commerciale sarebbe molto più informativo, cioè è lì che la normalizzazione è veramente necessaria. Anche l'esempio con la funzione CompareDoubles() da stdlib.mq4 sarebbe molto informativo (questo è il posto dove i principianti ci passano sopra quasi invariabilmente):

// Функция корректного сравнения двух переменных типа double из библиотеки stdlib.mq4
bool CompareDoubles(double number1,double number2)
{
   if(NormalizeDouble(number1-number2,8)==0) return(true);
   else return(false); 
}
Renat, non è un'opzione?
 
Ora che ne stiamo parlando, vorrei fare una domanda con cui sto lottando da un po' di tempo. Ecco un codice di esempio:
int start()
  {
   double haOpen, haHigh, haLow, haClose;
   if(Bars<=10) return(0);
   ExtCountedBars=IndicatorCounted();
//---- check for possible errors
   if (ExtCountedBars<0) return(-1);
Qual è la differenza fondamentale tra il primo return(0) e il secondo return(-1)?
Come influisce sull'esecuzione di un indicatore (o Expert Advisor)?
Cosa succede quando viene restituito un valore negativo?
E posso scrivere qualcosa come:
void start()
{
  //
  //...
  //
  return;
}
 
Non c'è differenza di principio, perché il valore di ritorno non viene analizzato dal terminale (al momento). In effetti, questo è uno stile di registrazione che aiuta il programmatore stesso a capire che in questo caso c'è una terminazione non standard (valore meno 1) di start().
 
PSmith:
E posso scrivere qualcosa come:
void start()
{
  //
  //...
  //
  return;
}

È così che ho scritto ultimamente, per esempio. :) Inoltre, non uso affatto il ritorno finale. Sembra che da qualche parte nella documentazione sia stato anche detto che in funzioni come void il ritorno finale non è necessario.
 
Ecco un'altra domanda: perché la funzione
doppio iVolume( simbolo stringa, int timeframe, int shift)
restituisce un valore di tipo doppio?
 
Originariamente non era doppio, ma ad un certo punto si è scoperto improvvisamente che il tipo int non è sempre adatto a memorizzare i volumi (per esempio, prendete un timeframe mensile per uno strumento altamente volatile). In questo caso è facile ottenere un errore di overflow.
 

Dalla documentazione (Tipi di dati): Le costanti intere possono assumere valori da -2147483648 a 2147483647. Luglio 2002, EURUSD: numero massimo di tick al mese nella storia, 670000. Ci vorrebbero 3000 mesi, cioè 250 anni, per ottenere un overflow anche con questo volume massimo di tick. D'altra parte, i volumi possono crescere ulteriormente, quindi la cifra non è così irraggiungibile in teoria...

 
Mathemat:

Dalla documentazione (Tipi di dati): Le costanti intere possono assumere valori da -2147483648 a 2147483647. Luglio 2002, EURUSD: numero massimo di tick al mese nella storia, 670000. Ci vorrebbero 3000 mesi, cioè 250 anni, per ottenere un overflow anche con questo volume massimo di tick. D'altra parte, i volumi possono crescere ancora, quindi la cifra non è così irraggiungibile in teoria...


Ho fatto io stesso questa domanda e ho avuto esattamente questa risposta. Anche se è difficile da credere. Ma se metti le quotazioni del mercato azionario in MT4 ...
 
Stesso mese su _DJI - 42228720! Già...
 

Rosh, se ho capito bene il tuo silenzio, non c'è una dichiarazione chiara per quali casi e per quali espressioni/variabili la normalizzazione è necessaria. Se questo è il caso, forse si può rispondere a una domanda più semplice: la normalizzazione dei valori calcolati è della forma

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

O dovrei scoprirlo da solo, in un esperimento?