Errores, fallos, preguntas - página 2488

 

Podría estar equivocado, por supuesto, pero parece que hace 2 meses mi plantilla funcionaba, y ahora cuando llamo al destructor CList, los objetos no destruidos permanecen en memoria, código:

#property strict
#include <Arrays\List.mqh>
//+------------------------------------------------------------------+
class CData : public CObject
  {
public:
   int               x;
   double            y;
                     CData(){};
                     CData(int ival,double dval){x=ival;y=dval;}
  };
//+------------------------------------------------------------------+
template<typename T>class CDataBase
  {
private:
   CList            *mlist;
   T                *Tptr;
public:
   void CDataBase()           { mlist=new CList;                                    }
   void ~CDataBase(void)      { delete mlist;                                       }
   int ArraySize(void)        { return(mlist.Total());                              }
   T *operator[](int index)   { return(mlist.GetNodeAtIndex(index));                }
   void  AddValue (T &value)  { Tptr = new T; Tptr  = value; mlist.Add(Tptr);       }
   string TypeName()          { return(typename(T));                                }
  };
//+------------------------------------------------------------------+
void OnStart()
  {
   CDataBase<CData>*data=new CDataBase<CData>;
   int i;
   for(i=0; i<5; i++)
     {
      data.AddValue(new CData(i,i*2.0));
     }

   for(i=0; i<data.ArraySize(); i++)
     {
      Print(i," : ",data[i].x," , ",data[i].y);
     }
   Print(data.TypeName());
   delete data;
  }
//+------------------------------------------------------------------+

2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 0 : 0 , 0.0

2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 1 : 1 , 2.0

2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 2 : 2 , 4.0

2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 3 : 3 , 6.0

2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 4 : 4 , 8.0

2019.06.21 07:19:45.926 tstlist (EURUSD,H1) CData

2019.06.21 07:19:45.926 tstlist (EURUSD,H1) Quedan 5 objetos sin borrar

2019.06.21 07:19:45.926 tstlist (EURUSD,H1) Quedan 5 objetos de tipo CData

2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 280 bytes de memoria filtrada

MT5 build 2085
 
Igor Makanu:

Puedo estar equivocado por supuesto, pero parece que hace 2 meses mi plantilla funcionaba, pero ahora cuando llamo al destructor CList, los objetos que no han sido destruidos permanecen en memoria, el código:

#property strict
#include <Arrays\List.mqh>
//+------------------------------------------------------------------+
class CData : public CObject
  {
public:
   int               x;
   double            y;
                     CData(){};
                     CData(int ival,double dval){x=ival;y=dval;}
  };
//+------------------------------------------------------------------+
template<typename T>class CDataBase
  {
private:
   CList            *mlist;
   T                Tptr;
public:
   void CDataBase()           { mlist=new CList;                                    }
   void ~CDataBase(void)      { delete mlist;                                       }
   int ArraySize(void)        { return(mlist.Total());                              }
   T operator[](int index)   { return(mlist.GetNodeAtIndex(index));                }
   void  AddValue (T &value)  { Tptr  = value; mlist.Add(Tptr);      }
   string TypeName()          { return(typename(T));                                }
  };
//+------------------------------------------------------------------+
void OnStart()
  {
   CDataBase<CData*>* data=new CDataBase<CData*>;
   int i;
   for(i=0; i<5; i++)
     {
      CData* Tmp = new CData(i,i*2.0);
      data.AddValue(Tmp);
     }

   for(i=0; i<data.ArraySize(); i++)
     {
      Print(i," : ",data[i].x," , ",data[i].y);
     }
   Print(data.TypeName());
   delete data;
  }
//+------------------------------------------------------------------+
 
fxsaber:

Sí, probablemente tengas razón, tu ejemplo funciona correctamente, en algún lugar confundí los ejemplos de prueba en mis fuentes

Gracias.

 
Вероника Сорокина:
Buenas tardes. Esta es la situación. Mi Asesor Experto/Script/indicador/lo que sea que haya escrito en mql4 no está unido a una ventana de gráfico, quiero que se mantenga unido a un programa... como, voy a escribir una cosa útil y no quiero que esté unido a nuevos gráficos abiertos todo el tiempo. Algo así como un servicio (de MT5), pero lo necesitas en MT4.

Utilizar los servicios

 

¿Es posible añadir el código actual de ME a los favoritos del terminal?



En realidad, me gustaría tener una pestaña separada de "Depuración" donde pudiera añadir el código que se está escribiendo y probando.

Ahora resulta que para un trabajo conveniente es necesario tener un Terminal separado, donde todo lo que no concierne a los proyectos actuales está ausente.

Entonces la depuración es mucho más rápida, porque no hay confusión con el resto del código en el propio Terminal.

 

Estimados desarrolladores. Por favor, aclárese, ¿es normal el reparto automático de las memorias intermedias de los indicadores? Por re-partición me refiero a lo siguiente: barras máximas en la ventana, por ejemplo 5000. El tamaño del buffer + rates_total se restablecen a 5000 cuando llegan a 6439. Lo mismo ocurre cuando las barras máximas en la ventana = 10000. El reinicio se produce en 11439.

Por ello, los indicadores pueden bloquearse y mostrar datos incorrectos.

Construye 2085. He notado este comportamiento desde aproximadamente 2000 builds.

 
Alexey Kozitsyn:

Estimados desarrolladores. Por favor, aclárese, ¿es normal el reparto automático de las memorias intermedias de los indicadores? Por re-partición me refiero a lo siguiente: barras máximas en la ventana, por ejemplo 5000. El tamaño del buffer + rates_total se restablecen a 5000 cuando llegan a 6439. Lo mismo ocurre cuando las barras máximas en la ventana = 10000. El reinicio se produce en 11439.

Por ello, los indicadores pueden bloquearse y mostrar datos incorrectos.

Construye 2085. He notado este comportamiento desde aproximadamente 2000 builds.

Este comportamiento era originalmente en cinco.

Dé un ejemplo de una caída del indicador debido a la reasignación del búfer

 
Slava:

Este fue el comportamiento en el Cinco desde el principio.

Dé un ejemplo de caída del indicador debido a la redistribución de los buffers

Entonces, ¿confirmas que cuando hay una acumulación de 1439 barras por encima de la norma, el terminal DEBE restablecer el tamaño del buffer al valor de las barras máximas de la ventana? Si la respuesta es afirmativa, debe mencionarse en la documentación. Ya que se trata de un comportamiento imprevisto.

En cuanto al ejemplo. Me refiero a desarrollos personalizados que funcionan con números de barra. Por ejemplo, memoricé el número de barra 6438 y después de 2 minutos (M1 TF) se redistribuyeron los buffers y salí de la matriz. Ahora está claro que se trata de un comportamiento "estándar". Por favor, actualice la documentación.

 

Error durante la ejecución:

class A { public:
        virtual void f( int = 0 ) { Print( 1 ); }
};
class B : public A { public:
        virtual void f( int     ) { Print( 2 ); }
};
void OnStart()
{
        B b;
        b.f();
}

Resultado: 1

Esperado: 2 o (como en C++) - error de compilación

 
Alexey Kozitsyn:

Por favor, actualice la documentación.

¿Dónde hay que actualizar la documentación?

El identificador inequívoco de un compás siempre ha sido la hora del compás, no el número del mismo.

Si alguien llamara a ChartSetSymbolPeriod a su gráfico, captaría fácilmente un cambio en el número de barras. ¿Sorpresa?

Por cierto, existe el parámetro rates_total en OnCalculate