Мультивалютный - мультитаймовай советник - страница 7

 
Fast528:

не пойму что мешает получать на нулевом баре данные индикатора, причем тут новый бар?

Потому что сигнал нужно ждать постоянно, во время любого тика, а не нового бара + к этому еще и на всех периодах и нескольких валютных парах

 
Tango_X:

Потому что сигнал нужно ждать постоянно, во время любого тика, а не нового бара + к этому еще и на всех периодах и нескольких валютных парах

Получаете сигнал по таймеру в 1 секунду. Сохраняете это всё в массив [символ][период]. Далее постоянно мониторите в таймере новый сигнал, и если есть сигнал, то сравниваете его значение с ранее сохранённым - если значение не совпадает, то сигнал новый, и можно торговать, если значение совпало, то это старый сигнал - пропускаем

 
Tango_X:

Потому что сигнал нужно ждать постоянно, во время любого тика, а не нового бара + к этому еще и на всех периодах и нескольких валютных парах

Поэтому:

  1.  Перенесите код индикатора в советник.
  2. Запускайте механизм поиска сигнала из таймера (хоть каждые 16 мс).
Пока вы зависите от индикатора, будет вероятность пропуска сигнала. Если код будет в советнике, вы его не пропустите.

 
Реter Konow:

Поэтому:

  1.  Перенесите код индикатора в советник.
  2. Запускайте механизм поиска сигнала из таймера (хоть каждые 16 мс).
Пока вы зависите от индикатора, будет вероятность пропуска сигнала. Если код будет в советнике, вы его не пропустите.

Как потом индикатор из советника в таймере вызывать с разными периодами и парами - иожно пример простой?

 
Tango_X:

Как потом индикатор из советника в таймере вызывать с разными периодами и парами - иожно пример простой?

Полностью перенесите код и избавьтесь от индикатора. Если это возможно.

Если параллельно индикатор нужен для визуального сопровождения торговли, то запускайте его отдельно. 

Вам нужна только расчетная часть индикатора. 


Последнее:

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

Если код индикатора будет в советнике, то вы сможете сравнивать значения до и после и определить, что сигнал был мгновение назад. То есть, сможете реагировать на сигнал, который пропустили, потому что узнаете о факте пропуска сравнивая значения записываемые в массив. 

А при связи через индикатор, это сделать может быть гораздо сложнее и менее эффективно.

 
Все спасибо за советы! Попробую каждый из них и что-то думаю для себя найду
 
Советник может пропускать тиковые сигналы, это сделано специально разработчиками. Поэтому работать тогда нужно по уже имеющимся в истории тикам, будут задержки, но сигнал не будет пропущен. Но, я думаю, что OHLC минутного бара достаточно для восстановления почти любого пропущенного сигнала.
 
Aleksey Vyazmikin:
Советник может пропускать тиковые сигналы, это сделано специально разработчиками. Поэтому работать тогда нужно по уже имеющимся в истории тикам, будут задержки, но сигнал не будет пропущен. Но, я думаю, что OHLC минутного бара достаточно для восстановления почти любого пропущенного сигнала.

Как пропускать тики??? Какими разработчиками это специально сделано? Вы о чём?

 
ElenaVVT:

Как пропускать тики??? Какими разработчиками это специально сделано? Вы о чём?

Ренат писал ранее о том, что советник при появлении нового тика выполняет вычисления, и ждет появление нового тика, если за период обработки данных были ещё тики, то они не ставятся в очередь, а просто пропускаются, иначе терминал просто завис бы. 

События клиентского терминала

NewTick

Событие NewTick генерируется при поступлении новых котировок и обрабатывается функцией OnTick() у присоединенных советников. Если при поступлении новой котировки выполнялась функция OnTick, запущенная на предыдущей котировке, то пришедшая котировка будет проигнорирована советником, так как соответствующее событие не будет поставлено в очередь событий эксперта.

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

Событие NewTick генерируется независимо от того, запрещена или разрешена автоматическая торговля (кнопка "Разрешить/запретить Авто-торговлю"). Запрет автоматической торговли означает только запрет на отправку торговых запросов из эксперта, работа эксперта не прекращается.

Запрет автоматической торговли путем нажатия на указанную кнопку не прерывает текущее выполнение функции OnTick().

 
Aleksey Vyazmikin:

Ренат писал ранее о том, что советник при появлении нового тика выполняет вычисления, и ждет появление нового тика, если за период обработки данных были ещё тики, то они не ставятся в очередь, а просто пропускаются, иначе терминал просто завис бы. 

События клиентского терминала

NewTick

Событие NewTick генерируется при поступлении новых котировок и обрабатывается функцией OnTick() у присоединенных советников. Если при поступлении новой котировки выполнялась функция OnTick, запущенная на предыдущей котировке, то пришедшая котировка будет проигнорирована советником, так как соответствующее событие не будет поставлено в очередь событий эксперта.

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

Событие NewTick генерируется независимо от того, запрещена или разрешена автоматическая торговля (кнопка "Разрешить/запретить Авто-торговлю"). Запрет автоматической торговли означает только запрет на отправку торговых запросов из эксперта, работа эксперта не прекращается.

Запрет автоматической торговли путем нажатия на указанную кнопку не прерывает текущее выполнение функции OnTick().

Так всегда было, если ретурн ОнТик советника не вернулся, пришедшие тики пропускаются. Советник их отслеживает только в режиме ожидания тиков. Но Вы вроде о преднамеренных пропусках тиков? Для меня это баг.

Причина обращения: