Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 1473

 
Aleksandr Slavskii #:

Intenté hacer un análogo del comentario, pero las letras eran más grandes.

Ahora las letras son legibles.

Pero como no sé OOP, mi comentario no afecta muy bien al trabajo del ordenador,

Algún tiempo después de ejecutar el Asesor Experto con un comentario en varios gráficos, algo malo sucede, hasta el desvanecimiento de la pantalla y reiniciar el servidor))))))

En el terminal registra un montón de estos registros.

Ayuda a los que saben cómo hacerlo, para que la memoria no se escape.

El archivo de comentarios adjunto se ve así:

Ejemplo de uso así:


Está claro que estoy haciendo algo mal con la clase CCanvas, pero qué es exactamente lo que está mal no lo entiendo.

Si te interesa el código sin la librería CCanvas, pero con el objeto OBJ_BITMAP_LABEL, mira mi código ...

ClosingLots
ClosingLots
  • www.mql5.com
Индикатор информер.
 
Alexey Viktorov #:

Si estás interesado en código sin la librería CCanvas pero con el objeto OBJ_BITMAP_LABEL mira mi código ...

Gracias, buena solución, me gusta.


Pero, "un samurai no tiene meta , sólo camino ", la solución de cómo hacer un comentario es menos importante para mí que averiguar cuál es mi error en el uso de la clase.

 
Aleksandr Slavskii #:

Gracias, bonita solución, me ha gustado.


Pero, "un samurai no tiene meta , sólo un camino ", me importa menos averiguar cómo hacer un comentario que averiguar cuál fue mi error en el uso de la clase.

¿Cuántos, en cuántos BitmapLabel se crean? (Ctrl+B --> Todos).

 
Artyom Trishkin #:

¿Cuántos, en qué cantidad se crea un BitmapLabel? (Ctrl+B --> Todas).

En un gráfico, un objeto.

¿Y cómo puede haber más de uno? El nombre de todos los objetos creados es el mismo - "Comentario".


Me olvidé de escribir.

El problema sale en un servidor super pobre con un núcleo y 1gb de memoria. Y no inmediatamente, pero después de algún tiempo.

Pero creo que si todo fuera normal con el código, no habría ningún problema. Algo está obstruyendo la memoria RAM, no puedo entender lo que es.

¿Por qué es importante que lo sepa?

Puedes comprar capacidad de servidor, puedes comprar memoria, puedes actualizar sin fin, pero eso no hará que mi código sea correcto.

 
Aleksandr Slavskii #:

En un gráfico, un objeto.

¿Cómo puede haber más de uno? El nombre de todos los objetos creados es el mismo: "Comentario".


Me olvidé de escribir.

El problema sale en un servidor super pobre con un núcleo y 1gb de memoria. Y no inmediatamente, pero después de algún tiempo.

Pero creo que si todo fuera normal con el código, no habría ningún problema. Algo está obstruyendo la memoria RAM, no puedo averiguar lo que es.

¿Por qué es importante para mí entender ?

Puedes comprar más capacidad de servidor, puedes comprar más memoria, puedes actualizar sin parar, pero eso no hará que mi código sea correcto.

¿Qué hay en el registro cuando quitas un EA del gráfico? Por lo general, le dice que los objetos son fugas, que le da una dirección de búsqueda

 
Artyom Trishkin #:

¿Qué aparece en el registro cuando se elimina EA del gráfico? Por lo general, te dice que los objetos son fugas, que le da una dirección de búsqueda

He borrado los logs. Pero no hay problema, no tardaré mucho en hacerlo de nuevo. Ahora voy a iniciar el Asesor de Expertos en el servidor, en la mañana (tal vez antes) será registros.

Pero por lo que yo recuerdo, no pude encontrar en ellos una indicación de dónde se fuga de memoria.

Y el Asesor de Expertos no se elimina de la tabla, lo más probable es que sólo se reinicia el servidor, ya que no hay registro de cierre de la terminal en los registros. Pero esto no es seguro.

 
Aleksandr Slavskii #:

He borrado los registros. Pero no hay problema, no tardaré mucho en hacerlo de nuevo. Voy a iniciar el Asesor Experto en el servidor ahora, voy a tener los registros en la mañana (tal vez antes).

Pero por lo que recuerdo, no pude encontrar en ellos una indicación de dónde se está filtrando la memoria.

