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

 
MikeZv:

Vladimir, merci pour la réponse à la première question, ces fonctionnalités me manquaient.

J'ai mis un seul et même indicateur dans MT4 et dans MT5 (bien sûr, le code est adapté à chaque plateforme).
Jusqu'à la barre de zéro, leurs valeurs sont les mêmes, donc apparemment d'une extrémité ... :)
Et lorsque l'on désactive le calcul sur la barre actuelle dans MT4, rien n'est dessiné sous la barre actuelle, dans MT5 - valeurs erronées.

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie

Questions des débutants

Karputov Vladimir, 2016.03.08 15:13

... Pour le débogage, il faut vérifier quelle valeur est contenue dans le tableau de la série temporelle time[i] - afin de comprendre à quelle extrémité vous commencez le calcul des barres et où vous avez une barre "zéro".


 
MikeZv:
Et comment effectuer un tel contrôle ?

Dans MetaEditore, ajoutez un point d'arrêt et commencez à déboguer. Lorsque le point d'arrêt est arrêté, ajoutez time[0] à l'observation :

Débogage

 
Karputov Vladimir:

Dans MetaEditore, ajoutez un point d'arrêt et commencez à déboguer. Lorsque le point d'arrêt est arrêté, ajoutez time[0] à l'observation :


J'ai déjà inséré la sortie dans le code

MT4 2016.03.08 18:37:04.710 mvt_Vlt EURUSD,H1 : time[0] = 2016.03.08 17:00:00 time[rates_total-1] = 1971.01.04 00:00:00

MT5 2016.03.08 18:36:23.565 mvt_Vlt (EURUSD,H1) time[0] = 2010.01.04 00:00:00 time[rates_total-1] = 2016.03.08 17:00:00

Inséré dans le code MT5ArraySetAsSeries(time,true) ;
Sortie maintenant :

MT5 2016.03.08 18:45:05.402 mvt_Vlt (EURUSD,H1) time[0] = 2016.03.08 17:00:00 time[rates_total-1] = 2010.01.04 00:00:00

Et les tableaux de prix aussi ?


 
MikeZv:
J'ai déjà mis la sortie dans le code

MT4 2016.03.08 18:37:04.710 mvt_Vlt EURUSD,H1 : time[0] = 2016.03.08 17:00:00 time[rates_total-1] = 1971.01.04 00:00

MT5 2016.03.08 18:36:23.565 mvt_Vlt (EURUSD,H1) time[0] = 2010.01.04 00:00:00 time[rates_total-1] = 2016.03.08 17:00:00
Que dois-je faire maintenant ?

Dans les deux versions de l'indicateur, ajoutezArraySetAsSeries- pour les tableaux que vous utilisez pour vos calculs : high[], low[] et temporairement pour le tableau time[] - cela vous aidera à comprendre où se trouve la barre "zéro". Ainsi, la barre "zéro" dans les deux versions sera du même côté du graphique (droite ou gauche - selon ce que vous avez défini dans ArraySetAsSeries), et vous obtiendrez la même partie de calcul de l'indicateur.

Ajouté : pendant que je tapais, vous avez tâtonné dans le bon sens :)

 
Karputov Vladimir:


Ajouté : pendant que je tapais, vous avez trouvé le bon chemin :)

Je l'ai trouvé, mais il ne compte toujours pas correctement. :)
Je l'ai collé dans le code MT5 :
   ArraySetAsSeries(ExtCalcVlBuffer,true); 
   ArraySetAsSeries(ExtMovingBuffer,true);
   ArraySetAsSeries(ExtStdDevBuffer,true);
   ArraySetAsSeries(time,true);             
   ArraySetAsSeries(low,true);              
   ArraySetAsSeries(high,true); 

C'est en train de sortir :

Il nesort queExtCalcVlBuffer, mais la moyenne et la déviation ne comptent pas...
Et ça sort toujours sur la barre actuelle, alors que ça ne devrait pas.

 
MikeZv:
...

Et il s'affiche toujours sur la barre actuelle, alors qu'il ne devrait pas.

Pourquoi ne le ferait-elle pas ?
 
Karputov Vladimir:
Pourquoi ne le ferait-elle pas ?
Je l'ai désactivé i<rates_total-1
 
MikeZv:
Je l'ai désactivé i<rates_total-1
POURQUOI ? !
 
Karputov Vladimir:
POURQUOI ? !
Vous n'avez pas besoin de compter sur le courant, vous gaspillez votre CPU, et vous n'avez tout simplement pas besoin de la valeur.
 
MikeZv:
Vous n'avez pas besoin d'utiliser la valeur actuelle, cela ne fera que charger le processeur en vain et vous n'avez tout simplement pas besoin de cette valeur.

Vous devez le préciser tout de suite :) .

La situation est la suivante : s'il y a une barre dans le graphique, elle correspond à une cellule dans le tampon de l'indicateur. Tant que vous n'écrivez pas quelque chose dans cette cellule, cette cellule stockera des déchets.