Erros, bugs, perguntas - página 2971

 

Será este o comportamento correcto para as variáveis estáticas?

Ao alterar os prazos ou os parâmetros, o seu valor não se altera:

int OnInit()
  {
   static int my_int=4444;
   Print(my_int);
   my_int=9999;
   return(INIT_SUCCEEDED);
  }

O resultado após o início da EA e a mudança do prazo:

2021.02.24 16:23:27.999 Test1 (EURUSD,M1)       4444
2021.02.24 16:23:29.913 Test1 (EURUSD,M5)       9999
Variáveis estáticas

Isto é da ajuda:

As variáveis estáticas existem no momento da execução do programa e são inicializadas uma vez antes da chamada da função especializada OnInit().

Portanto, uma vez antes de cada chamada para o OnInit() ou uma vez antes do arranque, embora a reinicialização seja mais como uma segunda corrida.

Será que isto também acontece no testador?

As variáveis globais também se comportam desta forma.

 

Ao mudar os prazos, o Expert Advisor não reinicia, continua a trabalhar

https://www.mql5.com/ru/docs/runtime/running

При смене символа или таймфрейма графика, к которому эксперт прикреплен, выгрузка и загрузка эксперта не производится. При этом последовательно вызываются обработчики OnDeinit() на старом символе/таймфрейме и OnInit() на новом символе/таймфрейме (если они есть), значения глобальных переменных и статических переменных не сбрасываются. Все события, поступившие для эксперта до завершения инициализации (функции OnInit()), пропускаются.


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

Ao mudar os prazos, o Expert Advisor não reinicia, continua a trabalhar

https://www.mql5.com/ru/docs/runtime/running

Notei uma peculiaridade que não estava presente no MetaTrader antes. Quando elimino um Expert Advisor de um gráfico (usando o seu comando de menu de contexto), o gráfico fecha-se depois dele. Anteriormente, o gráfico não fechava após a eliminação de um Expert Advisor.

 
Mihail Matkovskij:

Notei uma peculiaridade que não estava presente no MetaTrader antes. Quando retiro um Expert Advisor de um gráfico (usando o seu comando de menu de contexto), o gráfico fecha-se depois dele. Anteriormente, o gráfico não era fechado após a eliminação de um Consultor Especialista.

Pode ser programado na própria EA, verificar com outra EA...

 

em win7 quando a depuração em variáveis de dados históricos adicionados à observação não exibe os seus valores. quando a depuração em dados reais tudo funciona.especifiquei parâmetros para a depuração nas definições do meta-editor.

acontece que, ao adicionar variáveis, elas não são exibidas na janela imediatamente, mas aparecem apenas quando a depuração é iniciada da próxima vez, mas os seus valores já <não são implementados>. por favor, diga-me o que devo definir para que a depuração funcione

 
Vladimir Pastushak:

Pode ser programado na própria EA, verificar com outra EA...

De facto, atirou a EA padrão para a tabela. Apagado sem qualquer problema. Tentei encontrar ChartClose em fontes do meu Consultor Especialista. Não o encontrei em lado nenhum. Não era minha intenção desde o início fechar o gráfico ao eliminar um Consultor Especialista. Utilizo elementos padrão da IU, tais como CAppDialog. Talvez, o fecho do gráfico tenha sido escrito algures em classes padrão.

 
Mihail Matkovskij:

De facto, atirou um EA padrão no gráfico. Apagado sem qualquer problema. Tentei encontrar ChartClose em fontes do meu Consultor Especialista. Não o encontrei em lado nenhum. A minha ideia inicial era não fechar o gráfico ao eliminar um Consultor Especialista. Utilizo elementos padrão da IU, tais como CAppDialog. Talvez, o fecho do gráfico tenha sido escrito algures em classes padrão.

Encontrei-o. A classe CAppDialog tem um campo CChart m_chart.

class CAppDialog : public CDialog
  {
...
protected:
   CChart            m_chart;               // object to access chart

Quando oCAppDialog é eliminado (o seu descendente é utilizado no meu Expert Advisor),o destruidor do m_chart provavelmente fechará o gráfico.

//+------------------------------------------------------------------+
//| Destructor                                                       |
//+------------------------------------------------------------------+
CChart::~CChart(void)
  {
   if(m_chart_id!=-1)
      Close();
  }
//+------------------------------------------------------------------+
//| Chart close                                                      |
//+------------------------------------------------------------------+
void CChart::Close(void)
  {
   if(m_chart_id!=-1)
     {
      ChartClose(m_chart_id);
      m_chart_id=-1;
     }
  }

Infelizmente, este processo não pode ser rastreado utilizando o depurador. Mas depois de olhar através do código fontedo CAppDialog, bem como doCChart, tudo se torna claro. Chamo a atenção dos criadores para este facto.

 
Mihail Matkovskij:

Encontrei-o. A classe CAppDialog tem o campo CChart m_chart.

QuandoCAppDialog é removido (o seu descendente,CDialog, é usado no meu Expert Advisor),o destruidor do m_chart provavelmente fecha o gráfico.

Infelizmente, este processo não pode ser rastreado utilizando o depurador. Mas depois de olhar através do código fontedo CAppDialog, bem como doCChart, tudo se torna claro. Gostaria de chamar a atenção dos criadores para este facto.

void CAppDialog::Destroy(const int reason)

Destacamento do gráfico, entre outras coisas.

 

Pode dizer-me porque é que a SignalBaseTotal() devolve sempre 1000.

O serviço de sinais mql5.com tem mais de mil sinais emitidos, mas o terminal tem apenas mil disponíveis. Porquê?

Poderá haver um conjunto de sinais neste milhar, enquanto pode ser diferente numa hora?
Документация по MQL5: Управление сигналами / SignalBaseTotal
Документация по MQL5: Управление сигналами / SignalBaseTotal
  • www.mql5.com
SignalBaseTotal - Управление сигналами - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alain Verleyen :

Erro com estrutura derivada onde não são adicionados novos dados ao guardar / carregar a partir de ficheiro.

@Ilyas Vai resolver isto?