Questions des débutants MQL4 MT4 MetaTrader 4 - page 172

 

Bonjour.

Veuillez m'indiquer comment procéder correctement.

Il existe une collection globale d'objets :

CArrayObj array;

Il existe une classe supplémentaire où de nombreux calculs sont effectués, notamment la création d'objets et leur ajout à la collection :

class CCheck : public CArrayObj
  {
  }
bool CCheck::SomeMethod(void)
  {
   CSample *sample_object=new CSample();
   array.Add(sample_object);
  }

Cet objet supplémentaire de la classe CCheck, je le crée régulièrement dans une boucle. Mais je ne peux pas le détruire, car j'ai besoin d'objets CSample dans la collection de tableaux. Si je détruis CCheck, je perds aussi les sample_objects dans le tableau.

Je déplace maintenant ces objets CCheck vers un autre tableau d'objets poubelle, que je vide lorsque je n'ai plus besoin des objets correspondants dans le tableau. Mais j'obtiens une erreur de mémoire parce que je dois garder beaucoup d'objets CCheck lourds dans le tableau. Mais je n'ai pas besoin de l'objet entier, juste de l'objet CSample créé. Pourriez-vous me dire comment faire correctement, afin que je puisse sauvegarder uniquement l'objet CSample et supprimer l'objet CCheck. Je n'arrive pas à comprendre.

Le code est le suivant :

CArrayObj array;
CArrayObj gargage_array;

void OnTick()
  {
   for(int i=0;i<total;i++)
     {
      CCheck *check_obj=new CCheck();
      check_obj.Check();
      garbage_array.Add(check_obj);
     }
   if(..)
     {
      array.Clear();
      garbage_array.Clear();
     }
  }

class CCheck : public CArrayObj
  {
   public:
   void         Check(void);
   protected:
   bool         SomeMethod(void);
  };
void CCheck::Check(void)
  {
   ...
   SomeMethod();
  }
bool CCheck::SomeMethod(void)
  {
   CSample *sample_object=new CSample();
   array.Add(sample_object);
  }

class CSample : public CObject
  {
  };
 

La solution se trouve quelque part sur un forum, mais je n'arrive pas à trouver la réponse.

Qui a trouvé un "antidote" contre cela :

Panneau standard

Le code est standard :

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {   
//--- create application dialog
      if(!ExtDialog.Create(0,"For Example ",0,40,40,760,400))
      //return(INIT_FAILED);
      return(false);            // исключительно для того, чтобы продемонстрировать наложение "панелей"
//---
//--- run application
   ExtDialog.Run();
//--- succeed
//-----
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy dialog
   ExtDialog.Destroy(reason);
//---
  }
//+------------------------------------------------------------------+
//| Expert chart event function                                      |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,         // event ID  
                  const long& lparam,   // event parameter of the long type
                  const double& dparam, // event parameter of the double type
                  const string& sparam) // event parameter of the string type
  {
   ExtDialog.ChartEvent(id,lparam,dparam,sparam);
   ChartRedraw();
  }

L'essentiel : l'Expert Advisor se bloque lorsqu'il passe d'une période à une autre. Dans mt5, ce problème n'existe pas.

Y a-t-il une solution ? Ou il vaut mieux oublier les panneaux dans mt4 :)

 
Vjacheslav Lapaev:

La solution se trouvait déjà quelque part sur le forum, mais je n'arrive pas à trouver la réponse.

Qui a trouvé un "antidote" contre cela :


Le code est standard :

L'essentiel : le conseiller expert se bloque lorsque je passe d'une période à une autre. Dans mt5, ce problème n'existe pas.

Y a-t-il une solution ? Ou il vaut mieux oublier les panneaux dans mt4 :)

Peut-être que quelqu'un pourrait l'utiliser. En résumé, il y avait un Expert, je l'ai enregistré comme Indicateur, tout fonctionne. Je veux dire le code pour le Panel.

 

Bonjour !

Je pensais qu'il était possible d'imprimer simplement un tableau, mais je ne me souviens pas et je ne trouve pas comment le faire. Comment ?

 
Nauris Zukas:

Bonjour !

Je pensais qu'il était possible d'imprimer simplement un tableau, mais je ne me souviens pas et je ne trouve pas comment le faire. Comment ?

ArrayPrint
 
Vladislav Andruschenko:
ArrayPrint

Ah, c'était dans MQL5, merci clairement !

 

Je ne comprends pas ce que vous devez faire pour le réparer :

4030 est "chart not responding".

Hier, cela a fonctionné :( La seule différence est que MT5 est optimisé en parallèle (utilise aussi le timer), mais il y a des ressources libres. Le graphique avec ce conseiller expert est "propre" du tout, rien n'y est attaché.

 
Igor Zakharov:

La seule différence est que MT5 est optimisé en parallèle (il utilise aussi le timer), mais il y a des ressources libres. Le graphique de ce conseiller expert est "propre", rien n'y est attaché.

J'ai arrêté l'optimisation en 5 et cela fonctionne. Il ne devrait pas y avoir de lien ?

 
Voici ma question sur l'Unicode. Pourquoi l'a-t-on effacé ?
 
secret:
Ma question sur Unicode était ici. Pourquoi a-t-il été supprimé ?

Laissez-moi vous donner un peu de contexte :

Un peu moins d'expression dans les questions et elles ne seront pas supprimées. C'est simple : poser une question, ce n'est pas déverser sa négativité sur les autres. Vous êtes dans une communauté.
Respectez l'endroit où vous posez vos questions et où vous vous attendez à obtenir une réponse, et non la réaction d'un modérateur.