When trend_only filter is on, zones no longer disappear/reappear
as price enters/exits the zone intra-bar.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- FVG_MAX_STORAGE=50 fixed capacity per zone type (was tied to param)
- m_qty_history → m_hist_bars: parameter now means "bars back"
- ApplyVisibility: bar-window filter (right_edge <= m_hist_bars)
- inp_qty_fvg_hist=0 shows only active zones, default changed to 500
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Шаг 6 в Calculate() — после буферной логики, цикл расширяет OBJ_RECTANGLE всех активных зон (не только новейшей)
UpdateBar0() — после буферной логики, цикл расширяет все активные зоны до TimeCurrent(), независимо от тренда
Теперь:
inp_fvg_trend_only = false: все активные зоны тянутся до bar 0
inp_fvg_trend_only = true: все активные зоны тянутся до bar 0, но ApplyVisibility скрывает ненужные (не-тренд, выше/ниже цены, митигированные)
Теперь поток правильный:
FVG создан → dfvg + dfvg_R заполняются одновременно
FVG митигирован → dfvg замораживается, dfvg_R остаётся
Позже close < dfvg_R_bot → dfvg_R инвертируется в Supply iFVG
Были исправлены 3 ключевых бага по сравнению с предыдущей версией:
m_dfvg_cnt-- после заморозки — убрано. Счётчик cnt = ВСЕГО зон (активные + замороженные). FindActiveZone() сканирует весь массив и корректно находит активные зоны даже если предыдущие уже заморожены.
PruneOldZones перемещён до UnshiftZone — теперь вызывается перед вставкой новой зоны, освобождая место и очищая бары старейшей зоны в буфере. Условие изменено с > max_allowed на >= max_cnt.
Упрощён шаг митигации — убраны while + break конструкции с двойным вызовом FindActiveZone(). Заменено на чистое if.
Ind_Aleks_ICT_Entry_V2_TS_Indie.mq5 — добавления
indicator_buffers 28, indicator_plots 18
Plots 17-18: DRAW_FILLING с PLOT_EMPTY_VALUE = 0.0
Новые inputs: inp_qty_fvg_hist, inp_fvg_col, inp_ifvg_col
Буферы 24-27 с AS_SERIES = true
g_fvg.Init() в OnInit()
Отдельный цикл FVG в OnCalculate() (полный и инкрементальный)
g_fvg.UpdateBar0() вызывается каждый тик
Сделано одно изменение в Ind_Aleks_ICT_Entry_V2_TS_Indie.mq5 — переставлены блоки SetIndexBuffer:
Было (нарушение):
16-23: INDICATOR_CALCULATIONS ← посередине
24-27: INDICATOR_DATA (FVG) ← ПОСЛЕ calculations
Стало (правильно):
16-19: INDICATOR_DATA (FVG_Top, FVG_Bot, IFVG_Top, IFVG_Bot)
20-27: INDICATOR_CALCULATIONS (CalcSsHigh..CalcBarSwLow)
Теперь все 20 INDICATOR_DATA буферов (0-19) стоят перед 8 INDICATOR_CALCULATIONS (20-27). PlotIndexSetDouble/Integer и ArraySetAsSeries не требовали изменений — они работают с plot-индексами и массивами соответственно, а не с buffer-индексами.
Всё готово. Итог изменений в Ind_Aleks_ICT_Entry_V2_TS_Indie.mq5:
Место Что изменено
OnInit() строки 243-246 clrNONE вместо inp_fvg_col/inp_ifvg_col — DRAW_FILLING скрыт
OnInit() строка 305 g_fvg.Init(qty, fvg_col, ifvg_col) — цвета переданы в модуль
OnCalculate() строки 389, 397 добавлен time в оба вызова g_fvg.Calculate()
OnDeinit() g_fvg.Cleanup() — удаляет все OBJ_RECTANGLE при выгрузке
После перезагрузки индикатора на графике будут видны только OBJ_RECTANGLE прямоугольники (цвета из input), DRAW_FILLING полностью скрыт.