← К каталогу
Исходный код · ID 4359

volumeprofilelevels.mq5

Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

VolumeProfileLevels — пользовательский индикатор для MetaTrader 5, который строит горизонтальный гистограмму объёма на графике цены за заданное окно наблюдения. Диапазон цен за окно делится на равные по высоте ряды, а объём каждого бара распределяется в один ряд по типичной цене (H+L+C)/3. Индикатор определяет точку контроля (POC) — ряд с наибольшим объёмом — и границы зоны ценности (Value Area), охватывающую заданный процент общего объёма вокруг POC.

Все результаты отрисовываются в виде графических объектов чарта: прямоугольники рядов гистограммы и горизонтальные линии для POC, VAH и VAL. Обновление расчёта происходит только при закрытии нового бара, что снижает нагрузку. Источником объёма может быть тиковый или реальный объём в зависимости от доступности данных у брокера.

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

При запуске индикатор выполняет проверку корректности параметров: минимальное количество рядов, соотношение окна наблюдения к числу рядов и допустимый диапазон процента зоны ценности. При некорректных значениях выводится предупреждение через Alert и инициализация прерывается.

Настройки программы

НастройкаОписание
InpLookbackBars Количество последних баров, включаемых в окно наблюдения для расчёта профиля объёма. Должно быть не меньше количества ценовых рядов.
InpNumRows Количество ценовых рядов (горизонтальных корзин), на которые делится диапазон цен окна наблюдения. Минимальное значение — 2.
InpVolumeType Источник данных объёма для расчёта профиля: тиковый объём (доступен практически на всех символах) или реальный объём (доступен только при предоставлении данных брокером/биржей).
InpValueAreaPercent Процент общего объёма, охватываемый зоной ценности вокруг точки контроля. Допустимые значения от 0 до 100.
InpUpdateOnNewBarOnly Переключатель: при активации пересчёт профиля объёма выполняется только при закрытии нового бара, а не на каждом тике.
InpShowProfile Переключатель видимости горизонтальных рядов гистограммы объёма на графике.
InpShowPOC Переключатель видимости горизонтальной линии точки контроля (POC) на графике.
InpShowValueArea Переключатель видимости горизонтальных линий верхней и нижней границ зоны ценности (VAH и VAL).
InpProfileMaxWidthBars Максимальная ширина боковой панели гистограммы в эквиваленте баров, определяющая масштаб отображения самого объёмного ряда.
InpBuyDominantColor Цвет горизонтального ряда гистограммы, в котором доминирует объём баров с закрытием выше открытия (бычьи бары).
InpSellDominantColor Цвет горизонтального ряда гистограммы, в котором доминирует объём баров с закрытием ниже открытия (медвежьи бары).
InpPOCColor Цвет горизонтальной линии точки контроля (Point of Control) — ценового уровня с наибольшим объёмом.
InpValueAreaColor Цвет горизонтальных линий верхней (VAH) и нижней (VAL) границ зоны ценности.
Получить полный код

Поиск по коду файла

#property version   "1.00"
#property description "Builds a horizontal volume histogram over a recent lookback window and "
#property description "marks the Point of Control and Value Area using the standard TPO/volume "
#property description "value-area expansion algorithm, refreshed once per new bar."
#property indicator_chart_window
#property indicator_buffers 0
#property indicator_plots   0
#property strict

enum ENUM_VP_VOLUME
  {
   VP_VOLUME_TICK = 0,  // Tick Volume (available on virtually every symbol)
   VP_VOLUME_REAL = 1   // Real Volume (only meaningful where the broker/exchange supplies it)
  };

input group "=== Profile Settings ==="
input int             InpLookbackBars    = 200;  // Lookback Window (most recent bars profiled)
input int             InpNumRows         = 24;   // Number of Price Rows (histogram buckets)
input ENUM_VP_VOLUME  InpVolumeType      = VP_VOLUME_TICK; // Volume Source
input double          InpValueAreaPercent = 70.0; // Value Area (% of total volume around the POC)
input bool             InpUpdateOnNewBarOnly = true; // Recalculate Only on a New Chart Bar

input group "=== Display ==="
input bool InpShowProfile        = true;  // Show the Volume Histogram Rows
input bool InpShowPOC            = true;  // Show the Point of Control Line
input bool InpShowValueArea      = true;  // Show the Value Area High/Low Lines
input int  InpProfileMaxWidthBars = 30;   // Max Sidebar Width (bars-equivalent, for the tallest row)

input group "=== Colors ==="
input color InpBuyDominantColor  = clrLime;      // Row Color — Bar Where Up-Close Volume Dominates
input color InpSellDominantColor = clrRed;       // Row Color — Bar Where Down-Close Volume Dominates
input color InpPOCColor          = clrWhite;     // Point of Control Line Color
input color InpValueAreaColor    = clrSilver;    // Value Area High/Low Line Color

string g_Prefix = "VPL_";

double g_BucketVol[];      // total (up + down) volume per price row, rebuilt each refresh
double g_BucketVolUp[];    // volume from up-closing bars per row
double g_BucketVolDown[];  // volume from down-closing bars per row
string g_RowObjName[];     // one chart object name per row, reused across refreshes

string g_POCName;
string g_VAHName;
string g_VALName;

datetime g_LastBarTime = 0;

int OnInit()
  {
      // код доступен только после оплаты
   }

void OnDeinit(const int reason)
  {

   ObjectsDeleteAll(0, g_Prefix);
   ChartRedraw(0);
  }

int OnCalculate(const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
  {
      // код доступен только после оплаты
   }

void RebuildProfile(const int rates_total, const datetime &time[],
                     const double &open[], const double &high[], const double &low[], const double &close[],
                     const long &tick_volume[], const long &volume[])
  {
   int count = MathMin(InpLookbackBars, rates_total);
   int startIdx = rates_total - count;

   double rangeHigh = high[startIdx];
   double rangeLow  = low[startIdx];
   for(int i = star

Показано первые 50% кода (символов: 7194)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
719,40₽ ≈ $8.79