Discussione sulla documentazione MQL4 - pagina 17

 
Yurixx:

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?

Non pensavo che stessi aspettando la mia risposta alla domanda. La mia risposta è: non faccio la normalizzazione in questi casi e gli ordini si aprono normalmente. Ma c'è stata una volta in cui ho caricato una storia fatta manualmente e ho cercato di eseguire un tester su di essa - è stato allora che sono rimasto sorpreso. In quasi tutti i casi, la normalizzazione dovrebbe essere usata per ogni evenienza - sia che si tratti di valori di indicatori di tua creazione inseriti nei parametri di prezzo di OrderSend() [ad esempio, tutti i tipi di Pivots] o di calcoli complessi (e non complessi) all'interno dell'EA - in tutti i casi, non puoi rovinare nulla con il burro.

Ma in realtà, non posso dare una formulazione chiara, quando non è assolutamente necessario applicare la normalizzazione dei prezzi in OrderSend(). In linea di principio, una persona notturna si farà un'idea in mezzo anno, ma non c'è bisogno di farsi un'idea, basta normalizzare tutto il tempo.
 
Inoltre, controllando l'helper oggi, ho trovato un gruppo di funzioni sotto Data Conversions:

che forniscono la conversione di dati da un formato in dati di un altro formato.

Particolarmente degna di nota è la funzione NormalizeDouble(), che assicura la precisione richiesta nella rappresentazione dei prezzi. Non è possibile utilizzare prezzi non normalizzati nelle operazioni di trading la cui precisione supera di almeno una cifra quella richiesta dal server di trading.
 
Anche NormalizeDouble

doppio NormalizeDouble( valore doppio, int cifre)
Arrotondamento di un numero in virgola mobile alla precisione specificata.
I valori di StopLoss e TakeProfit calcolati, così come i prezzi di apertura degli ordini pendenti devono essere normalizzati alla precisione, il cui valore è memorizzato nella variabile predefinita Digits.
Parametri:
valore - Valore in virgola mobile.
cifre - Un formato di precisione, il numero di cifre dopo il punto decimale (0-8).
Esempio:
  double var1=0.123456789;
Print(DoubleToStr(NormalizeDouble(var1,5),5));
// output: 0.12346
 
"Esempio:
  doppio var1=0,123456789;
Print(DoubleToStr(NormalizeDouble(var1,5),5));
// uscita: 0,12346".

Questi sono esempi che vorrei vedere nella documentazione. Tutto è semplice e comprensibile. Lo inserisci in un Expert Advisor o in un indicatore e vedi subito il risultato.
 
Vuoi dire come questo?
 

Rosh, per favore guarda la pagina 16 dello stesso forum, ho già scritto su questa funzione e sui suggerimenti per migliorare l'aiuto ad essa.

 
Risolto così per ora (sarà nella nuova build):

doppio NormalizeDouble( valore doppio, int cifre)
Arrotondamento di un numero in virgola mobile alla precisione specificata.
I valori di StopLoss e TakeProfit calcolati, così come i prezzi aperti degli ordini in sospeso devono essere normalizzati alla precisione, il cui valore è memorizzato nella variabile predefinita Digits.

Parametri:
valore - Valore in virgola mobile.
cifre - Un formato di precisione, il numero di cifre dopo il punto decimale (0-8).
Esempio:
 double var1=0.123456789;
Print(DoubleToStr(NormalizeDouble(var1,5),8));
// output: 0.12346000



Questo esempio dimostra il ritaglio tramite NormalizeDouble() a 5 cifre, mentre Print() lo rende semplicemente (scusate lo stile non russo).
 

Sì, l'esempio è diventato significativamente più informativo non appena i numeri di caratteri hanno cominciato a differire.

 
bool SendFTP( nome del file, stringa ftp_path=NULL)
Invia il file all'indirizzo e-mail specificato nella finestra Pubblica. Restituisce FALSE se non ha successo.
La funzione non funziona in modalità test. Anche questa funzione non può essere chiamata dagli indicatori personalizzati.
Il file da inviare deve trovarsi nella cartella terminal_directory\experts\files o nelle sue sottocartelle.
L'invio non viene effettuato se nelle impostazioni non è specificato un indirizzo FTP e/o una password di accesso.
[...]
void SendMail( stringa soggetto, stringa some_text)
Invia un'e-mail all'indirizzo specificato nelle impostazioni della scheda Mail.
L'invio può essere proibito nelle impostazioni, anche l'indirizzo e-mail può non essere specificato. La funzione GetLastError() deve essere chiamata per ottenere le informazioni sull'errore.
[...]

Compito di osservazione: trovare 2 differenze.
 
A quanto pare, bisogna arrendersi per poter buttare via la risposta giusta da dietro le spalle? :)