3 ноября 2019 г.

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

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

Проект

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

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

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

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

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

Основной код

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

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

8 комментариев:

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

    ОтветитьУдалить
  2. Hi Fxcoder, what is the number on lines after the fvl1 "xxx" ? Does it is the strong of the level ?
    What is the function that calculate this number in code ?
    Cheers for your good work !

    ОтветитьУдалить
    Ответы
    1. Hi.
      This is just the serial number of the line.

      The code:
      for (int i = 0, nbars = _series.bars_count(); i < nbars; i += Step)
      ...
      draw_trend(prefix + (string)i + ...

      Удалить
  3. Excellent Indicator.
    How can the level reading area be reduced to consume less pc resources?
    Should I include the indicator inside the vp folder for better performance?
    Thank you.

    ОтветитьУдалить
    Ответы
    1. Why can't it be used?How do you install it?

      Удалить
    2. приветствую Уважаемый FXcoder, вы можете сделать индикатор который показывает в каждой свече гистограмму с накоплением, как на сайте БОВол?

      Удалить
  4. Hello FXcoder, when I install the script, and compile it I just get a frustrating 62 errors, most of these being:
    Can't open any of the include .mqh files, although I've put them all in the include folder.

    And other errors being:

    'TickPriceType' - undeclared identifier Find Volume Levels.mq5

    'trend' - undeclared identifier Find Volume Levels.mq5

    'vpcalc_' - some operator expected Find Volume Levels.mq5



    I don't know much about coding or the Meta Quote languages but I have been able to install other indicators such as you VP indicator for MQL4 and it worked without any errors like this.

    I don't know what the problem is here, if the include files can't be located and would solve the other errors or what??



    I hope you cant help,
    Thank you.

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