Características da linguagem mql5, subtilezas e técnicas - página 175

 

Fórum sobre comércio, sistemas automatizados de comércio e teste de estratégias comerciais

Características da linguagem mql5, subtilezas e truques

fxsaber, 2017.11.30 09:48

Memo

Acção/tipo de programa Mudança de TF ou símbolo Alteração de conta
Indicador Run OnDeinit e OnInit, alterações globais de objectos de classe (full reset). Nada acontece excepto que o calculado_previamente é reiniciado.
EA Run OnDeinit e OnInit, objecto de classe global não muda. Executando OnDeinit e OnInit, alterações globais de objectos de classe (recarga completa).

Pode dizer-me como evitar o reinício total da EA quando voltar a registar (por exemplo, manualmente)?

Não compreendo porque é que tudo é reiniciado no re-logging. Será isto uma falha?

 
fxsaber:

Funciona, mas pode sugerir a macro certa.

Se não se preocupa muito com a qualidade dos seus ofícios, então eu preocupo-me ainda menos.

 
Vict:

Se não se preocupa muito com a qualidade dos seus ofícios, então eu preocupo-me ainda menos.

É aqui que se escreve sobre as características da MQL5.

 
fxsaber:

Eles escrevem aqui sobre as características da MQL5.

Quem diz que é uma característica e não uma UB? Há alguma informação nos documentos? Na maioria dos casos a UB é necessária para dar liberdade ao compilador para fazer todo o tipo de optimizações. O que será o resultado em diferentes casos em código real - não sei, depende do estado de espírito do optimizador. Posso correr este código também em cruzes e obter alguns resultados, devo então ser informado "vejam que peculiaridade"?

Posso correr este código em cruzes e obter alguns resultados, e depois ser-me-á dito: "olha, qual é a peculiaridade"?

 
Vict:

Quem diz que é uma característica e não uma UB? Há alguma informação nas docas?

É aqui que se escreve sobre coisas que não se encontram nas docas. Caso contrário, não há sentido no fio.

 
fxsaber:

É aqui que se escreve sobre coisas que não se encontram nas docas. Caso contrário, não há sentido no fio.

Seria significativo se houvesse comentários de criadores, mas de outra forma...

Portanto, sim, está escrito em docas: ordem de execução, - portanto, tudo parece ser legal. Mas mesmo assim, dado que nos prós é realmente feroz a ub, gostaria de ter a certeza de que a referência significa realmente ordem de execução exacta e não associatividade dos operadores.

 
fxsaber:

Pode dizer-me como evitar um reinício completo da EA ao fazer um novo registo (por exemplo, manualmente)?

Não compreendo porque é que tudo é reiniciado no re-logging. Será isto uma falha?

Tive a tarefa de saltar alguns cálculos ao registar de novo, e de apagar o Consultor Especialista ao alterar a conta. Foi resolvido num só lugar.

Isto é o que parece quando queremos simplesmente apagar o Expert Advisor na mudança de conta.

string GetGlobalNameAccount( void )
{
  return(::MQLInfoString(MQL_PROGRAM_NAME) + (string)::ChartID() + "_Account");
}

void SaveAccount( void )
{  
  if (!::GlobalVariableSet(GetGlobalNameAccount(), CurrentAccount))
    ::Alert("GlobalVariableSet - ERROR!");
  
  return;
}

int LoadAccount( void )
{
  int Res = 0;
  
  const string Name = GetGlobalNameAccount();
    
  if (::GlobalVariableCheck(Name))
  {
    Res = (int)::GlobalVariableGet(Name);
    
    ::GlobalVariableDel(Name);      
  }
  
  return(Res);
}

const int CurrentAccount = (int)AccountInfoInteger(ACCOUNT_LOGIN);
int PrevAccount = 0;

int OnInit( void )
{
  PrevAccount = LoadAccount();
  
  bool Res = !PrevAccount || (PrevAccount == CurrentAccount);
  
  if (Res)
  {
    // .....
  }
  else
    Alert("Account is changed! " + (string)PrevAccount + " -> " + (string)CurrentAccount);
    
  return(Res ? INIT_SUCCEEDED : INIT_FAILED);
}

void OnDeinit( const int Reason )
{
  if (Reason == REASON_ACCOUNT)
    SaveAccount();
}


A tarefa mais simples na MQL5 faz-nos dançar com a subversão.

 
Vladimir Simakov:

Faria sentido se houvesse comentários dos criadores, mas caso contrário...

Portanto, sim, os documentos dizem: ordem de execução, - portanto, tudo parece ser legal. Mas mesmo assim, tendo em conta que em plenos pulsos é realmente feroz, gostaria de ter a certeza de que a ajuda realmente significa exactamente ordem de execução e não associatividade dos operadores.

Por favor, não deitar lixo neste ramo. Este tópico é sobre características da MQL5, não C++

 
Artyom Trishkin:

Por favor, não deitar lixo neste ramo. Esta linha é sobre as peculiaridades da MQL5, não C++

É estranho, um escreve na UB e o outro faz-lhe eco cegamente. Não há problema que no MCL Help.

Nota: A precedência de operações na MQL5 corresponde à precedência С++ e difere da prioridade dada na MQL4.

E o que se chama "ordem de execução" na tabela é na verdade chamado "associatividade" e não tem efeito sobre a ordem de avaliação, que no caso geral não está definida.

Bem, não importa, é uma tarefa ingrata, toda a gente aqui é tão perita, por isso não estou a intrometer-me.

 
Vict:
Atenção: A prioridade das operações na MQL5 corresponde ao С++e difere da prioridade dada na MQL4.

O mais provável é que isto se aplique apenas ao modo não restritivo.

Centenas de pessoas têm vindo a escrever aqui há anos coisas de multi-plataforma.