Обновление массива Rates с каждым новым баров. Или как добавить в массив только последний бар. - страница 3
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Если вы такой … как по русски правильно сказать, чтобы не обидеть… Сделайте свой вариант сравнительного теста и покажите результат где добавление в существующий массив типа MqlRates по одному элементу будет быстрей чем выполнение CopyRates всей истории. ИМЕННО столько раз, сколько раз будет добавляться новый бар.
Тот комментарий касается только реализации исследования.
У меня лично нет готового алгоритма для подобного копирования только новых баров. Да и вообще, я на mql4 пишу, там доступ к котировкам других графиков осуществляется максимально легко.
Я бы наверное тоже на mql5 просто заново копировал бы штук 1000 баров с каждым тиком, что бы избежать головной боли с синхронизацией при "добавлении новых баров в большой массив". Для большинства советников 1000 последних баров будет вполне достаточно.
А в индикаторах копировать котировки вообще бы не стал. Для текущего тф они есть в параметрах OnCalculate, а мультитаймфрейм индикаторы - штука не благодарная, я бы за это не брался вообще.
…Да и вообще, я на mql4 пишу, …
Тогда зачем вы тут?
Тогда зачем вы тут?
Та что же вы агрессивный такой?😄
У меня нет желания сраться, я писал конструктивно и по существу.
Здесь я потому, что mql5 меня тоже интересует. Более того, мои посты были полностью по mql5, я ведь мог и умолчать, что я пока на четверке.
На самом деле, не так и больно память выделять, относительно остальных вычислений.
Не сильно изменилось.
Что касается выделенного красным: ТС хочет иметь всю историю для пересчёта на каждом баре. По этому ему нужен не только последний бар, а вся история. Или как минимум не один десяток баров. Вот и получается, либо на каждом баре копировать всю историю, либо копировать один бар и дописывать его в другой массив.
Я так и предлагал - запрашивать только новые бары, добавлять в общий массив.
А ваш пример с ошибкой, поэтому вызов просто не работает (не потребляет ни времени, ни памяти):
Вместо этого должно быть:
Я так и предлагал - запрашивать только новые бары, добавлять в общий массив.
А ваш пример с ошибкой, поэтому вызов просто не работает (не потребляет ни времени, ни памяти):
Вместо этого должно быть:
Если копировать только новые бары, то нужно много дополнительных обработок, я думаю.
При ошибке копирования нужно очищать весь ранее скопированный массив. Если добавлено больше одного бара - лучше тоже скопировать все заново. Потому, что лично я не могу быть уверен, что новые бары добавились именно в нужный конец массива (а не подгрузилась история, например).
Плюс все равно нужен хотя бы холостой запрос с каждым тиком что бы поддерживать график в актуальном состоянии. По идее, вызов Bars() для этого графика может обеспечить холостой запрос, но это не точно и нужно проверять (и как раз поможет узнать, добавились ли новые бары).
А если между вызовом Bars и копированием самих котировок придет тик, который сформирует новый бар (привет, паранойя)? Получается, при добавлении бара нужно копировать на 1 бар больше, что бы убедится потом, что все правильно добавили.
Довольно громоздкая хреновина получится с учетом всего этого.
Вот такой эксперт запустить в тестере в режиме по открытию баров (потому что просили именно котировки, в онлайне нужно будет добавить общую проверку на формирование нового бара - здесь для нас это делает тестер), дважды: один раз параметр Batch равный true, второй раз - false.
Вот какие замеры получаем за 2023 год:
Это только по поводу быстродействия.
Насчет засечки последнего скопированного бара - нетрудно это реализовать и не займет ни времени, ни ресурсов (только одну переменную с datetime последнего бара сохранять и отправлять в CopyRates).
Вот такой эксперт запустить в тестере в режиме по открытию баров, дважды: один раз параметр Batch равный true, второй раз - false.
Вот какие замеры получаем:
Это только по поводу быстродействия. Насчет засечки последнего скопированного бара - нетрудно это реализовать и не займет ни времени, ни ресурсов (только одну переменную с datetime последнего бара).Оно то все хорошо и правда, но это сферическое копирование в вакууме.
нетрудно это реализовать и не займет ни времени, ни ресурсов
Реализация боевого/надежного варианта добавит ~5 экранов кода и это не сделаешь на коленке.
Опять-же, даже результат выполнения Bars() нужно обрабатывать.
Я не сомневаюсь, что это самое быстрое решение с точки зрения производительности. Но разработать надежный вариант не так уж и легко.