3 ноября 2019 г.

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

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

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

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

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

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

Параметры


Параметр Описание
ClearOnly При запуске скрипт очистит старые уровни и сразу остановится.
RangeBars Число баров диапазонов расчёта (в текущем таймфрейме).
Step Шаг смещения диапазонов, бары.
PointScale Масштаб пункта при рисовании гистограммы. Большее значение означает более быструю работу, но более грубое отображение. Аналогично HgPointScale для VP.
RangeColor Цвет линии, обозначающей диапазон.
LevelColor Цвет линии, обозначающей отработанный уровень.
NewLevelColor Цвет линии, обозначающей неотработанный уровень.

Остальные параметры аналогичны параметрам VP.

Основной код

Для вычисления гистограмм VP достаточно одного экземпляра класса CVPCalc из файла VP-include/volume/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;
 ...
 // поиск пересечений и отображение
}

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

Загрузка

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

См. также: Индикатор VP (Volume Profile).

2 комментария:

  1. Уважаемый fxcoder! А как сделать так, что бы показания скрипта обновлялись?

    ОтветитьУдалить