¿Cómo puedo hacer que la salida de un gráfico sea en fuente monoespaciada? - página 3

 
Victor Ziborov:

En la fase de pruebas y optimización de los parámetros, la salida a Comentario y la salida a Etiqueta pueden ser desactivadas, pero cuando llegue el momento de utilizar el EA en la vida real, la salida a Comentario y la salida a Etiqueta deben ser activadas de nuevo.


gracias, cap )))))) no lo sabíamos

 
Victor Ziborov:

En la fase de prueba y optimización de los parámetros, la salida en el Comentario y la salida en la Etiqueta pueden estar desactivadas, pero cuando llegue el momento de utilizar el EA en la vida real, la salida en el Comentario, y la salida en la Etiqueta deben volver a estar activadas.

En general, esto se hace automáticamente:

bool bIsComment = (!IsTesting() || IsVisualMode());

A continuación, comprobamos bIsComment en el código si el comentario debe ser emitido o si se debe realizar algún gráfico. De este modo, no es necesario cambiar nada manualmente.

 
Ihor Herasko:

Esto se hace automáticamente:

A continuación, comprobamos bIsComment en el código cuando es necesario emitir comentarios o realizar alguna construcción gráfica. De este modo, no es necesario cambiar nada manualmente.


¿Dónde se dice que hay que hacerlo manualmente? ¿Me he perdido algo?

 
Yury Kirillov:

¿Dónde dice que hay que hacerlo manualmente? ¿Me he perdido algo?


Respondiendo a este post. Ahí es básicamente ambiguo. Pero de alguna manera parece más bien que "deshabilitar" y "habilitar" es un parámetro de configuración que es cambiado por el usuario dependiendo de cómo se ejecuta el programa. Acabo de aclarar que no es necesario ese parámetro.

 
Artem Virskiy:

Puede medir la anchura de cada carácter en piskels (habrá varios grupos con la misma anchura). Escriba una función que añada cualquier cadena con espacios hasta que alcance un ancho determinado. A continuación, ensambla el comentario a partir de estas subcadenas.

Si haces esa función, publícala en kodobase, muchos te lo agradecerán. Y yo también. Soy demasiado perezoso para molestarme.

En este caso, sería útil el símbolo \x200A - anchura mínima del espacio, para un ajuste exacto. Y sustituir los espacios regulares por el símbolo /1 - espacio ancho (después de todo, la longitud del comentario es limitada). Quizá haya otros espacios útiles, pero no los conozco.


Gracias por la idea.

 
Yury Kirillov:
Los comentarios son mucho más rápidos que las fuentes gráficas.

Es lógico, pero no lo es.
Y es fácil de comprobar.
Aquí hay un script en MQL5 (no lo he probado en MT4):

#property script_show_inputs
#include <Canvas\Canvas.mqh>

input uint   FontSize=12;                                   // размер шрифта
input ENUM_COLOR_FORMAT format=COLOR_FORMAT_ARGB_NORMALIZE; //Способ обработки цвета

void OnStart()
  {
   CCanvas Text;
   ulong ColorScreen=ChartGetInteger(0,CHART_COLOR_BACKGROUND,0);

   Text.FontSet("Arial",FontSize);
   string str="Соотношение времени выполнения Canvas/Comment = 0.00000";
   int H=Text.TextHeight(str);
   int W=Text.TextWidth(str);
   if(!Text.CreateBitmapLabel(0,0,"FONT",2,130,W,H,format)) Print("Error creating canvas: ",GetLastError());

   ulong t1=1,t2=1,t0;
   int i=0;
   color clr=(color)ARGB(255,255^GETRGBR(ColorScreen),255^GETRGBG(ColorScreen),255^GETRGBB(ColorScreen));
   while(!IsStopped())
     {
      t0=GetMicrosecondCount();
      Text.Erase((color)ColorScreen);
      Text.TextOut(0,0,str,clr);
      Text.Update();
      t1+=GetMicrosecondCount()-t0;
      t0=GetMicrosecondCount();
      Comment(str);
      t2+=GetMicrosecondCount()-t0;
      str="Соотношение времени выполнения Canvas/Comment = "+DoubleToString((double)t1/(double)t2,5);
      if(i==1000) {Print("Canvas - ",t1,"   Comment - ",t2); i=0; t1=1; t2=1; } else i++;
     }
   Text.Destroy();
   Comment("");

}

La prueba muestra que la salida gráfica es aproximadamente un 10% más rápida. Pero lo interesante es que incluso si se establece el tamaño de la fuente a 30 (en lugar de 12), la velocidad sigue siendo más rápida. Para mí, personalmente, es un misterio.

Archivos adjuntos:
 
Alexey Volchanskiy:

No hago caricaturas de 60k/s, sólo las pongo y ok.

El lienzo también puede hacer dibujos animados.


Archivos adjuntos:
 
Nikolai Semko:


Aquí hay un script en MQL5 (no lo he probado en MT4):


Lo he probado en MT4. El código también funciona allí.
En MT4 resultó que Comment es unas 5 veces más rápido que su homólogo gráfico. Y resulta que Comment() es 5-6 veces más lento en MT5 que en MT4. Esta es una sorpresa desagradable y extraña. Así que mi pregunta es para los desarrolladores. ¿Por qué? ¡¡¡Está claro que es un error para el 5!!!

 
Nikolai Semko:

Es lógico, pero no lo es.
Y esto es fácil de comprobar.
Aquí hay un script para MQL5 (no lo he probado en MT4):

La prueba muestra que la salida gráfica es aproximadamente un 10% más rápida. Pero lo interesante es que incluso si se establece el tamaño de la fuente a 30 (en lugar de 12), la velocidad sigue siendo más rápida. Para mí, personalmente, es un misterio.


Estas medidas no son nada. Deberíamos ejecutar bucles separados de decenas de miles de pases para Comment y Canvas por separado, entonces podremos juzgar algo. Y el texto a imprimir debe cambiar, por ejemplo, que se imprima el valor del contador.

¿No podrías rehacerlo así?

 
Alexey Volchanskiy:

Estas medidas no son nada. Deberíamos hacer ciclos separados de varias decenas de miles de pasadas por separado para Comment y Canvas, entonces podremos juzgar algo. Y el texto a imprimir debe cambiar, por ejemplo, que se imprima el valor del contador.

¿Podría volver a hacerlo de esta forma?


Yo también intenté hacer bucles separados y me pareció que el resultado era bastante extraño. Los mismos resultados. Da igual que sea un bucle general o por separado. En mi muestra el texto cambia cada vez, me pregunto por qué no se ha notado. También conozco la optimización del compilador. ))