Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 645

 

Taras, ¿es posible hacer esa normalización del gráfico para el cambio de fotogramas por el clic del ratón?

A veces, por costumbre, hago clic cuando el cursor está cerca del botón, pero no me gusta el resultado.

No he encontrado nada adecuado en la lista de manejo de eventos, sólo hayCHARTEVENT_CHART_CHANGE sin ninguna descripción específica. Puedo intentar vincular un clic del ratón, pero por lo que tengo entendido el usuario no puede trabajar con el menú del sistema, sólo si crea sus propios botones. ¿Hay alguna solución sencilla?

 
psyman:

Taras, ¿es posible hacer esa normalización del gráfico para el cambio de fotogramas por el clic del ratón?

A veces, por costumbre, hago clic cuando el cursor está cerca del botón, pero no me gusta el resultado.

No he encontrado nada adecuado en la lista de manejo de eventos, sólo hayCHARTEVENT_CHART_CHANGE sin ninguna descripción específica. Puedo intentar vincular el clic del botón del ratón, pero por lo que entiendo el usuario no puede trabajar con el menú del sistema, sólo si crea sus propios botones. ¿Hay alguna solución sencilla?

Es decir, ¿hacer clic en algunas "zonas de grifo" del gráfico?
Si se puede, hay que llevar la cuenta de las coordenadas del cursor y de los clics del botón del ratón.

CHARTEVENT_MOUSE_MOVE

 

Foro sobre trading, sistemas de trading automatizados y comprobación de estrategias

Cualquier pregunta para principiantes sobre MQL4, ayuda y discusión sobre algoritmos y códigos

Taras Slobodyanik, 2018.10.04 09:37

¿Te refieres a hacer clic con el ratón en algunas "zonas de toque" del gráfico?
Si se puede, hay que llevar un registro de las coordenadas del cursor y de los clics del ratón.



La cosa es que es un clic en el gráfico, no en un botón del menú del sistema. No sé cómo procesar tal evento.
 
psyman:

La cosa es que es un clic en un gráfico, no un botón del menú del sistema. No sé cómo procesar un evento así.

recuerde el período de caracteres actual y en"CHARTEVENT_CHART_CHANGE" compruebe los cambios y haga lo que tenga que hacer

 
Bien, gracias de nuevo.
 

Por favor, dígame por qué la misma función del cuerpo del EA OnTick() no funciona (o mejor dicho, funciona, pero falla en todos los gráficos correctamente)

Pero desde el procedimiento OnInit() funciona bien y desde un script ordinario también. El Asesor de Expertos se instala en 80 gráficos a la vez (20 monedas, cada 4 ventanas W1 D1 H4 H1) puede sólo mi equipo no puede hacer frente? Por favor, avisa. El propósito del robot es emitir los mensajes MessageBox en la pantalla, si se detecta una señal en uno de los gráficos. ¿Quizá el ordenador va lento en el momento de iniciar estos mensajes?
 

Tengo problemas para recordar el periodo previo a la gestión de un evento, ¿dónde lo hago?

Decidido a rastrear por mensaje, resulta que CHARTEVENT_CHART_CHANGE se procesa 2 veces en un clic, la variable ctime se reinicia.


#propiedad estricta

#propiedad ventana_del_gráfica_del_indicador

int ctime;


void OnInit()

{

Print(" OnInit------------1 ", ChartPeriod(0));

Print("OnInit ctime = ", ctime);

// ctime=ChartPeriod(0);

}


int OnCalculate(const int rates_total,

const int prev_calculado,

const datetime &time[],

const double &open[],

const double &high[],

const double &low[],

const double &close[],

const long &tick_volume[],

const long &volume[],

const int &spread[])

{

ctime=Período de la carta(0);

return(rates_total);

}

void OnChartEvent(const int id,

const long &lparam,

const double &dparam,

const string &sparam)


{


if(id==CHARTEVENT_CHART_CHANGE)

{

Print("Se inicia CHARTEVENT_CHART_CHANGE ctime=", ctime);

if(ctime!=ChartPeriod(0))

{

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Print(ChartPeriod(0), " CHANGED!!!!!!!!!!!!!!! ", ctime);

}

}

}



Añadir el indicador a la hora, y luego cambiar a diario

2018.10.05 01:04:45.171 _t1 CADJPY,Daily: CHARTEVENT_CHART_CHANGE se inicia ctime=1440

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡2018.10.05 01:04:45.156 _t1 CADJPY,Daily: 1440 CHANGED!!!!!!!!!!!!!!! 0

2018.10.05 01:04:45.156 _t1 CADJPY,Daily: CHARTEVENT_CHART_CHANGE se inicia ctime=0

2018.10.05 01:04:45.156 _t1 CADJPY,Daily: inicializado

2018.10.05 01:04:45.156 _t1 CADJPY,Daily: OnInit ctime=0

2018.10.05 01:04:45.156 _t1 CADJPY,Daily: OnInit------------1 1440

2018.10.05 01:04:45.156 _t1 CADJPY,H1: uninit reason 3

2018.10.05 01:02:02.000 _t1 CADJPY,H1: CHARTEVENT_CHART_CHANGE se inicia ctime=60

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡2018.10.05 01:02:02.000 _t1 CADJPY,H1: 60 CHANGED!!!!!!!!!!!!!!! 0

2018.10.05 01:02:02.000 _t1 CADJPY,H1: CHARTEVENT_CHART_CHANGE se inicia ctime=0

2018.10.05 01:02:02.000 _t1 CADJPY,H1: inicializado

2018.10.05 01:02:02.000 _t1 CADJPY,H1: OnInit ctime=0

2018.10.05 01:02:02.000 _t1 CADJPY,H1: OnInit------------1 60

2018.10.05 01:02:01.078 Indicador personalizado _t1 CADJPY,H1: cargado con éxito





 
psyman:

Tengo problemas para recordar el periodo anterior al procesamiento del evento, ¿dónde hay que hacerlo?

Decidido a rastrear por mensaje, resulta que CHARTEVENT_CHART_CHANGE se procesa 2 veces en un clic, la variable ctime se reinicia.

¡Poner el código en el mensaje correctamente! Es muy difícil de leer en esta forma. Debe ser así.

#property strict
#property indicator_chart_window
int ctime;
void OnInit()
   {
     Print("  OnInit------------1  ", ChartPeriod(0));
     Print("OnInit ctime = ", ctime);
   //  ctime=ChartPeriod(0);   
   }
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   ctime=ChartPeriod(0);         
   return(rates_total);
  }
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{
   if(id==CHARTEVENT_CHART_CHANGE)
      {
      Print("CHARTEVENT_CHART_CHANGE     is started  ctime=", ctime);
      if(ctime!=ChartPeriod(0))
      {
      Print(ChartPeriod(0), "  CHANGED!!!!!!!!!!!!!!!   ", ctime);
      }
      } 
}

Cuando se cambian los parámetros de un gráfico, el indicador se recarga forzosamente, lea en el documento el motivo de la desinicialización y su variable de razón.

Puede utilizar las variables globales del terminal para guardar los parámetros necesarios.

 
Vitaly Gorbunov:

Introduzca el código correctamente en el mensaje. Es muy difícil leerlo así. Debería ser así.

El indicador se reiniciará forzosamente cuando se cambien los parámetros del gráfico lea el doc para el motivo de desinicialización y su variable de razón.

Puede utilizar las variables globales del terminal para guardar los parámetros necesarios.

Sí, es necesario almacenar los valores en GlobalVariable, y luego, al inicio, comprobar su existencia.

Es decir, se debe guardar el número de la carta, el símbolo y el punto.
Y luego eliminar las variables innecesarias, o hacerlas inicialmente como variables globales temporales.

ps. también se puede almacenar información en objetos en el gráfico - mientras el gráfico exista, los objetos existen

 

Pensé que sería mucho más fácil :-)

Entonces una pregunta bastante infantil - mi código no implica ningún comercio o gráfico, ¿qué tipo de programa debo utilizar?

Los guiones son puntuales, pero ¿se pueden ejecutar en bucle? Declaré un indicador personalizado por pura inercia, porque nunca he usado Asesores Expertos. Nunca los he utilizado, pero se reinician automáticamente, lo que no necesito. necesito su consejo.

ps

Los objetos pueden ser de tamaño cero, para que visualmente no estorben?