# Архитектура скрипта ICT Entry V2 [TS_Indie] **Источник:** TradingView Pine Script v6 **URL:** https://ru.tradingview.com/script/wm9e7Wca-ICT-Entry-V2-TS-Indie/ --- ## 1. ОБЩАЯ СТРУКТУРА СИСТЕМЫ ### 1.1 Иерархия компонентов ``` ┌─────────────────────────────────────────────────────────────┐ │ ICT Entry V2 System │ ├─────────────────────────────────────────────────────────────┤ │ 1. Swing Detection (Определение свингов) │ │ ↓ │ │ 2. Liquidity Levels (Уровни ликвидности) │ │ ↓ │ │ 3. Market Structure (BOS/MSS - определение тренда) │ │ ↓ │ │ 4. FVG Detection (Fair Value Gap) │ │ ↓ │ │ 5. iFVG Detection (Inversion FVG) │ │ ↓ │ │ 6. Entry Signal (Комбинация всех условий) │ └─────────────────────────────────────────────────────────────┘ ``` ### 1.2 Основные переменные состояния | Переменная | Тип | Описание | |------------|-----|----------| | `In_Dir_Big` | int | Глобальный тренд: 1=бычий, -1=медвежий | | `In_Dir_small` | int | Локальное направление свинга | | `con_buy` | bool | Активирован поиск Buy setup после sweep | | `con_sell` | bool | Активирован поиск Sell setup после sweep | | `buy_signal` | bool | Все условия для покупки выполнены | | `sell_signal` | bool | Все условия для продажи выполнены | | `pending_buy` | bool | Pending ордер на покупку выставлен | | `pending_sell` | bool | Pending ордер на продажу выставлен | | `up_trend` | bool | Текущий тренд бычий | | `down_trend` | bool | Текущий тренд медвежий | | `break_dem` | bool | Произошел sweep Demand ликвидности | | `break_sup` | bool | Произошел sweep Supply ликвидности | --- ## 2. БЛОК FVG (Fair Value Gap) ### 2.1 Определение FVG **Demand FVG (бычий):** ``` Условие: low > high[2] top = low (текущей свечи) bot = high[2] (хай свечи 2 бара назад) bar = time[2] ``` **Supply FVG (медвежий):** ``` Условие: high < low[2] top = low[2] (лоу свечи 2 бара назад) bot = high (текущей свечи) bar = time[2] ``` ### 2.2 Структуры данных FVG ``` // Demand FVG dfvg_top[] - массив верхних границ dfvg_bot[] - массив нижних границ dfvg_bar[] - массив времени создания dfvg_col[] - массив цветов (для отслеживания частичной митигации) // Supply FVG sfvg_top[], sfvg_bot[], sfvg_bar[], sfvg_col[] // Размер массивов: qty_fvg = 9000 ``` ### 2.3 Митигация FVG **Полная митигация (удаление):** - Demand FVG: `low <= dfvg_bot[0]` (цена дошла до дна) - Supply FVG: `high >= sfvg_top[0]` (цена дошла до вершины) **Частичная митигация (изменение цвета):** - Demand FVG: `low <= dfvg_top[i]` → цвет меняется на Col_fvg_mit - Supply FVG: `high >= sfvg_bot[i]` → цвет меняется на Col_fvg_mit2 ### 2.4 Отрисовка FVG | Состояние | Левый край | Правый край | |-----------|------------|-------------| | Активный | dfvg_bar[i] | time_set (продлевается) | | Митигированный | dfvg_bar[i] | time (момент митигации) | **Количество отображаемых:** - Активных: `qty_pi` (по умолчанию 1) - История: `qty_mit_pi` (по умолчанию 4) --- ## 3. БЛОК iFVG (Inversion FVG) ### 3.1 Концепция iFVG iFVG - это FVG, который был **ПРОБИТ ЗАКРЫТИЕМ** свечи и инвертировал свою роль: - Supply FVG → становится iFVG Demand (поддержка) - Demand FVG → становится iFVG Supply (сопротивление) **ВАЖНО:** Только ЗАКРЫТИЕ свечи создает iFVG, фитиль НЕ считается! ### 3.2 Структуры данных iFVG ``` // Pre-Inversion (копии FVG для отслеживания) dfvg_R_top[], dfvg_R_bot[], dfvg_bar_R[] // копия Demand FVG sfvg_R_top[], sfvg_R_bot[], sfvg_bar_R[] // копия Supply FVG // Подтвержденные iFVG dfvg_R2_top[], dfvg_R2_bot[], dfvg_bar_R2[] // iFVG Demand sfvg_R2_top[], sfvg_R2_bot[], sfvg_bar_R2[] // iFVG Supply d_i_fvg_col[], s_i_fvg_col[] // цвета ``` ### 3.3 Создание iFVG **iFVG Demand (из Supply FVG):** ``` Условие: close > sfvg_R_top[0] 1. Копируем данные из sfvg_R в dfvg_R2 2. Удаляем из sfvg_R 3. Устанавливаем цвет Col_ifvg_d ``` **iFVG Supply (из Demand FVG):** ``` Условие: close < dfvg_R_bot[0] 1. Копируем данные из dfvg_R в sfvg_R2 2. Удаляем из dfvg_R 3. Устанавливаем цвет Col_ifvg_s ``` ### 3.4 Митигация iFVG - iFVG Demand: `low <= dfvg_R2_bot[0]` - iFVG Supply: `high >= sfvg_R2_top[0]` ### 3.5 Отрисовка iFVG Аналогично FVG: - Активный: продлевается до time_set - Митигированный: фиксируется до time --- ## 4. БЛОК LIQUIDITY (Ликвидность) ### 4.1 Определение Swing точек ``` sw_H = ta.pivothigh(high, Len, Len) sw_L = ta.pivotlow(low, Len, Len) Len = Liquidity Pivot Strength (по умолчанию 5) ``` **Переменные:** - `sw_high/sw_low` - текущие значения свингов - `Bar_sw_high/Bar_sw_low` - бары свингов - `sw_Dir_small` - направление последнего свинга (1=вверх, -1=вниз) ### 4.2 Структуры данных ликвидности ``` // Supply Liquidity (Swing High) lid_sup[] - массив уровней lid_bar_sup[] - массив времени // Demand Liquidity (Swing Low) lid_dem[] - массив уровней lid_bar_dem[] - массив времени // Размер: ar_q = 9000 ``` ### 4.3 Добавление уровней ликвидности ``` // Supply (при новом Swing High) if Ch_swh AND sw_high >= ph: unshift_remove(lid_sup, sw_high) unshift_remove(lid_bar_sup, time[bar_index-Bar_sw_high]) // Demand (при новом Swing Low) if Ch_swl AND sw_low <= pl: unshift_remove(lid_dem, sw_low) unshift_remove(lid_bar_dem, time[bar_index-Bar_sw_low]) ``` ### 4.4 Sweep ликвидности (пробитие) **Demand Liquidity Sweep:** ``` Условие: low <= lid_dem[0] Результат: - break_dem := true - value_dem_lid := пробитый уровень - pre_bar_Dlid_left := время начала - pre_bar_Dlid_right := time (время пробития) - Уровень удаляется из массива ``` **Supply Liquidity Sweep:** ``` Условие: high >= lid_sup[0] Результат: - break_sup := true - value_sup_lid := пробитый уровень - pre_bar_Slid_left := время начала - pre_bar_Slid_right := time ``` ### 4.5 Отрисовка ликвидности | Состояние | Левый край | Правый край | |-----------|------------|-------------| | Активный | lid_bar | time_set (продлевается) | | После sweep | lid_bar_left | lid_bar_right (фиксирован) | **Количество:** - Активных: `Lid_show` (по умолчанию 2) - История: `Lid_ss` (по умолчанию 4) --- ## 5. БЛОК MARKET STRUCTURE (Структура рынка) ### 5.1 Переменные структуры ``` In_Dir_Big - глобальный тренд (1=бычий, -1=медвежий) In_Dir_small - локальное направление In_High - подтвержденный структурный High In_Low - подтвержденный структурный Low Bar_In_High - бар структурного High Bar_In_Low - бар структурного Low CF_In_High - флаг: структурный High подтвержден CF_In_low - флаг: структурный Low подтвержден i_high/i_low - текущие непроверенные High/Low ``` ### 5.2 Valid Pullback условия ``` // Условие 1: Pivot подтвержден valid_pivot_high = pivothigh существует (Len_in баров) valid_pivot_low = pivotlow существует (Len_in баров) // Условие 2: Откат подтвержден if valid_con == 'Close': valid_cf_high = close < low[bar_index-Bar_i_high] valid_cf_low = close > high[bar_index-Bar_i_low] else: // 'High/Low' valid_cf_high = low < low[bar_index-Bar_i_high] valid_cf_low = high > high[bar_index-Bar_i_low] ``` ### 5.3 Определение BOS и MSS **BOS (Break of Structure)** - продолжение тренда: ``` // В бычьем тренде (In_Dir_Big == 1): In_Break_Up = close > In_High AND CF_In_High = true → Рисуется "BOS" вверх // В медвежьем тренде (In_Dir_Big == -1): In_Break_Down = close < In_Low AND CF_In_low = true → Рисуется "BOS" вниз ``` **MSS (Market Structure Shift)** - смена тренда: ``` // Бычий → Медвежий: In_Break_Down = close < In_Low AND CF_In_low = true AND In_Dir_Big == 1 → In_Dir_Big := -1 → Рисуется "MSS" вниз // Медвежий → Бычий: In_Break_Up = close > In_High AND CF_In_High = true AND In_Dir_Big == -1 → In_Dir_Big := 1 → Рисуется "MSS" вверх ``` ### 5.4 Обновление структурных точек ``` // При подтверждении High: if CF_In_High AND valid_cf_high AND valid_pivot_high: Ch_In_H := true In_High := i_high Bar_In_High := Bar_i_high In_Dir_small := -1 // При подтверждении Low: if CF_In_low AND valid_cf_low AND valid_pivot_low: Ch_In_L := true In_Low := i_low Bar_In_Low := Bar_i_low In_Dir_small := 1 ``` ### 5.5 Отрисовка BOS/MSS | Состояние | Левый край | Правый край | |-----------|------------|-------------| | Активный (CF=true) | время структурной точки | time_set | | После пробоя | время структурной точки | time (момент пробоя) | | CF=false | линия удаляется | - | --- ## 6. БЛОК ENTRY CONDITIONS ### 6.1 Последовательность для BUY SETUP ``` ┌────────────────────────────────────────────────────────────────┐ │ ШАГ 1: Liquidity Sweep │ │ Условие: break_dem = true │ │ AND close > value_dem_lid │ │ AND open > value_dem_lid │ │ Результат: con_buy := true │ ├────────────────────────────────────────────────────────────────┤ │ ШАГ 2: Проверка тренда │ │ Условие: up_trend = true (In_Dir_Big == 1) │ ├────────────────────────────────────────────────────────────────┤ │ ШАГ 3: Проверка iFVG Demand │ │ Условие: dfvg_R2_bot[0] существует │ │ AND value_dem_lid < dfvg_R2_bot[0] │ │ (уровень ликвидности НИЖЕ iFVG) │ ├────────────────────────────────────────────────────────────────┤ │ ШАГ 4: Проверка Gap между iFVG и FVG │ │ Расчет: FVG_gap_buy = |dfvg_R2_top[0] - dfvg_bot[0]| │ │ Условие: FVG_gap_buy >= atr_check_FVG_min │ │ AND FVG_gap_buy <= atr_check_FVG_max │ ├────────────────────────────────────────────────────────────────┤ │ ШАГ 5: Дополнительные фильтры │ │ - EQ_entry_buy (Premium/Discount зона) │ │ - size_FVG_con_dem (размер FVG) │ │ - size_iFVG_con_dem (размер iFVG) │ │ - con_mix_dem (позиция FVG относительно iFVG) │ ├────────────────────────────────────────────────────────────────┤ │ ШАГ 6: Сигнал │ │ if con_buy AND Check_gap_buy: │ │ buy_signal := true │ └────────────────────────────────────────────────────────────────┘ ``` ### 6.2 Последовательность для SELL SETUP ``` ┌────────────────────────────────────────────────────────────────┐ │ ШАГ 1: Liquidity Sweep │ │ Условие: break_sup = true │ │ AND close < value_sup_lid │ │ AND open < value_sup_lid │ │ Результат: con_sell := true │ ├────────────────────────────────────────────────────────────────┤ │ ШАГ 2: Проверка тренда │ │ Условие: down_trend = true (In_Dir_Big == -1) │ ├────────────────────────────────────────────────────────────────┤ │ ШАГ 3: Проверка iFVG Supply │ │ Условие: sfvg_R2_top[0] существует │ │ AND value_sup_lid > sfvg_R2_top[0] │ │ (уровень ликвидности ВЫШЕ iFVG) │ ├────────────────────────────────────────────────────────────────┤ │ ШАГ 4: Проверка Gap между iFVG и FVG │ │ Расчет: FVG_gap_sell = |sfvg_R2_bot[0] - sfvg_top[0]| │ │ Условие: FVG_gap_sell >= atr_check_FVG_min │ │ AND FVG_gap_sell <= atr_check_FVG_max │ ├────────────────────────────────────────────────────────────────┤ │ ШАГ 5: Дополнительные фильтры │ │ - EQ_entry_sell (Premium/Discount зона) │ │ - size_FVG_con_sup (размер FVG) │ │ - size_iFVG_con_sup (размер iFVG) │ │ - con_mix_sup (позиция FVG относительно iFVG) │ ├────────────────────────────────────────────────────────────────┤ │ ШАГ 6: Сигнал │ │ if con_sell AND Check_gap_sell: │ │ sell_signal := true │ └────────────────────────────────────────────────────────────────┘ ``` ### 6.3 Инвалидация условий ``` // Buy условие отменяется: if close < value_dem_lid: // цена закрылась ниже пробитого уровня con_buy := false if not con_time AND con_time[1]: // вышли из торговой сессии con_buy := false // Sell условие отменяется: if close > value_sup_lid: // цена закрылась выше пробитого уровня con_sell := false ``` --- ## 7. РАСЧЕТ ENTRY / STOP LOSS / TAKE PROFIT ### 7.1 Для Buy ``` sl_cal_long = dfvg_R2_bot[0] // Низ iFVG entry_b = dfvg_R2_top[0] // Верх iFVG // Entry с учетом Entry Zone (fibo_entry: 0-100) open_long = entry_b - |fibo_entry/100 * (entry_b - sl_cal_long)| // Stop Loss с учетом ATR буфера risk_pips = atr_sl * x_ATR stop_loss_long = sl_cal_long - risk_pips // Take Profit по Risk:Reward take_profit_long = open_long + (open_long - stop_loss_long) * rr_ratio ``` ### 7.2 Для Sell ``` sl_cal_short = sfvg_R2_top[0] // Верх iFVG entry_s = sfvg_R2_bot[0] // Низ iFVG // Entry с учетом Entry Zone open_short = entry_s + |fibo_entry/100 * (sl_cal_short - entry_s)| // Stop Loss с учетом ATR буфера stop_loss_short = sl_cal_short + risk_pips // Take Profit по Risk:Reward take_profit_short = open_short - (stop_loss_short - open_short) * rr_ratio ``` ### 7.3 Параметры | Параметр | По умолчанию | Описание | |----------|--------------|----------| | fibo_entry | 0 | Позиция входа внутри iFVG (0=край, 50=середина) | | x_ATR | 0.5 | Множитель ATR для буфера SL | | rr_ratio | 3 | Соотношение Risk:Reward | | length_atr | 50 | Период ATR | --- ## 8. НАСТРОЙКИ ПРИОРИТЕТА FVG vs iFVG ### 8.1 Параметры | Параметр | По умолчанию | Описание | |----------|--------------|----------| | iFVG_be_FVG | false | Может ли FVG перекрывать iFVG | | Con_FVG_mix | false | Принимать оба варианта расположения | ### 8.2 Логика для Buy ``` con_mix_dem = Con_FVG_mix ? true : (not iFVG_be_FVG ? dfvg_bot[0] >= dfvg_R2_top[0] : // FVG ВЫШЕ iFVG (без перекрытия) dfvg_bot[0] < dfvg_R2_top[0]) // FVG может перекрывать iFVG ``` ### 8.3 Логика для Sell ``` con_mix_sup = Con_FVG_mix ? true : (not iFVG_be_FVG ? sfvg_top[0] <= sfvg_R2_bot[0] : // FVG НИЖЕ iFVG (без перекрытия) sfvg_top[0] > sfvg_R2_bot[0]) // FVG может перекрывать iFVG ``` ### 8.4 Визуальное представление **Buy Setup (iFVG_be_FVG = false):** ``` ┌─────────┐ │ FVG │ ← ВЫШЕ └─────────┘ ═══════════════════ ← Gap (проверяется Min/Max) ┌─────────┐ │ iFVG │ ← Entry здесь └─────────┘ ──────────────────── ← Liquidity Level (пробит) ``` **Sell Setup (iFVG_be_FVG = false):** ``` ──────────────────── ← Liquidity Level (пробит) ┌─────────┐ │ iFVG │ ← Entry здесь └─────────┘ ═══════════════════ ← Gap (проверяется Min/Max) ┌─────────┐ │ FVG │ ← НИЖЕ └─────────┘ ``` --- ## 9. ОТМЕНА PENDING ORDERS ### 9.1 Условие A - Противоположный Sweep ``` cancel_pending_A = true (по умолчанию) // При Buy sweep → отменяется pending Sell if break_dem AND pending_sell AND cancel_pending_A: strategy.cancel("Short") pending_sell := false // При Sell sweep → отменяется pending Buy if break_sup AND pending_buy AND cancel_pending_A: strategy.cancel("Long") pending_buy := false ``` ### 9.2 Условие B - Новый сигнал ``` cancel_pending_B = true (по умолчанию) if (buy_signal OR sell_signal) AND cancel_pending_B: if pending_buy: strategy.cancel("Long") pending_buy := false if pending_sell: strategy.cancel("Short") pending_sell := false ``` ### 9.3 Условие C - Выход из сессии ``` cancel_pending_C = true (по умолчанию) if con_time[1] AND not con_time AND cancel_pending_C: // Отменяем все pending ордера ``` --- ## 10. ПРАВИЛА ОТРИСОВКИ ### 10.1 Общие переменные ``` // Правый край для активных объектов (продлевается) time_set = last_bar_time + ((time-time[1]) * distance_bar_line) // Позиция меток time_lbl = last_bar_time + ((time-time[1]) * distance_bar_label) // Смещение для history boxes n_bar = (timeframe.in_seconds * 1000) * 5 gap_bar = (timeframe.in_seconds * 1000) ``` ### 10.2 Таблица состояний отрисовки | Элемент | Активный | После события | |---------|----------|---------------| | FVG | left=dfvg_bar, right=time_set | right=time (митигация) | | iFVG | left=dfvg_bar_R2, right=time_set | right=time (митигация) | | Liquidity | left=lid_bar, right=time_set | right=time (sweep) | | BOS/MSS | left=время точки, right=time_set | right=time (пробой) | ### 10.3 Количество отображаемых объектов | Элемент | Активные | История | |---------|----------|---------| | FVG | qty_pi (1) | qty_mit_pi (4) | | iFVG | qty_pi (1) | qty_mit_pi (4) | | Liquidity | Lid_show (2) | Lid_ss (4) | --- ## 11. ЖИЗНЕННЫЙ ЦИКЛ ЭЛЕМЕНТОВ ### 11.1 FVG ``` Создание: low > high[2] (Demand) или high < low[2] (Supply) ↓ Активный: отрисовывается с продлением вправо ↓ Частичная митигация: цвет меняется ↓ Полная митигация: удаляется, создается history box ``` ### 11.2 iFVG ``` FVG создан ↓ Копируется в Pre-Inversion массив ↓ Close пробивает FVG → создается iFVG (инверсия) ↓ Активный: отрисовывается с продлением вправо ↓ Митигация: удаляется, создается history box ``` ### 11.3 Liquidity ``` Swing High/Low определен ↓ Добавляется в массив ликвидности ↓ Активный: линия продлевается вправо ↓ Sweep (low/high достигает уровня) → линия фиксируется, создается history ``` ### 11.4 BOS/MSS ``` Структурная точка подтверждена (CF=true) ↓ Активный: линия продлевается вправо ↓ Close пробивает структуру → линия фиксируется ↓ Новый структурный пробой в противоположную сторону → старая линия удаляется ``` --- ## 12. ДИАГРАММА ПОТОКА СИГНАЛА ``` ┌──────────────────┐ │ Liquidity Sweep │ │ (break_dem/sup)│ └────────┬─────────┘ │ ┌────────▼─────────┐ │ Close > уровень? │ │ (подтверждение) │ └────────┬─────────┘ │ да ┌────────▼─────────┐ │ con_buy/sell │ │ := true │ └────────┬─────────┘ │ ┌──────────────────┼──────────────────┐ │ │ │ ┌─────▼─────┐ ┌──────▼──────┐ ┌─────▼─────┐ │ Тренд? │ │ iFVG есть? │ │ FVG есть? │ │ (up/down) │ │ │ │ │ └─────┬─────┘ └──────┬──────┘ └─────┬─────┘ │ │ │ └──────────────────┼──────────────────┘ │ все да ┌────────▼─────────┐ │ Gap проверка │ │ (Min <= Gap │ │ <= Max) │ └────────┬─────────┘ │ да ┌────────▼─────────┐ │ Доп. фильтры │ │ (EQ, Size, Mix) │ └────────┬─────────┘ │ все да ┌────────▼─────────┐ │ buy/sell_signal │ │ := true │ └────────┬─────────┘ │ ┌────────▼─────────┐ │ Расчет Entry │ │ SL, TP │ └────────┬─────────┘ │ ┌────────▼─────────┐ │ Pending Order │ │ выставлен │ └──────────────────┘ ``` --- ## 13. СПИСОК ВХОДНЫХ ПАРАМЕТРОВ ### 13.1 Entry Condition | Параметр | Тип | По умолчанию | Описание | |----------|-----|--------------|----------| | rr_ratio | float | 3 | Risk:Reward | | length_atr | int | 50 | Период ATR для SL | | x_ATR | float | 0.5 | Множитель ATR для буфера SL | | fibo_entry | float | 0 | Позиция входа в iFVG (0-100) | | iFVG_be_FVG | bool | false | Перекрытие FVG и iFVG | | Con_FVG_mix | bool | false | Принимать оба варианта | | FVG_min_ATR | float | 0.01 | Мин. размер Gap (x ATR) | | FVG_max_ATR | float | 0.2 | Макс. размер Gap (x ATR) | | Filter_size_FVG | bool | false | Фильтр размера FVG | | FVG_min/max | float | 0.1/0.5 | Границы размера FVG | | Filter_size_iFVG | bool | false | Фильтр размера iFVG | | iFVG_min/max | float | 0.1/0.5 | Границы размера iFVG | | Len | int | 5 | Сила Liquidity Pivot | | Follow_trend | bool | true | Торговля по тренду | | Len_in | int | 10 | Сила структурного pivot | | valid_con | string | 'Close' | Валидация пробоя | | EQ_con | bool | false | Premium/Discount фильтр | | Pre_Dis/Pre_Dis2 | float | 50/80 | Границы P/D зоны | | cancel_pending_A | bool | true | Отмена при противоположном sweep | | cancel_pending_B | bool | true | Отмена при новом сигнале | | cancel_pending_C | bool | true | Отмена при выходе из сессии | | B_long | bool | true | Разрешить Long | | S_short | bool | true | Разрешить Short | ### 13.2 Display | Параметр | Тип | По умолчанию | Описание | |----------|-----|--------------|----------| | SD_fvg | bool | true | Показывать FVG | | SD_i_fvg | bool | true | Показывать iFVG | | qty_pi | int | 1 | Количество активных FVG | | Mit_Pi | bool | true | Показывать историю | | qty_mit_pi | int | 4 | Количество истории | | show_swing_lid | bool | true | Показывать свинги | | show_lid | bool | true | Показывать ликвидность | | Lid_show | int | 2 | Количество активных уровней | | mi_lid | bool | true | Показывать историю ликвидности | | Lid_ss | int | 4 | Количество истории | | Show_Structure | bool | true | Показывать структуру | | distance_bar_line | int | 40 | Отступ линий вправо | | distance_bar_label | int | 20 | Отступ меток вправо | --- ## 14. ПОТЕНЦИАЛЬНЫЕ ПРОБЛЕМЫ ОТРИСОВКИ ### 14.1 Описание проблем 1. **Линии не прекращают рисоваться после пробития** - Причина: условия обновления выполняются на каждом баре - Нужно: добавить флаги завершения отрисовки 2. **FVG накладываются друг на друга** - Причина: несколько FVG в одной зоне - Нужно: проверять перекрытие и объединять или скрывать 3. **iFVG накладываются на FVG** - Причина: iFVG создается из FVG в той же зоне - Нужно: учитывать настройку iFVG_be_FVG ### 14.2 Рекомендации 1. Добавить флаги `is_mitigated` для каждого элемента 2. При митигации устанавливать `right_edge_fixed = true` 3. Проверять перекрытие перед отрисовкой 4. Использовать z-index или прозрачность для наложений --- ## 15. СЛЕДУЮЩИЕ ШАГИ РЕАЛИЗАЦИИ После утверждения этой архитектуры, работа будет вестись по блокам: 1. **Блок FVG** - исправить отрисовку и митигацию 2. **Блок iFVG** - исправить создание и отрисовку 3. **Блок Liquidity** - исправить определение и sweep 4. **Блок Structure** - исправить BOS/MSS 5. **Блок Entry** - собрать все условия вместе 6. **Блок Visualization** - добавить маркеры Entry/SL/TP Каждый блок будет отлаживаться отдельно с визуальной проверкой.