Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Мне нужно было узнавать внутри OnCalculate() хендл того индикатора, который подаётся на вход текущего индикатора.
// Кстати, мне это и сейчас нужно. Эта возможность многие мои решения сделала бы намного более элегантными.
.. хотелось бы набрасывать свой СКОМПИЛИРОВАННЫЙ индикатор, на ЛЮБОЙ другой. Прямо в терминале.
Слава искренне расстраивался и продолжал приводить предыдущий пример...
После пятого круга взаимных объяснений я просто психанул, нахамил Славе и перестал туда писать... :(
// А жаль всё же, что сервис "индикатор от индикатора" до сих пор остаётся на довольно примитивном уровне.
// Идея могла бы быть колоссально развита достаточно скромными усилиями Метаквотов.
Разработчики! Может вернёмся к теме? Уверяю, ОНО ТОГО СТОИТ! Можно сотворить такие удобства, которых ну точно ни в одном терминале нету.
Применить к : Данные предыдущего индикатора | Данные первого индикатора на вкладке Параметры своего СКОМПИЛИРОВАННОГО индикатора прямо в терминале разве не позволяют избавиться от ЖЕСТКОЙ связи, которая показана в коде?
https://www.mql5.com/ru/docs/img/previousindicatorsdata.png
Уже давно так делаю и никаких проблем не возникало. Чисто теоретическая проблема - это когда индикатор, поверх которого набрасываем свой, не является ни первым, ни последним в окне. Решается она тоже просто - зная заранее эту особенность, соблюдаем правильную последовательность при добавлении индикаторов.
Более того - этот способ избавляет от головной боли от использования и дороговизны вызова CopyBuffer(), дает синхронизированный массив значений "дочернего" индикатора по ссылке. Все очень красиво, дешево и сердито ))
Может проблема глубже и я не понял о чем речь - handle дочернего индикатора нужен был для CopyBuffer ?
Есть вопрос. Возможно в индикаторе с дробными числами проводить операции отношения (например если цена открытия менше цены закрытия бара то...). И как это можно реализовать в индикаторе в виде кода?
Простейшая реализация может выглядеть так:
Простейшая реализация может выглядеть так:
Спасибо! А то возникла безумная идея. Только в програмировании понимаю только азы (совсем немного). Теперь хотя бы знаю что возможно, будем идти дальше...
Посоветую открыть раздел "Статьи". Там есть достаточно материала для начинающих. Прям по заголовкам отбирайте: "Создание простейшего...", "Индикатор для начинающих..." и так далее в этом же роде.
Возник вот такой вопрос:
Эксперт запускает два пользовательских индикатора. При этом 1-ый индикатор рассчитывает значения своих индикаторных буферов, а 2-ой - предназначен только для отображения значений некоторых из этих буферов (буферов 1-ого индикатора) в отдельном окне общего графика. Допустимо ли в ходе работы эксперта передавать хендл 1-ого индикатора в качестве единственного input-параметра 2-ого индикатора? Т.е сначала получить в эксперте хендл первого индикатора
, а затем тут же в эксперте передать этот хендл в качестве единственного input-параметра 2-ого индикатора? Например:
Запретов в документации не нашёл, компилятор не ругается, но при запуске эксперта и прикреплении им индикаторов на график - 2-ой индикатор возвращает ошибку 4807 (ошибочный хендл индикатора). При этом входной параметр (handle_1) является положительным int-числом, а ошибка генерируется при работе функции BarsCalculated(handle_1). ..Хоть при запуске эксперта рынок был закрыт, но 1-ый индикатор рассчитался полностью.
..Или же вместо передачи хендла 1-ого индикатора по указанной выше схеме разрешается только заново вызывать во 2-ом индикаторе функцию iCustom(NULL,0,"1-ый индикатор", ...) и работать с помощью исключительно того хендла, который будет получен внутри 2-ого индикатора?
..Или же вместо передачи хендла 1-ого индикатора по указанной выше схеме разрешается только заново вызывать во 2-ом индикаторе функцию iCustom(NULL,0,"1-ый индикатор", ...) и работать с помощью исключительно того хендла, который будет получен внутри 2-ого индикатора?
Насколько я помню (и если правильно понял), хендлы локальны внутри программы.
Т.е. нельзя передавать хендл, и дергать индикатор за него.
Но даже если вызвать индикатор №1 из индикатора №2 сразу после советника, он должен рассчитаться всего один раз, так что ни каких потерь по скорости не будет.
Могу ошибаться.
Т.е. нельзя передавать хендл, и дергать индикатор за него.
Ну вот смотрите пример кода: https://www.mql5.com/ru/forum/821/page3#comment_39967 Там, правда, используется хендл не пользовательского индикатора, а технического.
А потом что будет? Увеличится счетчик ссылок на единственную копию индикатора № 1, которая и будет вести расчёты? А память, занятая второй копией индикатора №1, освободится?
Вопрос возник потому, что в индикаторе № 1 у меня используются классы, и чёрт меня дёрнул выводить на печать сигналы о запуске конструкторов этих классов. Когда смотрел логи, обнаружил, что конструкторы классов индикатора №1 запускаются дважды, из под обоих индикаторов, несмотря на одинаковые входные параметры, указываемые для iCustom(). Вот и ищу способы избавиться от лишних запусков второй копии индикатора №1. Тему индикаторов прорабатывал с год назад - всё забыл :/
А потом что будет? Увеличится счетчик ссылок на единственную копию индикатора № 1, которая и будет вести расчёты? А память, занятая второй копией индикатора №1, освободится?
Вопрос возник потому, что в индикаторе № 1 у меня используются классы, и чёрт меня дёрнул выводить на печать сигналы о запуске конструкторов этих классов. Когда смотрел логи, обнаружил, что конструкторы классов индикатора №1 запускаются дважды, из под обоих индикаторов, несмотря на одинаковые входные параметры, указываемые для iCustom(). Вот и ищу способы избавиться от лишних запусков второй копии индикатора №1. Тему индикаторов прорабатывал с год назад - всё забыл :/
Недавно решал сходную проблему. Возможно, как-то поможет мое решение https://www.mql5.com/ru/forum/7556#comment_307317
OnInit индикатора запускается только один раз.
OnDeinit запускается только после удаления всех хэндлов этого индикатора из других.
Недавно решал сходную проблему. Возможно, как-то поможет мое решение https://www.mql5.com/ru/forum/7556#comment_307317