Скрипт FindVL (Find Volume Levels)

Скрипт показывает отработку уровней максимальных объёмов распределений профиля объёмов (см. индикатор VP). Кроме того, скрипт демонстрирует способ использования кода индикатора VP для получения распределений и их параметров из кода.

Проект

Исходный код и описание параметров находятся в хранилище: https://gitlab.com/fxcoder-mql/findvl-mt5.

Принцип действия

Скрипт берёт указанный диапазон баров (RangeBars) текущего таймфрейма и рассчитывает гистограмму по аналогии с индикатором VP. Сама гистограмма не отображается, используется лишь её максимум. Этот максимум проверяется на пересечение с ценой в будущем (справа). Если пересечение есть, рисуется уровень цвета LevelColor, если нет - NewLevelColor.

Далее делается смещение на  Step баров назад (влево) и всё повторяется. Если соседние диапазоны выдают один и тот же уровень, следующий (более старый, левый) будет рисоваться более толстым, и он будет перекрывать более новый.

Работа будет продолжаться до тех пор, пока есть котировки M1, не кончится текущий график, либо скрипт не будет удалён с графика принудительно.

Основной код

Для вычисления гистограмм VP достаточно одного экземпляра класса CVPCalc из файла VP-include/vp/vp_calc.mqh. Но этот файл может ссылаться на другие инклюды, поэтому для использования лучше класть всю папку VP-include рядом с вашим кодом или в общую Include.

// создать объект для вычисления гистограмм
double hg_point = _Point * PointScale;
CVPCalc vpcalc_(VP_SOURCE_M1, VOLUME_TICK, hg_point, VP_TICK_PRICE_BID, INT_MAX);
...

// цикл по диапазонам справа налево (из будущего в прошлое)
for (int i = 0, nbars = _series.bars_count(); i < nbars; i += HistoryStep)
{
 ...
 // получить гистограмму
 double hg_low;
 double volumes[];
 int count = vpcalc_.get_hg(time_from, time_to, hg_low, volumes);

 // максимум гистограммы
 int max_pos = _arr.max_index(volumes);
 ...
 // собственно уровень максимального объёма
 double level = hg_low + max_pos * hg_point;
 ...
 // поиск пересечений и отображение
}

Здесь не показаны проверки на корректность данных, проверка горизонта, смотрите в коде, это может понадобиться в вашем проекте.