Библиотеки: EAToMath - страница 2

 
fxsaber # :
Проверьте, что следующий скрипт запускает соответствующий EX5 (должен существовать).

Это не проблема, MACD Simple.ex5 запускается нормально

 

По этому пути также есть RunMe.ex5, но я не знаю, почему он не запускается.

 

Возможно, возвращаемый номер ошибочный. Как мне проверить, правильный ли это номер?

const int NumberEX5 = MTTESTER::GetNumberEX5(TerminalHandle, FileName)+1;

После добавления 1 получилось, но странно — почему тут было на 1 меньше?


 
hini #:

После добавления 1 получилось, но странно — почему тут было на 1 меньше?

Попробуйте временно оставить в MQL5-папке только *.mq?, *.ex? и *.py файлы.

Если будет работать, значит для правильной работы нужно учитывать не только *.ex5 и *.py.

 
fxsaber #:

Попробуйте временно оставить в MQL5-папке только *.mq?, *.ex? и *.py файлы.

Если будет работать, значит для правильной работы нужно учитывать не только *.ex5 и *.py.

Хорошо, позже я всё тщательно проверю. 
 
#property service

void OnStart() {
  
}

В ходе проведённого анализа я обнаружил проблему:При наличии файла ex5 типа Service в каталоге Experts, возвращаемое значение функции GetNumberEX5 требует корректировки (+1).
Это связано с тем, что файлы типа Service в данном каталоге не могут быть выполнены.

После удаления этого ex5 программа стала работать корректно, даже без добавления единицы.
 
hini #:

В ходе проведённого анализа я обнаружил проблему:При наличии файла ex5 типа Service в каталоге Experts, возвращаемое значение функции GetNumberEX5 требует корректировки (+1).
Это связано с тем, что файлы типа Service в данном каталоге не могут быть выполнены.

После удаления этого ex5 программа стала работать корректно, даже без добавления единицы.

Проверка на тип EX5-программы имеется.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Библиотеки: EAToMath

fxsaber, 2025.07.10 04:52

2. Далее идет номер поиска этого файла в MQL5-папке через создание списка файлов с расширениями *.ex5 и *.py.

  static int GetEX5FileNames( const string FolderName, string &FileNames[] )
  {
    int Res = 0;

    FIND_DATAW FindData;
    const HANDLE handle = kernel32::FindFirstFileW(FolderName + "\\*", FindData);

    if (handle != INVALID_HANDLE)
    {
      do
      {
        if (FindData.cFileName[0] != '.')
        {
          string Name = FolderName + "\\" + ::ShortArrayToString(FindData.cFileName);

          if ((bool)(FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
            Res += MTTESTER::GetEX5FileNames(Name, FileNames);
          else if (::StringToLower(Name) && (((::StringSubstr(Name, ::StringLen(Name) - 4) == ".ex5") &&
                                             !MTTESTER::IsLibraryOrService(Name)) ||
                                             (::StringSubstr(Name, ::StringLen(Name) - 3) == ".py")))
          {
            FileNames[::ArrayResize(FileNames, ::ArraySize(FileNames) + 1) - 1] = Name;
            Res++;
          }
        }
      }
      while (kernel32::FindNextFileW(handle, FindData));

      kernel32::FindClose(handle);
    }

    return(Res);
  }

Еще раз посмотрю, как влияют типы программ на список. Спасибо.

 
hini #:

ex5 программа стала работать корректно

Интересно, как поведет себя мат. режим с вашим советником.

 
fxsaber #:

Интересно, как поведет себя мат. режим с вашим советником.

Я ещё не тестировал(а) свой советник по-настоящему — пока только запускал(а) ваш пример. В математическом режиме нет никаких аномалий, но скорость ниже, чем у вас в демонстрации.

 

Мой советник почему-то не торгует в математическом режиме. Скорее всего, я неправильно использую Virtual-библиотеку.