У меня вопрос – имеет ли право на существование такая трехэтажная конструкция? Спрашиваю потому, что советник «ZigZag 3» не получает сигналы Buy/Sell от встроенного в него индикатора «ZigZag 2 MTF» (поступают пустые значения EMPTY_VALUE), хотя встроенный индикатор второго уровня все рисует на экране, в том числе стрелки по этим сигналам.
Все проверил, но никак не могу найти ошибку, вот и начал сомневаться в количестве уровней вложенности ресурсов при компиляции.
Есть ли ограничение на количество уровней вложенности ресурсов при компиляции MQL5-советников и индикаторов?
В принципе - должно работать, но там много нюансов. Например, не используются ли события OnChartEvent - они транслируются только в программы непосредственно, нанесенные на чарт, а не созданные из них программно. Как именно получаются сигналы?
Не слишком ли длинный путь ресурсов получается? - вроде там были ограничения и что-то может не подгружаться, но тогда по идее в логе должны были бы быть ошибки. Посмотрите на всякий случай этот раздел книги.
Следует иметь в виду, что подход с вложенными индикаторами не особо эффективный по потреблению ресурсов и скорости выполнения - желательно перенести все расчеты в один индикатор или еще лучше в сам эксперт.
- www.mql5.com
Всем привет!
У меня вопрос – имеет ли право на существование такая трехэтажная конструкция?
У меня нет ответа, есть рекомендация.
Не использовать трёхэтажную конструкцию в советнике. Вызывайте обычный индикатор, но с того таймфрема который вам надо.
Если вам нужны линии индикатора со старшего таймфрема на младшем, то можно в индикаторе добавить рисование линий графическими объектами.
Вот пример советник торгует на 1Н, опираясь на FVG с 4Н
Вот так выглядят графические объекты на 1Н

а так выглядит индикатор на 4Н

