АвторСообщение
постоянный участник




Сообщение: 2270
Зарегистрирован: 04.03.13
Откуда: Москва
Репутация: 3
ссылка на сообщение  Отправлено: 28.03.16 12:25. Заголовок: Cинхронизация индикаторов


Прочел небольшое обсуждение по теме, решил перенести часть сюда - может пригодится кому.


С уважением! Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 2 [только новые]


постоянный участник




Сообщение: 2271
Зарегистрирован: 04.03.13
Откуда: Москва
Репутация: 3
ссылка на сообщение  Отправлено: 28.03.16 12:29. Заголовок: Aвтор IE67: У меня ..


Aвтор IE67:

 цитата:
У меня возникла необходимость передавать данные из одного индикатора в другой.
Собственно с передачей данных проблем нет, можно передавать через глобальные переменные или другим способом,
а вот с синхронизацией все туманно.

Может кто знает:
1. В каком порядке производится расчет нескольких индикаторов, прикрепленных к одному графику?
2. В какой момент и в каком порядке изменяется размер индикаторных буферов?

В чем суть проблемы: есть один индикатор (ведущий), который выполняет расчет (на каждой свече или каждом тике, в данном случае это неважно). Есть пара ведомых индикаторов, которые должны принять данные расчета и отобразить. Как обеспечить, чтобы индикаторы считались в нужном порядке, т.е. сначала ведущий, потом ведомые?
Вопрос именно в порядке вызова индикаторов. Индикаторы выполняются в одном (интерфейсном) потоке.
При поступлении тика терминал должен вызвать OnCalculate() последовательно для каждого индикатора.
Основной вопрос - в каком порядке? По именам, по номерам подокон или еще как-то?



QJ:
 цитата:
Вы сделайте вывод в лог у каждого индикатора и посмотрите порядок. После перезапустите терминал и по новому, а
затем ищите закономерность.



ie67:
 цитата:
Проведенные эксперименты прояснили следующее:
1. Индикаторные буфера изменяют свой размер для разных индикаторов с разной задержкой относительно времени прихода тика, задержка сильно варьируется и зависит от объема кода в каждом индикаторе. Т.е. исполнительная подсистема терминала работает с каждым индикатором отдельно. Пришел тик, OnCalculate у некоторых индикаторов уже отработало, а некоторые еще с предыдущим размером буферов.
2. В зависимости от объема кода, индикатор может пропустить один или несколько тиков.

Соответственно идея с выстраиваиванием индикаторов в некую цепочку работать не будет.
Решение с синхронизацией получилось следующим:
1. Ведущий индикатор начинает расчет в стартовой точке, например по первому тику на новой свече. После расчета генерит событие EventChartCustom.
2. Каждый ведомый индикатор получает свои данные при первом вызове OnCalculate при наличии флага, взведенного событием OnChartEvent, и сбрасывает флаг.

Может, кому-то пригодится...



С уважением! Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 2107
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 3
ссылка на сообщение  Отправлено: 30.03.16 11:22. Заголовок: Если у автора так и ..


Если у автора так и остался путь передачи данных через глобальные переменные, то это огромный минус его системе. Зачем вообще использовать глобальные переменные терминала для таких целей? Это прошлый век. В МТ4 и МТ5 есть события, по которым и нужно передавать данные. То есть сигнализировать о передаче данных при помощи событий смог, а передать данные по этому же событию - нет? Очень странно...

Спасибо: 1 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  2 час. Хитов сегодня: 2
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет