Essayez d'imprimer les valeurs de marginAllot, PercentRisk et pipsToSL pour déterminer d'où vient le nombre négatif. Ma supposition spéculative est que pipsToSL est passé comme un nombre négatif dans certaines circonstances.
NormalizeDouble(posSize,2);
Cette ligne ne fait rien.- N'utilisez JAMAIS NormalizeDouble, JAMAIS. Pour quelque raison que ce soit. C'est une astuce, ne l'utilisez pas.Son utilisation est toujours mauvaise.
- Les SL/TP (stops) doivent être normalisés à la taille du tick(sur les courtiers à 5 chiffres, les stops ne peuvent être placés que sur des valeurs complètes de pip). Comment le savoir dans mql ?-MQL4 forum) et respecter les limites Requirements and Limitations in Making Trades - Appendixes - MQL4 Tutorial and that requires understanding floating point equality Can price != price ? - Forum MQL4
- Seul le prix ouvert pour les ordres en attente doit être ajusté. Sur les devises, Point == TickSize, vous obtiendrez donc la même réponse, mais cela ne fonctionnera pas sur les métaux. Alors faites-le bien : Trailing Bar Entry EA - MQL4 forum ou Bid/Ask : (Pas besoin) d'utiliser NormalizeDouble dans OrderSend - MQL4 forum
- La taille du lot doit également être ajustée à un multiple de LotStep. Si ce n'est pas une puissance de 1/10, NormalizeDouble est une erreur. Faites-le correctement.
Essayez d'imprimer les valeurs de marginAllot, PercentRisk et pipsToSL pour déterminer d'où vient le nombre négatif. Ma supposition spéculative est que pipsToSL est passé comme un nombre négatif dans certaines circonstances.
En fait, j'ai pu trouver quelques endroits dans le reste du code où pipsToSL était incorrectement calculé comme négatif. Merci.
- Cette ligne ne fait rien.
- N'utilisez PAS NormalizeDouble, JAMAIS. Pour n'importe quelle raison. C'est un gadget, ne l'utilisez pas. Son utilisation est toujours mauvaise.
- Les SL/TP (stops) doivent être normalisés à la taille du tick.(Sur les courtiers à 5 chiffres, les stops ne peuvent être placés que sur des valeurs complètes de pip. Comment le savoir dans mql ?-MQL4 forum) et respecter les limites Requirements and Limitations in Making Trades - Appendixes - MQL4 Tutorial and that requires understanding floating point equality Can price != price ? - Forum MQL4
- Seul le prix ouvert pour les ordres en attente doit être ajusté. Sur les devises, Point == TickSize, vous obtiendrez donc la même réponse, mais cela ne fonctionnera pas sur les métaux. Alors faites-le bien : Trailing Bar Entry EA - MQL4 forum ou Bid/Ask : (Pas besoin) d'utiliser NormalizeDouble dans OrderSend - MQL4 forum
- La taille du lot doit également être ajustée à un multiple de LotStep. Si ce n'est pas une puissance de 1/10, NormalizeDouble est une erreur. Faites-le correctement.
J'ai lu que vous aviez déjà posté des messages à ce sujet, mais je n'ai pas compris votre point de vue avant votre tout dernier lien. Merci.
Pourquoi est-ce que j'obtiendrais encore des réponses à plusieurs décimales si j'utilise MathRound() ? J'ai essayé d'utiliser DoubleToString mais cela ne m'a pas aidé du tout. Est-ce que cela est entièrement dû aux limitations de Print() ou y a-t-il un autre problème ?
posSize = posSize * 10; MathRound(posSize); posSize = posSize / 10;
NoLimitations: Pourquoi est-ce que j'obtiendrais encore des réponses à plusieurs décimales si j'utilise MathRound() | MathRound renvoie un double ; nombre infini de décimales. |
NoLimitations : Pourquoi j'obtiens toujours des réponses à plusieurs décimales si j'utilise MathRound() ? | MathRound renvoie un double ; nombre infini de décimales. |
Pas selon la page de documentation de la fonction. https://docs.mql4.com/math/mathround
"Valeur de retour
Valeur arrondie au nombre entier le plus proche".
Si elle est censée le faire mais ne le fait pas, alors MQ doit être notifié, ou ils doivent mettre une étiquette d'avertissement sur la fonction.
JD4 a raison, la page de documentation indique qu'il arrondit au nombre entier le plus proche. Je ne suis pas sûr qu'il existe un autre moyen d'accomplir ce que j'essayais de faire ci-dessus sans arrondir ou couper un certain nombre de décimales. Quel serait l'intérêt de MathRound() ou round() s'ils ne renvoient pas un nombre entier ?
Je viens également d'essayer de l'utiliser, sans succès. Il est possible que le DTS modifie simplement la précision d'une valeur pour l'apparence et non la valeur réelle ? Je ne vois pas d'autres options.
posSize = posSize * 100; DoubleToString(posSize,0); StringToDouble(posSize); posSize = posSize / 100;
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Vous acceptez la politique du site Web et les conditions d'utilisation
Dans ma stratégie, j'utilise une fonction GetPosSize() pour calculer la taille des positions. Pour l'instant, je n'utilise la stratégie qu'avec EURUSD et je n'arrive pas à comprendre pourquoi posSize renvoie une valeur négative, ce qui entraîne une erreur OrderSend 4051. Toute aide serait grandement appréciée. Je vais poster tout le code pertinent ici. Aucun autre calcul vers posSize n'est effectué dans le code, seule la fonction est appelée. Les trois morceaux de code séparés se trouvent dans la fonction.