# inp_qty_fvg_hist Bar-Window Implementation Plan > **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task. **Goal:** Изменить семантику `inp_qty_fvg_hist` с «количество зон» на «количество баров назад», чтобы параметр контролировал глубину видимой истории. **Architecture:** Хранение зон отвязывается от параметра — фиксированная ёмкость 50 на тип. Параметр используется только в ApplyVisibility() как фильтр по правому краю зоны. **Tech Stack:** MQL5, CFVGModule.mqh, Ind_Aleks_ICT_Entry_V2_TS_Indie.mq5 **Design doc:** `docs/plans/2026-03-06-fvg-hist-bars-design.md` --- ### Task 1: Константа + переименование поля + Init() **Files:** - Modify: `CFVGModule.mqh:7` (добавить define после include guard) - Modify: `CFVGModule.mqh:97` (поле m_qty_history → m_hist_bars) - Modify: `CFVGModule.mqh:160` (конструктор) - Modify: `CFVGModule.mqh:191-217` (Init) **Step 1: Добавить константу после `#define CFVG_MODULE_MQH`** ```cpp #define FVG_MAX_STORAGE 50 ``` **Step 2: Переименовать поле** Строка 97: `m_qty_history` → `m_hist_bars` **Step 3: Обновить конструктор** Строка 160: `m_qty_history = 4;` → `m_hist_bars = 0;` **Step 4: Обновить Init()** Строка 191: ```cpp m_hist_bars = (qty_history >= 0) ? qty_history : 0; ``` Строка 201: ```cpp int max_zones = FVG_MAX_STORAGE + 1; ``` Удалить строку 202: `int max_preinv = 20;` — оставить как есть (pre-inv массивы не связаны с qty). --- ### Task 2: Обновить Calculate() **Files:** - Modify: `CFVGModule.mqh:438` (max_zones в Calculate) **Step 1: Заменить вычисление max_zones** Строка 438: `int max_zones = m_qty_history + 1;` → `int max_zones = FVG_MAX_STORAGE + 1;` --- ### Task 3: Обновить ApplyVisibility() — добавить фильтр по барам **Files:** - Modify: `CFVGModule.mqh:726-783` (ApplyVisibility) **Step 1: Добавить проверку окна по барам в каждый из 4 циклов** В каждом цикле (Demand FVG, Supply FVG, Demand iFVG, Supply iFVG) после строки `bool show = m_show_*;` добавить: ```cpp if(show) { int right_edge = (zones[i].end_bar == -1) ? 0 : zones[i].end_bar; show = (m_hist_bars == 0) ? (zones[i].end_bar == -1) : (right_edge <= m_hist_bars); } ``` Конкретно для Demand FVG (строки 733-743) результат будет: ```cpp for(int i = 0; i < m_dfvg_cnt; i++) { if(m_dfvg_zones[i].obj_name == "") continue; bool show = m_show_fvg; if(show) { int right_edge = (m_dfvg_zones[i].end_bar == -1) ? 0 : m_dfvg_zones[i].end_bar; show = (m_hist_bars == 0) ? (m_dfvg_zones[i].end_bar == -1) : (right_edge <= m_hist_bars); } if(show && m_trend_only) show = (in_dir_big == 1) && (m_dfvg_zones[i].end_bar == -1) && (m_dfvg_zones[i].top < current_price); if(show && m_eq_filter) show = PassesEqFilter(m_dfvg_zones[i].top, m_dfvg_zones[i].bot, in_dir_big, true, eq_lvl); ObjectSetInteger(0, m_dfvg_zones[i].obj_name, OBJPROP_TIMEFRAMES, show ? OBJ_ALL_PERIODS : OBJ_NO_PERIODS); } ``` Аналогично для Supply FVG (m_sfvg_zones), Demand iFVG (m_ifvg_d_zones), Supply iFVG (m_ifvg_s_zones). --- ### Task 4: Обновить .mq5 — комментарий и дефолт **Files:** - Modify: `Ind_Aleks_ICT_Entry_V2_TS_Indie.mq5:179` **Step 1: Изменить input** ```cpp input int inp_qty_fvg_hist = 500; // Глубина истории FVG (бары, 0=только активные) ``` --- ### Task 5: Валидация компиляции **Step 1: Запустить validate_mql_code** ``` validate_mql_code(mq_file_path="\Ind_Aleks_ICT_Entry_V2_TS_Indie.mq5") ``` Expected: `success: true`, 0 ошибок. **Step 2: Если есть ошибки — исправить и перевалидировать** --- ### Task 6: Коммит **Step 1: Закоммитить** ```bash git add CFVGModule.mqh Ind_Aleks_ICT_Entry_V2_TS_Indie.mq5 git commit -m "feat: inp_qty_fvg_hist bar-window semantics (was zone count)" ```