33 KiB
Архитектура скрипта 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 Описание проблем
-
Линии не прекращают рисоваться после пробития
- Причина: условия обновления выполняются на каждом баре
- Нужно: добавить флаги завершения отрисовки
-
FVG накладываются друг на друга
- Причина: несколько FVG в одной зоне
- Нужно: проверять перекрытие и объединять или скрывать
-
iFVG накладываются на FVG
- Причина: iFVG создается из FVG в той же зоне
- Нужно: учитывать настройку iFVG_be_FVG
14.2 Рекомендации
- Добавить флаги
is_mitigatedдля каждого элемента - При митигации устанавливать
right_edge_fixed = true - Проверять перекрытие перед отрисовкой
- Использовать z-index или прозрачность для наложений
15. СЛЕДУЮЩИЕ ШАГИ РЕАЛИЗАЦИИ
После утверждения этой архитектуры, работа будет вестись по блокам:
- Блок FVG - исправить отрисовку и митигацию
- Блок iFVG - исправить создание и отрисовку
- Блок Liquidity - исправить определение и sweep
- Блок Structure - исправить BOS/MSS
- Блок Entry - собрать все условия вместе
- Блок Visualization - добавить маркеры Entry/SL/TP
Каждый блок будет отлаживаться отдельно с визуальной проверкой.