Как работает iCustom

 

Как обрабатывается функция  iCustom в МТ4?  Прошу ответить тех кто в теме!


например в тестере стратегий советник обращается к индикатору на каждом тике.

При вызове функции, индикатор загружается в память, пересчитывает все значения от нулевого бара до Bars, а потом возвращает значение с нужным смещением.

Если я на первом тике запрошу значение в 1 баре, на втором тике - значение второго бара, то советник будет дважды рассчитывать индикатор на всей истории?


Если советник обращается к индикатору1, а у него стоит iCustom на индикатор 2.   Сколько раз будет пересчитываться индикатор2 при запросе значения индикатора1?


Может быть тестер стратегий и терминал МТ4 как то хранят значения индикаторов на каждом баре, чтоб при повторном запросе не пересчитывать их?

 

При первом вызове iCustom индикатор загружается и выполняется расчет его показаний на всей истории (т. к. prevCalculated = 0). При последующих вызовах prev_calculated становится равным тому, что вернул индикатор на предыдущей итерации. Обычно это rates_total. Если индикатор написан правильно с учетом rates_total и prev_calculated, то всю историю он уже проходить не будет.

Многие индикаторы на каждом тике пересчитывают всю доступную историю. Это неправильно.

 
Sergey Likho:

Как обрабатывается функция  iCustom в МТ4?  Прошу ответить тех кто в теме!


например в тестере стратегий советник обращается к индикатору на каждом тике.

При вызове функции, индикатор загружается в память, пересчитывает все значения от нулевого бара до Bars, а потом возвращает значение с нужным смещением.

Если я на первом тике запрошу значение в 1 баре, на втором тике - значение второго бара, то советник будет дважды рассчитывать индикатор на всей истории?


Если советник обращается к индикатору1, а у него стоит iCustom на индикатор 2.   Сколько раз будет пересчитываться индикатор2 при запросе значения индикатора1?


Может быть тестер стратегий и терминал МТ4 как то хранят значения индикаторов на каждом баре, чтоб при повторном запросе не пересчитывать их?

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