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

 

Salutations à tous. J'ai une telle question. J'ai un indicateur (fractales modifiées), lorsqu'il est chargé sur un graphique tout est correct, fonctionne comme il le devrait, mais lorsque j'essaie de l'utiliser dans un EA, il dit que le tampon est vide. En même temps, lorsque le tampon est passé dans Deinit, il enregistre les valeurs correctes.

Le code source de l'indicateur est joint. Je suis prêt à écouter les conseils et les suggestions sur ce que je fais mal.

Code de l'EA :

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(Time[0] == prevtime) return;
   prevtime = Time[0];
   

   if(iCustom(NULL,0,"modify_Fractal",0,0) > 0) Print("x = ", 0, "  fractal Up: ", iCustom(NULL,0,"modify_Fractal",0,0));     
   if(iCustom(NULL,0,"modify_Fractal",0,2) > 0) Print("x = ", 2, "  fractal Up: ", iCustom(NULL,0,"modify_Fractal",0,2));
   if(iCustom(NULL,0,"modify_Fractal",0,3) > 0) Print("x = ", 3, "  fractal Up: ", iCustom(NULL,0,"modify_Fractal",0,3));   
   if(iCustom(NULL,0,"modify_Fractal",0,4) > 0) Print("x = ", 4, "  fractal Up: ", iCustom(NULL,0,"modify_Fractal",0,4));
   if(iCustom(NULL,0,"modify_Fractal",0,5) > 0) Print("x = ", 5, "  fractal Up: ", iCustom(NULL,0,"modify_Fractal",0,5)); 
   if(iCustom(NULL,0,"modify_Fractal",0,6) > 0) Print("x = ", 6, "  fractal Up: ", iCustom(NULL,0,"modify_Fractal",0,6));
   
  // тут везде 0
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
      Print("Deinit Function");
      
      for (int x = 0; x < 100; x++ )
      {
         if(iCustom(NULL,0,"modify_Fractal",0,x) > 0) Print("x = ", x, "  fractal Up: ", iCustom(NULL,0,"modify_Fractal",0,x));
         if(iCustom(NULL,0,"modify_Fractal",1,x) > 0) Print("x = ", x, "  fractal Down: ", iCustom(NULL,0,"modify_Fractal",1,x));
      }
   // а здесь полный буфер правильных значений индикатора.
  }
Dossiers :
 
Karputov Vladimir:

Tu pourrais remplacer les "si" à la fin par :

