Questions des débutants MQL5 MT5 MetaTrader 5 - page 988

 
Aleksey Vyazmikin:

J'ai déjà fait une vérification pour moi-même, mais cette vérification sert à contourner l'erreur de cette fonction, l'aide ne parle pas du tout de la nécessité d'une vérification, ce qui signifie qu'elle devrait être intégrée.

Et puis, vous parlez de la vérification de l'indicateur, alors que j'utilise Bars pour calculer l'heure correcte de début de la barre, comme iBarShift est dans mon esprit et seulement approprié pour le forex, où il n'y a pas d'échecs fréquents avec l'historique en raison de la compensation et des sessions de négociation pas pour toute la journée.

Et où est votre validation ? Et pourquoi introduire une variable si (lorsque vous modifiez l'historique ou que vous changez l'historique) vous avez juste besoin de recalculer complètement l'indicateur. Cela se fait généralement de "0" à "rates_total-1".

 
Vladimir Karputov:

Et où est votre chèque ? Et pourquoi saisir une variable si vous avez juste besoin de recalculer complètement l'indicateur (lorsque vous échangez l'historique ou modifiez l'historique). En règle générale, cela se fait de "0" à "rates_total-1".

Mon problème n'a rien à voir avec l'indicateur ou la pagination de l'historique. Voici un morceau de code

      datetime         StartDt=iTime(Symbol(),PERIOD_CURRENT,Bars(Symbol(),PERIOD_CURRENT,iTime(Symbol(),TF_iDeltaP,0),iTime(Symbol(),PERIOD_CURRENT,0))-1);
      datetime         StopDt=iTime(Symbol(),PERIOD_CURRENT,1); //Берем прошлый бар, что б не было расхождений между реалом и тестером при задержки на реальных данных

      int BarsGo=Bars(Symbol(),PERIOD_CURRENT,StartDt,StopDt);
      if(StartDt>StopDt)BarsGo=0;
      if(StartDt==StopDt)BarsGo=1;
      if (BarsGo>0)
        {
                //Полный расчет с вычислениями - копирование массивов цен и прочие тяжелые функции
        }
      else
        {
                //Упрощенный расчет с присвоением эмпирических значений переменным
        }
Le problème se produit lors de l'ouverture d'une nouvelle barre en général, lorsque la date de début de la barre est supérieure au décalage de 1 barre par rapport à la barre zéro du TF actuel.
 
Aleksey Vyazmikin:

Ce n'est pas une défense, mais un obstacle à la détection d'une erreur dans le code !

De plus, il n'est pas du tout logique de renvoyer le numéro 2 si les dates coïncident - quel est le raisonnement ici ?

L'heure de début d'une barre sur FORTS peut ne pas coïncider et cela entraîne des erreurs de calcul, par exemple, une barre n'ouvre pas à 14h00 mais à 14h05 - j'en ai souffert aussi.

Il se peut que le programmeur ait commencé à travailler de la manière indiquée dans la documentation, mais qu'il ait décidé par la suite qu'il serait préférable de renvoyer "entre" plutôt que "de" et "à" les dates indiquées, mais que la documentation n'ait pas corrigé cette description. En fait, ce n'est pas très nécessaire.

Je n'ai même pas de démo sur FORTS. Je ne peux pas le vérifier.

 
Alexey Viktorov:

Peut-être qu'à l'origine, ils ont procédé comme décrit dans la documentation, mais qu'ils ont ensuite décidé qu'il serait préférable de renvoyer les dates "entre" plutôt que les dates "de" et "à", mais la description dans la documentation n'a pas été corrigée. Mais ils n'ont pas corrigé la description.

Je n'ai même pas de démo sur FORTS. Je ne peux pas vérifier.

Comment cela peut-il être inutile, je ne peux pas deviner, et si c'est une erreur, qui sera corrigée plus tard, le code ne fonctionnera plus, et je chercherai une erreur pendant longtemps... Mais Artem a décidé qu'il ne s'agissait pas d'une erreur et n'a rien écrit dans l'essence.....

