Ошибки, баги, вопросы - страница 622

 
Dima_S:
Очень оригинально)

и еще немного дополнений.

Если вы создаете индикатор на главном чарте, то он событие таймера обрабатывает успешно.
Если же вы создаете индикатор на объекте-чарт или с эксперта помещенного на этот объект, то таймера не будет.

Антон мне объяснял как то в СД, что свойство наличия таймера копируется из потока чарта с которого помещается индюк. В объектах чарта таймеров нет. Они есть только на главном чарте.

Значит и таймер индикатора будет иметься только на главном чарте, но не на объекте-чарт.

Выполнить ChartIndicatorAdd необходимо в любом случае. Чтоб таймер начал работать.

 
Rosh:

События таймера генерируются для графика, а оттуда уже программам, которые работают на нем (наброшены на него). Такова идеология - Выполнение программ:

Поэтому индикатор, который вызывается из эксперта, не принимает событий таймера. Попробуйте из эксперта набросить этот идикатор на график функцией ChartIndicatorAdd, что-нибудь изменится?

Думаю, что таймер заработает, также, как если просто кинуть индикатор на этот график. Если бы был только один график, то никаких проблем.

А надо со многих графиков с разными валютами собирать в один.

С таймером все понятно - будем искать обходные пути) Придется автоматизировать открытие кучи мелких окон и кидание на них "индюка" (пока так).

Всем спасибо за грамотные ответы.

 

Dima_S:

Придется автоматизировать открытие кучи мелких окон и кидание на них "индюка" (пока так).

а зачем?  вы же по таймеру ловите. значит много окон не нужно. Достаточно одного с индикатором. а в этом индюке прописать отработку чего угодно с любым символом. Все равно по таймеру а не по тикам.
 
sergeev:
а зачем?  вы же по таймеру ловите. значит много окон не нужно. Достаточно одного с индикатором. а в этом индюке прописать отработку чего угодно с любым символом. Все равно по таймеру а не по тикам.
В том то и дело, что тики тоже ловятся по многим парам - из них формируются секундные отсчеты и дальше через мэппинг все передается в эксперт на дальнейшее извращение обработку)
 
Dima_S:
В том то и дело, что тики тоже ловятся по многим парам - из них формируются секундные отсчеты и дальше через мэппинг все передается в эксперт на дальнейшее извращение обработку)
Тогда проще получать тики в эксперт с индюков и копить до получения очередного секундного отсчёта с единственного таймера (в эксперте), затем формировать секундный пакет и очищать "накопитель.
 
Rosh:

События таймера генерируются для графика, а оттуда уже программам, которые работают на нем (наброшены на него). Такова идеология - Выполнение программ:

Поэтому индикатор, который вызывается из эксперта, не принимает событий таймера. Попробуйте из эксперта набросить этот идикатор на график функцией ChartIndicatorAdd, что-нибудь изменится?

Dima_S:

Думаю, что таймер заработает, также, как если просто кинуть индикатор на этот график. Если бы был только один график, то никаких проблем.

А надо со многих графиков с разными валютами собирать в один.

С таймером все понятно - будем искать обходные пути) Придется автоматизировать открытие кучи мелких окон и кидание на них "индюка" (пока так).

Всем спасибо за грамотные ответы.

Таки таймер не заработал сам при такой последовательности вызовов из эксперта:

ChartOpen -> iCustom -> ChartIndicatorAdd

Графики появились, индикаторы добавились. Но, таймер в них заработал только после того, как на каждом новом графике вручную вызвал свойства индикатора и ничего не меняя нажал ОК.

Баг? Фича?

 
MetaDriver:
Тогда проще получать тики в эксперт с индюков и копить до получения очередного секундного отсчёта с единственного таймера (в эксперте), затем формировать секундный пакет и очищать "накопитель.
Не проще это, а сложней. Так уже делал)
 
Dima_S:

Таки таймер не заработал сам при такой последовательности вызовов из эксперта:

ChartOpen -> iCustom -> ChartIndicatorAdd

Графики появились, индикаторы добавились. Но, таймер в них заработал только после того, как на каждом новом графике вручную вызвал свойства индикатора и ничего не меняя нажал ОК.

Баг? Фича?

Вызови OnTimer() в ините.

 
Dima_S:
Не проще это, а сложней. Так уже делал)

Значит придётся делать сложней. :)

Всё равно это единственно-правильно-работающий метод.

Посуди сам. Даже если тебе удастся запустить все таймеры (что не факт), и даже если их удастся запустить строго синхронно (что тем более не факт), всё равно ты будешь получать от них информацию либо последовательно, причём в неизвестном порядке (если ядро одно) либо близко к тому (если ядер несколько). И тогда придётся ещё отслеживать последовательность приёма и тому подобную бяку.

Предлагаю компромисс: ловишь тики шпионами и сразу отправляешь в головной эксперт, снабдив милисекундной меткой(GetTickCount()). Эксперт их упорядочивает в соответствии с метками и нарезает секундные блоки.

Не очень просто, зато с точностью будет порядок.

 
Urain:
Вызови OnTimer() в ините.
Вот щас тобе точно нагрубят... :))
Причина обращения: