Ошибки, баги, вопросы - страница 3239

 
Anatoli Kazharski #:

Ожидается, что после закрытия графика фреймов этот файл должен освобождаться (?).

Фрейм-советник при этом закрыт?

 
fxsaber #:

Фрейм-советник при этом закрыт?

Если в данном контексте это одно и то же:

Фрейм-советник == График фреймов (на котором открыт советник во время оптимизации)

, то ответ, да, закрыт.

 
Anatoli Kazharski #:

Если в данном контексте это одно и то же:

Фрейм-советник == График фреймов (на котором открыт советник во время оптимизации)

, то ответ, да, закрыт.

Посмотрел. Действительно, блокируется mqd-файл. Причина, видимо, в том, что по задумке разработчиков фреймы должны оставаться доступны из любой программы штатными средствами.

void OnStart()
{
  ulong Pass;
  string Name;
  long ID;
  double Value;

  Print(FrameFirst()); // true

  while(!IsStopped() && FrameNext(Pass, Name, ID, Value))  
    Print(_LastError);
    
  Print(_LastError); // 4000
}

Однако, похоже, и с этим проблемы. FrameNext не отрабатывает, выдавая неизвестный номер ошибки. Похоже, здесь уже баг.


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

Ошибка с CustomRatesUpdate #4000
Ошибка с CustomRatesUpdate #4000
  • 2021.02.04
  • www.mql5.com
Написал робот который с биржи транслирует котировки на кастомный символ MT5. Иногда советник уходит в непонятное состояние...
 
fxsaber #:

Посмотрел. Действительно, блокируется mqd-файл. Причина, видимо, в том, что по задумке разработчиков фреймы должны оставаться доступны из любой программы штатными средствами.

Однако, похоже, и с этим проблемы. FrameNext не отрабатывает, выдавая неизвестный номер ошибки. Похоже, здесь уже баг.

Гипотеза подтвердилась. Как и наличие бага. Сужу по логике в этих строках кода.

bool FrameFirst( void ) const
{
  return((this.handle != INVALID_HANDLE) ? ::FileSeek(this.handle, FRAME_OFFSET, SEEK_SET) : ::FrameFirst());
}
Frames
Frames
  • www.mql5.com
Чтение фреймов из mqd-файлов результатов Оптимизации.
 
fxsaber #:

Посмотрел. Действительно, блокируется mqd-файл. Причина, видимо, в том, что по задумке разработчиков фреймы должны оставаться доступны из любой программы штатными средствами.

Однако, похоже, и с этим проблемы. FrameNext не отрабатывает, выдавая неизвестный номер ошибки. Похоже, здесь уже баг.

По ссылке (неизвестный номер ошибки) функция ResetLastError() вызывается перед кастомной CheckRatesData(), а GetLastError() уже после CustomRatesUpdate(). Поэтому непонятно, где причина ошибки.

В вашем примере попробуйте вызвать ResetLastError() перед циклом. Будет такая же "неизвестная" ошибка в _LastError?

Документация по MQL5: Общие функции / ResetLastError
Документация по MQL5: Общие функции / ResetLastError
  • www.mql5.com
ResetLastError - Общие функции - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

Я правильно понимаю, что агенты логов перезаписываются целиком?

Когда проходит много циклов оптимизации, очередь на запись информации на HDD сильно возрастает. На виртуальном диске в памяти проблем нет.

Скрин при работе на диске в памяти, но видны размеры записываемой информации, которые растут. При начале работы очередь в килобайтах, а спустя 12 часов уже до 80 мегабайт (24 агента), что для нелинейной записи много.


 
Anatoli Kazharski #:

По ссылке (неизвестный номер ошибки) функция ResetLastError() вызывается перед кастомной CheckRatesData(), а GetLastError() уже после CustomRatesUpdate(). Поэтому непонятно, где причина ошибки.

Привел ссылку, как единственное упоминание ошибки 4000.

В вашем примере попробуйте вызвать ResetLastError() перед циклом. Будет такая же "неизвестная" ошибка в _LastError?

Да, ошибку вызывает первый FrameNext.

 
Aleksey Vyazmikin #:

Когда проходит много циклов оптимизации, очередь на запись информации на HDD сильно возрастает. На виртуальном диске в памяти проблем нет.

Запретить логи еще можно таким способом.

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

Как выключить автообновление?

fxsaber, 2022.08.20 17:54

Заменить этот каталог (каждому Терминалу на компе соответствует свой) одноименным файлом (нулевой длины).

Т.е. зайти в папку Tester\Agent-127.0.0.1-3000\ и вместо каталога logs создать файл logs.


Автоматизировать вкл/выкл. логов Тестера (+ Агенты) можно скриптом.

 
fxsaber #:

Запретить логи еще можно таким способом.

Т.е. зайти в папку Tester\Agent-127.0.0.1-3000\ и вместо каталога logs создать файл logs.


Автоматизировать вкл/выкл. логов Тестера (+ Агенты) можно скриптом.

Спасибо, попробую - сейчас работает всё - не хочется тормошить.

 
fxsaber #:

Запретить логи еще можно таким способом.

Т.е. зайти в папку Tester\Agent-127.0.0.1-3000\ и вместо каталога logs создать файл logs.


Автоматизировать вкл/выкл. логов Тестера (+ Агенты) можно скриптом.

Создавал текстовый документ с названием  logs., но терминал просто все стер и создал папки.