Erros, bugs, perguntas - página 1868

 

construir 1589

Como fazer com que o OnTimer num indicador deixe de funcionar quando a conta/corretor muda, se não tem um tal ticker, ou não é adicionado à visão geral do mercado, sem usar o IndicatorDelete?

Errata na documentação - não existe função IndicadorDelete, existe ChartIndicatorDelete!

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

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

A situação é a seguinte - eu corro o indicador em anexo nos futuros. Mudo para outro corretor, mas o temporizador continua a marcar, embora o gráfico se torne preto e não se actualize.

não escreve o motivo da desinicialização

RAZÃO_COUNTURA

6

Outra conta foi activada ou reconectada ao servidor de negociação devido a uma alteração nas definições da conta


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

OnDeinit não é chamado.
 
o que quer dizer
fxsaber:
OnDeinit não é chamado.

O que queres dizer com não ter sido chamado, ou estar neste código?

 
kaus_bonus:

construir 1589

Como fazer com que o OnTimer num indicador deixe de funcionar quando a conta/corretor muda, desde que não tenha um tal ticker, ou não seja adicionado à visão geral do mercado, sem usar o IndicatorDelete?

Errata na documentação - não existe função IndicadorDelete, existe ChartIndicatorDelete!

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

A situação é a seguinte - eu corro o indicador em anexo nos futuros. Mudo para outro corretor, mas o temporizador continua a marcar, embora o gráfico se torne preto e não se actualize.

não escreve o motivo da desinicialização

RAZÃO_COUNTURA

6

Outra conta é activada ou a reconexão a um servidor de negociação foi causada por uma alteração nas definições da conta



Carregamento e descarregamento de indicadores

Os indicadores são carregados nos seguintes casos

  • anexar um indicador a um gráfico
  • início do terminal (se um indicador foi anexado a um gráfico antes de o terminal ter sido fechado anteriormente)
  • carregamento de um modelo (se um indicador for anexado a um gráfico)
  • Alteração do perfil (se o indicador estiver anexado a um dos gráficos de perfil);
  • alteração do símbolo e/ou período do gráfico, ao qual o indicador está anexado;
  • após a recompilação bem sucedida de um indicador, se este indicador tiver sido anexado a um gráfico.
  • alteração dosparâmetros de entrada dos indicadores.

Os indicadores são descarregados nos seguintes casos

  • quando o indicador é destacado do gráfico;
  • fecho do terminal (se um indicador tiver sido anexado a um gráfico)
  • carregamento de um modelo se um indicador for anexado a um gráfico;
  • fechar o gráfico ao qual o indicador foi anexado
  • alteração de perfil, se o indicador estiver anexado a um dos gráficos do perfil a ser alterado;
  • alteração do símbolo e/ou período do gráfico, ao qual o indicador está anexado;
  • alteração dos parâmetros de entrada dos indicadores.


O motivo da "mudança de conta" não existe, significa que o indicador não é descarregado na mudança de conta e consequentemente OnDeinit() para o indicador, quando se muda a conta de negociação também não o será.

 
kaus_bonus:

O que queres dizer com não ter sido chamado, ou estar neste código?

Na sua situação.
 
Vladimir Karputov:

Indicadores de carga e descarga


Os indicadores são descarregados nos seguintes casos

  • quando o indicador é destacado do gráfico;
  • fecho do terminal (se um indicador for anexado a um gráfico)
  • carregamento de um modelo, se um indicador for anexado ao gráfico
  • fechar o gráfico ao qual o indicador foi anexado
  • alteração de perfil, se o indicador estiver anexado a um dos gráficos do perfil a ser alterado;
  • alteração do símbolo e/ou período do gráfico, ao qual o indicador está anexado;
  • alteração dos parâmetros de entrada dos indicadores.


A razão pela qual não existe "mudança de conta", significa que o indicador não é descarregado na mudança de conta e consequentemente não haverá OnDeinit() para o indicador quando se muda a conta de negociação.

De facto, a razão pela qual mencionei funciona apenas para Consultores Especialistas.

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

Então a questão permanece - como fazer o temporizador parar de funcionar sem remover radicalmente o indicador do gráfico?

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

De facto, a razão pela qual mencionei trabalhos apenas para peritos

Então a questão permanece - como fazer o temporizador parar de funcionar sem remover radicalmente o indicador do gráfico?


No OnInit() memorize a pontuação. No temporizador, verificar o número de conta. Se a pontuação tiver mudado - sair do temporizador.
 
kaus_bonus:

Então a questão permanece - como conseguir que o temporizador deixe de funcionar sem remover drasticamente o indicador do gráfico?

Utilizar ACCOUNT_LOGIN e ACCOUNT_SERVER.
 

não acha que isso é uma solução tortuosa?!

suponhamos que fazemosACCOUNT_LOGIN!=ACCOUNT_LOGIN_NEW, matamos o temporizador, e depois voltamos a esta conta, o que acontece? o temporizador não recomeçará?

é mais fácil acrescentar a razão "mudança de conta" aos indicadores da mesma forma, ou estou de alguma forma errado e isso irá conduzir a algumas dificuldades?

 
kaus_bonus:

tem de admitir que é uma solução tortuosa?!

É uma jogada de cavalo!

Suponhamos que fazemosACCOUNT_LOGIN!=ACCOUNT_LOGIN_NEW, matamos o temporizador, e depois voltamos a essa contagem, o que acontece?

Quando uma mudança de conta é detectada, já se lembra das novas características.

Pode desenhá-la como uma pequena biblioteca com base no princípio de que aqui(macros). Então a coisa "torta" não será um incómodo.