Ind_Aleks_ICT_Entry_V2_TS_I.../INDICATOR_API.md
Alexnik90 7c7a9f484a
2026-03-26 18:45:10 +03:00

24 KiB

Ind_Aleks_ICT_Entry_V2_TS_Indie — API для советника

Справочный файл для разработки Expert Advisor (EA), использующего данный индикатор.


1. Общее описание

ICT Entry Indicator — чартовый индикатор MQL5, реализующий методологию ICT (Inner Circle Trading). Определяет рыночную структуру, ключевые уровни и зоны для входа в сделку.

Что индикатор предоставляет:

  • Свинги двух типов (Liquidity и Structure)
  • ZigZag линию по Liquidity Swings
  • BOS (Break of Structure) и MSS (Market Structure Shift)
  • Направление тренда (бычий/медвежий)
  • Уровни ликвидности (Supply/Demand) + sweep detection
  • FVG (Fair Value Gap) и iFVG (Inverted FVG) зоны
  • Equilibrium / Premium / Discount зоны

2. Подключение индикатора из EA

Создание хэндла

int g_ict_handle;

int OnInit()
{
   g_ict_handle = iCustom(
      _Symbol, _Period,
      "\\Shared Projects\\Ind_Aleks_ICT_Entry_V2_TS_Indie\\Ind_Aleks_ICT_Entry_V2_TS_Indie",
      // --- Основные параметры ---
      5,          // inp_len           — Сила пивота Liquidity Swings (default: 5)
      10,         // inp_len_in        — Сила пивота Structure Swings (default: 10)
      "Close",    // inp_valid_con     — Метод валидации pullback: "Close" / "High/Low"
      2000,       // inp_calc_bars     — Баров для расчёта (0 = все)
      true,       // inp_follow_trend  — Фильтрация по тренду
      // --- ZigZag и Liquidity Swings ---
      clrNONE,    // inp_zz_col
      STYLE_DOT,  // inp_zz_style
      1,          // inp_zz_width
      clrRed,     // inp_lsw_col
      1,          // inp_lsw_size
      // --- Structure Swings ---
      clrDodgerBlue, // inp_ssw_col
      4,          // inp_ssw_size
      // --- BOS / MSS ---
      clrDodgerBlue, // inp_bos_up_col
      clrCoral,   // inp_bos_dn_col
      STYLE_DOT,  // inp_bos_style
      1,          // inp_bos_width
      clrDodgerBlue, // inp_mss_up_col
      clrCoral,   // inp_mss_dn_col
      STYLE_DASH, // inp_mss_style
      1,          // inp_mss_width
      // --- Уровни ликвидности ---
      false,      // inp_show_lid
      clrGreen,   // inp_lid_col
      1,          // inp_lid_size1
      1,          // inp_lid_size2
      // --- Equilibrium / Premium / Discount ---
      50,         // inp_pre_dis       — % первого уровня
      80,         // inp_pre_dis2      — % второго уровня
      false,      // inp_eq_con        — Включить фильтрацию зон
      clrOrchid,  // inp_eq_col
      STYLE_DASH, // inp_eq_style
      1,          // inp_eq_width
      clrPurple,  // inp_pd_col
      STYLE_DOT,  // inp_pd_style
      1,          // inp_pd_width
      // --- FVG / iFVG ---
      500,        // inp_qty_fvg_hist  — Глубина истории FVG (бары)
      clrDeepSkyBlue, // inp_fvg_obj_col
      clrNONE,    // inp_fvg_buf_col
      clrDodgerBlue,  // inp_ifvg_obj_col
      clrNONE,    // inp_ifvg_buf_col
      true,       // inp_show_fvg
      false,      // inp_show_ifvg
      true,       // inp_fvg_trend_only
      false,      // inp_fvg_eq_filter
      false,      // inp_fvg_eq_strict
      false       // inp_fvg_eq_use_lvl2
   );

   if(g_ict_handle == INVALID_HANDLE)
   {
      Print("Ошибка создания хэндла индикатора ICT Entry!");
      return INIT_FAILED;
   }
   return INIT_SUCCEEDED;
}

Чтение буферов

double buf[];
ArraySetAsSeries(buf, true);

// Пример: прочитать буфер тренда (индекс 28) за 3 последних бара
if(CopyBuffer(g_ict_handle, 28, 0, 3, buf) > 0)
{
   double trend_now  = buf[0]; // текущий бар
   double trend_prev = buf[1]; // предыдущий (подтверждённый) бар
}

ВАЖНО: Индикатор считает данные побарно. Значения на bar[0] (текущий) обновляются каждый тик, но подтверждённые данные — на bar[1] и старше. Для торговых решений рекомендуется использовать bar[1].


3. Карта буферов (buffer index → данные)

Всего 29 буферов: 20 INDICATOR_DATA + 9 INDICATOR_CALCULATIONS.

3.1. Визуальные буферы (INDICATOR_DATA) — plots 0-17

Buffer Index Имя Тип отрисовки Описание
0 ZigZag DRAW_SECTION ZigZag линия по Liquidity Swings. Значение = цена точки свинга, EMPTY_VALUE = пропуск
1 LiquiditySwing DRAW_ARROW (159) Точки Liquidity Swing (ромбики). High/Low пивоты силы 5
2 StructureSwing DRAW_ARROW (159) Точки Structure Swing (ромбики). High/Low пивоты силы 10
3 Liquidity_Up1 DRAW_ARROW (158) Ближайший Supply уровень ликвидности (Swing High)
4 Liquidity_Dn1 DRAW_ARROW (158) Ближайший Demand уровень ликвидности (Swing Low)
5 Liquidity_Up2 DRAW_ARROW (158) 2-й Supply уровень
6 Liquidity_Up3 DRAW_ARROW (158) 3-й Supply уровень
7 Liquidity_Dn2 DRAW_ARROW (158) 2-й Demand уровень
8 Liquidity_Dn3 DRAW_ARROW (158) 3-й Demand уровень
9 BOS_Up DRAW_LINE Break of Structure вверх (продолжение бычьего тренда)
10 BOS_Dn DRAW_LINE Break of Structure вниз (продолжение медвежьего тренда)
11 MSS_Up DRAW_LINE Market Structure Shift вверх (смена тренда на бычий)
12 MSS_Dn DRAW_LINE Market Structure Shift вниз (смена тренда на медвежий)
13 Equilibrium DRAW_LINE Уровень Equilibrium (50% диапазона structure swings)
14 Premium2 DRAW_LINE Уровень Premium зоны (2-й уровень, default 80%)
15 Discount2 DRAW_LINE Уровень Discount зоны (2-й уровень, default 80%)
16, 17 FVG_Top, FVG_Bot DRAW_FILLING (plot 16) FVG зона: Top=верхняя граница, Bot=нижняя. 0.0 = нет зоны
18, 19 iFVG_Top, iFVG_Bot DRAW_FILLING (plot 17) iFVG зона (инверсия FVG). 0.0 = нет зоны

Пустые значения:

  • Буферы 0-15: EMPTY_VALUE (DBL_MAX) = нет данных
  • Буферы 16-19 (FVG/iFVG): 0.0 = нет зоны, ненулевое = зона активна

3.2. Расчётные буферы (INDICATOR_CALCULATIONS)

Buffer Index Имя Описание
20 CalcSsHigh Промежуточный максимум (ss_high) для Liquidity Swings
21 CalcSsLow Промежуточный минимум (ss_low) для Liquidity Swings
22 CalcBswHigh Бар промежуточного максимума
23 CalcBswLow Бар промежуточного минимума
24 CalcSwHigh Текущий Swing High значение
25 CalcSwLow Текущий Swing Low значение
26 CalcBarSwHigh Бар текущего Swing High
27 CalcBarSwLow Бар текущего Swing Low
28 CalcDirBig Направление тренда: 1.0=бычий, -1.0=медвежий, 0.0=не определён

