Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 682

 

J'ai un grand programme avec le même type d'objets. Je veux dire plusieurs types. Mais ils sont répétés dans différents modules du programme. Et dans les journaux, une fois le test terminé, j'obtiens par exemple xxx objets non supprimés. Et ainsi de suite sur plusieurs types.

Comment puis-je savoir où je ne supprime pas d'objets ? Existe-t-il une boîte à outils pour cela ?

 
mbjen:

J'ai un grand programme avec le même type d'objets. Je veux dire plusieurs types. Mais ils sont répétés dans différents modules du programme. Et dans les journaux, une fois le test terminé, j'obtiens par exemple xxx objets non supprimés. Et ainsi de suite sur plusieurs types.

Comment puis-je savoir où je ne supprime pas d'objets ? Existe-t-il une boîte à outils pour cela ?

Bug de la construction de 1930.

 
L'EA de test a en quelque sorte ouvert un BUYSTOP en dessous du prix ! Maintenant, je ne peux même pas fermer l'ordre manuellement. Comment est-ce possible ?
Dossiers :
 

J'ai été surpris de constater que MQl5 supporte OpenCL.

Pendant ce temps, personne n'a écrit un optimiseur pour les robots, de sorte que des millions d'exécutions ne dureraient pas des siècles, mais au moins des années ? :)

 
Igor Makanu:

cela signifie que vous comptez sur chaque tick le code que vous avez soumis et que vous n'initialisez pas les variablesSredRazmax etSredRazmin

C'est une bonne habitude d'initialiser les variables avant de les utiliser - c'est ce qu'on enseigne dans les universités, cela réduit le temps nécessaire à la recherche de bogues ;)

Je les ai initialisés au début, et dans le commentaire vous pouvez voir un autre tableau élément par élément (pour vérifier et 0 ne change pas, donc la formule devrait fonctionner,) Voici le code complet :

//+------------------------------------------------------------------+
//|                                                           01.mq4 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window

#property indicator_buffers 1
//#property indicator_color1 Red
//#property indicator_width1 1

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+

extern int ExtDepth=12;
extern int ExtDeviation=5;
extern int ExtBackstep=3;
extern int nn=30;

int shift, ww=0;
double zz, SredRazmax, SredRazmin, Sredn; 
double HZZ[];


int OnInit()
  {
//--- indicator buffers mapping
    SetIndexBuffer(0, HZZ);
 // SetIndexStyle(0, DRAW_SECTION);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
  for(shift = 0; shift <= Bars-1; shift++)
  {
      zz = iCustom(NULL, 0, "ZigZag", ExtDepth, ExtDeviation, ExtBackstep, 0, shift);
           if(zz > 0.0)
           {
           HZZ[ww]=zz;
           ww++;          
           }
  }
   
  
       for(ww=0;ww<=nn;ww++)
       {
      if(HZZ[ww]>HZZ[ww+1]){SredRazmax += HZZ[ww];}     
      if(HZZ[ww]<HZZ[ww+1]){SredRazmin += HZZ[ww+1];}
      
       
  Comment("Средний размах = ", (SredRazmax-SredRazmin)/nn,",",HZZ[0],",",HZZ[1],",",HZZ[2],",",HZZ[3],",",HZZ[4]); 
        }      
   
//---------------------------------------------+
//расчет среднего значения           
//---------------------------------------------+      

   //    for(ww=0;ww<=nn;ww++){
   //    if(HZZ[ww]>HZZ[ww+1]){Sredn += HZZ[ww]-HZZ[ww+1];}     
   //    if(HZZ[ww]<HZZ[ww+1]){Sredn += HZZ[ww+1]-HZZ[ww];}
       
 // Comment("Средний размах = ", Sredn,",",HZZ[0],",",HZZ[1],",",HZZ[2],",",HZZ[3],",",HZZ[4]); 

            
         
     
       
//--- return value of prev_calculated for next call
    return(0);

  }
 
Artyom Trishkin:

Bug du build 1930.

Qu'est-ce que c'est ? J'ai MT4. Construire 1090.

 
mbjen:

Qu'est-ce que c'est ? J'ai MT4. Construire 1090.

Un objet créé au moyen de new doit soit être attaché à un tableau d'objets, soit être supprimé par lui-même dans OnDeinit().
 
Dmitry Belov:

Je les ai initialisés au début, et le commentaire sort un autre tableau élément par élément (pour vérifier et 0 ne change pas, donc la formule devrait fonctionner,) Voici le code complet :

Vous ne les avez pas initialisés au début ou ailleurs, vous les avez juste déclarés.

J'ai écrit avant d'utiliser, c'est-à-dire si vous avez des variables SredRazmax, SredRazmin, Sredn qui sont des sommes de valeurs de tableaux, alors pour calculer correctement la somme, vous devez mettre à zéro la variable et ensuite additionner les valeurs de tableaux et les enregistrer dans cette variable

c'est-à-dire

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
    SredRazmax = 0.0;
    SredRazmin = 0.0;
    Sredn = 0.0;
    .....

Et le deuxième, ce que vous avez une question, dans l'indicateur chaque tick appelleraOnCalculate() et cela signifie que vous compterez constamment les sommets de ZigZag à chaque tick, c'est-à-dire environ 40-60 fois par seconde.

 
Artyom Trishkin:
Un objet créé par new doit soit être attaché à un tableau d'objets, soit être supprimé par lui-même dans OnDeinit().

Merci pour cet éclairage. Mais vous devriez au moins lire ma question.

 
mbjen:

Merci pour cet éclairage. Mais vous devriez au moins lire ma question.

Je l'ai fait et j'y ai répondu.
Raison: