Проект
Исходный код и описание параметров находятся в хранилище: 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;
...
// поиск пересечений и отображение
}
Здесь не показаны проверки на корректность данных, проверка горизонта, смотрите в коде, это может понадобиться в вашем проекте.