В итоге у вас есть привычны доступ к данным индикаторных буферов и отображение индикатора на младшем тайме.
ЗЫ. Заодно когда вы попытаетесь нарисовать обычному зигзагу ноги объектами OBJ_TREND, вы увидите как часто он перерисовывает и то, что он рисует в онлайне, сильно отличается от того, что он нарисует, например после переключения тф.
В принципе - должно работать, но там много нюансов. Например, не используются ли события OnChartEvent - они транслируются только в программы непосредственно, нанесенные на чарт, а не созданные из них программно. Как именно получаются сигналы?
Не слишком ли длинный путь ресурсов получается? - вроде там были ограничения и что-то может не подгружаться, но тогда по идее в логе должны были бы быть ошибки. Посмотрите на всякий случай этот раздел книги.
Следует иметь в виду, что подход с вложенными индикаторами не особо эффективный по потреблению ресурсов и скорости выполнения - желательно перенести все расчеты в один индикатор или еще лучше в сам эксперт.
1) нет, события OnChartEvent не используются;
2) нет, путь для ресурсов не слишком длинный (во всяком случает компилятор не ругается и в логе ошибок нет);
3) буду думать над подходом без вложения одного индикатора в другой...
спасибо...
- www.mql5.com
Еще не было сказано, как эта конфигурация проверяется - в каких условиях проблемы - в тестере (в каком режиме), онлайн или еще как?
Лучше всего приложить упрощенный исходник, воспроизводящий проблему, потому что легко допустить ошибку, например, с чтением показаний не того бара (тем более, что речь о МТФ), не в том порядке "as series", какой ожидался, и т.д.
У меня нет ответа, есть рекомендация.
Не использовать трёхэтажную конструкцию в советнике. Вызывайте обычный индикатор, но с того таймфрема который вам надо.
Если вам нужны линии индикатора со старшего таймфрема на младшем, то можно в индикаторе добавить рисование линий графическими объектами.
Вот пример советник торгует на 1Н, опираясь на FVG с 4Н
Вот так выглядят графические объекты на 1Н
а так выглядит индикатор на 4Н
В итоге у вас есть привычны доступ к данным индикаторных буферов и отображение индикатора на младшем тайме.
ЗЫ. Заодно когда вы попытаетесь нарисовать обычному зигзагу ноги объектами OBJ_TREND, вы увидите как часто он перерисовывает и то, что он рисует в онлайне, сильно отличается от того, что он нарисует, например после переключения тф.
1) у меня был первый вариант индикатора, построенный на графических объектах, но я отказался от графических объектов в пользу индикаторных буферов, т.к. в планах тестировать советник в тестере стратегий; индикатор ZigZag использует оригинальный алгоритм, в котором конечно есть определенная задержка отрисовки, но зато без перерисовки;
2) у меня получилась трехэтажная конструкция - это если считать вместе с советником, т.е. советник обращается внутри себя как к ресурсу к индикатору ZZ2 (он генерирует сигналы для советника), а сам индикатор ZZ2 в свою очередь обращается внутри себя как к ресурсу к индикатору ZZ1, который создает некие уровни на старшем ТФ, при пересечении которых ZZ2 и генерирует сигналы. Как видите, если сделать оба индикатора самостоятельными ресурсами (не вложенными друг в друга), и оба их вызывать из советника, то придется алгоритм генерации сигналов перенести в советник, а это не есть хорошо - все-таки задача советника торговать поступившие к нему сигналы, сопровождать открытые позиции и др., а генерировать сигналы - это удел индикаторов...
За рекомендации спасибо...
1) но я отказался от графических объектов в пользу индикаторных буферов, т.к. в планах тестировать советник в тестере стратегий;
Я предлагал И, но это уже не важно, так как я не верно понял основную задачу - рассчитывать сигнал не в советнике.
Ну насколько мне позволяет мой совсем не большой опыт, то я полагаю вы, что то делаете не так, так как вложенность индикаторов не должна стать причиной отказа работать индикатора в советнике, но это не точно)))
Действительно, после нескольких манипуляций, в частности перестановки местами (перенумерации) индикаторных буферов, советник получил непустые значения сигналов. Поэтому я делаю вывод, что вложенность индикаторов не была причиной отказа работы индикатора в советнике, но саму причину отказа я пока назвать не берусь.
Значит на свой вопрос, вынесенный в заголовок "Есть ли ограничение на количество уровней вложенности ресурсов при компиляции MQL5-программ?" ответ отрицательный.
Таким образом одну проблему решить удалось - теперь советник получает сигналы от индикатора и открывает сделки в режиме онлайн.
Но вот засада - в тестере стратегий с такими же настройками советник отказывается торговать. Было такое у кого-нибудь в своей практике?
Таким образом одну проблему решить удалось - теперь советник получает сигналы от индикатора и открывает сделки в режиме онлайн.
Но вот засада - в тестере стратегий с такими же настройками советник отказывается торговать. Было такое у кого-нибудь в своей практике?
Угу. К экстрасенсам это не тут, это тудысь)))
Наводящие вопросы.
Тестируете в каком режиме? на OHLC , на сгенерированных тиках али на реальных?
Советник в своих сигналах нуждается в расчётах на каждом тике, али только открытия свечей?
Вариантов, что советник не хочет работать в тестере не много, но есть.
А вообще, наилучший вариант, поставить нужную дату в OnTick(), например дату когда открылась позиция на демо, я вставляю такую
if(TimeCurrent() >= D'2023.01.20 00:00:00') Sleep(1);
Поставить точку остановки на Sleep и по быстренькому пробежать в тестере до этой даты. А потом по шагам.
Другого рецепта у меня нет.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Всем привет!
Занят сейчас разработкой советника и индикаторов «ZigZag» для MT5. У меня получается вот такая трехэтажная конструкция.
В самом низу находится базовый индикатор «ZigZag 1» по оригинальному алгоритму, который просто строит индикатор на текущем ТФ.
Далее этот индикатор встраивается в качестве ресурса при компиляции и вызывается из индикатора второго уровня «ZigZag 2 MTF». Как следует из его названия это мультитаймфреймовый вариант, т.е. его можно бросить, например, на график H1 и заказать построение зигзага для любого ТФ старше H1, например, H2, H3, H4 и т.д. Кроме того, он же генерирует сигналы Buy/Sell для дальней передачи их советнику.
Последний заключительный уровень – это сам советник «ZigZag 3», который также включает в себя индикатор «ZigZag 2 MTF» в качестве ресурса при компиляции советника.
У меня вопрос – имеет ли право на существование такая трехэтажная конструкция? Спрашиваю потому, что советник «ZigZag 3» не получает сигналы Buy/Sell от встроенного в него индикатора «ZigZag 2 MTF» (поступают пустые значения EMPTY_VALUE), хотя встроенный индикатор второго уровня все рисует на экране, в том числе стрелки по этим сигналам.
Все проверил, но никак не могу найти ошибку, вот и начал сомневаться в количестве уровней вложенности ресурсов при компиляции.
Есть ли ограничение на количество уровней вложенности ресурсов при компиляции MQL5-советников и индикаторов?