4. Ключевые буферы для торговых решений

4.1. Тренд (буфер 28 — CalcDirBig)

Самый важный буфер для EA. Определяет глобальное направление тренда.

double trend[];
ArraySetAsSeries(trend, true);
CopyBuffer(g_ict_handle, 28, 0, 3, trend);

int current_trend = (int)trend[1]; // подтверждённый тренд
//  1 = бычий (ищем Buy)
// -1 = медвежий (ищем Sell)
//  0 = не определён (ждём)

Логика смены тренда:

  • BOS_Up (буфер 9) → подтверждение бычьего тренда (продолжение)
  • BOS_Dn (буфер 10) → подтверждение медвежьего тренда (продолжение)
  • MSS_Up (буфер 11) → смена тренда на бычий (контртренд → тренд)
  • MSS_Dn (буфер 12) → смена тренда на медвежий (контртренд → тренд)

4.2. BOS/MSS (буферы 9-12)

Горизонтальные уровни пробоя структуры. Значение = цена уровня, EMPTY_VALUE = нет события.

double bos_up[], bos_dn[], mss_up[], mss_dn[];
ArraySetAsSeries(bos_up, true);
ArraySetAsSeries(bos_dn, true);
ArraySetAsSeries(mss_up, true);
ArraySetAsSeries(mss_dn, true);
CopyBuffer(g_ict_handle, 9,  0, 3, bos_up);
CopyBuffer(g_ict_handle, 10, 0, 3, bos_dn);
CopyBuffer(g_ict_handle, 11, 0, 3, mss_up);
CopyBuffer(g_ict_handle, 12, 0, 3, mss_dn);

// Проверка: произошёл ли BOS/MSS на подтверждённом баре
bool has_bos_up = (bos_up[1] != EMPTY_VALUE);
bool has_mss_up = (mss_up[1] != EMPTY_VALUE);

Важно: BOS/MSS буферы показывают пробитые уровни. Линия рисуется от бара структурного свинга до бара пробоя. Непробитые (текущие) уровни тоже рисуются через эти буферы (Step 12 логика), пока не произойдёт пробой.

4.3. Уровни ликвидности (буферы 3-8)

3 ближайших уровня Supply (сверху) и 3 ближайших Demand (снизу).

double sup1[], sup2[], sup3[];  // Supply (сопротивление)
double dem1[], dem2[], dem3[];  // Demand (поддержка)
ArraySetAsSeries(sup1, true); ArraySetAsSeries(dem1, true);
// ... SetAsSeries для остальных

CopyBuffer(g_ict_handle, 3, 0, 3, sup1); // Ближайший Supply
CopyBuffer(g_ict_handle, 4, 0, 3, dem1); // Ближайший Demand
CopyBuffer(g_ict_handle, 5, 0, 3, sup2); // 2-й Supply
CopyBuffer(g_ict_handle, 6, 0, 3, sup3); // 3-й Supply
CopyBuffer(g_ict_handle, 7, 0, 3, dem2); // 2-й Demand
CopyBuffer(g_ict_handle, 8, 0, 3, dem3); // 3-й Demand

Уровни обновляются побарно. EMPTY_VALUE = уровень отсутствует. Когда цена пробивает уровень (sweep), он удаляется и заменяется следующим.

4.4. Equilibrium / Premium / Discount (буферы 13-15)

double eq[], prem2[], disc2[];
ArraySetAsSeries(eq, true);
ArraySetAsSeries(prem2, true);
ArraySetAsSeries(disc2, true);
CopyBuffer(g_ict_handle, 13, 0, 3, eq);    // Equilibrium (50%)
CopyBuffer(g_ict_handle, 14, 0, 3, prem2); // Premium2 (80%)
CopyBuffer(g_ict_handle, 15, 0, 3, disc2); // Discount2 (80%)
  • Equilibrium — 50% уровень между Structure High и Structure Low
  • Premium — зона выше Equilibrium (перекупленность → ищем Sell)
  • Discount — зона ниже Equilibrium (перепроданность → ищем Buy)
  • Premium2/Discount2 — более экстремальные зоны (настраивается через inp_pre_dis2, default 80%)