(si c'est aussi simple que cela,,, :)

Merci

 
Maxim Dobrovolskii:

Salutations à tous. J'ai une telle question. J'ai un indicateur (fractales modifiées), lorsqu'il est chargé sur un graphique tout est correct, fonctionne comme il le devrait, mais lorsque j'essaie de l'utiliser dans un EA, il dit que le tampon est vide. En même temps, lorsque le tampon est passé dans Deinit, il enregistre les valeurs correctes.

Le code source de l'indicateur est joint. Je suis prêt à écouter les conseils et les suggestions sur ce que je fais mal.

Code de l'EA :

Un coup d'œil très rapide. Question : Puis-je avoir une fractale sur la barre de zéro ? Mais dans OnDeinit(), vous bouclez à travers les barres et trouvez naturellement une fractale (pas une valeur tampon vide).
 
Artyom Trishkin:
Un regard très superficiel. Question : une fractale peut-elle être sur une barre de zéro ? Mais dans OnDeinit() vous bouclez à travers les barres et trouvez naturellement une fractale (pas une valeur tampon vide).
Dans Deinit, je passe également en boucle par 4-6 et chaque chose est à sa place et a des valeurs.
 
Maxim Dobrovolskii:
Dans Deinit, je passe aussi par 4-6 et tout est à sa place.

Dans OnDeinit(), vous parcourez en boucle (de 0 à 100) les barres à la recherche d'une valeur non nulle et vous enregistrez la valeur trouvée.

Dans OnTick() vous essayez de sortir seulement les 6 dernières barres du buffer 0. Il n'y a peut-être pas de fractale sur eux.

D'abord, trouvez la barre avec la fractale et ensuite imprimez la valeur de cette barre.

 
Artyom Trishkin:

Dans OnDeinit(), vous parcourez en boucle (de 0 à 100) les barres à la recherche d'une valeur non nulle et vous enregistrez la valeur trouvée.

Mais dans OnTick(), vous essayez d'imprimer seulement les 6 dernières barres du buffer 0. Il n'y a peut-être pas de fractale sur eux. D'abord, trouvez la barre avec la fractale et ensuite imprimez la valeur de cette barre.

La 6ème mesure est censée contenir du fractal.

2015.11.01 13:19:11.023 2015.10.30 22:54 MoneyRobotics_Proboi ! EURUSD,H1 : x = 29 fractal Up : 1.09855
2015.11.01 13:19:11.023 2015.10.30 22:54 MoneyRobotics_Proboi ! EURUSD,H1 : x = 21 fractal Up : 1.09976
2015.11.01 13:19:11.023 2015.10.30 22:54 MoneyRobotics_Proboi ! EURUSD,H1 : x = 16 fractal Down : 1.09652
2015.11.01 13:19:11.023 2015.10.30 22:54 MoneyRobotics_Proboi ! EURUSD,H1 : x = 6 fractal Up : 1.10721
2015.11.01 13:19:10.577 2015.10.30 22:54 MoneyRobotics_Proboi ! EURUSD,H1 : Désinit Fonction
2015.11.01 13:19:08.380 2015.10.01 00:00 Test de MoneyRobotics_Proboi ! démarré

C'est le début du journal. Le test a commencé, l'Expert Advisor a fonctionné, Deinit a été lancé et la fractale a été trouvée à 6 positions.



https://charts.mql5.com/9/256/eurusd-h1-alpari-limited-3.png

Reprise d'image.

Dossiers :
 
Maxim Dobrovolskii:

la 6ème mesure est censée contenir une fractale.

2015.11.01 13:19:11.023 2015.10.30 22:54 MoneyRobotics_Proboi ! EURUSD,H1 : x = 29 fractal Up : 1.09855
2015.11.01 13:19:11.023 2015.10.30 22:54 MoneyRobotics_Proboi ! EURUSD,H1 : x = 21 fractal Up : 1.09976
2015.11.01 13:19:11.023 2015.10.30 22:54 MoneyRobotics_Proboi ! EURUSD,H1 : x = 16 fractal Down : 1.09652
2015.11.01 13:19:11.023 2015.10.30 22:54 MoneyRobotics_Proboi ! EURUSD,H1 : x = 6 fractal Up : 1.10721
2015.11.01 13:19:10.577 2015.10.30 22:54 MoneyRobotics_Proboi ! EURUSD,H1 : Désinit Fonction
2015.11.01 13:19:08.380 2015.10.01 00:00 Test de MoneyRobotics_Proboi ! démarré

C'est le début du journal. Début du test, l'Expert Advisor a travaillé, Deinit démarre, et immédiatement sur la 6ème position il trouve une fractale.



https://charts.mql5.com/9/256/eurusd-h1-alpari-limited-3.png

Je ne sais pas comment adresser le tampon de l'indicateur.

Celui-là :

if(Time[0] == prevtime) return;
   prevtime = Time[0];

faire

prevtime = Time[0];

à la toute fin

 
Artyom Trishkin:

Ceci :

faire

à la toute fin.

comment cela peut-il l'affecter ? malheureusement rien n'a changé.

comment j'imagine le processus : l'indicateur est chargé, commence à vérifier chaque condition tick/bar, si la condition est remplie, met la valeur dans le ou les tampons sélectionnés, puis l'EA appelle l'indicateur par le numéro de tampon à la valeur à un certain décalage et prend la valeur. N'est-ce pas ?

 
Maxim Dobrovolskii:

comment cela peut-il l'affecter ? malheureusement rien n'a changé.

comment puis-je imaginer le processus : l'indicateur est chargé, commence à vérifier la condition à chaque tick/bar, si elle est remplie, met la valeur dans le ou les tampons sélectionnés, puis l'EA appelle l'indicateur par le numéro de tampon à la valeur à un certain décalage et prend la valeur. N'est-ce pas ?

Et pourquoi y a-t-il une nouvelle barre dans l'indicateur ? Apparemment, il n'y a pas de calculs complexes
 
Victor Nikolaev:
Pourquoi y a-t-il un nouveau contrôle de barre dans l'indicateur ? Apparemment, il n'y a pas de calculs compliqués
contrôle d'une nouvelle barre dans l'EA qui utilise l'indicateur.
Raison: