Vil,
по п.2 я приведу такой пример:
строим скользяшку (SMA, period = 1000).
У нас 10 000 баров, т.е. нужно рассчитать 9 000 значений SMA.
Вариант 1: по приходу бара 10 001, пересчитываем 9000 значений и еще одно, новое.
Вариант 2: кэшируем 9000 значений с привязкой к бару, по приходу нового бара читаем это значение, считаем одно новое, кэшируем 9001.
Опция расчета:
А. можно взять SMA[10001] как среднее для интервала price[9001] - price[10001].
То есть, суммируем 1000 значений (цикл 1000 итераций), потом
делим на 1000.
Итого 1003 операции (с учетом вытаскивания price[i]).
Б. для расчета SMA[10001], берем значение SMA[10000] из кэша (1 операция). Вычитаем число price[9000]/1000 (2,3,4 операция) и прибавляем число price[10001]/1000 (5,6,7 операция).
Итого 7 операций.
Опция Б считается за 7 операций независимо от периода SMA, в то время, как опция А тем медленнее, чем больше период и чем больше баров.
При кэшировании, у нас 7 операций + запись/чтение кэша.
Без кэширования, у нас (период * длина_массива_SMA) операций.
На миллионе баров, расчет при кэшировании займет микросекунды, без кэширования - десятки секунд.
____________________
По вашему примеру, не припомню ни одного "тянущегося" индикатора. У большинства встроенных индикаторов есть статичный период и прочие константы, не меняющиеся от длины массива инструмента.
Т.е. ваш пример - частность. Сдвиг (когда сервер присылает пачку баров) лично я переписал, он опять же побарный - так тупо быстрее.
____________________
Печально, что вариантов теста нет
Настройка терминала типа "эмуляция живых торгов на истории" - очень нужная штукенция, т.к. Ваши же покупатели тестят продукт на истории, а на живом сервере вылазят ошибки.
В целом ошибки как-бы и нет, но негативный осадочек остается.
Спасибо за ответ.