4.5. FVG / iFVG зоны (буферы 16-19)

double fvg_top[], fvg_bot[], ifvg_top[], ifvg_bot[];
ArraySetAsSeries(fvg_top, true); ArraySetAsSeries(fvg_bot, true);
ArraySetAsSeries(ifvg_top, true); ArraySetAsSeries(ifvg_bot, true);
CopyBuffer(g_ict_handle, 16, 0, 3, fvg_top);
CopyBuffer(g_ict_handle, 17, 0, 3, fvg_bot);
CopyBuffer(g_ict_handle, 18, 0, 3, ifvg_top);
CopyBuffer(g_ict_handle, 19, 0, 3, ifvg_bot);

// Проверка: есть ли FVG зона на текущем баре
bool has_fvg = (fvg_top[1] != 0.0 && fvg_bot[1] != 0.0);
if(has_fvg)
{
   double zone_top = fvg_top[1];
   double zone_bot = fvg_bot[1];
   // Зона между zone_bot и zone_top
}

FVG (Fair Value Gap) — ценовой разрыв из 3 баров:

  • Demand FVG: low[bar] > high[bar+2] (зазор вверх, цена ещё вернётся)
  • Supply FVG: high[bar] < low[bar+2] (зазор вниз, цена ещё вернётся)

iFVG (Inverted FVG) — FVG, через которую цена прошла закрытием (не фитилём), меняя полярность:

  • Supply FVG → Demand iFVG (close > fvg_top)
  • Demand FVG → Supply iFVG (close < fvg_bot)

Митигация: зона закрывается когда цена полностью проходит через неё.

4.6. Свинги (буферы 0-2, 20-27)

double zigzag[], liq_swing[], str_swing[];
ArraySetAsSeries(zigzag, true);
ArraySetAsSeries(liq_swing, true);
ArraySetAsSeries(str_swing, true);
CopyBuffer(g_ict_handle, 0, 0, 100, zigzag);    // ZigZag
CopyBuffer(g_ict_handle, 1, 0, 100, liq_swing);  // Liquidity Swing точки
CopyBuffer(g_ict_handle, 2, 0, 100, str_swing);  // Structure Swing точки

// Текущие значения свингов
double sw_high[], sw_low[];
ArraySetAsSeries(sw_high, true);
ArraySetAsSeries(sw_low, true);
CopyBuffer(g_ict_handle, 24, 0, 3, sw_high); // CalcSwHigh
CopyBuffer(g_ict_handle, 25, 0, 3, sw_low);  // CalcSwLow

Два типа свингов:

  • Liquidity Swings (сила=5) — более частые, определяют уровни ликвидности и ZigZag
  • Structure Swings (сила=10) — менее частые, определяют BOS/MSS и тренд

5. Концептуальная модель ICT Entry

Поток сигнала для Buy (бычий):

1. Liquidity Sweep (Demand)     → цена пробила уровень поддержки и вернулась
2. Тренд = бычий (in_dir_big=1) → подтверждено через Structure Swings
3. iFVG (Demand) существует     → зона инверсии (поддержка)
4. Цена в Discount зоне         → ниже Equilibrium (выгодная цена)
5. → BUY сигнал

Поток сигнала для Sell (медвежий):

1. Liquidity Sweep (Supply)     → цена пробила уровень сопротивления и вернулась
2. Тренд = медвежий (in_dir_big=-1)
3. iFVG (Supply) существует     → зона инверсии (сопротивление)
4. Цена в Premium зоне          → выше Equilibrium (невыгодная цена)
5. → SELL сигнал

6. Пример: минимальная интеграция в EA

// В OnTick():
double trend_buf[2], eq_buf[2], fvg_top_buf[2], fvg_bot_buf[2];
double ifvg_top_buf[2], ifvg_bot_buf[2], sup1_buf[2], dem1_buf[2];

ArraySetAsSeries(trend_buf, true);
ArraySetAsSeries(eq_buf, true);
ArraySetAsSeries(fvg_top_buf, true);
ArraySetAsSeries(fvg_bot_buf, true);
ArraySetAsSeries(ifvg_top_buf, true);
ArraySetAsSeries(ifvg_bot_buf, true);
ArraySetAsSeries(sup1_buf, true);
ArraySetAsSeries(dem1_buf, true);

// Читаем ключевые буферы (bar 1 = подтверждённый)
CopyBuffer(g_ict_handle, 28, 0, 2, trend_buf);     // Тренд
CopyBuffer(g_ict_handle, 13, 0, 2, eq_buf);         // Equilibrium
CopyBuffer(g_ict_handle, 16, 0, 2, fvg_top_buf);    // FVG Top
CopyBuffer(g_ict_handle, 17, 0, 2, fvg_bot_buf);    // FVG Bot
CopyBuffer(g_ict_handle, 18, 0, 2, ifvg_top_buf);   // iFVG Top
CopyBuffer(g_ict_handle, 19, 0, 2, ifvg_bot_buf);   // iFVG Bot
CopyBuffer(g_ict_handle, 3,  0, 2, sup1_buf);       // Supply 1
CopyBuffer(g_ict_handle, 4,  0, 2, dem1_buf);       // Demand 1

int trend = (int)trend_buf[1];
double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID);

// Пример простой логики Buy:
bool bullish       = (trend == 1);
bool has_ifvg_buy  = (ifvg_top_buf[1] != 0.0);
bool in_discount   = (eq_buf[1] != EMPTY_VALUE && ask < eq_buf[1]);

if(bullish && has_ifvg_buy && in_discount)
{
   // Проверить зону входа: цена внутри iFVG
   if(ask >= ifvg_bot_buf[1] && ask <= ifvg_top_buf[1])
   {
      // BUY сигнал!
   }
}

7. Важные нюансы

7.1. AS_SERIES

Все буферы индикатора используют AS_SERIES = true:

  • Индекс 0 = текущий (live) бар
  • Индекс 1 = последний закрытый (подтверждённый) бар
  • Индекс N = N баров назад

При CopyBuffer с ArraySetAsSeries(buf, true) сохраняется та же нумерация.

7.2. Подтверждённые vs live данные

  • bar[0] — обновляется каждый тик, данные могут измениться
  • bar[1] — подтверждён при закрытии, стабилен
  • Для торговых решений используйте bar[1]
  • Для отображения/мониторинга можно использовать bar[0]

7.3. Пустые значения

Буферы Пустое значение Значение
0-15 (линии, стрелки) EMPTY_VALUE (DBL_MAX) Нет данных на этом баре
16-19 (FVG filling) 0.0 Нет зоны на этом баре

7.4. Timing расчёта

Индикатор рассчитывает:

  • Полный пересчёт при первом запуске или смене таймфрейма
  • Инкрементальный при новом баре (только bar=1)
  • UpdateBar0 каждый тик (FVG зоны на live баре)

Свинги подтверждаются с задержкой в strength баров (5 для Liquidity, 10 для Structure).

7.5. Таймфрейм

Индикатор работает на любом таймфрейме. Рекомендуется использовать тот же таймфрейм в EA, что и на графике.

7.6. Мультитаймфрейм

Для MTF-анализа создайте несколько хэндлов:

int h_m15 = iCustom(_Symbol, PERIOD_M15, "\\Shared Projects\\...", ...);
int h_h1  = iCustom(_Symbol, PERIOD_H1,  "\\Shared Projects\\...", ...);

8. Краткая таблица: какой буфер для какой задачи

Задача Буфер(ы) Индекс
Определить тренд CalcDirBig 28
Найти ближайшее сопротивление Liquidity_Up1 3
Найти ближайшую поддержку Liquidity_Dn1 4
Обнаружить пробой структуры вверх BOS_Up 9
Обнаружить пробой структуры вниз BOS_Dn 10
Обнаружить смену тренда вверх MSS_Up 11
Обнаружить смену тренда вниз MSS_Dn 12
Определить зону Equilibrium Equilibrium 13
Определить Premium зону Premium2 14
Определить Discount зону Discount2 15
Найти зону FVG FVG_Top + FVG_Bot 16, 17
Найти зону iFVG iFVG_Top + iFVG_Bot 18, 19
Текущий Swing High CalcSwHigh 24
Текущий Swing Low CalcSwLow 25

9. Input-параметры (полный список)

Параметры передаются в iCustom() в порядке их объявления:

# Параметр Тип Default Описание
1 inp_len int 5 Сила пивота Liquidity Swings
2 inp_len_in int 10 Сила пивота Structure Swings
3 inp_valid_con string "Close" Метод валидации pullback
4 inp_calc_bars int 2000 Баров для расчёта
5 inp_follow_trend bool true Фильтрация по тренду
6 inp_zz_col color clrNONE Цвет ZigZag
7 inp_zz_style ENUM_LINE_STYLE STYLE_DOT Стиль ZigZag
8 inp_zz_width int 1 Толщина ZigZag
9 inp_lsw_col color clrRed Цвет Liquidity Swing
10 inp_lsw_size int 1 Размер Liquidity Swing
11 inp_ssw_col color clrDodgerBlue Цвет Structure Swing
12 inp_ssw_size int 4 Размер Structure Swing
13 inp_bos_up_col color clrDodgerBlue Цвет BOS вверх
14 inp_bos_dn_col color clrCoral Цвет BOS вниз
15 inp_bos_style ENUM_LINE_STYLE STYLE_DOT Стиль BOS
16 inp_bos_width int 1 Толщина BOS
17 inp_mss_up_col color clrDodgerBlue Цвет MSS вверх
18 inp_mss_dn_col color clrCoral Цвет MSS вниз
19 inp_mss_style ENUM_LINE_STYLE STYLE_DASH Стиль MSS
20 inp_mss_width int 1 Толщина MSS
21 inp_show_lid bool false Показывать уровни ликвидности
22 inp_lid_col color clrGreen Цвет ликвидности
23 inp_lid_size1 int 1 Размер ближайшего уровня
24 inp_lid_size2 int 1 Размер 2-3 уровней
25 inp_pre_dis int 50 Premium/Discount %
26 inp_pre_dis2 int 80 Premium/Discount 2-й уровень %
27 inp_eq_con bool false Фильтрация по зонам
28 inp_eq_col color clrOrchid Цвет Equilibrium
29 inp_eq_style ENUM_LINE_STYLE STYLE_DASH Стиль Equilibrium
30 inp_eq_width int 1 Толщина Equilibrium
31 inp_pd_col color clrPurple Цвет Premium/Discount
32 inp_pd_style ENUM_LINE_STYLE STYLE_DOT Стиль Premium/Discount
33 inp_pd_width int 1 Толщина Premium/Discount
34 inp_qty_fvg_hist int 500 Глубина истории FVG (бары)
35 inp_fvg_obj_col color clrDeepSkyBlue Цвет FVG объектов
36 inp_fvg_buf_col color clrNONE Цвет FVG буферов
37 inp_ifvg_obj_col color clrDodgerBlue Цвет iFVG объектов
38 inp_ifvg_buf_col color clrNONE Цвет iFVG буферов
39 inp_show_fvg bool true Показывать FVG
40 inp_show_ifvg bool false Показывать iFVG
41 inp_fvg_trend_only bool true Только зоны по тренду
42 inp_fvg_eq_filter bool false Фильтр FVG по Equilibrium
43 inp_fvg_eq_strict bool false Строгий режим фильтра
44 inp_fvg_eq_use_lvl2 bool false Использовать 2-й уровень

Примечание: при использовании из EA визуальные параметры (цвета, стили, толщины) можно оставить по умолчанию — они влияют только на отображение на графике, не на данные буферов.