Bibliotecas: Expert - página 12

 
Se o Expert Advisor exigir o carregamento de uma DLL, ele mesmo não marcará essa caixa de seleção? Parece que se trata do expertmode. Não estou vendo a interface. Preciso editar o código ou o modelo por conta própria?
 
traveller00:
Se o Expert Advisor exigir o carregamento de uma DLL, ele mesmo não marcará essa caixa de seleção? Parece que se trata do expertmode. Não estou vendo a interface. Preciso editar o código ou o modelo por conta própria?

Havia exemplos com a DLL acima.

 

Gostaria de esclarecer a semântica do código de retorno do método Parameters. No momento, quando há um erro ao receber uma string com um modelo, o método retorna 0. Isso pressupõe que 0 significa um erro.

Em todos os outros casos, o retorno é uma string:

Res = (int)EXPERT::StringBetween(Str, EXPERT_FLAGS, STRING_END);

ou seja, o valor de expertmode do modelo chega lá, que pode ser igual a 0 de forma bastante legal. O EXPERT é usado dessa forma em outros projetos, especialmente no Tester:

void OnTimerReal()
{
  ...
  if ((this.Symb += BeginTick) && EXPERT::Parameters(0, Params, Names))
  {
    ... открытие рабочего чарта
  }
}

Como resultado, se o método retornar 0, o Tester não funcionará. Por quê? Se o sinalizador de negociação real for redefinido, isso não significa que o teste deva ser proibido, na minha opinião. Além disso, o Tester não faz nada silenciosamente nesse caso.

 
Stanislav Korotky:

Gostaria de esclarecer a semântica do código de retorno do método Parameters. Atualmente, quando há um erro ao receber uma cadeia de caracteres com um modelo, o método retorna 0. Isso pressupõe que 0 significa um erro.

O valor de retorno foi alterado desde as primeiras publicações. Portanto, historicamente, o valor de retorno acabou não dizendo nada sobre se há um erro ou não.

Em todos os outros casos, o valor de retorno é uma string:

ou seja, o valor de expertmode do modelo chega lá, que pode ser igual a 0 de forma bastante legal. Em outros projetos, especialmente no Tester, o EXPERT é usado dessa forma :

Como resultado, se o método retornar 0, o Tester não funcionará. Por quê? Se o sinalizador de negociação real for redefinido, isso não significa que o teste deva ser proibido, na minha opinião. Especialmente, o Tester não faz nada silenciosamente nesse caso.

De acordo com o código que você citou, de fato, ele não funcionará se a negociação automática estiver desativada. Não me lembro se isso é um erro ou se foi feito de propósito. Provavelmente, foi feito de propósito para que fosse possível conectar DLLs.


ZЫ Terei que atualizar a Bíblia. Há uma forte tendência de compartilhamento com o Sequence. Como somente eu preciso desse recurso, não é uma prioridade atualizá-la.

 

A única vez que a construção de detecção de loop infinito funcionou.

ME      3       15:22:12.123    Message Endless loop:
KS      3       15:22:12.123    Message Expert.mqh
IP      3       15:22:12.123    Message 169
DG      3       15:22:12.123    Message bool EXPERT::TemplateApply(const long,const string&,const bool)
FQ      3       15:22:12.123    Message Condition: !::IsStopped()&&::ChartGetInteger(Chart_ID,CHART_COLOR_STOP_LEVEL,0,Value)&&(!(bool)((int)Value>>24))


Isso aconteceu no Expert.mqh nesse momento.

      while (_CS(!::IsStopped() && ::ChartGetInteger(Chart_ID, CHART_COLOR_STOP_LEVEL, 0, Value) && (!(bool)((int)Value >> 24))))
        ::Sleep(1); // https://www.mql5.com/ru/forum/170952/page190#comment_18830346


Eu uso ativamente o Expert.mqh todos os dias, mas essa foi a primeira vez que me deparei com isso. Aparentemente, trata-se de uma situação muito rara. Tenha em mente.

 
Bom trabalho, mas acho que agora ele carregará o Expert com a predefinição padrão? Também seria bom se você pudesse carregar arquivos SET para o especialista escolhido
 

Olá, obrigado, o EXPER.mqh é incrível.

1. como posso ativar o "Algo trading" para o EA aberto com EXPERT::Run(....).

2. estou usando a versão 2019. Existe uma versão mais recente?

 
upinsa #:

1) Como posso ativar o "Algo trading" para o EA aberto com EXPERT::Run(....)?

Leia isto.

2. estou usando a versão 2019. Existe uma versão mais recente?

Última versão.


 
static bool GetInputNames( MqlParam &Parameters[], string &InputNames[] )
  {
    const int Size = ::ArraySize(Parameters);
    bool Res = (Size > 1);

    if (Res)
    {
      ::ArrayResize(InputNames, Size - 1);

      for (int i = 1; (i < Size) && Res; i++)
      {
        InputNames[i - 1] = EXPERT::GetInputName(Parameters[i]);
        Res &= (InputNames[i - 1] != NULL);
      }
    }

    return(Res);
  }

grupo de entrada "【label1】";

Essa situação parece não ter sido considerada. Quando o parâmetro é um grupo, não há um valor específico e o valor recebido será nulo, portanto os parâmetros após o grupo não serão recebidos.

 
hini #:

grupo de entrada "【label1】";

Essa situação parece não ter sido considerada. Quando o parâmetro é um grupo, não há um valor específico e o valor recebido será nulo, portanto os parâmetros após o grupo não serão recebidos.

Se houver algum problema, forneça arquivos mq5 prontos para reprodução.