Erros, bugs, perguntas - página 891

 

É claro que a zeragem foi feita por compatibilidade, mas não é claro porque é que quando a enumeração não utilizada = WRONG_VALUE é inicializada correctamente , não funciona correctamente. Esta abordagem carece de portabilidade e aumenta significativamente a probabilidade de erros ocultos.

 
A100: não é claro porque é que quando o enum não utilizado = WRONG_VALUE é inicializado correctamente, não funciona correctamente.

Lembra-se desta regra?

Regra: Se a uma constante nomeada - membro de uma enumeração não for explicitamente atribuído um valor específico, o seu valor será gerado automaticamente. Se for o primeiro membro da enumeração, será atribuído o valor 0. Para todos os membros subsequentes, os valores serão calculados com base no valor do membro anterior, adicionando um.

Muito provavelmente, a verificação da correcção dos campos de consulta pressupõe que o valor de um membro da enumeração não pode ser negativo. A possibilidade de atribuir o WRONG_VALUE a um membro da enumeração não é tida em conta.

 
Yedelkin:

No entanto, a possibilidade de atribuir WRONG_VALUE a um membro da enumeração não é tida em conta.

Penso que este é exactamente o erro aqui. Se uma enumeração concreta não for utilizada, é lógico que o seu valor será WRONG_VALUE em vez de, por exemplo, ORDER_TYPE_BUY que na realidade = 0.

e mais importante - nada o impede de alterar a lógica OrderCheck() e OrderSend() enquanto mantém a compatibilidade

 
A100: Penso que este é exactamente o erro aqui. Se um enumero concreto não for utilizado, é lógico que o seu valor será WRONG_VALUE em vez de ORDER_TYPE_BUY que na realidade = 0.

e mais importante, nada o impede de alterar a lógica de OrderCheck() e OrderSend(), mantendo a compatibilidade

Há uma forma de compreender a opinião dos criadores - escrever ao Service Desk sobre o erro.
 

Descobri um estranho "insecto".

Estou a utilizar este código no meu EA:

void OnTradeTransaction(const MqlTradeTransaction &trans, const MqlTradeRequest &request, const MqlTradeResult &result)
  {
   if(trans.type == TRADE_TRANSACTION_DEAL_ADD)
    {
     if(trans.symbol == "EURUSD") EURUSD_K = 1;
    }    
  }

Uma única corrida no testador passa sem problemas, mas assim que escolho parâmetros com pesquisa completa, o testador começa a trabalhar dez ou dez vezes mais devagar. Não compreendo porque é que a velocidade é adequada durante uma corrida e cai visivelmente durante a optimização. Além disso, cai geometricamente. Pode-se ver pela percentagem que tudo está bem no início, mas no final a velocidade continua a deslizar cada vez mais devagar. Procurei por problemas no meu código e procurei loops ou algo assim, mas não os encontrei. Depois disso, substituí o código acima mencionado pelo meu próprio algoritmo e oh meu deus! A optimização funciona agora a uma velocidade normal e uniforme. Isto leva-me à conclusão de que a questão está dentro da MQL5, algures no corpo da função OnTradeTransaction. Vou pedir aos criadores que prestem atenção a isso.

p.s. Não posso afixar o código do Expert Advisor. Tente usar o código acima em qualquer dos seus EAs e veja a velocidade de optimização em OHLC M5 para o período de 2000 até hoje.

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 
lordlev:

Descobri um estranho "insecto".

Estou a utilizar este código no meu EA:

Uma única corrida no testador passa sem problemas, mas assim que escolho parâmetros com pesquisa completa, o testador começa a trabalhar dez ou dez vezes mais devagar. Não compreendo porque é que a velocidade é adequada durante uma corrida e cai visivelmente durante a optimização. Está a cair geometricamente. Pode-se ver pela percentagem que tudo está bem no início, mas no final a velocidade continua a deslizar cada vez mais devagar. Procurei por problemas no meu código e procurei loops ou algo assim, mas não os encontrei. Depois disso, substituí o código acima mencionado pelo meu próprio algoritmo e oh meu deus! A optimização funciona agora a uma velocidade normal e uniforme. Isto leva-me à conclusão de que a questão está dentro da MQL5, algures no corpo da função OnTradeTransaction. Vou pedir aos criadores que prestem atenção a isso.

p.s. Não posso afixar o código do Expert Advisor. Tente usar o código acima em qualquer dos seus EAs e veja a velocidade de optimização em OHLC M5 para o período de 2000 até hoje.

Com parâmetros diferentes, o Conselheiro Especialista pode trabalhar por tempo diferente
 
Konstantin83:
Para diferentes parâmetros, a EA pode funcionar por diferentes períodos de tempo
Neste caso, o problema não é com o Conselheiro Especialista nem com os parâmetros. O problema está na própria MQL5.
 
lordlev:

Depois de substituir o código acima pelo seu algoritmo

Ou seja, desistiram de utilizar a OnTradeTransaction()? - então é lógico que a velocidade tenha aumentado - é chamada em cada ocasião
 
A100:
Ou seja, desistiram de utilizar a OnTradeTransaction() ? - então é lógico que a velocidade tenha aumentado - é chamada em cada ocasião
É natural que se recuse a utilizá-lo. É claro que é chamado em qualquer ocasião. Só não é claro porque é que a velocidade é adequada durante uma única corrida, enquanto cai subitamente durante a optimização. Não tem nada a ver com os parâmetros em si, como outro amigo escreveu acima, eu verifiquei-o minuciosamente dez vezes. Isto leva-me à conclusão de que os criadores cometeram um erro algures.
 
lordlev:

O que o impede de fazer um caso de teste mínimo e de se apresentar ao balcão de serviço?