Бета-версия платформы MetaTrader 5 build 2055: Интеграция с Python и массовые улучшения в тестере стратегий - страница 14

 
Alexey Navoykov:

Вот интересно, кто-нибудь пользуется функцией FrameFirst?

Здесь пример.

 
fxsaber:

Так зачем 44 гига шлете в Тестер?

Что-то не в порядке с размерами.

Отправлял массив типа double. Сейчас поменял на float. MQD файл в размере не поменялся.

Самое главное: после вытаскивания данных из фреймов и записи в текстовые файлы CSV, с преобразованием float в строки.

Все текстовые файлы c 2 проходами занимают 1,52 мб, а MQD файл занимает 32 mb.

Другой эксперимент 196 проходов (по 2 фрейма за проход). Текстовые файлы заняли  17,6 МБ (18 504 413 байт), MQD файл занял 3,06 ГБ (3 288 446 312 байт)
2019.05.30 12:31:11.821    Statistics    392 frames (3136.06 Mb total, 8388780 bytes per frame) received

Из чего делаю вывод, что на 1 проход резервируется 16 мб в MQD файле. Но я то использую менее 1 мб на проход.

Что там? Нулями забивается 15 мб? Можно посчтать, что мой свободные 44 Гб съедятся всего 2500 проходами оптимизации.

 
elibrarius:

Что там? Нулями забивается 15 мб? Можно посчтать, что мой свободные 44 Гб съедятся всего 2500 проходами оптимизации.

Прочтите его явно.

Frames
Frames
  • www.mql5.com
Соответствующие методы имеют тот же синтаксис и логику использования, что и соответствующие штатные функции. Пример Сценарии использования Провели Frame-оптимизацию и нужно вернуться к ее результатам. Решили сохранить/передать результат Frame-оптимизации через...
 
fxsaber:

Здесь пример.

А какой смысл там организовывать 2 цикла, если можно (и нужно) это делать в одном, и без всяких FrameFilter. Просто перебрать все фрэймы и распихать по нужным файлам.  Вам же так или иначе нужно перебрать ВСЕ фрэймы.  А если не все, тогда вопрос - зачем тогда вы лишние фрэймы отсылали из агента, тратя понапрасну ресурсы?   Так что рациональный подход предполагает однократный перебор всех фрэймов.

Поэтому как уже сказано, FrameFirst и FrameFilter совершенно не нужны.

 
Alexey Navoykov:

А какой смысл там организовывать 2 цикла, если можно (и нужно) это делать в одном, и без всяких FrameFilter. Просто перебрать все фрэймы и распихать по нужным файлам.  Вам же так или иначе нужно перебрать ВСЕ фрэймы.  А если не все, тогда вопрос - зачем тогда вы лишние фрэймы отсылали из агента, тратя понапрасну ресурсы?   Так что рациональный подход предполагает однократный перебор всех фрэймов.

Поэтому как уже сказано, FrameFirst и FrameFilter совершенно не нужны.

Честно говоря, не понимаю эти вопросы совсем. Звучат, как какой-то школьный примитив, без обид.

Фреймы можно читать когда/где/сколько угодно. Выше человек 44 гига фреймов читать явно не будет один раз.

 
Alexey Navoykov:

А какой смысл там организовывать 2 цикла, если можно (и нужно) это делать в одном, и без всяких FrameFilter. Просто перебрать все фрэймы и распихать по нужным файлам.  Вам же так или иначе нужно перебрать ВСЕ фрэймы.  А если не все, тогда вопрос - зачем тогда вы лишние фрэймы отсылали из агента, тратя понапрасну ресурсы?   Так что рациональный подход предполагает однократный перебор всех фрэймов.

Поэтому как уже сказано, FrameFirst и FrameFilter совершенно не нужны.

Для совместимости с возможно используемыми в каких-то советниках не уберут.
А вот убирать фрейм из памяти/диска, после обработки, можно дополнительной командой, типа FrameDelete
 
2063 - актуально.

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

Бета-версия платформы MetaTrader 5 build 2055: Интеграция с Python и массовые улучшения в тестере стратегий

fxsaber, 2019.05.27 09:10

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



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

bool DeleteCharts( void ) 
{
  bool Res = true;

  long Chart = ::ChartFirst();

  while (Chart != -1)
  {
    if ((Chart != ::ChartID()) && (::ChartSymbol(Chart) == _Symbol))
      Res &= ChartClose(Chart);

    Chart = ::ChartNext(Chart);
  }

  return(Res);
}

выполняется три секунды при открытых двух чартах. Затем что-то сделал и она стала выполняться мгновенно. Далее вышел на баг, что выше. Воспроизвести его после перегрузки Терминала не получилось.


Запуск скрипта на таком чарте без символа

Scripts script Test5-2 (TESTER_GBPUSD,M1) loaded successfully
Scripts initializing of Test5-2 (TESTER_GBPUSD,M1) failed with code 0 - снял руками.
Scripts script Test5-2 (TESTER_GBPUSD,M1) removed

не приводит к его выполнению.

 
fxsaber:

Честно говоря, не понимаю эти вопросы совсем. Звучат, как какой-то школьный примитив, без обид.

Фреймы можно читать когда/где/сколько угодно. Выше человек 44 гига фреймов читать явно не будет один раз.

Мне 1 раз надо считать и скинуть в CSV, после чего можно забыть о нем навсегда, даже не сохраняя в MQD файл, либо удалять из него фрейм отдельной командой - т.к. места более чем на 2500 проходов мне не хватит.

 
elibrarius:

Мне 1 раз надо считать и скинуть в CSV, после чего можно забыть о нем навсегда, даже не сохраняя в MQD файл.

Ну так есть люди, которые не выходя за пределы MT5 анализируют фреймы. И грузить их все в память для того, чтобы показать один проход, для них расточительно.

 
fxsaber:

Ну так есть люди, которые не выходя за пределы MT5 анализируют фреймы. И грузить их все в память для того, чтобы показать один проход, для них расточительно.

Поэтому для совместимости со всеми остальными предлагаю ввести команду FrameDelete(номер фрейма), для тех, у кого место на диске ограничено.

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