67 lines
2.8 KiB
Markdown
67 lines
2.8 KiB
Markdown
|
|
# Design: inp_qty_fvg_hist — окно по барам вместо количества зон
|
||
|
|
|
||
|
|
**Дата:** 2026-03-06
|
||
|
|
**Подход:** A (фильтр по барам в ApplyVisibility)
|
||
|
|
|
||
|
|
## Проблема
|
||
|
|
|
||
|
|
`inp_qty_fvg_hist` ограничивает общее число зон в массиве (включая скрытые фильтрами и митигированные). Пользователь ожидает видеть N зон, но видит меньше, т.к. скрытые занимают слоты. При значении 0 молча ставится дефолт 4.
|
||
|
|
|
||
|
|
## Решение
|
||
|
|
|
||
|
|
Параметр меняет семантику: **было** «количество зон», **стало** «количество баров назад».
|
||
|
|
|
||
|
|
Зона видима, если её правый край (end_bar для митигированных, 0 для активных) попадает в окно `[0..N]`.
|
||
|
|
|
||
|
|
| inp_qty_fvg_hist | Поведение |
|
||
|
|
|---|---|
|
||
|
|
| 0 | Только активные (немитигированные) зоны |
|
||
|
|
| 100 | Зоны с правым краем в последних 100 барах |
|
||
|
|
| 1000 | Практически вся расчётная история |
|
||
|
|
|
||
|
|
## Изменения в CFVGModule.mqh
|
||
|
|
|
||
|
|
### 1. Константа и поле
|
||
|
|
|
||
|
|
```
|
||
|
|
#define FVG_MAX_STORAGE 50
|
||
|
|
|
||
|
|
m_qty_history → m_hist_bars
|
||
|
|
```
|
||
|
|
|
||
|
|
### 2. Init()
|
||
|
|
|
||
|
|
- `m_hist_bars = (qty_history >= 0) ? qty_history : 0`
|
||
|
|
- `ArrayResize` на `FVG_MAX_STORAGE + 1` (фиксированный)
|
||
|
|
|
||
|
|
### 3. Calculate()
|
||
|
|
|
||
|
|
- `max_zones` = `FVG_MAX_STORAGE + 1` (вместо `m_qty_history + 1`)
|
||
|
|
- Остальная логика без изменений
|
||
|
|
|
||
|
|
### 4. ApplyVisibility() — ключевое изменение
|
||
|
|
|
||
|
|
Для каждой зоны добавляется проверка окна по барам:
|
||
|
|
|
||
|
|
```
|
||
|
|
int right_edge = (zone.end_bar == -1) ? 0 : zone.end_bar;
|
||
|
|
bool in_window = (m_hist_bars == 0)
|
||
|
|
? (zone.end_bar == -1) // 0 = только активные
|
||
|
|
: (right_edge <= m_hist_bars);
|
||
|
|
```
|
||
|
|
|
||
|
|
Проверка добавляется к существующим фильтрам (trend_only, eq_filter).
|
||
|
|
|
||
|
|
### 5. UpdateBar0()
|
||
|
|
|
||
|
|
Без изменений — работает только с активными зонами (всегда в окне).
|
||
|
|
|
||
|
|
## Изменения в .mq5
|
||
|
|
|
||
|
|
- Комментарий инпута: `"Кол-во исторических зон"` → `"Глубина истории FVG (бары, 0=только активные)"`
|
||
|
|
|
||
|
|
## Хранение
|
||
|
|
|
||
|
|
- Фиксированная ёмкость `FVG_MAX_STORAGE = 50` на каждый из 4 типов зон
|
||
|
|
- PruneOldZones обрезает по ёмкости хранилища (50), не по параметру
|
||
|
|
- ObjectDelete вызывается при вытеснении старой зоны (утечки объектов нет)
|