Discusión sobre el artículo "Guía práctica de MQL5: Controles de la subventana del indicador: Botones" - página 6

 
tol64:

No necesariamente cada segundo, hay una alternativa en otro evento allí (ya discutido). Por favor, dame un ejemplo de cómo lo hice aquí. ) A partir de la condición de que el Asesor de Expertos necesita este evento, pero el indicador no. Así será más claro.

P.D. Corrección. He cometido un error. )) Tu variante no es más correcta. No encaja en absoluto. Así que es mejor dar un ejemplo basado en la condición anterior.

Si el indicador no necesita este evento, simplemente no lo procesa. Además, el Asesor Experto no debe desactivar los eventos que no necesita. Puede activarlos, pero no desactivarlos. Porque no es asunto suyo qué eventos pasan por su ventana y quién puede necesitarlos.

 
C-4:

Si el indicador no necesita este evento, simplemente no lo procesa. Además, el Asesor Experto no debe desactivar eventos que no necesita. Puede activarlos, pero no desactivarlos. Porque no es asunto suyo qué eventos pasan por su ventana y quién puede necesitarlos.

La cuestión es que este evento puede no procesarse (simplemente olvidarse de él). Pero esto no significa que la cola de eventos de la función OnChartEvent() no se llene de cosas que no se necesitan en un momento dado.

Y esto significa miles de eventos innecesarios por minuto. ¿Y si hay varios programas en el gráfico? ¿Ni un argumento?

Se desperdician muchos menos recursos si incluso se hace una comprobación cada segundo para ver si un evento está habilitado, y habilitarlo si no lo está en ese momento pero es necesario. ¿Tampoco es un argumento? Entonces hazlo a tu manera.

Yo no tengo más argumentos. ) Mantendré mi opinión, ya que no he oído nada que me haga cambiar de opinión.

Bien. Entonces tengo una pregunta para aquellos que piensan que este evento no necesita ser desactivado por el programa que lo habilitó.

¿Por qué? )

Es decir

1. ¿Por qué dejar algo que no es necesario (miles de eventos por minuto)?

2. (en otra formulación) ¿Por qué gastar más recursos cuando se puede gastar menos?

Opciones como "si un evento no es necesario, simplemente no lo proceses" personalmente no me gustan nada. No puedes desactivar uno, no puedes desactivar el otro, ¿y qué vas a conseguir con ello?

 

Estimado autor del artículo, en vano no explica las contradicciones internas de sus productos, que intenta combatir y enseñar a los "principiantes".

Así, el autor ha mostrado los momentos resbaladizos que pueden trastornar el trabajo correcto de su indicador. Genial, ahora está claro para el "principiante" que:

  1. Al eliminar cualquier programa del gráfico, debe pensar en no perjudicar a otros programas.
  2. En ningún caso hay que colocar programas conflictivos en un gráfico, sino que es mejor colocarlos en otras ventanas del gráfico del símbolo en cuestión. Si alguien no lo sabe, un símbolo puede abrir un número suficiente de ventanas del gráfico.
  3. Cada gráfico tiene sus propias propiedades inherentes. Por lo tanto, al cambiarlas, puede perturbar el correcto trabajo de otros programas. Esto no debe hacerse bajo ninguna circunstancia.
  4. Debe ser "a prueba de tontos". Es decir, si un virus en forma de indicador u otro programa intenta cambiar las propiedades de un gráfico que usted utiliza en sus programas, debe comprobarlo. Y si ocurre con regularidad - ¡elimine el virus!
  5. Los errores en los programas para los mercados financieros suelen provocar grandes pérdidas. Recuérdelo.
 
tol64:

1. ¿Por qué dejar lo que no se necesita (miles de eventos por minuto)?

2. (en otra formulación) ¿Por qué gastar más recursos cuando se puede gastar menos?

Opciones como "si un evento no es necesario, simplemente no lo proceses" personalmente no me gustan nada. No puedes deshabilitar uno, no puedes deshabilitar el otro y ¿qué conseguirás con ello?

Obtendrás un código completamente controlado.

Haces hincapié en el rendimiento, pero ¿cae tanto con este evento habilitado? Para responder a esta pregunta, he escrito especialmente un simple Asesor Experto probando este evento. Habiendo probado diferentes combinaciones, obtuve la siguiente tabla:

