Ошибки, баги, вопросы - страница 1562
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вы подумаете над нормальным решением вызова советника на каждом тике в тестере?
В тестере советник вызывается на каждом тике тестируемого инструмента
Вы же отлично понимаете, о чем спрашиваю. Запускаю два символа, поймать тики второго не получается. Народ давно предлагает единственное решение - через IndicatorRelease. Но оно само по себе выглядит костыльно.
Видел разные мультисимвольные тестеры. С такой проблемой на ровном месте столкнулся только в пятерке. Как так получилось, что Вы этого не предусмотрели - загадка.
Прошу подумать, как доработать MQL, чтобы исчезло это слабое звено и продукт стал, действительно, завершенным в своей полноценности. Предлагал свой вариант, но Ваш 100% будет продуманней.
Вы же отлично понимаете, о чем спрашиваю. Запускаю два символа, поймать тики второго не получается. Народ давно предлагает единственное решение - через IndicatorRelease. Но оно само по себе выглядит костыльно.
Видел разные мультисимвольные тестеры. С такой проблемой на ровном месте столкнулся только в пятерке. Как так получилось, что Вы этого не предусмотрели - загадка.
Прошу подумать, как доработать MQL, чтобы исчезло это слабое звено и продукт стал, действительно, завершенным в своей полноценности. Предлагал свой вариант, но Ваш 100% будет продуманней.
Это уже другой вопрос.
Что такое "поймать тики второго"?
Каким образом Вы ловите тики второго инструмента при обычном запуске эксперта?
Это уже другой вопрос.
Что такое "поймать тики второго"?
Чтобы советник вызвался на каждом тике второго символа.
Каким образом Вы ловите тики второго инструмента при обычном запуске эксперта?
Вешаю индикатор через IndicatorRelease на второй символ. Тот на каждом тике своего симваол создает событие ChartEvent. Советник, соответсвенно, ловит это событие.
Это кривое решение было предложено много лет назад, судя по поиску. Другого рабочего решения не нашел. Если тест надо проводить по 10-ти символам, то запускается аж 9 индикаторов.
Представим, что имеем советник, которые на каждом тике увеличивает счетчик.
Прогоняю на одном символе в тестере, где 1 млн тиков. Счетчик показывает 1 млн.
Прогоняю также на другом символе - аналогично: 1 млн.
Ставлю прогон сразу по двум символам. 2 млн не выходит.
Теперь понятно?
Прошу подумать, как доработать MQL, чтобы исчезло это слабое звено и продукт стал, действительно, завершенным в своей полноценности. Предлагал свой вариант, но Ваш 100% будет продуманней.
На самом деле изменение, которое потребуется сделать достаточно простое - необходимо событие OnBookEvent вызывать не только при изменении стакана, но и при приходе нового тика на подписываемый инструмент. Благодаря этому событию на ФОРТС (где есть стакан) можно уже сейчас ловить приход новых тиков с других инструментов.
Если мы на форексе, и стакана нет - OnBookEvent вызывается при приходе нового тика. Если мы на бирже - OnBookEvent вызывается при изменении стакана. Все.
Было бы много удобнее, если бы по каждому символу терминал вел счетчик тиков (с момента коннекта). И каждый советник при вызове получал бы номер тика, на котором вызван.
Это позволило бы делать оценку пропущенных тиков.
Сейчас каждый советник обязан запускаться на чарте. BookEvent - это первая ласточка, говорящая, что никаких чартов для запуска советников не требуется.
Чтобы советник вызвался на каждом тике второго символа.
Вешаю индикатор через IndicatorRelease на второй символ. Тот на каждом тике своего симваол создает событие ChartEvent. Советник, соответсвенно, ловит это событие.
Это кривое решение было предложено много лет назад, судя по поиску. Другого рабочего решения не нашел. Если тест надо проводить по 10-ти символам, то запускается аж 9 индикаторов.
Представим, что имеем советник, которые на каждом тике увеличивает счетчик.
Прогоняю на одном символе в тестере, где 1 млн тиков. Счетчик показывает 1 млн.
Прогоняю также на другом символе - аналогично: 1 млн.
Ставлю прогон сразу по двум символам. 2 млн не выходит.
Теперь понятно?
При обычной работе эксперт будет вызываться на каждом тике второго символа только в том случае, если этот эксперт прикреплён к графику этого самого второго символа.
И не надо никаких чарт-евентов городить. Всё уже сделано до Вас, нужно только поискать
1. Например, делаете 1-секундный таймер.
2. В OnTimer организуете цикл от нуля до 100 со Sleep(10) и контролем, чтобы цикл не работал дольше 1-й секунды.
3. Анализируете какие угодно инструменты при помощи запросов SymbolInfoTick
Эта конструкция и в тестере будет работать
PS таймер лучше сделать на больший период, например на 3600 секунд
И цикл организовывать не на секунду, а на чуть меньше часа. С обязательной проверкой IsStopped()
Sleep, кстати, обязателен. Иначе завесите тестер. Ну и ресурсы у системы будут отжираться при обычной работе советника
Было бы много удобнее, если бы по каждому символу терминал вел счетчик тиков (с момента коннекта). И каждый советник при вызове получал бы номер тика, на котором вызван.
Это позволило бы делать оценку пропущенных тиков.
Сейчас каждый советник обязан запускаться на чарте. BookEvent - это первая ласточка, говорящая, что никаких чартов для запуска советников не требуется.
При обычной работе эксперт будет вызываться на каждом тике второго символа только в том случае, если этот эксперт прикреплён к графику этого самого второго символа.
И не надо никаких чарт-евентов городить. Всё уже сделано до Вас, нужно только поискать
1. Например, делаете 1-секундный таймер.
2. В OnTimer организуете цикл от нуля до 100 со Sleep(10) и контролем, чтобы цикл не работал дольше 1-й секунды.
3. Анализируете какие угодно инструменты при помощи запросов SymbolInfoTick
Эта конструкция и в тестере будет работать
Безусловно, эта конструкция и в тестере будет работать криво - пропускать тики. Удивительно, что Вы (Разработчик) предлагаете в своем же продукте использовать костыль!
Не надо новых сущностей. Оценку пропущенных тиков можно сделать по уже существующему счётчику. Называется tick_volume
Попробуйте вызвать копитикс за какой-нибудь бар, с запросом соответствующего количества tick-volume-баров. И посмотрите, как этот параметр соотносится с тем, что выдает копитикс.
Различие огромное даже на M1! Что уж говорить про остальные ТФ.
Один эксперт работает только с одним графиком. Если OnTick написан правильно и без тормозов, то эксперт не пропустит ни одного тика
Это - данность.
Если Вам нужна обработка нескольких инструментов одновременно, то запускайте экспертов на графиках нужных инструментов. Один инструмент - один эксперт.
Но тестировать можно только одного эксперта. Это тоже данность.
А по поводу пропуска тиков в цикле в OnTimer необходимы воспроизводимые доказательства. Они у Вас есть?