Preguntas de un "tonto" - página 7

 
kPVT:

Tengo un experto con el que intento afrontar los acontecimientos.

Recibo eventos que no se corresponden con las acciones.

Coincide exactamente con un clic en el gráfico y un clic en un botón

Un evento controvertido id=9(CHARTEVENT_CUSTOM), que se genera cuando, por ejemplo, el gráfico se desplaza y hay unos 10 eventos similares.

No se ha comprobado el eventoCHARTEVENT_OBJECT_ENDEDIT.

No todo está claro con el resto. O bien la descripción no coincide con el número de evento, o bien el evento de creación de un objeto se genera incorrectamente al crear un objeto manualmente.

En definitiva, por favor, ayuda.

Será mejor que vayas así:

//+------------------------------------------------------------------+
//| Expert chart event function                                      |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,         // идентификатор события  
                  const long& lparam,   // параметр события типа long
                  const double& dparam, // параметр события типа double
                  const string& sparam) // параметр события типа string
  {
   string str_id="";
   switch(id)
     {
      case CHARTEVENT_KEYDOWN:          str_id="KEYDOWN";        break;
      case CHARTEVENT_OBJECT_CREATE:  str_id="OBJECT_CREATE";  break;
      case CHARTEVENT_OBJECT_CHANGE:  str_id="OBJECT_CHANGE";  break;
      case CHARTEVENT_OBJECT_DELETE:  str_id="OBJECT_DELETE";  break;
      case CHARTEVENT_CLICK:            str_id="CLICK";          break;
      case CHARTEVENT_OBJECT_CLICK:      str_id="OBJECT_CLICK";   break;
      case CHARTEVENT_OBJECT_DRAG:       str_id="OBJECT_DRAG";    break;
      case CHARTEVENT_OBJECT_ENDEDIT:    str_id="OBJECT_ENDEDIT"; break;
      case CHARTEVENT_CHART_CHANGE:      str_id="CHART_CHANGE";   break;
      default:
         if(id>CHARTEVENT_CUSTOM)       str_id="CUSTOM+"+IntegerToString(id-CHARTEVENT_CUSTOM);
         else                         str_id="UNKNOWN";
     }
//--- для отладки
   printf("ChartEvent :id=%s, l=%d d=%f s=%s",str_id,lparam,dparam,sparam);
//---
   ExtExpertPrg.ChartEvent(id,lparam,dparam,sparam);
  }
 

Probablemente estoy haciendo algo mal, pero trataré de describir con más detalle por qué estoy teniendo un malentendido.

AlexSTAL:

Inicialmente se asignan correspondencias numéricas a las constantes numéricas ya asignadas CHARTEVENT_XXXXXXXXX...

¿Dónde puedo ver qué valor numérico tienen las constantes CHARTEVENT_XXXXXXXXX?

No pude encontrarlo, así que experimenté y descubrí queCHARTEVENT_KEYDOWN = 0 y CHARTEVENT_CLICK = 4, que corresponde al orden de descripción de estas constantes en la ayuda.

He asignado números a otros eventos en consecuencia, por lo que hay un array event[10].

Rosh:

Lamentablemente, no entiendo su pregunta. ¿Qué está fallando exactamente?

Basado en mi numeración de eventos y usando el Asesor Experto de mi post anterior:

Por ejemplo, dibujo una línea de tendencia -> eventoCHARTEVENT_OBJECT_CHANGE,

mover esta línea -> el eventoCHARTEVENT_OBJECT_CHANGE,

cambiar las propiedades a través del menú -> 2 eventosCHARTEVENT_CHART_CHANGE y CHARTEVENT_CUSTOM,

elimínelo pulsando Del -> evento sólo CHARTEVENT_KEYDOWN, (si la numeración del evento es errónea debería haber aún 2 eventos, eliminación y pulsación de botón).

Todo esto se basa en mi numeración.

Siguiente...

Estoy utilizando un Asesor Experto:

Dibujar una línea de tendencia -> ChartEvent :id=OBJECT_DRAG, l=0 d=0.000000 s=H1 Trendline 40716

mover esta línea -> ChartEvent :id=OBJECT_DRAG, l=0 d=0.000000 s=H1 Trendline 40716

Cambio las propiedades a través del menú -> ChartEvent :id=OBJECT_CHANGE, l=0 d=0.000000 s=H1 Trendline 40716 y ChartEvent :id=CHART_CHANGE, l=0 d=0.000000 s=

Lo borro pulsando Del -> ChartEvent :id=KEYDOWN, l=46 d=0.000000 s=

La situación no se ha aclarado.

Por si acaso:

MT5 64x - build 458.

El sistema es W7 64x Home Extended.

Gracias por su capacidad de respuesta ))




Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика - Документация по MQL5
 
kPVT:

Probablemente estoy haciendo algo mal, pero intentaré describir con más detalle por qué estoy teniendo un malentendido.

¿Dónde puedo encontrar el valor numérico de las constantes CHARTEVENT_XXXXXXX?

No pude encontrarlo, así que experimenté y descubrí queCHARTEVENT_KEYDOWN = 0 y CHARTEVENT_CLICK = 4, que corresponde al orden de descripción de estas constantes en la ayuda.

Le di al resto de los eventos los números correspondientes, así es como resultó el array event[10].

¡Esto no debe hacerse de ninguna manera!

Los valores numéricos son asignados por el desarrollador y pueden ser modificados en cualquier momento.

Sólo se pueden utilizar constantes de caracteres

--------------

uncleVic le dio un ejemplo de uso correcto (o mi fragmento de ayuda)

--------------

¿Qué estás haciendo? ¿Por qué necesitas una representación numérica?

 
AlexSTAL:

Esto no debe hacerse bajo ninguna circunstancia.

Los valores numéricos son asignados por el desarrollador y pueden ser modificados en cualquier momento.

Sólo se pueden utilizar constantes de caracteres

BIEN. Estoy de acuerdo en que no debe hacerlo.

Olvídate de mi trabajo manual).

Siguiendo...

AlexSTAL:

uncleVic le dio un ejemplo de uso correcto (bueno, o mi pieza de ayuda)

Como escribí arriba, usando el ejemplode uncleVic también se obtienen eventos que no coinciden con la acción.

kPVT:

Dibujar una línea de tendencia -> ChartEvent :id=OBJECT_DRAG, l=0 d=0.000000 s=H1 Trendline 40716 En lugar deCHARTEVENT_OBJECT_CREATE.

.....

eliminarlo pulsando Del -> ChartEvent :id=KEYDOWN, l=46 d=0.000000 s=En lugar deCHARTEVENT_OBJECT_DELETE y luego CHARTEVENT_KEYDOWN

AlexSTAL:

¿Qué estás haciendo? ¿Por qué se necesita una representación numérica?

Es una explicación larga, y no importa. Olvidemos mi numeración.

Lo principal es que estoy tratando de dar sentido a los eventos, pero incluso usando el ejemplode uncleVic no entiendo la inconsistencia entre los eventos generados y las acciones realizadas.

 
kPVT:

DE ACUERDO. Estoy de acuerdo en que no se puede hacer eso.

Olvídate de mi preocupación por las manos ).

Siguiendo...

Como escribí arriba, usando el ejemplode uncleVic también se obtienen eventos que no coinciden con la acción.

kPVT:


Añádelo a la inicialización:

   ChartSetInteger(0, CHART_EVENT_OBJECT_CREATE, true);
   ChartSetInteger(0, CHART_EVENT_OBJECT_DELETE, true);

Estarás bien:

Создание:
DS      0       _err (EURUSD,M30)       17:13:18        ChartEvent :id=OBJECT_CREATE, l=0 d=0.000000 s=M30 Horizontal Line 58241
DG      0       _err (EURUSD,M30)       17:13:18        ChartEvent :id=OBJECT_DRAG, l=0 d=0.000000 s=M30 Horizontal Line 58241
Удаление кл. Del:
EH      0       _err (EURUSD,M30)       17:13:21        ChartEvent :id=OBJECT_DELETE, l=0 d=0.000000 s=M30 Horizontal Line 58241
QD      0       _err (EURUSD,M30)       17:13:21        ChartEvent :id=KEYDOWN, l=46 d=0.000000 s=
 

Alex muchas gracias lo solucionó.

AlexSTAL:

Añade a la inicialización:

....

Añadido al bloque de expertos

void OnInit()
{
 ChartSetInteger(0, CHART_EVENT_OBJECT_CREATE, true);
 ChartSetInteger(0, CHART_EVENT_OBJECT_DELETE, true);
}

Todo está en su sitio.

Mirando la ayuda, en ninguna parte está escrito que estos dos eventos deban ser "inicializados" para que todos los demás eventos sean correctos.

Los comenté y todo funciona.

Resulta que si el Asesor Experto/indicador no tiene el bloque OnInit, se lía con los eventos.

Quizá sea la idea, pero los programadores de mql5 deberían saberlo, por si acaso.

 
He generado un Asesor Experto en el Asistente, pero el probador genera un Core 1 probador se detuvo porque OnInit error crítico, ¿alguien ha encontrado esto? ¿Cómo se resuelve? Después de todo, Asistente, OK, habría cometido un error allí ...
 
Europa:
He generado un Expert Advisor en Wizard, pero el tester da error Core 1 tester se detuvo porque OnInit error crítico, ¿alguien se ha encontrado con esto? ¿Cómo se soluciona? Después de todo, Wizard, habría estropeado algo allí...
Por favor, adjunte el código fuente. Y los parámetros de la prueba.
 
uncleVic:
Adjunte el código fuente resultante. Y los parámetros de la prueba.
Archivos adjuntos:
TheFirst.mq5  7 kb
 
Europa:

No se ha reproducido.

Pedí más parámetros de prueba. Lo hice:

Tanto la versión como la tasa de bits de MT5.