Bogue MQL5 lors du travail avec l'accès aux séries chronologiques iClose/iOpen, etc.

 
Salut !
 

#property tester_everytick_calculate peut résoudre les problèmes ?

MQL5 : Ajout d'une nouvelle propriété pour les indicateurs personnalisés #property tester_everytick_calculate. Il est utilisé dans le testeur de stratégie et permet de forcer le calcul des indicateurs sur chaque tick.

25.Tester : Maintenant, pendant le test/optimisation non visuel, tous les indicateurs utilisés (standard et personnalisés) sont calculés uniquement en demandant des données. Les indicateurs qui contiennent des appels de la fonctionEventChartCustomet qui utilisent le gestionnaireOnTimerconstituent une exception. Auparavant, dans le testeur de stratégie, lorsqu'un tick arrivait (même d'un autre symbole), tous les indicateurs étaient calculés sans condition. Cette innovation a considérablement accéléré les essais et l'optimisation.

Pour forcer le calcul des indicateurs à chaque tick, ajoutez la #propriété tester_everytick_calculate au programme.

Les indicateurs compilés par les versions précédentes du compilateur, seront calculés comme avant - à chaque tick.
 

Il est également toujours recommandé, si vous travaillez avec une autre période - alors une fois par minute vous devez obtenir l'OHLC de cette période (toute fonction CopyXXXXXX).

Il en ressort que, lorsqu'on travaille avec l'horizon temporel de quelqu'un d'autre, il n'est pas nécessaire d'utiliser les atavismes iXXXXXX, mais les fonctions CopyXXXXXX.

 
Vladimir Karputov:

Il est également toujours recommandé, si vous travaillez avec une autre période - alors une fois par minute vous devez obtenir l'OHLC de cette période (toute fonction CopyXXXXXX).

Il en ressort que, lorsque l'on travaille avec une autre période, il n'est pas nécessaire d'utiliser les atavismes iXXXXXX, mais les fonctions CopyXXXXXX.

Ce n'est pas grave !

Pourquoi alors :iHigh(Symbol(),TF,i) ;

P.S. Tout fonctionne dans mt4 sans problèmes depuis les premiers jours de son existence, pourquoi ne pas faire la même chose dans mt5, ainsi il n'y aura pas de tambourin ? Si cela fonctionne dans mt4 - alors il est possible de le faire fonctionner dans mt5 également.
 
Vitaly Muzichenko:

Pas sérieux !

Pourquoi alors :iHigh(Symbol(),TF,i) ;

P.S. Dans mt4 tout fonctionne sans problèmes depuis les premiers jours de son existence, pourquoi ne pas faire de même dans mt5, ainsi il n'y aura pas de tambourin ? Si cela fonctionne dans mt4 - cela signifie qu'il est possible de le faire fonctionner dans mt5 également.

