Работа завершена
Техническое задание
Необходимо сделать функцию на базе индикатора в приложении, суть которого расчет канала СКО.
Т.е. вытащить часть кода из цикла индикатора и положить в отдельную функцию.
Дополнительно организовать расчет "Канала стандартных отклонений" по этому алгоритму https://www.mql5.com/ru/code/18330.
Для проверки функции сделать индикатор, который будет вести расчет только на открытии нового бара в индикаторе будут доступны следующие входные параметры индикатора:
input ENUM_TIMEFRAMES TF=PERIOD_D1; // Тайм фрейм для расчета значения индикатора input int Bar=3; //Цикл расчета с TF enum ENUM_Polynomial { linear=1, // linear parabolic=2, // parabolic Third_power=3, // third-power liner_SCO=4, // liner_SCO }; input ENUM_Polynomial degree=linear; // Выбор метода расчета input double kstd=2.0; //Выбор коэффициента
Под циклом расчета (переменная Bar) подразумевается интервал дат, к примеру Bar==3, если TF имеет значение PERIOD_D1 то с 16.04.2018 по 18.04.2018 включительно берется значение цены баров текущего тайм фрейма для расчета канала, а на 19.04.2018 проецируется результат расчета, который получился в виде функции. Проекция функции рассчитывается до следующего временного интервала (20.04.2018) и так далее. При этом проекция пересчитывается в ходе течения времени, это актуально, если выпадают бары из временной шкалы по причине отсутствия тиков.
Если в функцию поступают данные те же, по которым уже произошел расчет, то функция сразу возвращает ранее рассчитанные результат.
Функция должна быть устойчива на ошибки во входных данных, к примеру если баров за диапазон ноль, то не происходит переполнение массива или ещё какая неприятность ведущая к прекращению работы программы.
Результатом вычисления функции является:
3. Центральная граница канала
Требования к качеству вычислений:
Расчет "Канала стандартных отклонений" и "Канала регрессии" должен соответствовать одноименным инструментам в терминале MT5, что будет проверяться наложением этих каналов на графическое отображение расчетов в виде буферов индикатора.
Визуально индикатор должен выглядеть так (за исключением пунктирной линии на прошлых барах - это канал из MT для примера проекции функции)