Новая версия платформы MetaTrader 5 build 1930: Плавающие окна графиков и .Net библиотеки в MQL5 - страница 90
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Билд 1950.
При использовании режима оптимизации "Математические вычисления" столкнулся с существенной проблемой - теряются в большом объеме фреймы, получаемые от агентов. Теряются как от удаленных агентов, так и от локальных агентов.
В режиме "Только цены открытия" потери начались только на проходе в районе 280000.
Думал у меня в коде беда, но нет, всё вырезал, вот код для воспроизведения.
Или нужно что-то дополнительно прописывать?
Из наблюдений, чем быстрей выполняется код, тем больше потерь...
три брут.. мысли читаете ) но сегодня другой брют
Билд 1950.
При использовании режима оптимизации "Математические вычисления" столкнулся с существенной проблемой - теряются в большом объеме фреймы, получаемые от агентов. Теряются как от удаленных агентов, так и от локальных агентов.
В режиме "Только цены открытия" потери начались только на проходе в районе 280000.
Думал у меня в коде беда, но нет, всё вырезал, вот код для воспроизведения.
Или нужно что-то дополнительно прописывать?
Из наблюдений, чем быстрей выполняется код, тем больше потерь...
С OnTesterPass() вы всегда можете «потерять» кадры, и чем быстрее компьютер, тем больше вы теряете.
Необходимо помнить, что фреймы оптимизации, отсылаемые агентами тестирования с помощью функции FrameAdd(), могут приходить пачками и для их доставки требуется время. Поэтому не все фреймы, а соответственно и события TesterPass, могут до окончания оптимизации поступить и быть обработанными в OnTesterPass(). Поэтому для гарантированного получения всех запоздавших фреймов в OnTesterDeinit() необходимо поместить блок кода с использованием функции FrameNext().
Используйте FrameFirst() / FrameNext() в OnTesterDeinit(), вы получите все кадры
три брут.. мысли читаете ) но сегодня другой брют
Это старый проект, просто решил допилить - перебор листьев, а дальше надо думать о комбинациях, что несколько сложней... в общем строю искусственный лес.
Но, расслабляться и отвлекаться от работы надо так или иначе...
С OnTesterPass() вы всегда можете «потерять» кадры, и чем быстрее компьютер, тем больше вы теряете.
Используйте FrameFirst() / FrameNext() в OnTesterDeinit(), вы получите все кадры
FrameNext() я и так использую, а OnTesterDeinit() из справки говорится об исполнении после завершения оптимизации - так и работает.
"
OnTesterDeinit
Функция OnTesterDeinit() является обработчиком события TesterDeinit, которое автоматически генерируется по окончании оптимизации эксперта в тестере стратегий. Функция должна быть определена с типом void, параметров не имеет:
void OnTesterDeinit();
Эксперт с обработчиком TesterDeinit() автоматически загружается на график при запуске оптимизации и получает событие TesterDeinit после её завершения. Функция предназначена для финальной обработки всех результатов оптимизации.
"
Поэтому, прошу Вас показать на примере кода, как я должен правильно работать с фреймами.
Спасибо, но не понял.
В коде есть переменная Calc_Prohod - которая считает число фреймов, а фактически считает заходы в void OnTesterPass(), и их число меньше чем проходов.
Так
Счетчик заработал верно - только не понимаю, что я в итоге сделал...
Спасибо!FrameNext() я и так использую, а OnTesterDeinit() из справки говорится об исполнении после завершения оптимизации - так и работает.
"
OnTesterDeinit
Функция OnTesterDeinit() является обработчиком события TesterDeinit, которое автоматически генерируется по окончании оптимизации эксперта в тестере стратегий. Функция должна быть определена с типом void, параметров не имеет:
void OnTesterDeinit();
Эксперт с обработчиком TesterDeinit() автоматически загружается на график при запуске оптимизации и получает событие TesterDeinit после её завершения. Функция предназначена для финальной обработки всех результатов оптимизации.
"
Поэтому, прошу Вас показать на примере кода, как я должен правильно работать с фреймами.
Спасибо за пример!
Жаль, что в документации нет примера такой реализации...
Это старый проект, просто решил допилить - перебор листьев, а дальше надо думать о комбинациях, что несколько сложней... в общем строю искусственный лес.
Но, расслабляться и отвлекаться от работы надо так или иначе...
не сильно понятно как пользоваться фреймами в данном случае, мне кажется проще все организовать через чтение\запись файла
можно сохранять сплиты деревьев СTreeNode, например.. тема требует изучения, но может быть использована а-ля генетическое программирование, в т.ч. для конструирования признаков
не сильно понятно как пользоваться фреймами в данном случае, мне кажется проще все организовать через чтение\запись файла
можно сохранять сплиты деревьев СTreeNode, например.. тема требует изучения, но может быть использована а-ля генетическое программирование, в т.ч. для конструирования признаков
Так у меня листья в коде, а в файлах рассчитанные предикторы и финансовый результат на каждый вход, советник просто быстро может перебрать (за 3 часа) 280 000 проходов с проверкой по отдельности на каждом годе с 2014 по 2018 включительно и с разбивкой на типы торговой операции - покупка/продажа. А фреймы передают много разных характеристик баланса и листьев, как стандартные, так и собственного изобретения. Дальше отберу устойчивые листья (они были получены на 2016-2017 годах), и уже с ними надо заниматься комбинациями. И тут можно и ещё раз прогнать для каждого листа оптимизация и использовать листья в качестве фильтров - некий бустинг прям таки. А потом надо комбинировать, и тут мне хочется иметь независимые листья, т.е. что б они как можно реже вместе выражали свое мнение по одному вопросу, а для этого надо как то их сопоставить поудачней, как бы на общем поле что бы добавления нового листа улучшало результат и занимало те участки, на которых нет решений у модели.