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

adaptive_volume_profile_node_tracker.mq5

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

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

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

О программе

Данный продукт представляет собой пользовательский индикатор для платформы MetaTrader 5, который рассчитывает и отображает на графике скользящий объёмный профиль с адаптацией ширины корзин к волатильности рынка. Индикатор визуализирует ключевые уровни объёмного профиля в виде линий на ценовом графике, а также отмечает узлы с высокой и низкой интенсивностью объёма и отрисовывает мини-гистограммы распределения объёма по корзинам. Расчёт профиля выполняется периодически при появлении новых баров в пределах заданного окна истории. Пользователь может выбрать использование реального биржевого объёма или тикового объёма для формирования профиля.

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

НастройкаОписание
Rolling window length (bars) used to build the profile (InpLookback) Длина окна расчёта — Длина скользящего окна в барах, используемая для построения объёмного профиля.
Maximum number of price bins in the profile (InpMaxBins) Макс. количество корзин — Максимальное количество ценовых корзин, используемых при формировании объёмного профиля.
ATR period used to adapt bin width to volatility (InpATRPeriod) Период ATR — Период индикатора ATR (Average True Range), используемый для адаптации ширины корзин объёмного профиля к текущей волатильности цены.
Percent of total volume defining the Value Area (InpValueAreaPercent) Процент Value Area — Процент от общего объёма, определяющий границы области стоимости (Value Area) объёмного профиля.
Bars between profile recalculations (InpRecalcBars) Баров между пересчётом — Количество баров между пересчётами объёмного профиля. Профиль обновляется при достижении этого интервала на новом баре.
Use real (exchange) volume instead of tick volume (InpUseRealVolume) Использовать реальный объём — Переключатель, определяющий, использовать ли реальный биржевой объём вместо тикового объёма при построении профиля.
StdDev multiplier for HVN / LVN node classification (InpNodeStdDevMult) Множитель StdDev для узлов — Множитель стандартного отклонения, определяющий пороговое значение для классификации узлов как HVN или LVN.
High Volume Node color (InpHVNColor) Цвет HVN — Цвет отображения узлов с высокой интенсивностью объёма (HVN) на графике.
Low Volume Node color (InpLVNColor) Цвет LVN — Цвет отображения узлов с низкой интенсивностью объёма (LVN) на графике.
Получить полный код

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

#property version     "1.00"
#property description "Rolling, volatility-adaptive volume profile with POC, Value Area,"
#property description "and High/Low Volume Node (HVN/LVN) tracking."
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_plots   3

#property indicator_label1  "POC"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrDodgerBlue
#property indicator_style1  STYLE_SOLID
#property indicator_width1  2

#property indicator_label2  "Value Area High"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrSilver
#property indicator_style2  STYLE_DASH
#property indicator_width2  1

#property indicator_label3  "Value Area Low"
#property indicator_type3   DRAW_LINE
#property indicator_color3  clrSilver
#property indicator_style3  STYLE_DASH
#property indicator_width3  1

input int    InpLookback         = 200;    // Rolling window length (bars) used to build the profile
input int    InpMaxBins          = 24;     // Maximum number of price bins in the profile
input int    InpATRPeriod        = 14;     // ATR period used to adapt bin width to volatility
input double InpValueAreaPercent = 70.0;   // Percent of total volume defining the Value Area
input int    InpRecalcBars       = 10;     // Bars between profile recalculations
input bool   InpUseRealVolume    = false;  // Use real (exchange) volume instead of tick volume
input double InpNodeStdDevMult   = 1.0;    // StdDev multiplier for HVN / LVN node classification
input color  InpHVNColor         = clrOrangeRed;   // High Volume Node color
input color  InpLVNColor         = clrGray;        // Low Volume Node color

double POCBuffer[];
double VAHBuffer[];
double VALBuffer[];

int      g_atrHandle    = INVALID_HANDLE;
datetime g_lastBarTime  = 0;
int      g_barsSinceCalc = 0;
string   g_prefix       = "APVNT_";

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

void OnDeinit(const int reason)
{
   if(g_atrHandle != INVALID_HANDLE)
      IndicatorRelease(g_atrHandle);

   ObjectsDeleteAll(0, g_prefix);
}

void CreateLevelLine(const string name, const datetime t0, const double p0,
                      const datetime t1, const double p1, const color clr,
                      const ENUM_LINE_STYLE style, const int width)
{
   if(ObjectFind(0, name) < 0)
      ObjectCreate(0, name, OBJ_TREND, 0, t0, p0, t1, p1);
   else
   {
      ObjectMove(0, name, 0, t0, p0);
      ObjectMove(0, name, 1, t1, p1);
   }
   ObjectSetInteger(0, name, OBJPROP_COLOR, clr);
   ObjectSetInteger(0, name, OBJPROP_STYLE, style);
   ObjectSetInteger(0, name, OBJPROP_WIDTH, width);
   ObjectSetInteger(0, name, OBJPROP_RAY_RIGHT, false);
   ObjectSetInteger(0, name, OBJPROP_RAY_LEFT, false);
   ObjectSetInteger(0, name, OBJPROP_SELECTABLE, false);
   ObjectSetInteger(0, name, OBJPROP_HIDDEN, true);
   ObjectSetInteger(0, name, OBJPROP_BACK, true);
}

void DrawProfileObjects(const datetime t0, const datetime t1, const datetime tRight,
                         const double windowLow, const double binWidth, const int binCount,
                         const double &binVolume[], const double maxVol,
                         const double pocPrice, const double vahPrice, const double valPrice,
                         const double hvnThreshold, const double lvnThreshold)
{
   ObjectsDeleteAll(0, g_prefix);

   CreateLevelLine(g_prefix + "POC", t0, pocPrice, t1, pocPrice, clrDodgerBlue, STYLE_SOLID, 2);
   CreateLevelLine(g_prefix + "VAH", t0, vahPrice, t1, vahPrice, clrSilver, STYLE_DASH, 1);
   CreateLevelLine(g_prefix + "VAL", t0, valPrice, t1, valPrice, clrSilver, STYLE_DASH, 1);

   int periodSeconds  = PeriodSeconds();
   int histogramBars   = 15;

   for(int b = 0; b < binCount; b++)
   {
      double binLow  = windowLow + b * binWidth;
      double binHigh = binLow + binWidth;
      double binMid  = (binLow + binHigh) / 2.0;

      if(binVolume[b] > 0 && binVolume[b] >= hvnThreshold)
      {
         CreateLevelLine(g_prefix + "HVN_" + IntegerToString(b), t0, binMid, t1, binMid,
                          InpHVNColor, STYLE_SOLID, 3);
      }
      else if(binVolume[b] <= lvnThreshold)
      {
         CreateLevelLine(g_prefix + "LVN_" + IntegerToString(b), t0, binMid, t1, binMid,
                          InpLVNColor, STYLE_DOT, 1);
      }

      if(maxVol > 0)
      {
         double   ratio    = binVolume[b] / m

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

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

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

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

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

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

Стоимость полного кода
812,90₽ ≈ $9.94