Erreurs, bugs, questions - page 595

 
-Alexey-:
Essayez de transférer vers C - l'erreur se trouvera d'elle-même. Et en général - avec de tels projets, c'est la seule façon d'écrire, si vous ne voulez pas avoir de problèmes à l'avenir. Malheureusement, je l'ai moi-même compris trop tard et je dois maintenant le réécrire :).
Je vais probablement étudier le C++ dans un avenir proche. Au cours des six derniers mois, ma tête est déjà pleine : MQL4, MQL5, HTML, CSS, XML. Et maintenant, j'étudie aussi le JavaScript. Je n'ai pas encore assez d'espace et de temps pour le C++, bien que je le veuille vraiment)).
 

Nous avons un indicateur fonctionnant sur TF M15, dans le code l'indicateur demande la série temporelle MqlRates de TF M1.

L'indicateur ne démarre pas tout de suite car les données M1 ne sont pas prêtes et il n'est pas possible de les charger lors du premier passage.

En conséquence, nous avons une fausse passe et l'indicateur n'accède plus aux données, pensant qu'elles sont déjà calculées et qu'il n'est pas nécessaire de les recalculer.

Maintenant, j'exécute l'indicateur de deux façons :

  1. Je lance l'indicateur sur M15, je supprime l'indicateur et je le relance (il fonctionne).
  2. Avant de lancer l'indicateur sur M15, j'ouvre un graphique sur M1, je lance l'indicateur sur M15 (tout fonctionne la première fois).

D'où la question : comment automatiser la vérification et le chargement corrects des données requises pour un autre TF ?

 
Urain:

D'où la question : comment automatiser la vérification et le chargement des données requises à partir de l'autre TF ?

Dans une situation similaire, je contrôle le processus d'initialisation dans OnCalculate. S'il y a une erreur pendant l'initialisation, alors je renvoie prev_calculated=0, et ainsi de suite jusqu'à ce que tout soit compté correctement.
 
Lizar:
Dans une situation similaire, je contrôle le processus d'initialisation dans OnCalculate. S'il y a une erreur pendant l'initialisation, alors je renvoie prev_calculated=0 et je continue jusqu'à ce que tout soit calculé correctement.

L'idée est bonne, bien que rien ne puisse être affecté à prev_calculated, la variable est déclarée comme const, mais je comprends que vous pouvez avoir une autre variable similaire.

Il reste une question : s'il n'y a pas de données, que dois-je faire ?

Je comprends que la demande de données elle-même ne conduit pas à un téléchargement ou à une télétransmission à partir de la base de données locale, et c'est exactement le problème.

 
Urain:

L'idée est bonne, bien que vous ne puissiez rien assigner à prev_calculated, la variable est déclarée comme const, mais je vous ai compris, vous pouvez avoir une autre variable similaire.

Il ne s'agit pas de l'affectation, mais du nombre retourné par OnCalculated. Si vos données ne sont pas prêtes, vous retournerez 0 de OnCalculated.
Regardez les exemples de BarsCalculated. C'est ainsi que vous devez vérifier.

Une question demeure : en l'absence de données, que faire ?

S'il n'y a pas de données et qu'elles n'apparaissent pas, il n'y a pas grand-chose à faire.
Si vous voulez, vous pouvez attendre et calculer les tampons par timer.
 
sergeev:

Si vos données ne sont pas prêtes, vous retournerez 0 de OnCalculated.
Regardez les exemples de BarsCalculated.

Si vous ne les avez pas et qu'ils n'apparaissent pas, il n'y a pas grand-chose à faire.
Si vous le souhaitez, vous pouvez appeler les tampons d'attente et de calcul par minuterie.

Cela ne sert à rien, il suffit de décharger l'indicateur et de le redémarrer, dans ce cas les données sont déjà là pour une raison quelconque.

