Errores, fallos, preguntas - página 1868

 

construir 1589

¿Cómo hacer que el OnTimer de un indicador deje de funcionar cuando la cuenta/corredor cambie, si no tiene ese ticker, o no está añadido a la visión general del mercado, sin usar IndicatorDelete?

¡Errata en la documentación - no existe la función IndicatorDelete, existe ChartIndicatorDelete!

https://www.mql5.com/ru/docs/standardlibrary/cchart/cchartindicatordelete

bool  IndicatorDelete(
   int            sub_win      // номер подокна
   const string   name         // короткое имя индикатора
   );

La situación es la siguiente: ejecuto el indicador adjunto en los futuros. Cambio a otro corredor, pero el temporizador sigue marcando, aunque el gráfico se vuelve negro y no se actualiza.

no escribe el motivo de la desinicialización

REASON_ACCOUNT

6

Se ha activado otra cuenta o se ha vuelto a conectar al servidor comercial debido a un cambio en la configuración de la cuenta


2017.04.21 12:10:31.810 TF through OnTimer (DDM7,M1)    Работаем
2017.04.21 12:10:31.810 TF through OnTimer (DDM7,M1)    Аккаунт = AMPGlobalClearing-Demo-CQG
тут сменили брокера,причины деинициализации нет
2017.04.21 12:10:36.809 TF through OnTimer (DDM7,M1)    Работаем
2017.04.21 12:10:36.809 TF through OnTimer (DDM7,M1)    Аккаунт = FXOpen-MT5
//+------------------------------------------------------------------+
//|                                           TF through OnTimer.mq5 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window
string server;
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {
//---
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   EventKillTimer();
   Print("Причина деинициализации = ",reason);
   
  }
//+------------------------------------------------------------------+
int OnInit()
  {
  server=AccountInfoString(ACCOUNT_SERVER);
   EventSetMillisecondTimer(5000);
   IndicatorSetString(INDICATOR_SHORTNAME,"name");
   
//--- indicator buffers mapping
//---
   return(INIT_SUCCEEDED);
  }  
  
  ////////////
  void OnTimer ()
  {
  Print("Работаем");
  Print("Аккаунт = ",AccountInfoString(ACCOUNT_SERVER));
//  if ( server!=AccountInfoString(ACCOUNT_SERVER) ) ChartIndicatorDelete(0,0,"name");
  }
Документация по MQL5: Стандартная библиотека / Ценовые графики / IndicatorDelete
Документация по MQL5: Стандартная библиотека / Ценовые графики / IndicatorDelete
  • www.mql5.com
Стандартная библиотека / Ценовые графики / IndicatorDelete - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
kaus_bonus:

construir 1589

No se llama a OnDeinit.
 
¿Qué quiere decir?
fxsaber:
No se llama a OnDeinit.

¿Qué quieres decir? ¿No se llama en absoluto, o en este código?

 
kaus_bonus:

construir 1589

¿Cómo hacer que el OnTimer de un indicador deje de funcionar cuando la cuenta/corredor cambie, siempre que no tenga ese ticker, o no esté añadido a la visión general del mercado, sin usar IndicatorDelete?

¡Errata en la documentación - no existe la función IndicatorDelete, existe ChartIndicatorDelete!

https://www.mql5.com/ru/docs/standardlibrary/cchart/cchartindicatordelete

La situación es la siguiente: ejecuto el indicador adjunto en los futuros. Cambio a otro corredor, pero el temporizador sigue marcando, aunque el gráfico se vuelve negro y no se actualiza.

no escribe el motivo de la desinicialización

REASON_ACCOUNT

6

Se activa otra cuenta o la reconexión a un servidor de comercio fue causada por un cambio en la configuración de la cuenta



Carga y descarga de indicadores

Los indicadores se cargan en los siguientes casos

  • adjuntar un indicador a un gráfico
  • inicio del terminal (si un indicador se adjuntó a un gráfico antes de que el terminal se cerrara previamente)
  • carga de una plantilla (si se adjunta un indicador a un gráfico)
  • Cambio de perfil (si el indicador está unido a uno de los gráficos de perfil);
  • cambio del símbolo y/o del periodo del gráfico, al que está unido el indicador;
  • después de la recompilación exitosa de un indicador, si este indicador se ha adjuntado a un gráfico.
  • cambio de losparámetros de entrada del indicador.

Los indicadores se descargan en los siguientes casos

  • cuando el indicador se separa del gráfico;
  • cierre del terminal (si se ha adjuntado un indicador a un gráfico)
  • carga de una plantilla si se adjunta un indicador a un gráfico;
  • cerrar el gráfico al que se ha adjuntado el indicador
  • cambio de perfil, si el indicador está unido a uno de los gráficos del perfil que se va a cambiar;
  • cambio del símbolo y/o del periodo del gráfico, al que está unido el indicador;
  • cambio de los parámetros de entrada del indicador.


La razón por la que "cambio de cuenta" no existe, significa que el indicador no se descarga al cambiar de cuenta y, en consecuencia, OnDeinit() para el indicador, cuando se cambia la cuenta de operaciones tampoco lo hará.

 
kaus_bonus:

¿Qué quieres decir? ¿No se llama en absoluto, o en este código?

En tu situación.
 
Vladimir Karputov:

Indicadores de carga y descarga


Los indicadores se descargan en los siguientes casos

  • cuando el indicador se separa del gráfico;
  • cierre del terminal (si un indicador está unido a un gráfico)
  • carga de una plantilla, si se adjunta un indicador al gráfico
  • cerrar el gráfico al que se ha adjuntado el indicador
  • cambio de perfil, si el indicador está unido a uno de los gráficos del perfil que se va a cambiar;
  • cambio del símbolo y/o del periodo del gráfico, al que está unido el indicador;
  • cambio de los parámetros de entrada del indicador.


La razón por la que "cambio de cuenta" no existe, significa que el indicador no se descarga al cambiar de cuenta y, en consecuencia, no habrá OnDeinit() para el indicador cuando se cambie la cuenta de operaciones.

De hecho, la razón que mencioné funciona sólo para los Asesores Expertos.

Коды причины деинициализации эксперта ....

Entonces la pregunta sigue siendo: ¿cómo hacer que el temporizador deje de funcionar sin eliminar radicalmente el indicador del gráfico?

Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Причины деинициализации
Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Причины деинициализации
  • www.mql5.com
Стандартные константы, перечисления и структуры / Именованные константы / Причины деинициализации - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
kaus_bonus:

De hecho, la razón que mencioné funciona sólo para los expertos

Entonces la pregunta sigue siendo: ¿cómo hacer que el temporizador deje de funcionar sin eliminar radicalmente el indicador del gráfico?


En OnInit() memoriza la puntuación. En el temporizador compruebe el número de cuenta. Si la puntuación ha cambiado - salga del temporizador.
 
kaus_bonus:

Entonces, la pregunta sigue siendo: ¿cómo conseguir que el temporizador deje de funcionar sin eliminar drásticamente el indicador del gráfico?

Utilice ACCOUNT_LOGIN y ACCOUNT_SERVER.
 

¡¿No crees que es una solución torcida?!

Supongamos que hacemosACCOUNT_LOGIN!=ACCOUNT_LOGIN_NEW, matamos el temporizador, y luego volvemos a esta cuenta, ¿qué sucede? el temporizador no se iniciará de nuevo?

¿es más fácil añadir el motivo "cambio de cuenta" a los indicadores de la misma manera, o me equivoco de alguna manera y esto provocará algunas dificultades?

 
kaus_bonus:

hay que admitir que es una solución torcida...

¡Es un movimiento de caballos!

Supongamos que hacemosACCOUNT_LOGIN!=ACCOUNT_LOGIN_NEW, matamos el temporizador, y luego volvemos a esa cuenta, ¿qué pasa?

Cuando se detecta un cambio de cuenta, ya se recuerdan las nuevas características.

Se puede diseñar como una pequeña biblioteca sobre el principio de que aquí(macros). Entonces lo "torcido" no será una molestia.