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 визуальные параметры (цвета, стили, толщины) можно оставить по умолчанию — они влияют только на отображение на графике, не на данные буферов.