Il semble que sur le compte de démonstration de MQ les gens se connectent à FORTS...

 
Aleksey Vyazmikin:

Comment est-ce possible, je ne peux pas deviner, et si c'est une erreur, qui sera corrigée plus tard, alors le code ne fonctionnera plus, et je chercherai une erreur pendant un temps critique... Mais Artem a décidé qu'il ne s'agissait pas d'une erreur et n'a rien écrit dans l'essence.....

Il semble que les gens se connectent à FORTS sur un compte de démonstration depuis MQ...

Si vous êtes suffisamment prudent et que vous ne vous trompez pas d'heure de début et de fin, il n'y a rien à craindre. Laissez-les gouverner.

 
Aleksey Vyazmikin:

Je n'ai pas de problème avec l'indicateur ou la pagination de l'historique. Voici un morceau de code

Le problème se produit lors de l'ouverture d'une nouvelle barre en général, lorsque la date de début de la barre est décalée de plus d'une barre par rapport à la barre zéro du TF actuel.
datetime StartDt=iTime(Symbol(),PERIOD_CURRENT,Bars(Symbol(),PERIOD_CURRENT,iTime(Symbol(),TF_iDeltaP,0),iTime(Symbol(),PERIOD_CURRENT,0))-1);
datetime StopDt=iTime(Symbol(),PERIOD_CURRENT,1); //Берем прошлый бар, что б не было расхождений между реалом и тестером при задержки на реальных данных

Il n'y a pas de contrôle sur ce que iTime(), Bars() renvoient.

Vous devriez avoir. Vous auriez vraiment dû. Regardez dans l'aide - que renvoient iTime() et Bars() ? Et qu'est-ce que ça dit dans les notes ?

 
Alexey Viktorov:

Si vous êtes suffisamment prudent pour ne pas vous tromper dans l'heure de début et l'heure de fin, vous n'avez rien à craindre. Laissez-les gouverner.

Je n'aime pas m'asseoir et attendre passivement, et il m'a été interdit d'interroger les développeurs à ce sujet - la question leur était initialement destinée.

 
Artyom Trishkin:

Il n'y a pas de contrôle sur ce que iTime(), Bars() renvoient.

Eh bien, vous devriez. Vous devriez vraiment. Regardez dans l'aide - que retournent iTime() et Bars() ? Et qu'est-ce que ça dit dans les notes ?

Est-il suffisant de faire ces vérifications une fois dans le code, ou doivent-elles être faites après/avant chaque appel de fonction?

Quel type de contrôle est-il proposé de faire, pour le bar actuel/les antécédents ? Quelle est la meilleure façon de les faire ?

 

Comment trouver la raison de ce message ?

2019.01.24 21:32:01.570 i-Regr4_05i (Si-3.19,M1)        indicator is too slow, 3011 ms. rewrite the indicator, please
 
Aleksey Vyazmikin:

Est-il suffisant de faire ces vérifications une fois dans le code, ou doivent-elles être faites après/avant chaque appel de fonction?

Quel type de contrôle proposez-vous de faire, pour le bar actuel/l'historique ? Quelle est la meilleure façon de les faire ?

Vous ne savez pas comment vérifier si la valeur de retour est nulle ? Et je ne sais pas comment quitter OnCalculate() avec un retour de zéro ? Avez-vous déjà essayé de rechercher des informations sur un site web ?

  1. Obtenir la valeur requise de la fonction
  2. Vérifiez si elle est égale à zéro
    1. S'il est égal à zéro, alors il renvoie 0 ;
    2. S'il n'est pas égal à zéro, passez à l'étape 3.
  3. Travailler avec cette valeur
Je n'aurais jamais cru que j'enseignerais les bases de la logique à un homme dont l'évaluation dépasse les 13 000...
Raison: