Discussion sur la documentation de MQL4 - page 17

 
Yurixx:

Rosh, si je comprends bien votre silence, il n'y a pas de déclaration claire pour quels cas et pour quelles expressions/variables la normalisation est nécessaire. Si c'est le cas, on peut peut-être répondre à une question plus simple : la normalisation des valeurs calculées est-elle de la forme

int StLs=25 ;
double prc = Demande + StLs*Point ;

Ou dois-je le découvrir par moi-même, dans le cadre d'une expérience ?

Je ne pensais pas que vous attendiez ma réponse à la question. Ma réponse est la suivante : je ne fais pas de normalisation dans ces cas-là et les ordres s'ouvrent normalement. Mais il y a eu un moment où j'ai chargé un historique fait manuellement et où j'ai essayé d'exécuter un testeur dessus - c'est là que j'ai été surpris. Dans presque tous les cas, la normalisation doit être utilisée au cas où - qu'il s'agisse de valeurs d'indicateurs de votre propre fabrication insérées dans les paramètres de prix de OrderSend() [par exemple, toutes sortes de Pivots] ou de calculs complexes (et non complexes) à l'intérieur de l'EA - dans tous les cas, on ne peut rien gâcher avec du beurre.

Mais vraiment, je ne peux pas donner une formulation claire, quand il est absolument inutile d'appliquer la normalisation des prix dans OrderSend(). En principe, une personne de nuit s'y retrouvera en six mois, mais il n'est pas nécessaire de s'y retrouver, il suffit de le normaliser en permanence.
 
Par ailleurs, en vérifiant l'aide aujourd'hui, j'ai trouvé un groupe de fonctions sous Conversions de données:

qui permettent de convertir des données d'un format en données d'un autre format.

La fonction NormalizeDouble(), qui garantit la précision requise de la représentation des prix, est particulièrement intéressante. Vous ne pouvez pas utiliser, dans les opérations de trading, des prix non normalisés dont la précision dépasse d'au moins un chiffre la précision requise par le serveur de trading.
 
Aussi NormalizeDouble

double NormalizeDouble( double valeur, int chiffres)
Arrondir un nombre à virgule flottante à la précision spécifiée.
Les valeurs calculées de StopLoss et TakeProfit, ainsi que les prix d 'ouverture des ordres en attente doivent être normalisés à la précision, dont la valeur est stockée dans la variable prédéfinie Digits.
Paramètres :
valeur - Valeur à virgule flottante.
chiffres - Un format de précision, le nombre de chiffres après le point décimal (0-8).
Exemple :
  double var1=0.123456789 ;
Print(DoubleToStr(NormalizeDouble(var1,5),5)) ;
// résultat : 0.12346
 
"Exemple :
  double var1=0.123456789 ;
Print(DoubleToStr(NormalizeDouble(var1,5),5)) ;
// sortie : 0.12346".

Ce sont des exemples que j'aimerais voir dans la documentation. Tout est simple et compréhensible. Vous l'insérez dans un conseiller expert ou un indicateur et voyez le résultat immédiatement.
 
Tu veux dire comme ça ?
 

Rosh, veuillez consulter la page 16 du même forum, j'ai déjà écrit sur cette fonction et des suggestions pour améliorer l'aide qui lui est apportée.

 
Corrigé pour le moment (sera dans la nouvelle version) :

double NormalizeDouble( double valeur, int chiffres)
Arrondir un nombre à virgule flottante à la précision spécifiée.
Les valeurs calculées de StopLoss et TakeProfit, ainsi que les prix ouverts des ordres en attente doivent être normalisés à la précision, dont la valeur est stockée dans la variable prédéfinie Digits.

Paramètres :
valeur - Valeur à virgule flottante.
chiffres - Un format de précision, le nombre de chiffres après le point décimal (0-8).
Exemple :
 double var1=0.123456789 ;
Print(DoubleToStr(NormalizeDouble(var1,5),8)) ;
// résultat : 0.12346000



Cet exemple démontre l'écrêtage via NormalizeDouble() à 5 chiffres, tandis que Print() rend simplement (désolé pour ce style non russe).
 

Oui, l'exemple est devenu nettement plus informatif dès que les nombres de caractères ont commencé à différer.

 
bool SendFTP( string filename, string ftp_path=NULL)
Envoie le fichier à l'adresse e-mail spécifiée dans la fenêtre de publication. Renvoie FALSE en cas d'échec.
La fonction ne fonctionne pas en mode test. Cette fonction ne peut pas non plus être appelée à partir des indicateurs personnalisés.
Le fichier à envoyer doit être situé dans le dossier terminal_directory\experts\files ou ses sous-dossiers.
L'envoi n'est pas effectué si aucune adresse FTP et/ou aucun mot de passe d'accès n'est spécifié dans les paramètres.
[...]
void SendMail( string subject, string some_text)
Envoie un e-mail à l'adresse spécifiée dans les paramètres de l'onglet Courrier.
L'envoi peut être interdit dans les paramètres, de même que l'adresse électronique peut ne pas être spécifiée. La fonction GetLastError() doit être appelée pour obtenir les informations sur les erreurs.
[...]

Tâche d'observation : trouver 2 différences.
 
Apparemment, il faut abandonner pour pouvoir jeter la bonne réponse derrière son dos ? :)
Raison: