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.
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).
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.
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).
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. [...]
Si vous n'avez pas de compte, veuillez vous inscrire
Autorisez l'utilisation de cookies pour vous connecter au site Web MQL5.com.
Veuillez activer les paramètres nécessaires dans votre navigateur, sinon vous ne pourrez pas vous connecter.
Vous êtes connecté. L'authentification à deux facteurs a été désactivée. Configurez-la à nouveau et scannez un nouveau code QR, ou continuez avec l'authentification à deux facteurs désactivée.
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 ?
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.
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.
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.
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.
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.
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.
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.
[...]
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.