Индикаторы: Ping - страница 2

 
fxsaber:

На самом деле не маленький ~ 5 мс. Камень в огород страждущих нулевого пинга.

На билде 1703 средний лаг такой же. Но всплесков стало значительно меньше.

Провел эксперимент. Запустил торрент на машине с MT5, такая ситуация

Это значит, что если кто-то активно использует сеть, то лаг терминала может доходить до 2-х секунд. Это особенно важно понимать для использующих VPS, где сетевой канал зависит не от одного, а от многих клиентов. И ставить на такой VPS новостную ТС, например, становится очень рискованным.

 
fxsaber:


Да и, собственно, изначально же было заявлено, что индикаторы в советниках - это узкое горлышко, т.к. все индикаторы в одном потоке выполняются, в отличие от советников. Лаги в советниках требуют отдельного исследования. Функция получения лагов в описании, так что не сложно.

Не подскажите, где это было заявлено, что индикаторы вызываемые в советнике выполняются в один поток, а советник каким то образом распараллеливает сам задачи?

Мне казалось, что как раз наоборот - индикатор отдельная программа и может рассчитывать легко в параллельном потоке, но расчет придется ждать если он не завершен по каким либо причинам. Знаю, что в тестере стратегий всё в один поток.

 
Aleksey Vyazmikin:

Не подскажите, где это было заявлено, что индикаторы вызываемые в советнике выполняются в один поток, а советник каким то образом распараллеливает сам задачи?

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Кто-нибудь может объяснить смысл применения в советниках :....

Renat Fatkhullin, 2010.02.06 13:06

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

Индикаторы работают в своем потоке, обрабатывая каждый ценовой тик и любая задержка приведет к блокировке работы всей системы (последствия будут самые разнообразные).

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


Чтобы понять что такое индикатор, надо смотреть глубже - в доступ к историческим данным. Когда индикатор вызывают через OnCalculate, то ему передают доступную историю.

Если посмотреть на ее объем (выведя счетчики в логи), то можно увидеть, что фактически отдаются десятки и сотни мегабайт на каждом тике:

  1. Откуда берутся эти массивы?

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

  2. Кто их предоставляет?

    Их с блокировкой для чтения предоставляет терминал каждому индикатору по очереди.

  3. Какому количеству индикаторов это предоставляется?

    Теоретически неограниченному количеству индикаторов, но по очереди.

  4. Откуда взять столько памяти, чтобы дать каждому индикатору независимость в расчетах?

    Памяти катастрофически не хватает, поэтому есть единственный способ работы индикаторов по очереди.


Особенность МетаТрейдер 5 по сравнению с МетаТрейдер 4 в том, что сейчас объемы истории увеличились в разы и мы решили очень сложную задачу по быстрому (без копирований десятков мегабайт истории каждому индикатору по отдельности) перерасчету индикаторов. У нас даже два (или более) одинаковых индикатора на одинаковых таймфреймах сливаются в одну расчетную копию и считаются один раз.

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

В результате мы получим "тормозной терминал, да они даже индикатор не могут отрисовать, и чарты с задержкой отрисовываются!", причем никто не скажет "да, это у меня навороченный индикатор работает, он виноват". И даже в этом случае нас обвинят в том, что мы "не обеспечили разумного разделения, не умеем писать многопоточный софт, и тд".

Поэтому принципиального изменения поведения и принципов работы индикаторов не будет.


 
fxsaber:

Спасибо за найденную информацию.

Сразу в глаза бросается 2010 год, как известно "никогда не говори никогда", поэтому интересно бы узнать, что происходит сейчас, действительно ли не произошло каких либо изменений.

Кроме того из ответа Рената следует, что каждый индикатор работает в своем потоке, не следует ли из этого, что как минимум у советника и индикатора одновременно могут существовать два потока?

Ренат утверждает, что задержка вызвана необходимостью предоставить индикаторам большой объём данных (фактически отдаются десятки и сотни мегабайт на каждом тике), но по сегодняшним реалиям это не такой большой объем данных, и вполне возможно, что для работы одних и тех же индикаторов с одинаковыми инструментами будет организован совместный поток исторических данных, но при этом разный поток для расчета самих индикаторов, что частично уже было организовано в 2010 году "У нас даже два (или более) одинаковых индикатора на одинаковых таймфреймах сливаются в одну расчетную копию и считаются один раз.".

Если даже это так, то вполне можно объединять индикаторы в один кластер и применять там уже OpenCL (сам не применял ниразу из-за малой информации для чайников по организации).

 
Aleksey Vyazmikin:

интересно бы узнать, что происходит сейчас

Один, два, три, четыре.

 

Спасибо, внимательно посмотрел, что же выдает поиск. В основном всё старенькое.

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

У индикаторов есть преимущество - удобная работа с историей расчетов.

Возможно, если делать расчет на каждом тике, то индикатор может стать узким местом, так-как будет пытаться давать наиболее актуальные данные, но если расчет идет по OHLC, то тут параллельное вычисление наоборот должно давать преимущество. Пока советник запросит информацию с индикаторов, после проверки ситуации с текущей позицией, эти данные уже будут готовы для приема. И да, я расчет в индикаторах делаю только на открытии нового бара. А если логику индикаторов объединить то ещё быстрей выйдет, или у Вас иное мнение?

 

Aleksey Vyazmikin:

или у Вас иное мнение?

сменить ветку.

 

Вспомнил про этот замечательный индикатор.

Это - картинка с машины с нулевым пингом. Получается, что внутренний лаг Терминала в среднем ~2 мс. Скачет в диапазоне 0-9 мс.


Например, на сервер пришло два тика: сначала один, через 10 мс - второй. Так вот в Терминале второй тик можете получить не через 10 мс после первого, а через 10-19 мс. В среднем через 12 мс.

 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Индикаторы: Пинг

Ален Верлейен , 2023.03.09 20:58

С вашим индикатором возникла логическая проблема.

Ping = PrevTime ? MathAbs (Tick.time_msc - PrevTick.time_msc - (NowTime - PrevTime) / 1 e3) : 0 ;

Вы не можете просто взять абсолютное значение и считать его задержкой. -250 мс «заранее» будет считаться задержкой 250, это нехорошо.

Тики часто поступают в МТ5 пакетами, поэтому и отрицательные значения.

Я не думаю, что можно что-то точно вычислить по этому поводу. Я удалил MathAbs() и разрешил отрицательные значения, все хорошо сбалансировано между положительными и отрицательными значениями.



 
Alain Verleyen #:

Наводящий вопрос: разве время в тиках проставляет терминал? ИМХО, тиковая история формируется сервером. Тогда о каком пинге терминала идет речь?

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