Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Очень оригинально)
и еще немного дополнений.
Если вы создаете индикатор на главном чарте, то он событие таймера обрабатывает успешно.
Если же вы создаете индикатор на объекте-чарт или с эксперта помещенного на этот объект, то таймера не будет.
Антон мне объяснял как то в СД, что свойство наличия таймера копируется из потока чарта с которого помещается индюк. В объектах чарта таймеров нет. Они есть только на главном чарте.
Значит и таймер индикатора будет иметься только на главном чарте, но не на объекте-чарт.
Выполнить ChartIndicatorAdd необходимо в любом случае. Чтоб таймер начал работать.
События таймера генерируются для графика, а оттуда уже программам, которые работают на нем (наброшены на него). Такова идеология - Выполнение программ:
Поэтому индикатор, который вызывается из эксперта, не принимает событий таймера. Попробуйте из эксперта набросить этот идикатор на график функцией ChartIndicatorAdd, что-нибудь изменится?
Думаю, что таймер заработает, также, как если просто кинуть индикатор на этот график. Если бы был только один график, то никаких проблем.
А надо со многих графиков с разными валютами собирать в один.
С таймером все понятно - будем искать обходные пути) Придется автоматизировать открытие кучи мелких окон и кидание на них "индюка" (пока так).
Всем спасибо за грамотные ответы.
Dima_S:
Придется автоматизировать открытие кучи мелких окон и кидание на них "индюка" (пока так).
а зачем? вы же по таймеру ловите. значит много окон не нужно. Достаточно одного с индикатором. а в этом индюке прописать отработку чего угодно с любым символом. Все равно по таймеру а не по тикам.
В том то и дело, что тики тоже ловятся по многим парам - из них формируются секундные отсчеты и дальше через мэппинг все передается в эксперт на дальнейшее извращение обработку)
События таймера генерируются для графика, а оттуда уже программам, которые работают на нем (наброшены на него). Такова идеология - Выполнение программ:
Поэтому индикатор, который вызывается из эксперта, не принимает событий таймера. Попробуйте из эксперта набросить этот идикатор на график функцией ChartIndicatorAdd, что-нибудь изменится?
Dima_S:
Думаю, что таймер заработает, также, как если просто кинуть индикатор на этот график. Если бы был только один график, то никаких проблем.
А надо со многих графиков с разными валютами собирать в один.
С таймером все понятно - будем искать обходные пути) Придется автоматизировать открытие кучи мелких окон и кидание на них "индюка" (пока так).
Всем спасибо за грамотные ответы.
Таки таймер не заработал сам при такой последовательности вызовов из эксперта:
ChartOpen -> iCustom -> ChartIndicatorAdd
Графики появились, индикаторы добавились. Но, таймер в них заработал только после того, как на каждом новом графике вручную вызвал свойства индикатора и ничего не меняя нажал ОК.
Баг? Фича?
Тогда проще получать тики в эксперт с индюков и копить до получения очередного секундного отсчёта с единственного таймера (в эксперте), затем формировать секундный пакет и очищать "накопитель.
Таки таймер не заработал сам при такой последовательности вызовов из эксперта:
ChartOpen -> iCustom -> ChartIndicatorAdd
Графики появились, индикаторы добавились. Но, таймер в них заработал только после того, как на каждом новом графике вручную вызвал свойства индикатора и ничего не меняя нажал ОК.
Баг? Фича?
Вызови OnTimer() в ините.
Не проще это, а сложней. Так уже делал)
Значит придётся делать сложней. :)
Всё равно это единственно-правильно-работающий метод.
Посуди сам. Даже если тебе удастся запустить все таймеры (что не факт), и даже если их удастся запустить строго синхронно (что тем более не факт), всё равно ты будешь получать от них информацию либо последовательно, причём в неизвестном порядке (если ядро одно) либо близко к тому (если ядер несколько). И тогда придётся ещё отслеживать последовательность приёма и тому подобную бяку.
Предлагаю компромисс: ловишь тики шпионами и сразу отправляешь в головной эксперт, снабдив милисекундной меткой(GetTickCount()). Эксперт их упорядочивает в соответствии с метками и нарезает секундные блоки.
Не очень просто, зато с точностью будет порядок.
Вызови OnTimer() в ините.