Y el Asesor Experto no se quita del gráfico, lo más probable es que sólo reinicie el servidor, ya que no hay registro de cierre de terminal en los logs. Pero esto no es seguro.

Usted no ha entendido el sentido de mi pregunta. No es necesario esperar al servidor cuando se queda sin memoria y explota.

Si hay una fuga de objetos en el código, vuelva a compilarlo en su ordenador local cuando el Asesor Experto se está ejecutando - un mensaje sobre el número y tipo de objetos filtrados debe aparecer en los registros. O ejecútelo en un gráfico y bájelo de inmediato - también debería aparecer un mensaje sobre la fuga, si la hay, por supuesto.

 
Artyom Trishkin #:

No has entendido mi pregunta. Usted no necesita esperar en el servidor cuando se queda sin memoria y ráfagas.

Si hay una fuga de objetos en el código, vuelva a compilarlo en su ordenador local con el Asesor Experto en ejecución - un mensaje sobre el número y tipo de objetos filtrados debe aparecer en los registros. O ejecútelo en un gráfico y bájelo de inmediato - también debería aparecer un mensaje sobre la fuga, si la hay, por supuesto.

No escribe nada al compilar. Lo borra e instala uno nuevo. Y ya está.

NM      0       00:18:47.545    Experts expert Comm (SBRF-12.23,M1) removed
JI      0       00:18:47.547    Experts expert Comm (SBRF-12.23,M1) loaded successfully
KQ      0       00:18:47.560    Experts expert Comm (RTS-12.23,M1) removed
EE      0       00:18:47.562    Experts expert Comm (RTS-12.23,M1) loaded successfully

Sigue funcionando en el servidor. Esperaré, tal vez escriba algo en los registros.

 
Aleksandr Slavskii #:

Intenté hacer un análogo del comentario, pero las letras eran más grandes.

Algún tiempo después de ejecutar el Asesor Experto con un comentario en varios gráficos, algo malo sucede, hasta la pantalla se apaga y reiniciar el servidor)))))

Está claro que algo estoy haciendo mal con la clase CCanvas, pero qué es exactamente lo que falla, no lo entiendo.

Creo que lo he entendido. Corregidme si lo he entendido mal.

En mi código, en cada tick creo un recurso con diferentes nombres.

código de Canvas

      //--- generate resource name
      m_rcname="::"+name+(string)ChartID()+(string)(GetTickCount()+MathRand());
      //--- initialize data with zeros
      ArrayInitialize(m_pixels,0);
      //--- create dynamic resource
      if(ResourceCreate(m_rcname,m_pixels,width,height,0,0,0,clrfmt))

Y en el siguiente refresco de la imagen este recurso no se borra, aparentemente.

El objeto es el mismo, pero los recursos se le adjuntan de forma diferente.

Así que he rehecho el código.

Creo que debería ser correcto.

#include <Canvas\Canvas.mqh>
//+------------------------------------------------------------------+
void Comm(string txt, color clr = clrYellow, int FontSize = 20, string Font = "Consolas", int flag = FW_BOLD)
  {
   int shift = 0;
   if(ChartGetInteger(0, CHART_SHOW_ONE_CLICK))
      shift = 60;

   CCanvas canvas;
   canvas.FontNameSet(Font);
   canvas.FontFlagsSet(flag);
   canvas.FontSizeSet(FontSize);

   int width = 0, height = 0;
   string result[];
   int size = StringSplit(txt, StringGetCharacter("\n", 0), result);
   height = (int)(FontSize * 1.8 * size);

   for(int i = 0; i < size; i++)
     {
      int w = canvas.TextWidth(result[i]);
      if(width < w)
         width = w;
     }

   if(ObjectFind(0, "Comment") < 0)
      canvas.CreateBitmapLabel(0, 0, "Comment", 5, 20 + shift, width, height, COLOR_FORMAT_ARGB_NORMALIZE);
   else
      canvas.Attach(0, "Comment", width, height, COLOR_FORMAT_ARGB_NORMALIZE);
   canvas.Erase(0x00FFFFFF);

   for(int i = 0; i < size; i++)
      canvas.TextOut(0, (int)(FontSize * 0.8 * i), result[i], ColorToARGB(clr, 255));

   canvas.Update(true);
  }
//+------------------------------------------------------------------+
 
Aleksandr Slavskii #:

No escribe nada al compilar. Desinstala y reconstruye. Eso es todo.

Sigue funcionando en el servidor. Esperaré, tal vez escriba algo en los registros.

"Revista "Expertos