Bibliotecas: MultiTester - página 25

 
fxsaber:

Aproveite o bug do KB: o arquivo zip contém a primeira versão.

Infelizmente, ele contém arquivos de 25/12/20.
Ainda tenho os arquivos de novembro de 2019, mas já há...
Você tem algum?
 
Edgar Akhmadeev:
Você tem um?

Só encontrei um para dezembro de 2019. O MTTester não parece ter excluído funções antigas.

 
fxsaber:

Encontrado apenas para dezembro de 2019. Acho que não excluí funções antigas no MTTester.

Talvez, pelo menos na forma de uma ideia - como definir parâmetros de otimização do Expert Advisor a partir do código?
Provavelmente, estou confuso porque faz muito tempo e não existe essa possibilidade.
 
Edgar Akhmadeev:
Talvez, pelo menos na forma de uma ideia, como definir os parâmetros de otimização do Expert Advisor a partir do código?
Provavelmente, estou confuso porque já faz muito tempo e não existe essa possibilidade.

Somente essas possibilidades.



Mas nada impede o trabalho em paralelo por meio da área de transferência comum. Basta fazer uma verificação adicional.

 
fxsaber:

Mas não há nada que impeça o trabalho em paralelo por meio de uma área de transferência comum. Basta fazer uma verificação adicional.

Essa foi a primeira coisa que tentei. Passei vários dias depurando o semáforo de arquivo em COMMON, mas não consegui um trabalho estável. Talvez as funções de arquivo embutidas estejam funcionando de forma um pouco diferente do que eu acho que deveriam.
Talvez eu deva tentar arquivos por meio da WinAPI, da memória compartilhada ou até mesmo da API de semáforo (com certeza existe uma, talvez alguém possa me dizer; MutEx veio à minha mente imediatamente, vou pensar sobre isso).
Se quiser analisar minhas funções Lock e Release (elas são curtas), posso publicá-las depois de amanhã. Não?
 
Edgar Akhmadeev:
Essa foi a primeira coisa que tentei. Passei alguns dias depurando o semáforo de arquivo no COMMON, mas não consegui fazê-lo funcionar de forma consistente. Talvez as funções de arquivo embutidas estejam funcionando de forma um pouco diferente do que eu acho que deveriam.
Talvez eu deva tentar os arquivos por meio da WinAPI, da memória compartilhada ou até mesmo da API de semáforo (com certeza existe uma, talvez alguém possa sugeri-la; MutEx me veio à mente imediatamente, vou pensar sobre isso).
Se quiser analisar minhas funções Lock e Release (elas são curtas), posso publicá-las depois de amanhã. Não?

Bem, você fez uma bagunça! Insira uma string-input, na qual você enfia o caminho para o Terminal por meio do buffer. Depois de inserir as configurações, leia-as e verifique se estão corretas. Em particular, por essa string-input. Pressione o botão Start assim que a verificação for concluída com êxito.


Algo semelhante também é feito.

  static bool SetSettings2( string Str, const int Attempts = 5 )
  {
    bool Res = false;

    for (int j = 0; (j < Attempts) && !Res; j++)
    {
      string Str1;
      string Str2;
      string Str3;

      Res = MTTESTER::SetSettings(Str) && MTTESTER::GetSettings(Str1) &&
            MTTESTER::SetSettings(Str) && MTTESTER::GetSettings(Str2) &&
            MTTESTER::SetSettings(Str) && MTTESTER::GetSettings(Str3) &&
            (Str1 == Str2) && (Str1 == Str3);
    }

    return(Res);
  }
 
fxsaber:

Você fez muito sentido! Insira uma string-input, na qual você insere o caminho para o Terminal por meio do buffer. Depois de inserir as configurações, leia-as e verifique se estão corretas. Em particular, por essa string-input. Pressione o botão Start assim que a verificação for concluída com êxito.

Não é que eu esteja sendo esperto, estou apenas sendo muito direto. Multi-acesso significa semáforos.
Bem, eu pedi uma ideia e a tive. Obrigado!
 

Acelerando o GA.

O Expert Advisor no modo de quadro recebe o OnTester dos agentes. Se, em 100 a 1000 passagens, nada de bom for encontrado, pressionamos Stop.

A otimização pode ser acelerada em uma ordem de magnitude.
 
fxsaber:
Você pode acelerar a otimização em uma ordem de grandeza .

Fiz 470 otimizações (cada uma em um símbolo diferente) em 4,5 horas em ticks reais (um mês).

 

1. Eu mudaria de GetTickCount() para GetTickCount64() em Sleep2. Caso contrário, o estouro ameaça a lógica não muito correta. E isso acontece com muito menos frequência na variante de 64. Em outros trabalhos, talvez você deva mudar para ela também.


2) O segundo ArrayResize levanta questões aqui

      ::ArrayResize(Buffer, (int)Size / sizeof(T));

      kernel32::ReadFile(handle, Buffer, (uint)Size, Read, 0);
      Res = ::ArrayResize(Buffer, Read);

Provavelmente deveria ser

Res = ::ArrayResize(Buffer, Read / sizeof(T));


3) E, por fim, alguns tipos diferentes

static void Sleep2( const uint Pause )


  static bool IsReady( const int Pause = 100 )
  {
    if (MTTESTER::IsReady2())
      MTTESTER::Sleep2(Pause);