volumeprofilelevels.mq5
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «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? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.