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

 
Sayberix:

Je suis en train de le lire. Je n'en suis pas encore là, je suppose. Je ne pense pas qu'il soit facile de parcourir une référence en pdf de 28 MB. Ou, pour le dire autrement, tous les paroissiens ne connaissent pas l'intégralité de la Bible, même s'ils sont de fervents croyants.

J'ai une autre question, veuillez me conseiller - si ce n'est pas difficile :

lors de l'exécution du code dans le visualiseur de stratégie :

1. le programme entre dans une boucle infinie ;

2. les résultats de l'exécution sont différents :

sans points d'arrêt :

Avec point d'arrêt sur Print :


Tout est fait pour déboguer les données historiques.

Vous augmentez constamment la variable. Qu'en pensez-vous : quand la taille de la variable dépassera-t-elle ses limites ?

 
Vladimir Karputov:

Vous augmentez constamment la taille de la variable. Qu'en pensez-vous : quand la taille de la variable dépassera-t-elle ses limites ?

Je pense que 10 itérations de l'ulong auraient dû suffire. La question est donc la suivante :

1. pourquoi la boucle ne se brise-t-elle pas ? et

2. pourquoi les résultats du compteur de temps d'itération lui-même ne sont-ils pas affichés ?


Est-ce parce que le débogage a été effectué sur des données historiques ?

 
Sayberix:

Je pense que pour 10 itérations, le ulong aurait dû suffire. La question est donc la suivante :

1. pourquoi la boucle ne se brise-t-elle pas ? et

2. pourquoi les résultats du compteur de temps d'itération lui-même ne sont-ils pas affichés ?


Est-ce à cause du débogage sur les données historiques ?

Vous avez une variable déclarée au niveau du programme global - vous l'augmentez constamment.

 
Oh, je vois... L'itération prend moins d'une milliseconde...
 
Vladimir Karputov:

Vous avez une variable déclarée au niveau du programme global - vous l'augmentez constamment.

Je ne comprends toujours pas ce que la variable globale a à voir avec ça. Le programme lui-même se limite à une boucle : "for(int i=1 ; i<=10 ; i++)" ?

Ou peut-être que je ne comprends pas quelque chose, expliquez-moi.

 
Sayberix:

Je ne comprends toujours pas ce que la variable globale a à voir avec ça. Le programme lui-même se limite à une boucle : "for(int i=1 ; i<=10 ; i++)" ?

Ou peut-être que je ne comprends pas quelque chose, expliquez-moi.

Supprimer les variables

ulong count, raschet = 1;

hors du champ d'application mondial.


À chaque tic, vous incrémentez de manière répétée la variable raschet. Et au prochain tic, vous CONTINUEZ à l'incrémenter plusieurs fois. Quelques tics et la variableraschet est hors de portée. Finalement, vous imprimez les valeurs de la variable, mais vous ne regardez pas l'impression pour une raison quelconque.

 
Vladimir Karputov:

Supprimez les variables

de la portée globale.


A chaque tic, vous incrémentez la variable raschet de manière répétée. Et au prochain tic, vous CONTINUEZ à l'incrémenter de manière répétée. Quelques tics et la variableraschet est hors de portée. Enfin, vous imprimez les valeurs de la variable, mais vous ne regardez pas l'impression pour une raison quelconque.

Merci, j'ai compris. J'ai juste été confus, pensant que return arrête le programme du tout, alors qu'il interrompt juste son exécution sur le tick actuel. Au lieu de "return ;", j'ai mis"ExpertRemove();".

 

Pouvez-vous s'il vous plaît me dire dans ce code :

//+------------------------------------------------------------------+
//|                                                          env.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property indicator_buffers 2

int envHandle;
double upperEnv[], lowerEnv[];

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   envHandle = iCustom(_Symbol,_Period,"Examples\\Envelopes",3,0,MODE_LWMA,PRICE_OPEN,0.03);
   if(envHandle<0)
     {
      Alert("Ошибка при создании индикаторов - номер ошибки: ",GetLastError(),"!!");
      return(INIT_FAILED);
     }
   SetIndexBuffer(0,upperEnv,INDICATOR_DATA);
   SetIndexBuffer(1,lowerEnv,INDICATOR_DATA);

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Deinitialization function of the expert                          |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   IndicatorRelease(envHandle);
  }
//+------------------------------------------------------------------+
//| "Tick" event handler function                                    |
//+------------------------------------------------------------------+
void OnTick()
  {

   ArraySetAsSeries(upperEnv, true);
   ArraySetAsSeries(lowerEnv, true);

   if((CopyBuffer(envHandle,0,0,3,upperEnv)<0) || CopyBuffer(envHandle,1,0,3,lowerEnv)<0)
      Alert("Ошибка копирования буферов индикатора Envelopes - номер ошибки:",GetLastError(),"!!");

   double   upEnv = upperEnv[0];
   double   lowEnv = lowerEnv[0];
  }
//+------------------------------------------------------------------+

Comment puis-je obtenir des valeurs de prix constamment mises à jour pour les lignes Enveloppes dans les variables upEnv et lowEnv ? Il dessine l'indicateur, mais les valeurs de l'indicateur dans les variables sont mises à jour 2 fois et c'est tout.

 
Sayberix:

Pouvez-vous s'il vous plaît me dire dans ce code :

Comment puis-je obtenir des valeurs de prix constamment mises à jour pour les lignes Enveloppes dans les variables upEnv et lowEnv ? Il dessine l'indicateur, mais les valeurs de l'indicateur dans les variables sont mises à jour 2 fois et c'est tout.

Tout d'abord, décidez : voulez-vous écrire un conseiller expert ou un indicateur ? (Vous avez un code mixte maintenant - l'indicateur et le conseiller expert sont mélangés) - c'est-à-dire que le code ne fonctionnera pas.

Conseil : Utilisez l'assistant MQL pour créer un modèle.

 
Vladimir Karputov:

Décidez d'abord : voulez-vous écrire un EA ou un indicateur ? (Actuellement, votre code est un désordre - l'indicateur et le conseiller expert sont mélangés) - c'est-à-dire que le code est inapplicable.

Conseil : Utilisez l'assistant MQL pour créer un modèle.

J'ai déjà essayé. Mais il génère des classes dans Wizard. J'aimerais au moins comprendre le code de manière simple - le code, je le comprends au moins un peu. Pourriez-vous nous indiquer comment corriger le code afin d'obtenir les valeurs de l'indicateur dans l'EA ?