1 сентября 2009 г.

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

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


Основные возможности:
  • показ распределений с шагом, равным стандартным периодам
  • показ распределений за любой выделенный период, различные методы установки границ расчета
  • настройка отображаемой информации (гистограмма, моды, максимум...)
  • возможность установить несколько индикаторов на один график
В режиме Period Mode индикатор делит график на равные по времени диапазоны и для каждого показывает распределение. Диапазоны могут быть равными только стандартным значениям таймфреймов не ниже текущего. Например, для H1 диапазон может быть указан как H1, H4, D1, W1, MN1. В MT5 доступно больше таймфреймов, чем в MT4.

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

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

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

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

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

Дальнейшее увеличение точности без использования дополнительных источников данных могло бы быть достигнуто за счёт более достоверной интерполяции данных M1 в тики. Но почти каждый брокер, использующий MetaTrader 4, имеет свой поток котировок, что делает подобные улучшения практически бесполезными. Опыты показывают, что распределения выглядят у всех примерно одинаково. Также практика показывает, что используемые методы дают результат, сравнимый с распределениями, полученными на самых точных данных.

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

В VP v6.0 появилась возможность указать таймфрейм источника данных. В MetaTrader 5 также стало возможным использовать тики, предоставляемые брокером. См. параметр Data Source.

Установка

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


После изменения параметров необходимо перезапустить терминал. При большом значении максимума баров в окне терминал может заметно тормозить и требовать большого объема памяти даже без индикаторов. Далеко не каждый дилинговый центр предоставляет глубокую историю по графикам, это нужно учитывать (больше актуально в MT4).

Установка индикатора:
  • закрыть терминал
  • скачать проект с индикаторами, распаковать его, либо сделать клон с помощью Git
  • папку с индикатором скопировать в папку индикаторов вашего терминала (папка VP-include должна быть в той же папке, что и основной файл, как в хранилище), рабочую папку можно увидеть в журнале при запуске терминала
  • запустить терминал

Параметры

Параметр В коде Описание
Mode Mode Режим работы: с разбивкой по периодам (Period Mode) и режим одного диапазона (Range Mode).

PERIOD MODE


Параметры для Period Mode
Range Period RangePeriod Период, только стандартные значения от M1 до MN1.
Range Count RangeCount Количество диапазонов.
Time Zone Shift TimeShift Сдвиг часового пояса от -12 до +12 часов с шагом 1 час.
Draw Direction DrawDirection Направление рисования гистограммы - слева направо или справа налево.
Zoom Type ZoomType Тип масштаба:
  1. Custom Zoom...: пользовательский, один на все гистограммы
  2. Automatic Zoom (global): автоматический, один на все
  3. Automatic Zoom (local): автоматический, раздельно для каждой гистограммы
Custom Zoom ZoomCustom Значение пользовательского масштаба.

RANGE MODE


Параметры для Range Mode
Range Mode RangeMode Способ указания границ диапазона:
  1. Between lines: между двумя линиями
  2. Last minutes: последние RangeMinutes минут
  3. Minitues to line: RangeMinutes до правой линии
Range Minutes RangeMinutes Количество минут для RangeMode 1 и 2.
Histogram Position HgPosition Расположение гистограммы:
  • Window left - левый край окна
  • Window right - правый край окна
  • Left outside - от левой границы диапазона влево
  • Right outside - от правой границы диапазона вправо
  • Left inside - от левой границы диапазона вправо
  • Right inside - от правой границы диапазона влево

DATA


Параметры источника данных
Data Source DataSource Источник данных:
  • Ticks (только в MT5) - тики с сервера вашего брокера (если есть)
  • M1..M30 - интерполированные тики на основе баров указанного таймфрейма
Volume Type (MT5) VolumeType Тип объема, тиковый или реальный. Реальный объем у брокера может быть недоступен, в этом случае индикатор ничего не покажет. Только в MT5.

TICK (MT5)


Параметры тиков. Только в MT5.
Price Type TickPriceType Тип цены:
  • Bid Price
  • Ask Price
  • Last Price
Bid Price Changed TickBid Тик изменил цену бид
Ask Price Changed TickAsk Тик изменил цену аск
Last Price Changed TickLast Тик изменил цену последней сделки
Volume Changed TickVolume Тик изменил объем
Buy Deal TickBuy Тик возник в результате сделки на покупку
Sell Deal TickSell Тик возник в результате сделки на продажу

CALCULATION


Параметры вычислений
Mode Step (points) ModeStep Минимальный шаг между модами, подбирается субъективно для каждого инструмента.
Point Scale HgPointScale Масштаб пункта при рисовании гистограммы. Большее значение означает более быструю работу, но более грубое отображение.
Smooth Depth (0 => disable) Smooth Сглаживание. 0 для отключения.

HISTOGRAM


Гистограмма
Bar Style HgBarStyle Стиль баров гистограммы:
  • Lines - линии
  • Empty bar - пустые прямоугольники
  • Filled bar- заполненные прямоугольники
  • Outline - контур
  • Color - цвет
Color 1 HgColor Цвет гистограммы 1. Укажите None, чтобы использовать цвет фона графика.
Color 2 HgColor2 Цвет гистограммы 2. Укажите None, чтобы использовать цвет фона графика.
Line Width HgLineWidth Толщина линии при рисовании гистограммы.
Histogram Width (% of normal) HgWidthPct Ширина гистограммы (% от нормальной). При отображении внутри диапазона нормальная ширина равна 100%, в остальных случаях - 15%.

LEVELS


Уровни
Mode Color ModeColor Цвет локальных максимумов (мод распределения). Укажите None, чтобы отключить.
Maximum Color MaxColor Цвет максимума. Укажите None, чтобы отключить.
Median Color MedianColor Цвет медианы. Укажите None, чтобы отключить.
VWAP Color VwapColor Цвет VWAP (средневзвешенной по объёму цены). Укажите None, чтобы отключить.
Mode Line Width ModeLineWidth Толщина линий мод.
Median & VWAP Line Style StatLineStyle Стиль линий медианы и VWAP.

LEVEL LINES (range mode only)


Линии уровней (только для Range Mode)
 Mode Level Line Color (None=disable) ModeLevelColor Цвет уровней, проведенных по модам. Укажите None, чтобы отключить.
Mode Level Line Width ModeLevelWidth Толщина линий.
Mode Level Line Style ModeLevelStyle Стиль линий уровней мод.

SERVICE


Служебные
Show Data Horizon ShowHorizon Показывать горизонт данных.
Identifier Id Идентификатор индикатора, используйте разные значения для нескольких копий индикатора на одном графике.

Загрузка

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

    Старую версию можно найти здесь: https://gitlab.com/fxcoder/mt-script-archive.

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

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

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

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

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

    Доработка индикатора

    Я не заинтересован в доработках индикатора. Считайте это просто концептом, пусть и устаревшим. Также я не занимаюсь и платной доработкой, поэтому почти все просьбы о доработках уходят просто в пустоту. Исключение - исправление ошибок.

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

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

    См. также: https://gitlab.com/fxcoder/mt-script/issues/6.

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

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

    Личный опыт

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

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

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

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

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

    См. также

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

    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 :)

      ОтветитьУдалить
      Ответы
      1. Hello,
        It is on my to-do list: https://gitlab.com/fxcoder/mt-script/issues/9

        Удалить