Ou encore, ouvrez un graphique avec le TF M1 requis, les données du graphique M15 adjacent sur demande M1 sont alors immédiatement prêtes.

 
Urain:

Cela ne sert à rien, il suffit de décharger l'indicateur et de le redémarrer, dans ce cas les données sont déjà là pour une raison quelconque.

Ou bien, ouvrez un graphique avec la TF requise, et les données du graphique adjacent sont prêtes immédiatement.

Aujourd'hui, j'ai passé une demi-journée avec des indices. Il y avait des multi-devises/multi-temps.

Le problème du non-affichage est qu'on tente de prendre une valeur d'une barre qui n'existe tout simplement pas dans cette TF.

Il faut donc vérifier avant de prendre une barre - SeriesInfoInteger.
Pas de déchargement nécessaire. Vous ne pouvez pas décharger la partie calcul de toute façon (je viens d'aborder le sujet aujourd'hui).
 
sergeev:

J'ai travaillé avec les indices pendant une demi-journée aujourd'hui. Il y avait des multi-devises/multi-temps.

Le problème avec le non-affichage est qu'il essaie de prendre la valeur d'une barre qui n'existe tout simplement pas dans ce TF.

Il faut donc vérifier avant de prendre une barre - SeriesInfoInteger.

Pas de déchargement nécessaire. Vous ne pouvez pas décharger la partie calcul de toute façon (je viens d'évoquer un sujet à ce sujet aujourd'hui).

Mimeo, j'ai un vérificateur, je trouve la première date sur TF M1 et le calcul des barres M15 commence à partir de cette date. TF est défini comme PERIOD_M1

   timestart=(datetime)SeriesInfoInteger(_Symbol,TF,SERIES_FIRSTDATE);
   for(int i=prev>0?prev-1:0;i<rates_total-1;i++)
     {
      if(time[i]>timestart)
        {
         ... расчёт
        }
     }
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Периоды графиков
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Периоды графиков
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы графиков / Периоды графиков - Документация по MQL5
 
Urain:

1. l'idée est bonne, bien que rien ne puisse être assigné à prev_calculated, la variable est déclarée comme const, mais je comprends que vous pouvez avoir une autre variable similaire.

2. une question demeure, et s'il n'y a pas de données, que devons-nous faire ?

3. je comprends que la demande de données elle-même ne provoque pas le téléchargement ou le chargement des données à partir de la base de données locale, et c'est exactement le problème.

  1. Je voulais dire qu'à partir deOnCalculate, il faut retourner 0, puis prev_calculé=0 ;
  2. Je règle le compteur de réinitialisations. Au débordement, je décharge l'indicateur.
  3. Je n'ai eu aucun problème avec SoruXXX. S'il y a une histoire locale, tout a été compté à partir de la deuxième ou troisième fois, sinon de la première. Au Championnat, le "spy" utilisé par l'Expert Advisor ne compte que sur l'historique d'une minute, il fonctionne sur H1. Et ainsi de suite pour 9 paires. S'il n'y a pas du tout d'histoire locale, le point 2 fonctionnera. Mais, autant que je m'en souvienne, l'historique était téléchargé depuis le serveur.
 
Urain:

Je comprends que la demande de données elle-même n'entraîne pas le téléchargement ou l'envoi de données depuis la base de données locale, et c'est exactement le problème.

Extrait de l'aide de CopyXXXX :

Lorsqu'un conseiller expert ou un script demande des données, il lance le téléchargement depuis le serveur, si le terminal ne dispose pas de ces données localement, ou il commence à construire les séries temporelles requises, si les données peuvent être construites à partir de l'historique local, mais qu'elles ne sont pas encore prêtes. La fonction renverra la quantité de données qui sera prête à l'expiration du délai, mais l'historique continuera à être téléchargé et la prochaine demande similaire renverra plus de données.

Nous ne parlons que des conseillers experts et des scripts. Cela ne s'applique-t-il pas aux indicateurs ?
Raison: