Errores, fallos, preguntas - página 2976

 
Nikolai Semko:
¿A qué inconveniente se refiere?
¿Sobre la intensidad de los recursos?
Esa fue una declaración engañosa.
Los comentarios consumen otros tantos recursos.
Tarda entre 1 y 3 milisegundos en generar y mostrar un lienzo con texto para toda la ventana.
En MT5, la salida del comentario tarda un poco más. Si vas a actualizar la información del texto 30 veces por segundo, no verás ningún retraso.

No he investigado en detalle por qué Kanvas puede ser lento, pero creo que es por la misma razón... Los píxeles de la matriz no pueden ser cambiados selectivamente y recibir un comando de redibujado. Primero se hacen los cambios en el array y luego se hace el ResourceCreate. Que copia los píxeles uno a uno y luego, de manera similar, los grafica uno a uno y luego actualiza el gráfico (ChartRedraw) un poco más. ¿Cuántas operaciones innecesarias... En cualquier caso, esto matará la carga del procesador cuando esté ocupado con el procesamiento de datos útiles. Mientras que las etiquetas, al menos, ocupan menos píxeles (y, por tanto, salen más rápido). Y entonces, su mecanismo de salida está completamente dentro del gráfico (no es necesario pasar un array). Aunque no estoy deltodo seguro de su algoritmo, creo que son más rápidos. Solía hacer un panel de salida de texto basado en un lienzo. Al probar visualmente el Asesor Experto con dicho panel en el probador, no me impresionó mucho el resultado. Además de la propia carga del EA, el redibujado del panel era bastante molesto. El panel se actualiza constantemente(ResourceCreate -ChartRedraw) en cada tick. Aunque no he notado esas ralentizaciones con las etiquetas.

 

¿O soy un tonto o los esquís no se mueven? mt4 build 1320

double LotStep = SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_STEP);
double Lot=0.7;
PrintFormat("LotStep %f, lot %f, %f, %f %f",LotStep,Lot,Lot/LotStep,MathFloor(Lot/LotStep),(int)double(Lot/LotStep));
//Print
//2021.03.07 23:42:46.507	2021.02.25 07:36:40  EA_CCIcross_v1.0 AUDJPY,M5: LotStep 0.010000, lot 0.070000, 7.000000, 6.000000 6.000000

p/s/ Entiendo que 7 es 6,9999 pero por qué entonces 0,7 dividido por 0,1 imprime como 7,000 y no como 6,9999, engañoso.
 
Mihail Matkovskij:

No he resuelto en detalle por qué Kanvas puede ser lento, pero creo que es por la misma razón... Los píxeles de la matriz no pueden ser cambiados selectivamente y recibir un comando de redibujado. Primero se hacen los cambios en el array y luego se hace el ResourceCreate. Que copia los píxeles uno a uno y luego, de manera similar, los grafica uno a uno y luego actualiza el gráfico (ChartRedraw) un poco más. ¿Cuántas operaciones innecesarias... En cualquier caso, esto matará la carga del procesador cuando esté ocupado con el procesamiento de datos útiles. Mientras que las etiquetas, al menos, ocupan menos píxeles (y, por tanto, salen más rápido). Y entonces, su mecanismo de salida está completamente dentro del gráfico (no es necesario pasar un array). Aunque no estoy deltodo seguro de su algoritmo, creo que son más rápidos. Solía hacer un panel de salida de texto basado en un lienzo. Al probar visualmente el Asesor Experto con dicho panel en el probador, no me impresionó mucho el resultado. Además de la propia carga del EA, el redibujado del panel era bastante molesto. El panel se actualiza constantemente(ResourceCreate -ChartRedraw) en cada tick. Al mismo tiempo, nunca he notado tanta ralentización con las etiquetas.

Es sólo su imaginación.
Por supuesto que nada es gratis, pero kanvas es la forma más rápida de mostrar texto en MT5, porque kanvas es una base y los comentarios y etiquetas son secundarios a kanvas.
Utiliza los desimpresores si eres tan ávido de tus recursos de CPU...
 
Mihail Matkovskij :

