Erreurs, bugs, questions - page 3027
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Le compteur est remis à zéro pour des raisons indépendantes de la volonté du programmeur, comme si l'indicateur fonctionnait pour la première fois !
Est-ce que c'est comme ça sur chaque nouveau bar ? Ils sont rassurés, n'est-ce pas ?
Si ce n'est pas à chaque barre, il y a différentes raisons pour réinitialiser le pre_kalc.
Forum sur le trading, les systèmes de trading automatisé et les tests de stratégies de trading
Bugs, bugs, questions
Andrey Dik, 2021.05.27 13:53
c'est-à-dire que le compteur pré_calculé est remis à zéro dès que la nouvelle barre de temps apparaît. cela signifie que l'indicateur est recalculé à nouveau comme s'il avait été lancé la première fois.
Cette construction vous est-elle familière ?
le problème n'est pas dans la logique de l'EA (redessiner, ne pas redessiner, sous-dessiner ou autre) mais dans le fait que prev_calculated est remis à zéro alors que personne ne lui a demandé de le faire !
Je pense que le problème est :
Vous ne laissez pas l'indicateur appelé sur un autre TF calculer chaque tick, et ensuite vous l'appelez et l'historique est synchronisé et le calcul à partir de zéro de cet indicateur.
j'ai créé un test. l'indicateur appelé compte tout et ne se réinitialise pas à prev_calculated == 0
J'ai dessiné la fermeture dans l'indicateur et déroulé l'événement avec une nouvelle barre et prev_calculated == 0 :
appelez cet indicateur (obtenez les 2 dernières valeurs du tampon) et dessinez également la fermeture sur votre TF :
a exécuté le dernier indicateur sur M1 , log :
2021.05.27 21:48:34.196 tst_tf (EURUSD,M1) tst_tf Nouvelle barre 2021.05.27 21:48:00
2021.05.27 21:48:34.197 tst_tf (EURUSD,M1) tst_tf prev_calculated == 0
2021.05.27 21:48:34.197 tst_tf (EURUSD,M1) Erreur CopyBuffer # 4806
2021.05.27 21:48:34.197 tst (EURUSD,M5) tst Nouvelle barre 2021.05.27 21:45:00
2021.05.27 21:48:34.197 tst (EURUSD,M5) tst prev_calculated == 0
2021.05.27 21:49:01.636 tst_tf (EURUSD,M1) tst_tf nouvelle barre 2021.05.27 21:49:00
2021.05.27 21:50:00.149 tst_tf (EURUSD,M1) tst_tf Nouvelle barre 2021.05.27 21:50:00
2021.05.27 21:50:00.149 tst_tf (EURUSD,M5) tst Nouvelle barre 2021.05.27 21:50:00
2021.05.27 21:51:01.789 tst_tf (EURUSD,M1) tst_tf Nouvelle barre 2021.05.27 21:51:00
2021.05.27 21:52:02.832 tst_tf (EURUSD,M1) tst_tf Nouvelle barre 2021.05.27 21:52:00
2021.05.27 21:53:00.920 tst_tf (EURUSD,M1) tst_tf Nouvelle barre 2021.05.27 21:53:00
2021.05.27 21:54:02.778 tst_tf (EURUSD,M1) tst_tf Nouvelle barre 2021.05.27 21:54:00
2021.05.27 21:55:00.308 tst_tf (EURUSD,M1) tst_tf Nouvelle barre 2021.05.27 21:55:00
2021.05.27 21:55:00.308 tst_tf (EURUSD,M5) tst Nouvelle barre 2021.05.27 21:55:00
2021.05.27 21:56:00.118 tst_tf (EURUSD,M1) tst_tf Nouvelle barre 2021.05.27 21:56:00
2021.05.27 21:57:00.419 tst_tf (EURUSD,M1) tst_tf Nouvelle barre 2021.05.27 21:57:00
C'est comme ça à chaque nouveau bar ? Ils sont sur-assurés ou quelque chose comme ça...
Si ce n'est pas sur chaque barre, il y a différentes raisons pour réinitialiser pre_calc.
exactement sur chaque nouvelle mesure de la majeure TF.
Par exemple, si l'indicateur fonctionne sur M1 et accède à l'indicateur sur M5, alors toutes les 5 minutes l'indicateur sera complètement recalculé.
Je pense que le problème est :
Vous ne laissez pas l'indicateur appelé sur un autre TF calculer chaque tick, puis vous l'appelez et il y a une synchronisation de l'historique et un calcul à partir de zéro de cet indicateur.
j'ai créé un test. l'indicateur appelé compte tout et ne se réinitialise pas à prev_calculated == 0
J'ai dessiné la fermeture dans l'indicateur et déroulé l'événement avec une nouvelle barre et prev_calculated == 0 :
appelez cet indicateur (obtenez les 2 dernières valeurs du tampon) et dessinez également la fermeture sur votre TF :
Je vérifie la synchronisation des données sur le TF supérieur demandé (M5) et la disponibilité de l'indicateur sur celui-ci, s'il n'est pas prêt, alors je quitte.
Par conséquent, l'indicateur ne fonctionne qu'une fois à l'ouverture de la barre M1, et non à chaque tick :
J'espère que les développeurs écouteront mes supplications.
Je vérifie la synchronisation des données sur le TF supérieur demandé (M5) et la disponibilité de l'indicateur sur celui-ci, s'il n'est pas prêt, alors je quitte.
Par conséquent, l'indicateur ne fonctionne qu'une fois à l'ouverture de la barre M1, et non à chaque tick :
J'espère que les développeurs écouteront mes supplications.
cela ne devrait pas fonctionner correctement dans les indicateurs :
si je ne me trompe pas, dans l'aide, il y a une description du script pour paginer les données pour tous les TFs et il devrait y avoir un avertissement que les données historiques ne peuvent pas être demandées à l'indicateur en raison du fait que l'indicateur fonctionne de manière asynchrone.
et il est recommandé d'utiliser BarsCalculated() une fois après avoir lié l'handle
UPD : script pour la pagination de l'historique et explication pourquoi il ne fonctionne pas dans les indicateurs: https://www.mql5.com/ru/docs/series/timeseries_access
Je vérifie la synchronisation des données sur le TF supérieur demandé (M5) et la disponibilité de l'indicateur sur celui-ci, s'il n'est pas prêt, alors je quitte.
Par conséquent, l'indicateur ne fonctionne qu'une fois à l'ouverture de la barre M1, et non à chaque tick :
Dois-je vraiment utiliser ma pré-calculation personnalisée ? J'espère que les développeurs écouteront mes supplications.
A quoi sert un tel chèque ?
Il serait beaucoup plus simple d'écrire return 0 ; sans condition et c'est tout.
A chaque nouvelle barre, la condition sera remplie et toutes les barres seront recalculées sans tenir compte de la synchronisation. Vous avez écrit un code irréfléchi et vous prétendez que c'est un bug terminal...
Quel est l'intérêt d'un tel contrôle ?
Il serait plus facile d'écrire return 0 ; sans condition et c'est tout...
La condition sera remplie à chaque nouvelle barre et toutes les barres seront recalculées indépendamment de la synchronisation. Vous avez écrit un code irréfléchi et l'avez fait passer pour un bug terminal...
réfléchissez encore.
Une union avec un seul champ est une chose étrange.
C'est la même chose que pour la structure, mais l'erreur est plus évidente. Il est même écrit dans la documentation à ce sujet :"Otherwise union behaves as structure".
Union\char\char est également étrange, et aussi pour plus de clarté, mais il peut être réécrit :
Donc, cela ne semble étrange à personne, non plus.