MQL4. Как включить код индикатора в советник ?

 

я думаю не только мне приходила такая мысль (для MQL4 и, возможно, актуально для MQL5)

здесь уже обсуждалась эта тема и есть предварительное решение как это сделать, используя ArraySetAsSeries

можно, но не обязательно рассчитывать ограниченное количество элементов 300 например. Сейчас расчет ведётся на каждой свече (не тике), но  это занимает много времени, потому, пересчитываются все 300 элементов.

Когда рассчитывается кастомный индикатор, считается только последний пришедший с индексом 0, а все остальные как-бы сдвигаются, а для массива приходится пересчитывать весь массив.

Как для массива рассчитывать только последний элемент, и так чтобы он был с индексом 0.

 

Одно из решений, которое мне пришло, это "сдвигать" все 299 элементов в цикле, а 300 тый сбрасывать, и на место 0-го записывать новый, рассчитанный. Это может ускорить работу и сэкономит память.

 

Может кто знает, более интересное и простое решение, с помощью стандартных функций MQL4 ?

Как включить код индикатора в советник ? - MQL4 форум
  • www.mql5.com
Как включить код индикатора в советник ? - MQL4 форум
 
andrey egorov:

...

Когда расчитывается кастомный индикатор, считается только последний пришедший с индексом 0, а все остальные как-бы сдвигаются, а для массива приходится пересчитывать весь массив.

...

Не всегда только один бар считается. Иногда терминал производит сброс и индикатор пересчитывается заново полностью. Как в советнике узнаете, что был пропуск баров от обрыва связи и надо сделать полный пересчет индикатора? Никак! Поэтому вставка индикаторов в эксперта обрекает или на ошибки в расчетах или на жуткие тормоза.
 
Dmitry Fedoseev:
Иногда терминал производит сброс и индикатор пересчитывается заново полностью. 
Что за сброс, можно подробнее плз? Или имеется в виду OnInit при смене ТФ и т.д.?
 
Alexey Volchanskiy:
Что за сброс, можно подробнее плз? Или имеется в виду OnInit при смене ТФ и т.д.?
prev_calculated=0 (или IndicatorCounted()=0) не только на запуске индикатора, а еще иногда в процессе работы индикатора (независимо от действий пользователя).
 
Dmitry Fedoseev:
prev_calculated=0 (или IndicatorCounted()=0) не только на запуске индикатора, а еще иногда в процессе работы индикатора (независимо от действий пользователя).
Вот не знал, и чем это вызывается?
 
Alexey Volchanskiy:
Вот не знал, и чем это вызывается?

наверное индикатором, он отслеживает разные проблеммы со связью

 
Dmitry Fedoseev:
prev_calculated=0 (или IndicatorCounted()=0) не только на запуске индикатора, а еще иногда в процессе работы индикатора (независимо от действий пользователя).
Dmitry Fedoseev:
Не всегда только один бар считается. Иногда терминал производит сброс и индикатор пересчитывается заново полностью. Как в советнике узнаете, что был пропуск баров от обрыва связи и надо сделать полный пересчет индикатора? Никак! Поэтому вставка индикаторов в эксперта обрекает или на ошибки в расчетах или на жуткие тормоза.
спасибо, наверное это можно  инициализироватьв советнике, проверяя последовательность баров
 
попробую сделать передвижение значений в массиве, напишу, что полутся
 
andrey egorov:
попробую сделать передвижение значений в массиве, напишу, что полутся

Может вам это подойдет?

Класс для создания кольцевого буфера,

Класс для построения Moving Average с использованием кольцевого буфера.


Класс для создания кольцевого буфера
Класс для создания кольцевого буфера
  • голосов: 27
  • 2012.12.10
  • Konstantin Gruzdev
  • www.mql5.com
Класс позволяет самостоятельно организовывать внутри советника или индикатора минитаймсерии, индикаторные минибуфера, короткие буфера для хранения промежуточных потоковых данных.
 
А почему не попробовать кольцевой буфер?