Скрипт: SMA_calc Cycle with calc Period.tscript Скачайте файл. В программе: Лаб - Управление скриптами - Загрузить из файла.
В скрипте простая средняя, которую можно было посчитать и более простым способом (с помощью блока СуммаЗа) или которую можно было просто взять из инструментария в готовом виде.
Интерес, однако, представляет работа с циклом и возможность управления переменным периодом выборки значений.
Чтение формулы: Если в скрипт загружено достаточно баров для расчета, то берем все значения(список) баров от последнего закрытого до указанного cycle
Если недостаточно (т.е. количество баров меньше, чем Период) , тогда берем значение закрытия первого бара загруженной истории.
Далее, суммируем список значений в блоке CycleSum и выводим последнее значение на бар с помощью результата цикла CycleDoublResul
У кубика Цикл есть Максимально возможное значение и установлено 2000000000 в данных расчетах это значение не используется, однако, является ограничителем.
У кубика Цикл есть входящее значение, которое меньше максимального значения.
В цикл на баре приходит значение 10, количества требуемых итераций
Формула запрашивает цикл его текущее значение
Формируется список из 10 последних значений Закрытия бара, физически это формирование создает блок Результат цикла.
Суммируется в отдельном блоке CycleSum
Выводится в формулу SMA, для нахождения текущего среднего значения. Сумма списка разделить на значение Периода(в нашем случае, требуемое количество итераций на каждом баре), которое пришло в цикл.
Расчет периода в данном примере вероятно не представляет ценности, так как это просто МаксимумЗа минус МинимумЗа. Здесь следует заметить, что на вход цикла нужно подавать только целые числа, именно по-этому в блоке формула Period применяется Math.Round. Посмотрите весь возможный синтаксис блоков Формула и Логическая формула