Petit indicateur de gestion de l'argent ruiné par le nouveau MQL4 - page 3

 
mar:

angevoyageur, je pense que vous n'avez pas vu ce message de ma part :

mar 2014.04.02 08:16 #

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 aussi voir que j'ai bien vérifié ce que qjol m'a conseillé.

Non, vous ne le faites pas, qjol a écrit :

donc tu dois vérifier si une des variables est égale à 0.... en cas d'éviter le zero divide.

Et vous signalez une erreur de division par zéro après cela. Mais c'est comme vous le souhaitez.

 
mar:

Un autre exemple :

Si vous ouvrez le MetaTrader, le résultat sera zéro ! Et il reste nul jusqu'à ce que vous changiez d'horizon temporel ou de paire. Je pense que c'est exactement le problème de l'erreur de division par zéro. Ne pensez-vous pas aussi ?

Avez-vous essayé pendant le week-end, lorsqu'il n'y avait pas de ticks entrants ? C'est la seule raison à laquelle je pense pour que le commentaire ne soit pas mis à jour.
 
GumRai:

Avez-vous essayé pendant le week-end, lorsqu'il n'y avait pas de ticks entrants ? C'est la seule raison pour laquelle je pense que le commentaire n'a pas été mis à jour.

C'est la même chose ici. Pas de tic, pas de mise à jour.
 

Non, j'ai essayé aujourd'hui. De nombreux ticks arrivent, mais pas de mise à jour de AccountBalance. J'ai attendu presque une minute mais AccountBalance était toujours zéro.


Le fait est que ce problème ne s'est jamais produit au cours des dernières années. Depuis que le nouveau MetaTrader a été mis en place, ce problème existe. Je ne pense donc pas que cela ait quelque chose à voir avec le code. Il doit y avoir des changements internes dans la plate-forme elle-même qui fait échouer ce code. Et cet indicateur est seulement une ligne de commentaire et il échoue. Donc ça doit être un problème de plateforme/données.

 
mar:

Non, je l'ai essayé aujourd'hui. De nombreux ticks arrivent, mais pas de mise à jour de AccountBalance. J'ai attendu presque une minute mais AccountBalance était toujours zéro.


Le fait est que ce problème ne s'est jamais produit au cours des dernières années. Depuis que le nouveau MetaTrader a été mis en place, ce problème existe. Je ne pense donc pas que cela ait quelque chose à voir avec le code. Il doit y avoir des changements internes dans la plate-forme elle-même qui fait échouer ce code. Et cet indicateur est seulement une ligne de commentaire et il échoue. Donc ça doit être un problème de plateforme/données.


Etes-vous sûr que l'indicateur est exactement le même que le code que vous avez posté ?

Il semble que vous vérifiez un indicateur qui a le code d'une ligne dans init et non dans start.

 

j'ai déjà répondu à toutes vos questions (y compris la future question concernant ce problème) mais peut-être que vous ne les avez pas lues attentivement alors laissez-moi le faire à nouveau


qjol:

é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 tu ne peux pas arrêter un indicateur tu dois trouver une solution


mar :


Puis-je attendre que la mise à jour soit terminée avant de poursuivre le calcul du SL ?

non vous ne pouvez pas (déjà écrit ci-dessus)

qjol:
et parce que tu ne peux pas arrêter un indicateur, tu dois trouver une solution.


mar:


Le problème est que je ne peux pas donner à SL une valeur aléatoire car alors l'indicateur entier est inutile.


je t'ai déjà donné une solution

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);


c'est aléatoire seulement jusqu'à ce que la mise à jour soit terminée (pas plus de 2-3 secondes à peu près) (IMHO c'est mieux que d'avoir un message d'erreur et que l'indicateur ne fonctionne pas du tout)

si vous avez une autre solution n'hésitez pas à l'utiliser, pas besoin de ma permission ;-)


mar :


Passez à l'échelle de temps que vous voulez, sauf D1. Ensuite vous faites glisser l'indicateur sur votre graphique. Le résultat sera une erreur comme ci-dessus. Il me semble que l'ATR(5) du graphique journalier n'est pas correct parce qu'il manque des données journalières. L'ouverture d'un nouveau graphique dans l'intervalle de temps D1 ne pose aucun problème. Et lorsque vous passez à un autre cadre temporel, tout va bien également car l'ATR(5) est correct. J'ai remarqué que je peux passer à n'importe quelle paire tant que je reste dans le graphique D1. Mais passer à d'autres paires dans d'autres cadres temporels que D1 pose des problèmes tant que MetaTrader n'a pas reçu les données quotidiennes. Ma question est donc la suivante : comment puis-je obtenir les données quotidiennes pour que le calcul de mon ATR soit correct lorsque j'ouvre un nouveau graphique dans un cadre temporel autre que D1 ?


parce que vous utilisez iATR ... PERIOD_D1 et encore ... vous devez attendre que la paire Daily termine la mise à jour (2-3 sec. sauf si vous utilisez une connexion dial up)

 

qjol, je suis désolé pour tant de malentendus ! Je comprends maintenant que vous m'avez dit d'alimenter l'indicateur avec des données aléatoires uniquement pour que la division par zéro disparaisse. Je n'ai pas non plus pensé au fait qu'après une mise à jour des données, l'indicateur utilise la valeur correcte. Je suis désolé d'être stupide... :D

Mais néanmoins la question reste ouverte : pourquoi diable cela fonctionnait-il avant ? Qu'est-ce qui ne va pas avec le nouveau MetaTrader ?

 
mar:


Mais la question reste néanmoins ouverte : pourquoi diable cela fonctionnait-il avant ? Qu'est-ce qui ne va pas avec le nouveau MetaTrader ?


Ce n'est pas lié à l'ancien ou au nouveau MT4, mais à la façon dont les indicateurs fonctionnent et sont exécutés.
depuis les indicateurs "ne peuvent pas attendre" et ont été exécutés immédiatement
mais, en ce moment, vous n'avez pas de données pour iATR ... PERIOD_D1 donc. il est égal à 0
c'est pourquoi vous obtenez une division par zéro
 
C'est tout à fait clair pour moi. Mais j'utilise cet indicateur depuis assez longtemps et je n'ai jamais eu de problèmes de données manquantes ou de choses comme ça. Je me demande donc pourquoi cela s'est produit la première fois que j'utilise la version build-625 de MT4.
 
mar:

Non, j'ai essayé aujourd'hui. De nombreux ticks arrivent, mais pas de mise à jour de AccountBalance. J'ai attendu presque une minute mais AccountBalance était toujours zéro.


Le fait est que ce problème ne s'est jamais produit au cours des dernières années. Depuis que le nouveau MetaTrader a été mis en place, ce problème existe. Je ne pense donc pas que cela ait quelque chose à voir avec le code. Il doit y avoir des changements internes dans la plate-forme elle-même qui fait échouer ce code. Et cet indicateur est seulement une ligne de commentaire et il échoue. Donc ça doit être un problème de plateforme/données.

Etes-vous sûr que l'indicateur est exactement le même que le code que vous avez posté ?

Il semble que vous vérifiez un indicateur qui a le code d'une ligne dans init et non dans start.

Raison: