Статистический анализ отклонений цены на заданных участках

Cкрипт для анализа распределений отклонения цены на заданных сигналами участках. Вероятно кому то покажется нужным. Код "не вылизан", но однако, трудится. Меня, в основном, тревожит быстродействие скрипта, вернее его медленность. Опытные люди сказали, что это все итог неоптимальности метода.

Что имел возможность, поменял, но скорость очень сильно не увеличилась. Вероятно кто то, просмотрев код, укажет на неточности- буду признателен.
Метод таков: 1. Определяю события для конца и начала "территории приобретений" и "территории продаж", к примеру, самое простое- изменение направления OsMA, пересечение MA либо появление "молота"/"камня". 2. В территории нахожу большие отклонения стоимостей в пунктах (с учетом спреда): для территории приобретений- хорошим отклонением будет перемещение вверх, отрицательным- вниз, для территории продаж,соответственно- напротив. Т.о., для каждой встреченной на истории территории, приобретаю два показателя: большие хорошее и отрицательное отклонение.

3. Строится распределение взятых значений. 4. Считаю: на какое отклонение/просадку могу расчитывать с заданной возможностью для выбранных сигналов (правил обнаружения территорий). В общем, получается некоторый анализатор состоятельности сигналов на выход и вход.

Для себя определил, что в случае если с возможностью 50% для выбранной территории хорошее отклонение будет не меньше величины Х, а просадка не больше величины Y, и наряду с этим X>Y, то можно считать таковой сигнал состоятельным.
Сам скрипт разделен на 3 части: 1. "01_Events.mqh" (в папку Include)- содержит 1) описание базисных (несложных) событий (к примеру: возрастание цены на прошлом баре, изменение направления OsMA и т.д.) и 2) описание функций обнаружения начала/финиша территории приобретений/продаж (функция от комбинации базисных событий). 2. "02_Dev.mqh" (в папку Include)- расчет отклонений, построение и сегментирование отклонений распределний, запись взятых значений в файлы, представлено все в виде функции, возвращающей значения X либо Y- значения отклонений с заданной возможностью. 3. "03_Start.какое количество4"- запускающий скрипт, содержит переменные задающие: 1) бар финиша расчета (по умолчанию — 0), 2) глубину расчета (по умолчанию- Bars), 3) номер (код) разбираемого событиия описывющего территории, 4) заданную возможность при которой приобретаем значения X и Y, 5) комплект переменных p1-p5, передающих параметры в функции обнаружения сигналов, 6) верхние и нижние границы для этих параметров при необходимости прогонки по множеству параметров (данный элемент- что то наподобие оптимизации в тестрере), 7) служебную переменную, определяющую (1) записываем ли файл с исходными данными по взятыми отклонениям в заданных территориях либо (0) записываем файл со значениями X и Y для заданных набора и вероятности параметров p1-p5.
На выходе приобретаем: при служебной переменной равной 1: 2 файла с исходными данными по территориям для заданного комплекта параметров (содержат: начало/финиш территории, хорошее отклонение, просадку, продолжительность территории, продолжительность до появления хорошего отклонения/просадки), 2 файла с распределениями ценовых и временных отклонений, при служебной переменной равной 0: файл со значениями X и Y для заданных набора и вероятности параметров p1-p5 (наряду с этим первые 4 файла не записываются)

01_Events.mqh 02_Dev.mqh 03_Start.mq4