De plus, il a toujours été recommandé, si vous travaillez avec un autre cadre temporel, d'obtenir l'OHLC de ce cadre temporel une fois par minute (n'importe quelle fonction CopyXXXX). Cela a toujours été le cas.

 
double high_k = NormalizeDouble(iHigh(Symbol(),TimeFrames, k),DigitsM);
double low_k = NormalizeDouble(iLow(Symbol(),TimeFrames, k),DigitsM);
double open_k = NormalizeDouble(iOpen(Symbol(),TimeFrames, k),DigitsM);
double close_k = NormalizeDouble(iClose(Symbol(),TimeFrames, k),DigitsM);

Essayez de mettre à jour les cotations avant de le faire via RefreshRates.

 
Dmitry Fedorchenko:

Essayez de rafraîchir les devis via RefreshRates au préalable.

"RefreshRates" est une fonction inexistante.

 
Vladimir Karputov:

"RefreshRates" est une fonction inexistante.

Je suis sur le point
https://www.mql5.com/ru/docs/standardlibrary/tradeclasses/csymbolinfo/csymbolinforefreshrates

Il y avait un problème similaire seulement dans EA, ça m'a aidé.

 
Farkhat Guzairov:
La version MQL4 de cet indicateur fonctionne depuis plus de 2 ans et aucun problème/erreur de ce type n'a été constaté.

Aucun CopyXXX ne vous aidera. Il s'agit d'un bug de MT5 qui a commencé avec la build 30 et qui n'a pas été corrigé depuis la build 44. Lisez les 5-6 dernières pageshttps://www.mql5.com/ru/forum/285631/page29 et vous ne serez pas seul.

Новая версия платформы MetaTrader 5 build 1930: Плавающие окна графиков и .Net библиотеки в MQL5
Новая версия платформы MetaTrader 5 build 1930: Плавающие окна графиков и .Net библиотеки в MQL5
  • 2018.11.13
  • www.mql5.com
26 октября 2018 года будет выпущена обновленная версия платформы MetaTrader 5...
 
Farkhat Guzairov:

Bonne journée !

Je suis en train de transférer des indicateurs écrits précédemment de MQL4 à MQL5. Je n'ai pas beaucoup dansé et tout semble aller bien, mais.....

À un moment donné, les données de l'indicateur cessent d'être mises à jour, je n'ai pas pu déterminer exactement où se trouvait l'erreur et ce n'est que par hasard que j'ai remarqué que iClose/iOpen, etc. cessent d'être mises à jour, c'est-à-dire qu'elles renvoient la même valeur.

Ce qui est amusant, c'est que même si je recompile le code source, l'indicateur ne se met pas à jour correctement, mais je vois qu'il exécute des fonctions :

Seulement si vous ouvrez les propriétés de l'indicateur et que vous le fermez via "Ok", les données sont mises à jour et affichées correctement, mais jusqu'à un certain point qui peut se produire à tout moment (mais à 100% cela se produit). Dans ce cas, l'indicateur a cessé de mettre à jour les données à 2018.11.14 00:00, en général cela se produit après un certain temps régulièrement.

Plus tôt, un autre bug a été révélé, la fonction iBars(Symbol(),TimeFrames)/Bars(Symbol(),TimeFrames) renvoie une valeur nulle. Heureusement, ce n'est pas une erreur constante, mais elle se produit quand même et nous devons la contrôler.

Il s'avère que MQ ne supporte plus MQL4. C'est génial, mais MQL5 aura de tels bugs.

Alors comment résoudre le problème ci-dessus ?

1) Mesurer le temps d'exécution d'un calcul OnTick/OnCalculate en microsecondes et l'imprimer dans le journal.

Vous pourrez ainsi voir combien de temps vous consacrez au calcul des tics. Estimez ensuite combien de tics à cette vitesse vous pouvez calculer par seconde. Vous ne trouverez probablement pas plus d'une douzaine de tics, et vous obtiendrez plus de tics par seconde.


2) Mesurez le temps de chaque OnCalcul sur les indicateurs qui sont attachés aux graphiques/trames temporelles, dont vous extrayez les données.

Il existe probablement une situation similaire. En raison de la lenteur des calculs, le terminal attend que le symbole calculé:timeframe soit déverrouillé. Ce sont les indicateurs lents, surtout sur une histoire profonde, qui conduisent au gel des gains des cartes d'autres personnes.


Lors de l'élaboration d'indicateurs, vous devez accorder la priorité aux problèmes de performance et aux recalculs économiques. Sinon, vous allez tuer tout ce qui vous entoure.

 
Renat Fatkhullin:

Ce sont les indicateurs de freinage, notamment sur l'histoire profonde, qui conduisent au gel des graphiques d'autres personnes.

Alors dis-moi pourquoi le gel m'arrive à moi ? J'ai un gel des sorties dans OnTick avant la fonction d'interrogation des indicateurs, c'est-à-dire que la mise à jour de CopyTime par M1 agit comme un déclencheur qui démarre les autres traitements dans OnTick, mais avant CopyTime il n'y a aucune fonction ou interrogation d'indicateur.

Et pourquoi il n'y avait pas de tels problèmes avant la build 30 et depuis octobre 2017 tout fonctionnait bien ?