Modo
% carga CPU
EVENT_MOVE_MOUSE está habilitado, el procesamiento de este evento en el Asesor Experto está habilitado.9%
EVENT_MOVE_MOUSE está activado, el procesamiento de este evento en el Asesor Experto está desactivado.
6%
EVENT_MOVE_MOUSE está desactivado, el procesamiento de este evento en el Asesor Experto está desactivado.
5-6%
El Asesor Experto está desactivado. El gráfico está cerrado. Basta con mover el ratón sobre la ventana de MetaTrader.
5-6%

Como se puede ver, la carga real aumenta sólo cuando el procesamiento real de este evento se lleva a cabo. Cabe destacar que, a juzgar por la carga de la CPU, MetaTrader rastrea la posición del ratón independientemente de si la suscripción a este evento está activada o no. En general, resulta que no tiene sentido ahorrar recursos hipotéticos, porque el seguimiento del ratón se realizará de todos modos.

Código del Asesor Experto de prueba:

//+------------------------------------------------------------------+
//|Prueba.mq5
//| Copyright 2013, MetaQuotes Software Corp.
//| http://www.mql5.com
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Función de inicialización experta|
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   ObjectCreate(0, "Edit", OBJ_EDIT, 0, 0, 0);
   ObjectSetInteger(0, "Edit", OBJPROP_XSIZE, 400);
   //Activar y desactivar el evento según nos convenga
   ChartSetInteger(0, CHART_EVENT_MOUSE_MOVE, false);
   
//---
   return(INIT_SUCCEEDED);
  }
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{
   //Comenta el bloque si no es necesario procesar el evento entrante.
   if(id == CHARTEVENT_MOUSE_MOVE)
   {
      string label = (string)lparam + " " + (string)dparam + " " + sparam;
      //printf(sparam);
      ObjectSetString(0, "Edit", OBJPROP_TEXT, label);
      ChartRedraw(0);
   }
}
Знакомство с MQL5: написание простого советника и индикатора
Знакомство с MQL5: написание простого советника и индикатора
  • 2010.03.16
  • Denis Zyatkevich
  • www.mql5.com
В этой статье проведен краткий обзор языка MQL5, приведен пример написания советника и индикатора. Данная статья ориентирована как на читателей, знакомых с программированием на языке MQL4, так и на тех, кто только начинает знакомство с программированием торговых систем и индикаторов.
 

1. Siempre debes considerar el caso de que un evento se pierda en la pila. Si algo crítico puede suceder en el caso de que un evento se pierda, es muy malo.

2. 2. Personalizar el gráfico a tu gusto es malo. Es casi lo mismo que operar con una máquina de trading automatizada sin un magik.

 
DC2008:

Estimado autor del artículo, en vano no explica las contradicciones internas de sus productos, que intenta combatir y enseñar a los "principiantes".

Así, el autor ha mostrado los momentos resbaladizos que pueden trastornar el trabajo correcto de su indicador. Genial, ahora está claro para un "principiante" que:

...

Puede inventar 20 reglas más para justificar su sentido de autoimportancia y entonces se confundirá definitivamente y "ayudará" a los principiantes. Contradicciones y malentendidos en este caso fueron observados por usted. )

C-4:

Usted obtendrá un código totalmente controlado.

...

Estará controlado cuando tú lo controles. En este caso, propones dejar todo sin controlar, es decir, dejar un evento que no es necesario en este momento y que puede reproducirse muy a menudo. En ejemplos sencillos puede que no se note. Quizás en programas más complejos veas la necesidad de desactivar todo lo que no sea necesario.

 
TheXpert:

1. Siempre debes considerar el caso de que un evento se pierda en la pila. Si algo crítico puede suceder en el caso de que un evento se pierda, es muy malo.

...

¿Como cuando la cola de eventos se desborda, por ejemplo?
 

tol64:

Perdona, ¿te estoy distrayendo por casualidad de escribir otro tutorial o receta?

Si no es así, vamos a seguir discutiendo su artículo sobre el control en la subventana del indicador. Por lo tanto, usted ofrece una solución masiva (o una idea) cómo hacer un menú conveniente en un indicador. Bien, ¡el propósito del artículo es muy digno! Pero, ¿cómo puede un programador "principiante" utilizar todo este arsenal? ¿Dónde colocar las funciones personalizadas? Demuéstrelo con un ejemplo. Y al mismo tiempo explicar lo que hay que arreglar en el código para utilizar, por ejemplo, 5 botones? Considéralo una pregunta de principiante.

 
tol64:
¿Como cuando la cola de eventos se desborda?
Sí.
 
DC2008:
¿Está tan seguro de que todo en su artículo es perfecto?