Позволяет ли mql5 написать индикатор, рисующий графики в разных окнах или получать доступ к буферам индикаторов в других окнах? - страница 2
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Пример мультииндикатора с рациональным подходом к расчетам
Пример мультииндикатора с рациональным подходом к расчетам
Поэтому такое решение, использующее недокументированные возможности
Однако, и это не идеальный вариант. Идеальная схема видится такой:
Уважаемые разработчики, сообщите, пожалуйста.
fxsaber:
При запуске на чарте создается новый чарт и на него вешается (ChartIndicatorAdd) базовый индикатор с очень тяжелыми расчетами. Это позволяет убрать тормоза того чарта, на котором собираемся работать.
При таком раскладе получится создаваемому через iCustom (на том же символе и периоде) индикатору выделить отдельный поток выполнения?
Программа
Выполнение
Примечание
Индикатор
Один поток выполнения для всех индикаторов на одном символе. Сколько символов с индикаторами - столько потоков выполнения для них
Бесконечный цикл в одном индикаторе остановит работу всех остальных индикаторов на этом символе
Или же поток не зависит от чартов и периодов, а зависит только от символа?
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Ошибки, баги, вопросы
fxsaber, 2016.09.09 14:30
BlackTomcat:
Вчера обсуждали, страница 1687. :) Но читать лучше вот с этого сообщения на 1686-й странице: https://www.mql5.com/ru/forum/1111/page1686#comment_2790746 Кстати, человек на Ваш же вопрос отвечал. Просто получается, что схема такая. Запрос на вызов индикатора попадает в Терминал. Т.е. советник или скрипт не вызывают индикатор напрямую, терминал выступает посредником. В терминале происходит проверка, существует ли уже такой индикатор с указанными параметрами. Если да, то он возвращает программе, вызвавшей индикатор, хэндл (ссылку) на уже существующий индикатор. А в своих терминальных недрах помечает в счётчике, что был ещё один вызов на данный индикатор. Т.е. он ведёт учёт, сколько хэндлов на данный индикатор вернул. Когда кто-то делает IndicatorRelease, это не значит, что остальным, кто вызвал этот же индикатор с такими же параметрами, этот индикатор больше не нужен. Поэтому Терминал уменьшает счётчик на единицу, но оставляет индикатор активным, потому-что им ещё кто-то пользуется. Так будет продолжаться до тех пор, пока счётчик не обнулится. А вот когда он обнулится, тогда Терминал окончательно и бесповоротно удалит данный индикатор из оперативной памяти.
Если Вы попробуете создать код, который будет содержать IndicatorRelease, но при этом не будет содержать вызова самого индикатора, то я думаю, что Вы его просто-напросто не откомпилируете, потому-что в IndicatorRelease нужно передавать хэндл, а если индикатор не вызывался из программы, то и хэндл вы не узнаете.
К огромному сожалению, на проверку оказалось, что все это домыслы. Если и есть внутренний счетчик, то он не работает так, как Вы описали.
Написал индикатор, который заполняет рэндомно свой буфер. Из разных мест вызываю (MT5) этот индикатор через iCustom с одними и теми же входными параметрами. И получаю совершенно разные значения буферов! Кто-то выдал желаемое за действительное, либо в MT5 баг и индикаторы не работают так, как заявлено.
Жирное выполняется быстрее.
Написал индикатор, который заполняет рэндомно свой буфер. Из разных мест вызываю (MT5) этот индикатор через iCustom с одними и теми же входными параметрами. И получаю совершенно разные значения буферов! Кто-то выдал желаемое за действительное, либо в MT5 баг и индикаторы не работают так, как заявлено.
Было б желательно минимальный код для воспроизведения увидеть и описание тех разных мест, откуда вызывать. ;-) Если будете писать в сервис-деск, все равно его первым делом попросят.
Запустить индикатор на двух одинаковых чартах (символ и период)
Через коммент чартов можно увидеть различия.
Запустить индикатор на двух одинаковых чартах (символ и период)
Через коммент чартов можно увидеть различия.
С этим в сервис-деск. Потом расскажите, чем дело закончилось. Хэндлы одинаковые, но инициализация производится два раза - по разу в каждом iCustom.
Ответ из Сервисдеск
Так и задумано. Два графика - два разные ChartID()
fxsaber
Напишу, когда запущу на одном графике.Тоже будет два. На вопрос "почему?" ответ "потому что каждый индикатор может работать со своим собственным набором графических объектов"
В качестве иллюстрации. Попробуйте накинуть на график 2 раза наш пример SimplePanel
В терминале кроме пользовательских индикаторов есть ещё 40 стандартных индикаторов. Стандартные индикаторы с графическими объектами не работают, поэтому для них не нужны отдельные копии.
Для кастомных всегда нет
Документацию дополним
Так что счетчики - это ТОЛЬКО стандартные индикаторы. Кастомные - никаких счетчиков.
Ответ из Сервисдеск
Так что счетчики - это ТОЛЬКО стандартные индикаторы. Кастомные - никаких счетчиков.