Советники: Validate - страница 9

 
видимо была старая версия, но скачал сейчас актуальные MultiTester и Validate, пытаюсь скомпилить, получаю ошибку:
'Parameters' - wrong parameters count   ValidateTasks.mqh       29      17
   bool EXPERT::Parameters(const long,MqlParam&[],string&[])    Expert.mqh      137     15
в ValidateTask вызывается как 
EXPERT::Parameters(Chart, Parameters, Names, false)

а сигнатура метода такая: 

static bool Parameters( const long Chart_ID,
                          MqlParam &Parameters[], // Путь к советнику и значения его входных параметров
                          string &Names[] )       // Имена входных параметров

не подскажешь чё сделать с этим третьим параметром false, удалить его?

Пользовался скомпиленной версией - там баг из первого сообщения, когда сам компилирую - вроде норм

 
Александр Кувакин #:

сигнатура метода такая

Не такая.
 
понял в чём проблема - нажимаю Загрузить ZIP

и скачивается видимо старая версия 

static bool Parameters( const long Chart_ID,
                          MqlParam &Parameters[], // Путь к советнику и значения его входных параметров
                          string &Names[] )       // Имена входных параметров

остаётся копировать руками из вьюера который все русские буквы меняет на вопросительный знак..
через IDE тоже не грузит код, надеюсь починят
но вроде всё работает, спасибо

 
Александр Кувакин #:

остаётся копировать руками из вьюера который все русские буквы меняет на вопросительный знак..

Сюда нажать. Тогда и русские буквы будут в порядке.

 
тоже вариант, спасибо!
 

@fxsaber Привет! пытаюсь разобрать некоторые проблемы,
в файле MTtester внутри функции ClickStart есть строчка с комментом:

Res = !Check || !MTTESTER::IsReady2(); // Может быть настолько быстрое выполнение прохода, что IsReady не успеет среагировать.

при одиночном проходе после оптимизации IsReady2 стабильно не успевает среагировать за выполнением прохода и запускает очень много одинаковых проходов. Есть идеи как сделать другую проверку или вообще её отключить, кажется можно же смотреть наличие кэша от одиночного прохода?

Ещё после всей оптимизации остаются открытыми окна с одиночными проходами которых очень много - нет возможности их закрывать?

Ещё проблема - зависания, например при досрочном закрытии запущенного validate терминал подвисает, после обновления стал часто зависать во время работы validate...

Из-за первой проблемы неюзабельно выглядит, думаю её решить в первую очередь

 

модифицировал ValidateTask.mqh чтобы при одиночном проходе смотреть кэш вместо isReady2. Добавил метод:

  bool IsTstPassFinished( void ) const {
      string FileName = MTTESTER::GetLastTstCacheFileName();
      if (this.StrTask != NULL && FileName != NULL) {
         string StrTmp = this.StrTask;
         string ToDate = VALIDATETASK::StringBetween(StrTmp, "ToDate=", "\r\n");
         ::StringReplace(ToDate,".","");
         return StringFind(FileName, ToDate) > -1;
      }
      return false;
  }

и немного поменял два метода:

bool IsFinish( void ) const
  {
    if (this.IsOptimization()) {
      return((this.StrTask == NULL) || (this.RunFlag && MTTESTER::IsReady()));
    } else {
      bool tstIsFinished = this.IsTstPassFinished();
      return((this.StrTask == NULL) || (this.RunFlag && tstIsFinished && MTTESTER::IsReady()));
    }
  }
bool Run( void )
  {
    return((this.StrTask != NULL) && !this.RunFlag
          ? (this.RunFlag = MTTESTER::IsReady() && MTTESTER::SetSettings2(this.StrTask) && MTTESTER::ClickStart(this.IsOptimization()))
          : false);
  }

стало более юзабельно
терминал так и зависает, но видимо не связано с validate

 
Александр Кувакин #:

после всей оптимизации остаются открытыми окна с одиночными проходами которых очень много - нет возможности их закрывать?

Снимите галочку.


 
Александр Кувакин #:

Ещё проблема - зависания, например при досрочном закрытии запущенного validate терминал подвисает, после обновления стал часто зависать во время работы validate...

Вроде, даже лаконичный код воспроизведения подобного зависания терминала где-то на форуме приводил. Видимо, не починили.


В этом решении для себя сделал так выход.

void IsExit()
{
  if (_CS(ObjectsTotal(0, 0, OBJ_HLINE)))
  {
    Print("HLine - ExpetRemove");
    
    ExpertRemove();
  }
}


И паузу.

            while (_CS(ObjectsTotal(0, 0, OBJ_VLINE)))
            {
              Comment(TimeData.ToString() + "- pause (VLine).");
              
              IsExit();
              
              Sleep(1000);
            }            

Так получается обходить зависания.

TesterDashboard - эффективное привлечение эволюционной интеллектуальной машины к поиску закономерностей.
TesterDashboard - эффективное привлечение эволюционной интеллектуальной машины к поиску закономерностей.
  • 2021.10.14
  • www.mql5.com
Идея не нова, вопрос был только в реализации. Платформа MetaTrader 5 обладает возможностями автоматизации Тестера. Расчет огромного количества данных на истории реальных тиков - обыденность . Проверка
 
Александр Кувакин #:

при одиночном проходе после оптимизации IsReady2 стабильно не успевает среагировать за выполнением прохода и запускает очень много одинаковых проходов. Есть идеи как сделать другую проверку или вообще её отключить, кажется можно же смотреть наличие кэша от одиночного прохода?

Отмел это решение, т.к. tst-файл формируется не всегда. Например, ошибочный проход. Возможно, в случае с Validate таких ошибочных проходов нет, тогда tst-проверка должна помочь.

Причина обращения: