Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Надо сравнивать синие. Там видно, что OnTimer почти в четыре раза дольше Timer.
Именно в этом и вопрос.
ОнТаймер, внутри которого нет ничего, кроме вызова Таймер, занял в 3 раза больше процессорного времени, чем сам Таймер.
Обычная картинка в таких случаях: две одинаковые синие полоски (иногда на долю процента отличающиеся). А тут — такое!
Оверхед на вызов функции быть должен (если компилятор не смог его (вызов) развернуть), но он никак не может быть 200% (от и так достаточно весомой функции, т.е. это не погрешность на измерении пустышки).
Логи оптимизации бесконечные? В OnInit много информации выводите?
Интерсно посмотреть логи на старте агента, а также логи агента от начала до конца одной оптимизации. Как с фреймами, так и без
Вот структура тестерных функций, касающихся фреймов. OnTesterPass() отсутствует.
У Вас есть отличие в вариантах с фреймами и без. Попробуйте вызывать GetStatData в любом случае
И сравните время.
Именно в этом и вопрос.
ОнТаймер, внутри которого нет ничего, кроме вызова Таймер, занял в 3 раза больше процессорного времени, чем сам Таймер.
Обычная картинка в таких случаях: две одинаковые синие полоски (иногда на долю процента отличающиеся). А тут — такое!
Оверхед на вызов функции быть должен (если компилятор не смог его (вызов) развернуть), но он никак не может быть 200% (от и так достаточно весомой функции, т.е. это не погрешность на измерении пустышки).
Это может быть ошибкой в профилировщике, чтобы сказать конкретнее, нужны исходные коды, которые я смогу запустить у себя и перепероверить.
Пока могу сказать следующее, в текущей версии профилировщика MQL5 кода, измерительный инструмент вносит погрешности, и чем меньше код функции, тем больше погрешность.
К сожалению, не видно, какого размера функция Timer, возможно, она настолько мала, что время измерения сопоставимо с временем полезной работы.
Мы знаем как можно уменьшить влияние инструмента измерения, но это принципиально другой способ профилировки, который будем тестировать/реализовывать во второй половине этого года.
Это может быть ошибкой в профилировщике, чтобы сказать конкретнее, нужны исходные коды, которые я смогу запустить у себя и перепероверить.
Пока могу сказать следующее, в текущей версии профилировщика MQL5 кода, измерительный инструмент вносит погрешности, и чем меньше код функции, тем больше погрешность.
К сожалению, не видно, какого размера функция Timer, возможно, она настолько мала, что время измерения сопоставимо с временем полезной работы.
Мы знаем как можно уменьшить влияние инструмента измерения, но это принципиально другой способ профилировки, который будем тестировать/реализовывать во второй половине этого года.
Иляс, спасибо за ответ.
В том то и дело, что функция Таймер достаточно "толстая", и занимала львиную долю времени тестирования (потому что тест по ценам открытия М1, а таймер ежесекундный).
О погрешности я сразу написал, на нее не похоже. Но сейчас не хочется готовить код для воспроизведения, есть более приоритетные задачи.
Может, этот эффект проявится при любом тесте по ценам открытия с заведомо более частым таймером?
В любом случае, не думаю, что это стоит такого внимания.
Выяснил, что при самостоятельном запуске советника с фреймами замедления в новых билдах не происходит. Оно происходит только при запуске моим оптимизатором (в основе - кликер из fxsaber MultiTester) только советника в режиме фреймов только под новыми билдами.
Это требует осмысления.
Выяснил, что при самостоятельном запуске советника с фреймами замедления в новых билдах не происходит. Оно происходит только при запуске моим оптимизатором (в основе - кликер из fxsaber MultiTester) только советника в режиме фреймов только под новыми билдами.
Это требует осмысления.
Билд 2307 - всё нормализовалось.
Интересно, что-то нашли связанное, или это был побочный эффект?
UPD: Рано обрадовался. При тестировании на тиках всё вернулось. В 2307 время прохода независимо от включения фреймов растёт с 1:20 до 12:50. При этом 2 агента из 8 работают с нормальной скоростью. Случайные 2 (кто первый захватит ресурсы?). RAM занята на 68%, SDD на 0%.
На 2286 все агенты работают с одинаковой скоростью, и одинаково замедляются при включении доп. агентов. Резкое падение скорости происходит при включении более 5 агентов. Так было всегда при длине тиковой истории 4 года. Очень большие временные файлы создаются и постоянно пересоздаются. Одинаковые для всех агентов.
Я понимаю, что без воспроизводимого примера проблему не решить, но у меня связка из двух советников (контроллер оптимизации и фреймовый советник) - большой проект из десятков файлов с объёмом кода под мегабайт. Так что пока не знаю, что делать. Продолжу работать под 2286, а в редкое свободное время попытаюсь разбираться.
Service, пишет что скрипт.
OnInit function is useless for scripts asdx.mq5
OnDeinit function is useless for scripts asdx.mq5
Service, пишет что скрипт.
OnInit function is useless for scripts asdx.mq5
OnDeinit function is useless for scripts asdx.mq5
Не будут:
Тип
Имя функции
Параметры
Применение
Примечание
int
OnInit
нет
эксперты и индикаторы
Обработчик события Init. Допускается тип возвращаемого значения void.
void
OnDeinit
const int reason
эксперты и индикаторы
Обработчик события Deinit.
void
OnStart
нет
скрипты и сервисы
Обработчик события Start.
int
OnCalculate
const int rates_total,
const int prev_calculated,
const datetime &Time[],
const double &Open[],
const double &High[],
const double &Low[],
const double &Close[],
const long &TickVolume[],
const long &Volume[],
const int &Spread[]
индикаторы
Обработчик события Calculate на всех ценовых данных.
int
OnCalculate
const int rates_total,
const int prev_calculated,
const int begin,
const double &price[]
индикаторы
Обработчик события Calculate на одном массиве данных.
В индикаторе не может одновременно присутствовать 2 обработчика Calculate. В этом случае будет работать только обработчик события Calculate на одном массиве данных.
void
OnTick
нет
эксперты
Обработчик события NewTick. Пока идет обработка события прихода нового тика другие события этого типа не приходят.
void
OnTimer
нет
эксперты и индикаторы
Обработчик события Timer.
void
OnTrade
нет
эксперты
Обработчик события Trade.
double
OnTester
нет
эксперты
Обработчики события Tester
void
OnChartEvent
const int id,
const long &lparam,
const double &dparam,
const string &sparam
эксперты и индикаторы
Обработчик события ChartEvent.
void
OnBookEvent
const string &symbol_name
эксперты и индикаторы
Обработчик события BookEvent.
Открывашка, Билд 2280, реальный счет (FORTS)
Как понимать эту ошибку?
Что значит "слишком близко к рынку", если ордер удаляется?