No he resuelto en detalle por qué Kanvas puede ser lento, pero creo que es por la misma razón... Los píxeles de la matriz no pueden ser cambiados selectivamente y recibir un comando de redibujado. Primero se hacen los cambios en el array y luego se hace el ResourceCreate. Que copia los píxeles uno a uno y luego, de manera similar, los grafica uno a uno y luego actualiza el gráfico (ChartRedraw) un poco más. ¿Cuántas operaciones innecesarias... En cualquier caso, esto matará la carga del procesador cuando esté ocupado con el procesamiento de datos útiles. Mientras que las etiquetas, al menos, ocupan menos píxeles (y, por tanto, salen más rápido). Y entonces, su mecanismo de salida está completamente dentro del gráfico (no es necesario pasar un array ). Aunque no estoy del todo seguro de su algoritmo, creo que son más rápidos. Solía hacer un panel de salida de texto basado en un lienzo. Al probar visualmente el EA con dicho panel en el probador, no me impresionó mucho el resultado. Además de la propia carga del EA, el redibujado del panel era bastante molesto. Hay una actualización constante ( ResourceCreate - ChartRedraw ) en cada tick. No he notado esa ralentización con las etiquetas.

Por favor, no hables de lo que no sabes. @Nikolai Semko tiene toda la razón, y Canvas funciona rápido y sin problemas ni fallos.
 

@Ilyas

¿Fallo del compilador? Construye 2817.

   const ushort AN_USHORT_CONSTANT = 1;
//---
   ushort avariable = 1;

   switch(avariable)
     {
      case AN_USHORT_CONSTANT :
         Print("Compiler bug ?");
         break;
     }


 
Nikolai Semko:
Sólo te parece a ti.
Obviamente, nada es gratis, pero kanvas es la forma más rápida de mostrar texto en MT5, ya que kanvas es la base, y los comentarios y etiquetas son secundarios a kanvas.
Utiliza la imprimación si eres tan ávido de recursos de la CPU...

¿Cómo sabes que las etiquetas se basan en canva, si el propio canva es un complemento de OBJ_BITMAP_LABEL y la etiqueta es OBJ_LABEL?

Mientras he estado charlando aquí en el foro, ya he esbozado el panel de salida en etiquetas, con un número cualquiera de filas y columnas. Y para el lienzo tengo otras tareas, en mis otras aplicaciones. Y ahí también funciona muy bien.

Alain Verleyen:
Por favor, no hable de lo que no sabe. @Nikolai Semko tiene toda la razón, y Canvas funciona rápidamente y sin problemas ni fallos.

¿Así que probablemente lo sabes todo? Entonces, tal vez compartir sus conocimientos o enlaces donde se puede leer sobre los gráficos en MetaTrader para que yo sepa lo que usted sabe también? :)

 
Alain Verleyen:

@Ilyas

¿Fallo del compilador? Construye 2817.

En MQL, const no es const en absoluto. De hecho, const sólopuede escribirse a través de una macro

//const ushort AN_USHORT_CONSTANT      = 1; //(*)
#define         AN_USHORT_CONSTANT ushort(1) //(**)
void main()
{
        int i[AN_USHORT_CONSTANT];      //(1) нормально
        ushort avariable = 1;
        switch(avariable) {
        case AN_USHORT_CONSTANT:        //(2) нормально
                break;
        }
}
void f( int = AN_USHORT_CONSTANT ) {}   //(3) нормально
enum { e = AN_USHORT_CONSTANT };        //(4) нормально    
 
A100 :

En MQL, const no es const en absoluto. De hecho la const sólo se puede escribir a través de una macro

Eso es un error :-D
 
Alain Verleyen:
Sí, es un error :-D

Tenga en cuenta que esto no es en un caso, sino en todos (1) (2) (3) (4) está diseñado de esta manera: con (*) habrá un error, pero con (**) está bien. Es decir, faltan las constantes como entidad

 
A100 :

Tenga en cuenta que esto no es en un caso, sino en todos (1) (2) (3) (4) está diseñado de esta manera: con (*) habrá un error, pero con (**) está bien. Es decir, faltan las constantes como entidad

Lo sé. Por eso pido a los desarrolladores que lo arreglen.
Razón de la queja: