d'abord vous ne pouvez pas utiliser "exp" pour un int c' est réservé
ensuite tu exprimes le "SL"
SL = MathFloor((iATR(NULL, PERIOD_D1, 7, 0)*MathPow(10,Digits-exp)+1)*0.1);
dans la section init, mauvaise idée
parce que si tu obtiens Error 4066 le "SL" = 0
alors vous obtenez une division par zéro sur "lots".
lots=MoneyRisk/SL/(MarketInfo(Symbol(), MODE_TICKVALUE)*multi);
et l'indicateur s'arrête et vous devez le recharger.
évidemment vous ne pouvez pas éviter la mise à jour ;-) mais vous devez éviter une situation de "zéro divide".
il faut donc vérifier si l'une des variables est égale à 0.... pour éviter le "zero divide".
et parce que vous ne pouvez pas arrêter un indicateur, vous devez trouver une solution.
exemple :
SL = MathFloor((iATR(NULL, PERIOD_D1, 7, 0)*MathPow(10,Digits-exp)+1)*0.1); if (SL == 0) // because error 4066 (for example) { SL = Someting; } lots=MoneyRisk/SL/(MarketInfo(Symbol(), MODE_TICKVALUE)*multi);
Vous avez raison. Je ne peux pas l'éviter :-)
Ce que je voulais dire, c'est que je peux attendre que la mise à jour soit terminée avant de poursuivre le calcul du SL ? Le problème est que je ne peux pas donner à SL une valeur aléatoire car alors l'indicateur entier est inutile. Je voudrais donc vérifier l 'erreur 4066 et si elle se produit, j'aimerais attendre un peu et vérifier à nouveau avant de continuer.
D'ailleurs, j'ai le même problème avec cet indicateur. Mais pourquoi n'était-ce pas un problème dans l'"ancien" MetaTrader ? Ici, je reçois toujours un zéro pour l'ATR(5). POURQUOI ? !?! Cela n'est jamais arrivé avant.. Je déteste ce nouveau MetaTrader... !
int start() //---- { double Spread = MarketInfo(Symbol(), MODE_SPREAD); double ATR = iATR(NULL, PERIOD_D1, 5, 0); int exp1 = 0; if (Digits==5 || Digits==3) { Spread=Spread*0.1; exp1 = 1; } Comment ( "ADR(5): ",DoubleToStr(ATR*MathPow(10,Digits-exp1),1), " || TODAY: ",(iHigh(NULL, PERIOD_D1, 0)-iLow(NULL, PERIOD_D1, 0))*MathPow(10,Digits-exp1), " || ", DoubleToStr(((iHigh(NULL, PERIOD_D1, 0)-iLow(NULL, PERIOD_D1, 0))*MathPow(10,Digits-exp1)/(ATR*MathPow(10,Digits-exp1))*100), 2), "%", "\n" + "SPREAD: ", Spread, " || RATIO: ",DoubleToStr((Spread/ATR)*MathPow(10,-(Digits-exp1-2)), 2),"%" ); //---- return(0); }
Je pense avoir trouvé le problème ! Il s'agit bien d'un problème de mise à jour. Lorsque je change maintenant de devise, l'indicateur fonctionne. Mais ensuite, j'ai ouvert une paire de devises que je n'avais pas encore ouverte aujourd'hui. J'ai alors reçu ce message :
Vous devez mettre quelque chose comme
if(number==0)dothis; else dothis;
dans ShowSpread.mq4
Cherchez la ligne où cette division par zéro se produit.
Je pense avoir trouvé le problème ! Il s'agit bien d'un problème de mise à jour. Lorsque je change maintenant de devise, l'indicateur fonctionne. Mais ensuite, j'ai ouvert une paire de devises que je n'avais pas encore ouverte aujourd'hui. J'ai alors reçu ce message :
angevoyageur, je pense que vous n'avez pas vu ce message de ma part :
Vous avez raison. Je ne peux pas l'éviter :-)
"Ce que je voulais dire, c'est que je peux attendre que la mise à jour soit terminée avant de poursuivre le calcul de la SL. Le problème est que je ne peux pas donner à SL une valeur aléatoire car alors l'indicateur entier est inutile. Je voudrais donc vérifier l'erreur 4066 et si elle se produit, je voudrais attendre un peu et vérifier à nouveau avant de continuer."
Là, vous pouvez voir que décrit que je ne peux pas suivre le conseil et parce que je suis arrivé à cette solution, vous pouvez également voir que j'ai définitivement vérifié ce que qjol m'a conseillé.
- 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
Salut les codeurs,
J'ai fait un petit indicateur Moneymanagement qui a bien fonctionné pour moi. Mais depuis le nouveau MQL4, il pose des problèmes que je ne peux pas gérer.
Lorsque vous faites glisser cet indicateur sur votre graphique, quelques chiffres sont imprimés sur le côté droit. Le premier nombre signifie le Stoploss en pips et le second est la taille du lot. Dans les options, vous pouvez choisir le risque. Les autres nombres sont les niveaux de Stoploss. Mais lorsque je change de paire de devises, les chiffres ont disparu. À la place, je vois plusieurs fois le mot "Label". Et quand je regarde dans la liste des indicateurs, mon indicateur a également disparu. Donc, en résumé, après avoir changé la paire de devises, l'indicateur a disparu et a laissé des étiquettes à la place des chiffres.
Je suis totalement confus. Cet indicateur fonctionnait auparavant sans aucun problème. Une aide est très appréciée.
Voici le code :