Preguntas de los principiantes MQL4 MT4 MetaTrader 4 - página 172

 

Hola.

Por favor, aconséjeme cómo hacer esto correctamente.

Hay una colección global de objetos:

CArrayObj array;

Hay una clase adicional en la que se realizan muchos cálculos y que incluye la creación de objetos y su adición a la colección:

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

Este objeto adicional de la clase CCheck lo creo regularmente en un bucle. Pero no puedo destruirlo, porque necesito objetos CSample en la colección del array. Si destruyo CCheck, también pierdo los sample_objects del array.

Ahora meto estos objetos CCheck en otro array de objetos basura, que borro cuando ya no necesito los objetos correspondientes en el array. Pero me da error de memoria porque tengo que guardar muchos objetos CCheck pesados en el array. Pero no necesito el objeto completo, sólo necesito el objeto CSample creado. Podrían decirme cómo hacerlo bien, para poder guardar sólo el objeto CSample y eliminar el CCheck. No puedo entenderlo.

El código es así:

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 solución ha estado en algún foro, pero no encuentro la respuesta.

Que ha encontrado un "antídoto" contra esto:

Panel estándar

El código es estándar:

//+------------------------------------------------------------------+
//| 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();
  }

La esencia: el Asesor Experto se bloquea al cambiar de un marco temporal a otro. En mt5 no existe ese problema.

¿Hay alguna solución? O es mejor olvidarse de los Paneles en mt4 :)

 
Vjacheslav Lapaev:

La solución ya estaba en algún lugar del foro, pero no encuentro la respuesta.

Que encontró "antídoto" contra esto:


El código es estándar:

La esencia: el Asesor Experto se bloquea cuando cambio de un marco temporal a otro. En mt5 no existe ese problema.

¿Hay alguna solución? O es mejor olvidarse de los Paneles en mt4 :)

Tal vez alguien pueda usarlo. En resumen, había un Experto, lo guardé como un Indicador, todo funciona. Me refiero al código del Panel.

 

¡Buenas tardes!

Pensaba que era posible simplemente imprimir un array, pero no me acuerdo y no encuentro cómo hacerlo. ¿Cómo?

 
Nauris Zukas:

¡Buenas tardes!

Pensaba que era posible simplemente imprimir un array, pero no me acuerdo y no encuentro cómo hacerlo. ¿Cómo?

ArrayPrint
 
Vladislav Andruschenko:
ArrayPrint

Ah, era en MQL5, ¡gracias claramente!

 

No entiendo qué hay que hacer para solucionarlo:

El 4030 es "el gráfico no responde".

Ayer funcionó :( La única diferencia es que MT5 se está optimizando en paralelo (también utiliza el temporizador), pero hay recursos libres. El gráfico con este Asesor Experto está "limpio" en absoluto, no tiene nada adosado.

 
Igor Zakharov:

La única diferencia es que MT5 está optimizado en paralelo (también utiliza el temporizador), pero hay recursos libres. El gráfico con este Asesor Experto está "limpio", no tiene nada adosado.

He dejado de optimizar en 5 y funciona. ¿No debería haber alguna conexión?

 
Esta era mi pregunta sobre Unicode. ¿Por qué se ha borrado?
 
secret:
Mi pregunta sobre Unicode estaba aquí. ¿Por qué se borró?

Permítanme que les ponga en antecedentes:

Un poco menos de expresión en las preguntas y no se borrarán. Es muy sencillo: hacer una pregunta no es descargar tu negatividad en los demás. Estás en una comunidad.
Respeta el lugar donde haces tus preguntas y espera obtener una respuesta, no la reacción de un moderador.

Razón de la queja: