# 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 ### Создание хэндла ```mql5 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; } ``` ### Чтение буферов ```mql5 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. Определяет глобальное направление тренда. ```mql5 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` = нет события. ```mql5 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 (снизу). ```mql5 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) ```mql5 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) ```mql5 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) ```mql5 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 ```mql5 // В 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-анализа создайте несколько хэндлов: ```mql5 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 визуальные параметры (цвета, стили, толщины) можно оставить по умолчанию — они влияют только на отображение на графике, не на данные буферов.