Библиотеки: MultiTester - страница 25

 
fxsaber:

Воспользуйтесь багом КБ: zip-файл содержит первый релиз.

Увы, там внутри файлы от 25.12.20.
У меня сохранились файлы от ноября 2019, но там уже...
У Вас есть?
 
Edgar Akhmadeev:
У Вас есть?

Нашел только за декабрь 2019. В MTTester, вроде, не удалял старые функции.

 
fxsaber:

Нашел только за декабрь 2019. В MTTester, вроде, не удалял старые функции.

Может, хоть в виде идеи - как из кода устанавливать параметры оптимизации эксперта?
Наверное я по давности путаю, и нет такой возможности.
 
Edgar Akhmadeev:
Может, хоть в виде идеи - как из кода устанавливать параметры оптимизации эксперта?
Наверное я по давности путаю, и нет такой возможности.

Только такие возможности.



Но ничего не мешает через общий буфер обмена работать параллельно. Просто сделать доп. проверку.

 
fxsaber:

Но ничего не мешает через общий буфер обмена работать параллельно. Просто сделать доп. проверку.

Это первое, что я попробовал. Потратил несколько дней на отладку файлового семафора в COMMON, но стабильной работы не добился. Может встроенные файловые функции работают немного не так по таймингу, как я думаю.
Возможно, надо попробовать файлы через WinAPI, общую память или даже семафорное API (наверняка есть, может кто подскажет; в голову сразу пришел MutEx, буду думать).
Если есть желание проанализировать мои функции Lock и Release (они короткие), могу выложить послезавтра. Нет?
 
Edgar Akhmadeev:
Это первое, что я попробовал. Потратил несколько дней на отладку файлового семафора в COMMON, но стабильной работы не добился. Может встроенные файловые функции работают немного не так по таймингу, как я думаю.
Возможно, надо попробовать файлы через WinAPI, общую память или даже семафорное API (наверняка есть, может кто подскажет; в голову сразу пришел MutEx, буду думать).
Если есть желание проанализировать мои функции Lock и Release (они короткие), могу выложить послезавтра. Нет?

Ну Вы намудрили! Введите string-input, в который запихивайте через буфер путь к Терминалу. После пропихивания настроек считывайте их и сверяйте на их корректность. В частности, по этой string-input. Кнопку Старт нажимайте, как проверка удачно завершится.


Нечто похожее делается даже.

  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:

Ну Вы намудрили! Введите string-input, в который запихивайте через буфер путь к Терминалу. После пропихивания настроек считывайте их и сверяйте на их корректность. В частности, по этой string-input. Кнопку Старт нажимайте, как проверка удачно завершится.

Не то чтобы намудрил, просто слишком прямолинеен. Мульти доступ значит семафоры.
Что ж, просил идею и получил. Спасибо!
 

Ускорение ГА.

Советник во фрейм-режиме принимает OnTester от Агентов. Если за 100-1000 проходов ничего путного не нашлось - жмем на Стоп.

На порядок можно ускорить Оптимизацию.
 
fxsaber:
На порядок можно ускорить Оптимизацию.

Сделал по реальным тикам (месяц) 470 оптимизаций (каждая на своем символе) за 4.5 часа.

 

1. Я бы перешёл от GetTickCount() на  GetTickCount64() в Sleep2. Иначе переполнение грозит не совсем правильной логикой. А в 64-варианте это происходит заметно реже. В других работах, возможно, тоже стоит перейти.


2. Тут второй ArrayResize вызывает вопросы

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

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

Скорее всего должно быть

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


3. Ну и напоследок немного разных типов

static void Sleep2( const uint Pause )


  static bool IsReady( const int Pause = 100 )
  {
    if (MTTESTER::IsReady2())
      MTTESTER::Sleep2(Pause);
Причина обращения: