Индикатор VP (Volume Profile)

Распределение сделок по ценовым уровням на заданном временном участке. Показывается в виде гистограммы. Ширина гистограммы на данном уровне означает, условно, количество сделок, проведенных на ней. Если брокер предоставляет данные по реальному объёму, индикатор может показывать распределение и по нему.



Основные возможности:
  • показ распределений с шагом, равным стандартным периодам
  • показ распределений за любой выделенный период, различные методы установки границ расчета
  • настройка отображаемой информации (гистограмма, моды, максимум...)
  • возможность установить несколько индикаторов на один график

В периодическом режиме (Periodic Mode) индикатор делит график на равные по времени диапазоны и для каждого показывает распределение. Диапазоны могут быть равными только стандартным значениям таймфреймов не ниже текущего. Например, для H1 диапазон может быть указан как H1, H2, H4 и т.д.

В режиме диапазона (Range Mode) индикатор работает только с одним диапазоном, границы которого можно указать одним из нескольких способов:

  • произвольно с помощью вертикальных линий
  • использовать количество последних минут графика
  • установить правую границу и количество минут или баров до нее
При указании границ по линиям, бар правой границы не учитывается в расчетах. Т.о. при переключении таймфреймов исходные данные и, соответственно, вид распределения не меняются.

Бары старших таймфреймов могут содержать меньшее количество баров младшего, чем можно было бы ожидать по расчетам. Это происходит из-за естественных дыр в истории котировок, образованных из-за низкой ликвидности, а также из-за перерывов в работе. Поэтому, если указать индикатору показывать неделю до какого-либо бара, то время левой границы может не совпасть со временем правой. У разных брокеров данные могут немного отличаться, но, несмотря на это, за счёт использования в расчётах большого количества данных результат получается схожим.

Метод расчёта

Метод расчёта представляет из себя сложение количества сделок, проведённых по определённой цене. Либо сложение объёмов на этой цене, если тип объёма в параметрах указан как реальный.

Если не указан тиковый источник данных, то сделки интерполируются на основе наиболее точных доступных в терминале данных - баров таймфрейма М1. Каждый бар разбивается на несколько сделок, исходя из вероятного движения цены внутри бара.

Максимумы распределений (моды) обычно используются как уровни поддержки и сопротивления. При определении хорошего уровня поиск максимальной моды особого смысла не имеет, так как имеется "проблема затенения", когда следующее скопление цен сильно влияет на предыдущее, иногда полностью скрывая его, и наоборот. Необходимо внимательно изучать график и уточнять уровни, построив распределения на интересных участках с помощью VP в режиме диапазона. Распределения по большему временному диапазону, возможно, имеют больший вес.

Настройка MT

Откройте настройки MT (меню Сервис/Настройки). На странице Графики укажите максимум баров в окне в зависимости от того, как будете использовать индикатор. Каждый день - это 1440 минут (не более 1440 минутных баров). Например, если указать "Макс. баров в окне" равным 250000, то это даст возможность индикатору получить данные за 250000/1440=173 рабочих дня, если для них будут доступны данные таймфрейма M1. Стандартные после установки 65000 дают 45 рабочих дней, это около двух месяцев. Если в качестве источника данных указаны тики (только в MT5), то эта настройка может не понадобиться.


После изменения параметров необходимо перезапустить терминал. При большом значении максимума баров в окне терминал может заметно тормозить и требовать большого объема памяти даже без индикаторов. Учтите, что брокер может не предоставлять глубокой истории по графикам и тикам.

Проект

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

Часто задаваемые вопросы

Как скачать с GitLab

См. здесь: https://fxcoder.blogspot.com/p/gitlab-download.html.

Индикатор ничего не рисует, либо рисует только часть. Видна красная пунктирная вертикальная линия на границе отображения.

Для работы индикатора нужны данные с таймфрейма, указанного в Data Source, по умолчанию это M1. Для отображения одного дня необходимо 1440 баров минутного таймфрейма. Если необходимо видеть много гистограмм, либо одну за большой период, необходимо:
  1. Настроить терминал так, чтобы показывалось как минимум необходимое число баров для расчётов.
  2. Загрузить необходимое число баров (например, открыть график М1 и давить клавишу Home).

Зоны стоимости (Value Zone, Value Area)

Хотя смысл в подобных выделениях наверняка есть (за счёт использования их многими последователями торговли по горизонтальным уровням объёмов), стандартная методика их расчёта сомнительна. Если есть какие-то более точные и обоснованные методы расчёта, готов рассмотреть и реализовать. Но я сомневаюсь, что такие существуют просто из-за природы исходных данных.

Нечто похожее в некоторых случаях (например, для гистограмм, близких к нормальному распределению) даст применение параметра Quantiles со значениями Quartiles или 70%. Но отображаться будут только линии границ и центра (медианы).

Аналоги для других платформ

Тема достаточно популярная, чтобы подобные индикаторы были почти везде. Ищите поисковиком по фразам типа "Market Profile", "Volume Profile", "Time Price Opportunity", добавив название вашей платформы. Встречается также понятие "горизонтальные объёмы", "horizontal volume indicator".

Личный опыт

В ручной работе какая-нибудь SMA с красивым периодом (100, 200,..) бывает куда интереснее, а если их встречается две и более, то использование VP вообще теряет смысл :-)

Кроме того, после даже небольшого опыта необходимость в визуализации отпадает, скопления и их примерный вид в распределении видны и без этого индикатора. Эта тема для меня лично была хороша как обучающая. На её основе стали понятны некоторые тонкости движения цены, были отброшены неверные идеи.

Как с этим работать, где входить и выходить

Здесь только инструмент, методы работы лучше поискать где-то ещё. Ищите по фразам типа "профиль объёма", "горизонтальные объёмы", "market profile", "volume profile" и т.п. Уверен, информации сейчас уже очень много, что-нибудь обязательно найдёте.

См. также

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

  1. Для любителей графиков "Ренко",индикаторы там тоже работают,прикрутил оба,красота)Можно и в описании об этом упомянуть.

    ОтветитьУдалить
  2. Здравствуйте.
    Вы пишете: "Дальнейшее увеличение точности без использования дополнительных источников данных могло бы быть достигнуто за счёт более достоверной интерполяции данных M1 в тики."
    Подскажите как сделать данное увеличение точности?
    И как подключить объем с фьючерсов, имея поствщика данных?

    ОтветитьУдалить
    Ответы
    1. Я предполагаю равномерное движение от цены открытия до низа (если бар вверх), потом до верха и затем до закрытия (см. функцию GetHgByRates в индикаторе). Вот пример более сложного и, очень вероятно, лучшего подхода: https://www.mql5.com/ru/articles/75 . Реализуйте свой механизм в коде этой функции, будет лучшая точность.

      Подключать объёмы фьючерсов (извне?) тоже придётся самому в коде, в индикаторе изначально ничего для этого нет. Можно эту же функцию переделать (GetHgByRates), чтобы она брала данные или сразу гистограмму откуда-то ещё.

      Удалить
    2. Совсем забыл, что сейчас есть возможность получать тики прямо в MT5, это хороший и простой вариант увеличить точность. Попробую в следующей версии добавить такой вариант.

      Удалить
  3. Приветствую.
    Как снизить нагрузку на систему и уменьшить задумчивость терминала?
    Уменьшил параметр WaitMilliseconds, прорисовка происходит реже, но загруженность остается.

    ОтветитьУдалить
    Ответы
    1. Попробуйте лучше изменять параметры Point scale и Data source. Это немного повлияет на картинку, но может прибавить скорости.

      Удалить
  4. Hello Fxcoder,
    i had tried alot of those volume profile indicators on other platforms but yours make much sense really to use, the POS levels so cool i loved it alot and it be come one of my main tools, i dont have experince on periods method but i use the range its so cool i love it, somehow my frist try iso n ICmarkets MT5, it works perfectly i dont have issue with no data line that if i kept using the data on tick volume->ticks instead of M1

    i wanted to use the MT4 but i faced no data on gold just for 2 days range, how can i solve the issue as unlimited time range please help me!

    ОтветитьУдалить
    Ответы
    1. Hello,
      MT4 has no tick history, you can only use M1 or higher as data source.

      Usually there are two data sources: broker and what is available in History Center (F2 key). The only one if these two are the same (rarely). It is better to try to load the broker's data at first. Set "Max bars in chart" in options to some high value (one day is 1440 minutes) and restart MT4. Then open M1 chart, turn off Auto Scroll, and press and hold Home key until the data loading stops. If you are lucky, that give you the amount of M1 bars that you selected in the options. If not, use History Center to load the M1 bars. Repeat for every symbol :( It is better to load all periods because MT4 cannot use M1 for building all other periods (MT5 do).

      Удалить
  5. Уважаемый разработчик, а есть возможность ужать отображение тиков внутри барах(если это вообще технически возможно), а то когда выставляю значения Custom zoom то график превращается в кашу, а если выставить малые значения то толку от этой функции нету((( Я понимаю что вы не планируете дорабатывать индикатор но все же напишу, а вдруг исправите:)

    ОтветитьУдалить
    Ответы
    1. Если я правильно понял, то в текущей реализации такой возможности нет, т.к. гистограммы рисуются отдельными линиями или прямоугольниками, которые привязаны к барам. Однако я планирую переделать рисование на холст (CCanvas), и тогда многие проблемы уйдут, в том числе и эта. См. также: https://gitlab.com/fxcoder/mt-script/issues/10

      Сейчас можете попробовать использовать градиентное цветовое заполнение:
      Bar Style = Color
      Color 1 = цвет 1
      Color 2 = цвет 2

      Удалить
    2. Спасибо что планируете улучшить индикатор! Да вы меня правильно поняли и кстати после я попробовал бар стиль и стало лучше, больше информации отображается, но все же гистограмма была бы лучше, хотя после этого уже дело вкуса, кому гистограмму кому как в SBRro отображение кластер объем то бишь бар стиль. И еще я заметил что тики (линии гистограммы) не рисуются в онлайн режиме при одинаковых значениях периуда и таймфрейма, а появляются после завершения бара, а если поставить например периуд 2M а ТФ на 1M то все рисуется в реальном времени.

      Удалить
    3. Ошибку добавил в багтрекер ( https://gitlab.com/fxcoder/mt-script/issues/17 ), как-нибудь займусь.

      Удалить
  6. Hello FXCoder,

    I would like if you could be so kind to share the MQL4 code to introduce daily "session profiles" to start & end in definite times instead of all day (24 hours) profile.

    I know this can be done through Range Profile but it won't be feasible to make it for many sessions.

    Noting that I'm using your latest VP v7.1.3 and I can't express my gratitude for you.

    Thanks in advance :)

    ОтветитьУдалить
  7. Hello from Brazil and congractulations to your excelent indicator!

    I have some doubts:

    1- What means the expressison "Median" in the configs secction? Is it the same as POC?
    2- Does the "Median color" in the configs secction refers to the "range mode" or "Period mode"?

    Thank you very much!

    Cristiano

    ОтветитьУдалить
    Ответы
    1. Hello.
      1. The sum of the volumes (or trades if tick volume is selected) above the median and below are equal.
      2. Median Color sets the line color. If None is specified, the line is not displayed.

      Удалить
  8. On the "Range Mode" If I use M1 bars as data source in M10 timeframe will it cause the modes, median, maximum and VWAP to be ploted in different price levels when comparing to using M10 bars as data source in M10 timeframe?

    Thank you!

    ОтветитьУдалить
    Ответы
    1. The smaller the timeframe, the better the tick emulation.

      It makes sense to use a timeframe for data larger than M1 on large ranges (from a week or more) to speed up calculations.

      Удалить
  9. Привет FXCoder.
    Можно ли реализовать функцию прямоугольника вместо вертикальных линий?
    Что бы при Range Mode "натягиват" профиль в любой зоне.

    ОтветитьУдалить
    Ответы
    1. Приевет. Собираю подобные заявки здесь: https://gitlab.com/fxcoder/mt-script/issues/13

      По-моему, это просто какая-то рекламная фишка одного из множества коммерческих аналогов. Никакой практической пользы не вижу, только добавляет ещё больше ручного анализа.

      Исходный код открыт под лицензией GPL, делайте сами, заказывайте, делитесь :)

      Удалить
  10. Нет, просто просьба, т.к. пользуюсь Вашим продуктом.
    С помощю прямоугольника будет удобнее.
    Сам сделать не могу, не умею.
    Заранее благодарен.

    ОтветитьУдалить
  11. Привет. Индикатор отличный, поздравляю! Но что означает эта красная линия на приведенном выше рисунке в 2019.09.14 00:00?

    ОтветитьУдалить
    Ответы
    1. Привет. У индикатора два режима работы - с делением по периодам (Period Mode) и с выбором диапазона (Range Mode). Выбор диапазона также делится на несколько подтипов (параметр RangeMode), в данном случае это режим Minutes to line (минуты до линии), где линия (та самая красная) передвигается вручную на графике.

      Удалить
    2. Спасибо за разъяснения! Но линия, которая появляется на моем индикаторе, не двигается. Я в RangeMode в последние минуты. Я понял, что VWAP рассчитывается по этой красной линии, и это 233 бара от графика. В RangeMode Minutes to Line появляется другая красная линия с разными штрихами, которую я могу перемещать вручную.

      Удалить
    3. Может быть ещё одна красная линия - линия, показывающая границу доступных исходных данных. Индикатор по умолчанию использует данные таймфрейма M1. Если эта линия слишком близко, подгрузите данные M1.

      Удалить
  12. Здравствуйте! А не могли бы Вы добавить горизонтальные линий, которые будут отражать минимумы. То есть, сейчас горизонтальные линии показывают РОС, а добавить уровни с теми же установочными данными как у прежних, но которые будут располагаться не на конусе профиля, а вокруг, на минимумах. Мог бы скриншот скинуть ...не знаю как..Спасибо!!

    ОтветитьУдалить
    Ответы
    1. Здесь такое пожелание уже высказывали, я его записал (https://gitlab.com/fxcoder-mql/vp/-/issues/1), но пока не уверен, как лучше сделать. Можете попробовать изменить соответствующую функцию в коде.

      Удалить
    2. Здравствуйте!

      Полезная функция - уровни по минимумам, поправил в коде как написали - работает.

      Было бы хорошо, если бы можно было одновременно показывать уровни по максимумам и по минимумам, без подцепки двух индикаторов на график. А в параметрах дать выбор - только макс, только мин, и макс и мин. И добавить выбор цвета на мин уровни.

      Вдруг скоро решите добавить это, было бы хорошо! Благодарю!

      Удалить
    3. Поддерживаю.
      Для постановки коротких стопов --- очень помогает

      Удалить
  13. Подскажите плиз, как отдалить линию "VP:no data behind this line" по-дальше в прошлое

    ОтветитьУдалить
    Ответы
    1. Загрузить больше данных таймфрейма-источника (M1 обычно). Перед этим может понадобиться увеличить число баров в окне в настройках МТ (см. также "Индикатор ничего не рисует, либо рисует только часть. Видна красная пунктирная вертикальная линия на границе отображения." в вопросах и ответах выше).

      Удалить
  14. Не подскажите почему индикатор мерцает.
    Ставлю его на фьючерс, реальные объемы, тики.
    Как начинается расколбас на рынке, динамика увеличивается, индикатор мерцает, если открыть позицию, то на каждом тике мерцание происходит.
    Если выставить вместо тиков М1, то все нормально, ничего не мерцает.

    ОтветитьУдалить
    Ответы
    1. Спасибо за сообщение, как-нибудь посмотрю, что там происходит, записал здесь:
      https://gitlab.com/fxcoder-mql/vp/-/issues/30

      Удалить
  15. Как вариант, можно в параметры вынести таймаут в миллисекундах - можно будет и 10 сек поставить, чтобы обновление шло пореже.

    ОтветитьУдалить
  16. А вот такой вопрос ещё - а возможно сделать чтобы уровни рисовались по минимумам и максимумам цен? Чтобы по верхушкам свечек было нанесение. Или по верхам и низам тел свечей - как вариант дать переключать. Возможно в фильтр добавить эти варианты нанесения.

    ОтветитьУдалить
  17. Здравствуйте!
    В архиве vp/Example/Experts/VPSimple. VPSimple-это эксперт и куда его устанавливать MQL5 В /Indicators или /Experts

    ОтветитьУдалить
  18. Can you add DPOC (Developing POC) and VAH & VAL lines to your fantastic indicator please? It's a feature which does not exist on MT5 but exist on tradingview. Thank you for making this awesome indicator! You are the best coder ever. Much better than Mladen!

    ОтветитьУдалить
  19. Я использовал Google Translate, поэтому формулировка может быть неправильной. Во-первых, спасибо за индикатор. На вкладке «Входные данные» есть 2 переменные, «Цвет 1» и «Цвет 2», что они представляют или означают?

    ОтветитьУдалить
  20. Hello sir, first of all , thanks for share this awesome tool..

    Can i know why it doesnt work with real volume preset? it doesnt plot any vol profile

    ОтветитьУдалить
    Ответы
    1. Hello. Most likely, there is no information on real volumes in MetaTrader for the symbol.

      Удалить