IValuesHandlerWithPrecalc - интерфейс класса скрипта, показывает, что обработчик работает с текущими значениями, но требует предварительной обработки.
Имеет следующие методы:
PreCalc - метод выполняется до основного расчета.
Execute - метод основного расчета.
PostCalc - метод выполняется после основного расчета.
Входящие данные
Перед классом указываются входящие данные индикатора через атрибут Input, пример: [InputsCount(2)] [Input(0, TemplateTypes.DOUBLE, false, "list1")] [Input(1, TemplateTypes.DOUBLE, false, "list2")]
Это означает, что индикатор принимает два списка данных с вещественными числами. Количество параметров может быть не ограничено.
Выходящие данные
[OutputsCount(1)] [OutputType(TemplateTypes.DOUBLE)]
Это означает, что индикатор выдает один список вещественных чисел.
Пример с потоковыми данными:
В этом примере, сначала выполняется метод PreCalc, в него передаются два списка данных list1 и list2. Метод ничего не возвращает. Потом поочередно запускается метод Execute для каждого бара, тут i - номер бара. Метод возвращает вещественное число. После этого запускается метод PostCalc, он ничего не возвращает.
Пример с не потоковыми данными
Можно указать что данные не потоковые, тогда значения будут передаваться поэлементно в метод Execute, пример: [InputsCount(2)] [Input(0, TemplateTypes.DOUBLE, true, "list1")] [Input(1, TemplateTypes.DOUBLE, true, "list2")]
Обратите внимание, что теперь в метод PreCalc ничего не передается.
Особенность индикатора с одним списком данных
Если у индикатора только один входящий список данных, то он может работать только с потоковыми данными и метода PostCalc не будет.