493 lines
24 KiB
Markdown
493 lines
24 KiB
Markdown
|
|
# Ind_Aleks_ICT_Entry_V2_TS_Indie — API для советника
|
||
|
|
|
||
|
|
Справочный файл для разработки Expert Advisor (EA), использующего данный индикатор.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 1. Общее описание
|
||
|
|
|
||
|
|
**ICT Entry Indicator** — чартовый индикатор MQL5, реализующий методологию ICT (Inner Circle Trading).
|
||
|
|
Определяет рыночную структуру, ключевые уровни и зоны для входа в сделку.
|
||
|
|
|
||
|
|
**Что индикатор предоставляет:**
|
||
|
|
- Свинги двух типов (Liquidity и Structure)
|
||
|
|
- ZigZag линию по Liquidity Swings
|
||
|
|
- BOS (Break of Structure) и MSS (Market Structure Shift)
|
||
|
|
- Направление тренда (бычий/медвежий)
|
||
|
|
- Уровни ликвидности (Supply/Demand) + sweep detection
|
||
|
|
- FVG (Fair Value Gap) и iFVG (Inverted FVG) зоны
|
||
|
|
- Equilibrium / Premium / Discount зоны
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 2. Подключение индикатора из EA
|
||
|
|
|
||
|
|
### Создание хэндла
|
||
|
|
|
||
|
|
```mql5
|
||
|
|
int g_ict_handle;
|
||
|
|
|
||
|
|
int OnInit()
|
||
|
|
{
|
||
|
|
g_ict_handle = iCustom(
|
||
|
|
_Symbol, _Period,
|
||
|
|
"\\Shared Projects\\Ind_Aleks_ICT_Entry_V2_TS_Indie\\Ind_Aleks_ICT_Entry_V2_TS_Indie",
|
||
|
|
// --- Основные параметры ---
|
||
|
|
5, // inp_len — Сила пивота Liquidity Swings (default: 5)
|
||
|
|
10, // inp_len_in — Сила пивота Structure Swings (default: 10)
|
||
|
|
"Close", // inp_valid_con — Метод валидации pullback: "Close" / "High/Low"
|
||
|
|
2000, // inp_calc_bars — Баров для расчёта (0 = все)
|
||
|
|
true, // inp_follow_trend — Фильтрация по тренду
|
||
|
|
// --- ZigZag и Liquidity Swings ---
|
||
|
|
clrNONE, // inp_zz_col
|
||
|
|
STYLE_DOT, // inp_zz_style
|
||
|
|
1, // inp_zz_width
|
||
|
|
clrRed, // inp_lsw_col
|
||
|
|
1, // inp_lsw_size
|
||
|
|
// --- Structure Swings ---
|
||
|
|
clrDodgerBlue, // inp_ssw_col
|
||
|
|
4, // inp_ssw_size
|
||
|
|
// --- BOS / MSS ---
|
||
|
|
clrDodgerBlue, // inp_bos_up_col
|
||
|
|
clrCoral, // inp_bos_dn_col
|
||
|
|
STYLE_DOT, // inp_bos_style
|
||
|
|
1, // inp_bos_width
|
||
|
|
clrDodgerBlue, // inp_mss_up_col
|
||
|
|
clrCoral, // inp_mss_dn_col
|
||
|
|
STYLE_DASH, // inp_mss_style
|
||
|
|
1, // inp_mss_width
|
||
|
|
// --- Уровни ликвидности ---
|
||
|
|
false, // inp_show_lid
|
||
|
|
clrGreen, // inp_lid_col
|
||
|
|
1, // inp_lid_size1
|
||
|
|
1, // inp_lid_size2
|
||
|
|
// --- Equilibrium / Premium / Discount ---
|
||
|
|
50, // inp_pre_dis — % первого уровня
|
||
|
|
80, // inp_pre_dis2 — % второго уровня
|
||
|
|
false, // inp_eq_con — Включить фильтрацию зон
|
||
|
|
clrOrchid, // inp_eq_col
|
||
|
|
STYLE_DASH, // inp_eq_style
|
||
|
|
1, // inp_eq_width
|
||
|
|
clrPurple, // inp_pd_col
|
||
|
|
STYLE_DOT, // inp_pd_style
|
||
|
|
1, // inp_pd_width
|
||
|
|
// --- FVG / iFVG ---
|
||
|
|
500, // inp_qty_fvg_hist — Глубина истории FVG (бары)
|
||
|
|
clrDeepSkyBlue, // inp_fvg_obj_col
|
||
|
|
clrNONE, // inp_fvg_buf_col
|
||
|
|
clrDodgerBlue, // inp_ifvg_obj_col
|
||
|
|
clrNONE, // inp_ifvg_buf_col
|
||
|
|
true, // inp_show_fvg
|
||
|
|
false, // inp_show_ifvg
|
||
|
|
true, // inp_fvg_trend_only
|
||
|
|
false, // inp_fvg_eq_filter
|
||
|
|
false, // inp_fvg_eq_strict
|
||
|
|
false // inp_fvg_eq_use_lvl2
|
||
|
|
);
|
||
|
|
|
||
|
|
if(g_ict_handle == INVALID_HANDLE)
|
||
|
|
{
|
||
|
|
Print("Ошибка создания хэндла индикатора ICT Entry!");
|
||
|
|
return INIT_FAILED;
|
||
|
|
}
|
||
|
|
return INIT_SUCCEEDED;
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
### Чтение буферов
|
||
|
|
|
||
|
|
```mql5
|
||
|
|
double buf[];
|
||
|
|
ArraySetAsSeries(buf, true);
|
||
|
|
|
||
|
|
// Пример: прочитать буфер тренда (индекс 28) за 3 последних бара
|
||
|
|
if(CopyBuffer(g_ict_handle, 28, 0, 3, buf) > 0)
|
||
|
|
{
|
||
|
|
double trend_now = buf[0]; // текущий бар
|
||
|
|
double trend_prev = buf[1]; // предыдущий (подтверждённый) бар
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
**ВАЖНО:** Индикатор считает данные побарно. Значения на `bar[0]` (текущий) обновляются каждый тик, но **подтверждённые** данные — на `bar[1]` и старше. Для торговых решений рекомендуется использовать `bar[1]`.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 3. Карта буферов (buffer index → данные)
|
||
|
|
|
||
|
|
Всего **29 буферов**: 20 INDICATOR_DATA + 9 INDICATOR_CALCULATIONS.
|
||
|
|
|
||
|
|
### 3.1. Визуальные буферы (INDICATOR_DATA) — plots 0-17
|
||
|
|
|
||
|
|
| Buffer Index | Имя | Тип отрисовки | Описание |
|
||
|
|
|:---:|------|:---:|------|
|
||
|
|
| **0** | ZigZag | DRAW_SECTION | ZigZag линия по Liquidity Swings. Значение = цена точки свинга, `EMPTY_VALUE` = пропуск |
|
||
|
|
| **1** | LiquiditySwing | DRAW_ARROW (159) | Точки Liquidity Swing (ромбики). High/Low пивоты силы 5 |
|
||
|
|
| **2** | StructureSwing | DRAW_ARROW (159) | Точки Structure Swing (ромбики). High/Low пивоты силы 10 |
|
||
|
|
| **3** | Liquidity_Up1 | DRAW_ARROW (158) | Ближайший Supply уровень ликвидности (Swing High) |
|
||
|
|
| **4** | Liquidity_Dn1 | DRAW_ARROW (158) | Ближайший Demand уровень ликвидности (Swing Low) |
|
||
|
|
| **5** | Liquidity_Up2 | DRAW_ARROW (158) | 2-й Supply уровень |
|
||
|
|
| **6** | Liquidity_Up3 | DRAW_ARROW (158) | 3-й Supply уровень |
|
||
|
|
| **7** | Liquidity_Dn2 | DRAW_ARROW (158) | 2-й Demand уровень |
|
||
|
|
| **8** | Liquidity_Dn3 | DRAW_ARROW (158) | 3-й Demand уровень |
|
||
|
|
| **9** | BOS_Up | DRAW_LINE | Break of Structure вверх (продолжение бычьего тренда) |
|
||
|
|
| **10** | BOS_Dn | DRAW_LINE | Break of Structure вниз (продолжение медвежьего тренда) |
|
||
|
|
| **11** | MSS_Up | DRAW_LINE | Market Structure Shift вверх (смена тренда на бычий) |
|
||
|
|
| **12** | MSS_Dn | DRAW_LINE | Market Structure Shift вниз (смена тренда на медвежий) |
|
||
|
|
| **13** | Equilibrium | DRAW_LINE | Уровень Equilibrium (50% диапазона structure swings) |
|
||
|
|
| **14** | Premium2 | DRAW_LINE | Уровень Premium зоны (2-й уровень, default 80%) |
|
||
|
|
| **15** | Discount2 | DRAW_LINE | Уровень Discount зоны (2-й уровень, default 80%) |
|
||
|
|
| **16, 17** | FVG_Top, FVG_Bot | DRAW_FILLING (plot 16) | FVG зона: Top=верхняя граница, Bot=нижняя. `0.0` = нет зоны |
|
||
|
|
| **18, 19** | iFVG_Top, iFVG_Bot | DRAW_FILLING (plot 17) | iFVG зона (инверсия FVG). `0.0` = нет зоны |
|
||
|
|
|
||
|
|
**Пустые значения:**
|
||
|
|
- Буферы 0-15: `EMPTY_VALUE` (DBL_MAX) = нет данных
|
||
|
|
- Буферы 16-19 (FVG/iFVG): `0.0` = нет зоны, ненулевое = зона активна
|
||
|
|
|
||
|
|
### 3.2. Расчётные буферы (INDICATOR_CALCULATIONS)
|
||
|
|
|
||
|
|
| Buffer Index | Имя | Описание |
|
||
|
|
|:---:|------|------|
|
||
|
|
| **20** | CalcSsHigh | Промежуточный максимум (ss_high) для Liquidity Swings |
|
||
|
|
| **21** | CalcSsLow | Промежуточный минимум (ss_low) для Liquidity Swings |
|
||
|
|
| **22** | CalcBswHigh | Бар промежуточного максимума |
|
||
|
|
| **23** | CalcBswLow | Бар промежуточного минимума |
|
||
|
|
| **24** | CalcSwHigh | Текущий Swing High значение |
|
||
|
|
| **25** | CalcSwLow | Текущий Swing Low значение |
|
||
|
|
| **26** | CalcBarSwHigh | Бар текущего Swing High |
|
||
|
|
| **27** | CalcBarSwLow | Бар текущего Swing Low |
|
||
|
|
| **28** | CalcDirBig | **Направление тренда**: `1.0`=бычий, `-1.0`=медвежий, `0.0`=не определён |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 4. Ключевые буферы для торговых решений
|
||
|
|
|
||
|
|
### 4.1. Тренд (буфер 28 — CalcDirBig)
|
||
|
|
|
||
|
|
Самый важный буфер для EA. Определяет глобальное направление тренда.
|
||
|
|
|
||
|
|
```mql5
|
||
|
|
double trend[];
|
||
|
|
ArraySetAsSeries(trend, true);
|
||
|
|
CopyBuffer(g_ict_handle, 28, 0, 3, trend);
|
||
|
|
|
||
|
|
int current_trend = (int)trend[1]; // подтверждённый тренд
|
||
|
|
// 1 = бычий (ищем Buy)
|
||
|
|
// -1 = медвежий (ищем Sell)
|
||
|
|
// 0 = не определён (ждём)
|
||
|
|
```
|
||
|
|
|
||
|
|
**Логика смены тренда:**
|
||
|
|
- BOS_Up (буфер 9) → подтверждение бычьего тренда (продолжение)
|
||
|
|
- BOS_Dn (буфер 10) → подтверждение медвежьего тренда (продолжение)
|
||
|
|
- MSS_Up (буфер 11) → **смена** тренда на бычий (контртренд → тренд)
|
||
|
|
- MSS_Dn (буфер 12) → **смена** тренда на медвежий (контртренд → тренд)
|
||
|
|
|
||
|
|
### 4.2. BOS/MSS (буферы 9-12)
|
||
|
|
|
||
|
|
Горизонтальные уровни пробоя структуры. Значение = цена уровня, `EMPTY_VALUE` = нет события.
|
||
|
|
|
||
|
|
```mql5
|
||
|
|
double bos_up[], bos_dn[], mss_up[], mss_dn[];
|
||
|
|
ArraySetAsSeries(bos_up, true);
|
||
|
|
ArraySetAsSeries(bos_dn, true);
|
||
|
|
ArraySetAsSeries(mss_up, true);
|
||
|
|
ArraySetAsSeries(mss_dn, true);
|
||
|
|
CopyBuffer(g_ict_handle, 9, 0, 3, bos_up);
|
||
|
|
CopyBuffer(g_ict_handle, 10, 0, 3, bos_dn);
|
||
|
|
CopyBuffer(g_ict_handle, 11, 0, 3, mss_up);
|
||
|
|
CopyBuffer(g_ict_handle, 12, 0, 3, mss_dn);
|
||
|
|
|
||
|
|
// Проверка: произошёл ли BOS/MSS на подтверждённом баре
|
||
|
|
bool has_bos_up = (bos_up[1] != EMPTY_VALUE);
|
||
|
|
bool has_mss_up = (mss_up[1] != EMPTY_VALUE);
|
||
|
|
```
|
||
|
|
|
||
|
|
**Важно:** BOS/MSS буферы показывают **пробитые** уровни. Линия рисуется от бара структурного свинга до бара пробоя. Непробитые (текущие) уровни тоже рисуются через эти буферы (Step 12 логика), пока не произойдёт пробой.
|
||
|
|
|
||
|
|
### 4.3. Уровни ликвидности (буферы 3-8)
|
||
|
|
|
||
|
|
3 ближайших уровня Supply (сверху) и 3 ближайших Demand (снизу).
|
||
|
|
|
||
|
|
```mql5
|
||
|
|
double sup1[], sup2[], sup3[]; // Supply (сопротивление)
|
||
|
|
double dem1[], dem2[], dem3[]; // Demand (поддержка)
|
||
|
|
ArraySetAsSeries(sup1, true); ArraySetAsSeries(dem1, true);
|
||
|
|
// ... SetAsSeries для остальных
|
||
|
|
|
||
|
|
CopyBuffer(g_ict_handle, 3, 0, 3, sup1); // Ближайший Supply
|
||
|
|
CopyBuffer(g_ict_handle, 4, 0, 3, dem1); // Ближайший Demand
|
||
|
|
CopyBuffer(g_ict_handle, 5, 0, 3, sup2); // 2-й Supply
|
||
|
|
CopyBuffer(g_ict_handle, 6, 0, 3, sup3); // 3-й Supply
|
||
|
|
CopyBuffer(g_ict_handle, 7, 0, 3, dem2); // 2-й Demand
|
||
|
|
CopyBuffer(g_ict_handle, 8, 0, 3, dem3); // 3-й Demand
|
||
|
|
```
|
||
|
|
|
||
|
|
Уровни обновляются побарно. `EMPTY_VALUE` = уровень отсутствует.
|
||
|
|
Когда цена пробивает уровень (sweep), он удаляется и заменяется следующим.
|
||
|
|
|
||
|
|
### 4.4. Equilibrium / Premium / Discount (буферы 13-15)
|
||
|
|
|
||
|
|
```mql5
|
||
|
|
double eq[], prem2[], disc2[];
|
||
|
|
ArraySetAsSeries(eq, true);
|
||
|
|
ArraySetAsSeries(prem2, true);
|
||
|
|
ArraySetAsSeries(disc2, true);
|
||
|
|
CopyBuffer(g_ict_handle, 13, 0, 3, eq); // Equilibrium (50%)
|
||
|
|
CopyBuffer(g_ict_handle, 14, 0, 3, prem2); // Premium2 (80%)
|
||
|
|
CopyBuffer(g_ict_handle, 15, 0, 3, disc2); // Discount2 (80%)
|
||
|
|
```
|
||
|
|
|
||
|
|
- **Equilibrium** — 50% уровень между Structure High и Structure Low
|
||
|
|
- **Premium** — зона выше Equilibrium (перекупленность → ищем Sell)
|
||
|
|
- **Discount** — зона ниже Equilibrium (перепроданность → ищем Buy)
|
||
|
|
- Premium2/Discount2 — более экстремальные зоны (настраивается через inp_pre_dis2, default 80%)
|
||
|
|
|
||
|
|
### 4.5. FVG / iFVG зоны (буферы 16-19)
|
||
|
|
|
||
|
|
```mql5
|
||
|
|
double fvg_top[], fvg_bot[], ifvg_top[], ifvg_bot[];
|
||
|
|
ArraySetAsSeries(fvg_top, true); ArraySetAsSeries(fvg_bot, true);
|
||
|
|
ArraySetAsSeries(ifvg_top, true); ArraySetAsSeries(ifvg_bot, true);
|
||
|
|
CopyBuffer(g_ict_handle, 16, 0, 3, fvg_top);
|
||
|
|
CopyBuffer(g_ict_handle, 17, 0, 3, fvg_bot);
|
||
|
|
CopyBuffer(g_ict_handle, 18, 0, 3, ifvg_top);
|
||
|
|
CopyBuffer(g_ict_handle, 19, 0, 3, ifvg_bot);
|
||
|
|
|
||
|
|
// Проверка: есть ли FVG зона на текущем баре
|
||
|
|
bool has_fvg = (fvg_top[1] != 0.0 && fvg_bot[1] != 0.0);
|
||
|
|
if(has_fvg)
|
||
|
|
{
|
||
|
|
double zone_top = fvg_top[1];
|
||
|
|
double zone_bot = fvg_bot[1];
|
||
|
|
// Зона между zone_bot и zone_top
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
**FVG (Fair Value Gap)** — ценовой разрыв из 3 баров:
|
||
|
|
- Demand FVG: `low[bar] > high[bar+2]` (зазор вверх, цена ещё вернётся)
|
||
|
|
- Supply FVG: `high[bar] < low[bar+2]` (зазор вниз, цена ещё вернётся)
|
||
|
|
|
||
|
|
**iFVG (Inverted FVG)** — FVG, через которую цена прошла **закрытием** (не фитилём), меняя полярность:
|
||
|
|
- Supply FVG → Demand iFVG (close > fvg_top)
|
||
|
|
- Demand FVG → Supply iFVG (close < fvg_bot)
|
||
|
|
|
||
|
|
**Митигация:** зона закрывается когда цена полностью проходит через неё.
|
||
|
|
|
||
|
|
### 4.6. Свинги (буферы 0-2, 20-27)
|
||
|
|
|
||
|
|
```mql5
|
||
|
|
double zigzag[], liq_swing[], str_swing[];
|
||
|
|
ArraySetAsSeries(zigzag, true);
|
||
|
|
ArraySetAsSeries(liq_swing, true);
|
||
|
|
ArraySetAsSeries(str_swing, true);
|
||
|
|
CopyBuffer(g_ict_handle, 0, 0, 100, zigzag); // ZigZag
|
||
|
|
CopyBuffer(g_ict_handle, 1, 0, 100, liq_swing); // Liquidity Swing точки
|
||
|
|
CopyBuffer(g_ict_handle, 2, 0, 100, str_swing); // Structure Swing точки
|
||
|
|
|
||
|
|
// Текущие значения свингов
|
||
|
|
double sw_high[], sw_low[];
|
||
|
|
ArraySetAsSeries(sw_high, true);
|
||
|
|
ArraySetAsSeries(sw_low, true);
|
||
|
|
CopyBuffer(g_ict_handle, 24, 0, 3, sw_high); // CalcSwHigh
|
||
|
|
CopyBuffer(g_ict_handle, 25, 0, 3, sw_low); // CalcSwLow
|
||
|
|
```
|
||
|
|
|
||
|
|
**Два типа свингов:**
|
||
|
|
- **Liquidity Swings** (сила=5) — более частые, определяют уровни ликвидности и ZigZag
|
||
|
|
- **Structure Swings** (сила=10) — менее частые, определяют BOS/MSS и тренд
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 5. Концептуальная модель ICT Entry
|
||
|
|
|
||
|
|
### Поток сигнала для Buy (бычий):
|
||
|
|
|
||
|
|
```
|
||
|
|
1. Liquidity Sweep (Demand) → цена пробила уровень поддержки и вернулась
|
||
|
|
2. Тренд = бычий (in_dir_big=1) → подтверждено через Structure Swings
|
||
|
|
3. iFVG (Demand) существует → зона инверсии (поддержка)
|
||
|
|
4. Цена в Discount зоне → ниже Equilibrium (выгодная цена)
|
||
|
|
5. → BUY сигнал
|
||
|
|
```
|
||
|
|
|
||
|
|
### Поток сигнала для Sell (медвежий):
|
||
|
|
|
||
|
|
```
|
||
|
|
1. Liquidity Sweep (Supply) → цена пробила уровень сопротивления и вернулась
|
||
|
|
2. Тренд = медвежий (in_dir_big=-1)
|
||
|
|
3. iFVG (Supply) существует → зона инверсии (сопротивление)
|
||
|
|
4. Цена в Premium зоне → выше Equilibrium (невыгодная цена)
|
||
|
|
5. → SELL сигнал
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 6. Пример: минимальная интеграция в EA
|
||
|
|
|
||
|
|
```mql5
|
||
|
|
// В OnTick():
|
||
|
|
double trend_buf[2], eq_buf[2], fvg_top_buf[2], fvg_bot_buf[2];
|
||
|
|
double ifvg_top_buf[2], ifvg_bot_buf[2], sup1_buf[2], dem1_buf[2];
|
||
|
|
|
||
|
|
ArraySetAsSeries(trend_buf, true);
|
||
|
|
ArraySetAsSeries(eq_buf, true);
|
||
|
|
ArraySetAsSeries(fvg_top_buf, true);
|
||
|
|
ArraySetAsSeries(fvg_bot_buf, true);
|
||
|
|
ArraySetAsSeries(ifvg_top_buf, true);
|
||
|
|
ArraySetAsSeries(ifvg_bot_buf, true);
|
||
|
|
ArraySetAsSeries(sup1_buf, true);
|
||
|
|
ArraySetAsSeries(dem1_buf, true);
|
||
|
|
|
||
|
|
// Читаем ключевые буферы (bar 1 = подтверждённый)
|
||
|
|
CopyBuffer(g_ict_handle, 28, 0, 2, trend_buf); // Тренд
|
||
|
|
CopyBuffer(g_ict_handle, 13, 0, 2, eq_buf); // Equilibrium
|
||
|
|
CopyBuffer(g_ict_handle, 16, 0, 2, fvg_top_buf); // FVG Top
|
||
|
|
CopyBuffer(g_ict_handle, 17, 0, 2, fvg_bot_buf); // FVG Bot
|
||
|
|
CopyBuffer(g_ict_handle, 18, 0, 2, ifvg_top_buf); // iFVG Top
|
||
|
|
CopyBuffer(g_ict_handle, 19, 0, 2, ifvg_bot_buf); // iFVG Bot
|
||
|
|
CopyBuffer(g_ict_handle, 3, 0, 2, sup1_buf); // Supply 1
|
||
|
|
CopyBuffer(g_ict_handle, 4, 0, 2, dem1_buf); // Demand 1
|
||
|
|
|
||
|
|
int trend = (int)trend_buf[1];
|
||
|
|
double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
|
||
|
|
double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID);
|
||
|
|
|
||
|
|
// Пример простой логики Buy:
|
||
|
|
bool bullish = (trend == 1);
|
||
|
|
bool has_ifvg_buy = (ifvg_top_buf[1] != 0.0);
|
||
|
|
bool in_discount = (eq_buf[1] != EMPTY_VALUE && ask < eq_buf[1]);
|
||
|
|
|
||
|
|
if(bullish && has_ifvg_buy && in_discount)
|
||
|
|
{
|
||
|
|
// Проверить зону входа: цена внутри iFVG
|
||
|
|
if(ask >= ifvg_bot_buf[1] && ask <= ifvg_top_buf[1])
|
||
|
|
{
|
||
|
|
// BUY сигнал!
|
||
|
|
}
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 7. Важные нюансы
|
||
|
|
|
||
|
|
### 7.1. AS_SERIES
|
||
|
|
|
||
|
|
Все буферы индикатора используют `AS_SERIES = true`:
|
||
|
|
- Индекс `0` = текущий (live) бар
|
||
|
|
- Индекс `1` = последний закрытый (подтверждённый) бар
|
||
|
|
- Индекс `N` = N баров назад
|
||
|
|
|
||
|
|
При `CopyBuffer` с `ArraySetAsSeries(buf, true)` сохраняется та же нумерация.
|
||
|
|
|
||
|
|
### 7.2. Подтверждённые vs live данные
|
||
|
|
|
||
|
|
- `bar[0]` — обновляется каждый тик, данные могут измениться
|
||
|
|
- `bar[1]` — подтверждён при закрытии, стабилен
|
||
|
|
- Для торговых решений используйте `bar[1]`
|
||
|
|
- Для отображения/мониторинга можно использовать `bar[0]`
|
||
|
|
|
||
|
|
### 7.3. Пустые значения
|
||
|
|
|
||
|
|
| Буферы | Пустое значение | Значение |
|
||
|
|
|--------|:---:|------|
|
||
|
|
| 0-15 (линии, стрелки) | `EMPTY_VALUE` (DBL_MAX) | Нет данных на этом баре |
|
||
|
|
| 16-19 (FVG filling) | `0.0` | Нет зоны на этом баре |
|
||
|
|
|
||
|
|
### 7.4. Timing расчёта
|
||
|
|
|
||
|
|
Индикатор рассчитывает:
|
||
|
|
- **Полный пересчёт** при первом запуске или смене таймфрейма
|
||
|
|
- **Инкрементальный** при новом баре (только `bar=1`)
|
||
|
|
- **UpdateBar0** каждый тик (FVG зоны на live баре)
|
||
|
|
|
||
|
|
Свинги подтверждаются с задержкой в `strength` баров (5 для Liquidity, 10 для Structure).
|
||
|
|
|
||
|
|
### 7.5. Таймфрейм
|
||
|
|
|
||
|
|
Индикатор работает на любом таймфрейме. Рекомендуется использовать тот же таймфрейм в EA, что и на графике.
|
||
|
|
|
||
|
|
### 7.6. Мультитаймфрейм
|
||
|
|
|
||
|
|
Для MTF-анализа создайте несколько хэндлов:
|
||
|
|
|
||
|
|
```mql5
|
||
|
|
int h_m15 = iCustom(_Symbol, PERIOD_M15, "\\Shared Projects\\...", ...);
|
||
|
|
int h_h1 = iCustom(_Symbol, PERIOD_H1, "\\Shared Projects\\...", ...);
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 8. Краткая таблица: какой буфер для какой задачи
|
||
|
|
|
||
|
|
| Задача | Буфер(ы) | Индекс |
|
||
|
|
|--------|----------|:---:|
|
||
|
|
| Определить тренд | CalcDirBig | **28** |
|
||
|
|
| Найти ближайшее сопротивление | Liquidity_Up1 | **3** |
|
||
|
|
| Найти ближайшую поддержку | Liquidity_Dn1 | **4** |
|
||
|
|
| Обнаружить пробой структуры вверх | BOS_Up | **9** |
|
||
|
|
| Обнаружить пробой структуры вниз | BOS_Dn | **10** |
|
||
|
|
| Обнаружить смену тренда вверх | MSS_Up | **11** |
|
||
|
|
| Обнаружить смену тренда вниз | MSS_Dn | **12** |
|
||
|
|
| Определить зону Equilibrium | Equilibrium | **13** |
|
||
|
|
| Определить Premium зону | Premium2 | **14** |
|
||
|
|
| Определить Discount зону | Discount2 | **15** |
|
||
|
|
| Найти зону FVG | FVG_Top + FVG_Bot | **16, 17** |
|
||
|
|
| Найти зону iFVG | iFVG_Top + iFVG_Bot | **18, 19** |
|
||
|
|
| Текущий Swing High | CalcSwHigh | **24** |
|
||
|
|
| Текущий Swing Low | CalcSwLow | **25** |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 9. Input-параметры (полный список)
|
||
|
|
|
||
|
|
Параметры передаются в `iCustom()` в порядке их объявления:
|
||
|
|
|
||
|
|
| # | Параметр | Тип | Default | Описание |
|
||
|
|
|---|----------|-----|---------|----------|
|
||
|
|
| 1 | `inp_len` | int | 5 | Сила пивота Liquidity Swings |
|
||
|
|
| 2 | `inp_len_in` | int | 10 | Сила пивота Structure Swings |
|
||
|
|
| 3 | `inp_valid_con` | string | "Close" | Метод валидации pullback |
|
||
|
|
| 4 | `inp_calc_bars` | int | 2000 | Баров для расчёта |
|
||
|
|
| 5 | `inp_follow_trend` | bool | true | Фильтрация по тренду |
|
||
|
|
| 6 | `inp_zz_col` | color | clrNONE | Цвет ZigZag |
|
||
|
|
| 7 | `inp_zz_style` | ENUM_LINE_STYLE | STYLE_DOT | Стиль ZigZag |
|
||
|
|
| 8 | `inp_zz_width` | int | 1 | Толщина ZigZag |
|
||
|
|
| 9 | `inp_lsw_col` | color | clrRed | Цвет Liquidity Swing |
|
||
|
|
| 10 | `inp_lsw_size` | int | 1 | Размер Liquidity Swing |
|
||
|
|
| 11 | `inp_ssw_col` | color | clrDodgerBlue | Цвет Structure Swing |
|
||
|
|
| 12 | `inp_ssw_size` | int | 4 | Размер Structure Swing |
|
||
|
|
| 13 | `inp_bos_up_col` | color | clrDodgerBlue | Цвет BOS вверх |
|
||
|
|
| 14 | `inp_bos_dn_col` | color | clrCoral | Цвет BOS вниз |
|
||
|
|
| 15 | `inp_bos_style` | ENUM_LINE_STYLE | STYLE_DOT | Стиль BOS |
|
||
|
|
| 16 | `inp_bos_width` | int | 1 | Толщина BOS |
|
||
|
|
| 17 | `inp_mss_up_col` | color | clrDodgerBlue | Цвет MSS вверх |
|
||
|
|
| 18 | `inp_mss_dn_col` | color | clrCoral | Цвет MSS вниз |
|
||
|
|
| 19 | `inp_mss_style` | ENUM_LINE_STYLE | STYLE_DASH | Стиль MSS |
|
||
|
|
| 20 | `inp_mss_width` | int | 1 | Толщина MSS |
|
||
|
|
| 21 | `inp_show_lid` | bool | false | Показывать уровни ликвидности |
|
||
|
|
| 22 | `inp_lid_col` | color | clrGreen | Цвет ликвидности |
|
||
|
|
| 23 | `inp_lid_size1` | int | 1 | Размер ближайшего уровня |
|
||
|
|
| 24 | `inp_lid_size2` | int | 1 | Размер 2-3 уровней |
|
||
|
|
| 25 | `inp_pre_dis` | int | 50 | Premium/Discount % |
|
||
|
|
| 26 | `inp_pre_dis2` | int | 80 | Premium/Discount 2-й уровень % |
|
||
|
|
| 27 | `inp_eq_con` | bool | false | Фильтрация по зонам |
|
||
|
|
| 28 | `inp_eq_col` | color | clrOrchid | Цвет Equilibrium |
|
||
|
|
| 29 | `inp_eq_style` | ENUM_LINE_STYLE | STYLE_DASH | Стиль Equilibrium |
|
||
|
|
| 30 | `inp_eq_width` | int | 1 | Толщина Equilibrium |
|
||
|
|
| 31 | `inp_pd_col` | color | clrPurple | Цвет Premium/Discount |
|
||
|
|
| 32 | `inp_pd_style` | ENUM_LINE_STYLE | STYLE_DOT | Стиль Premium/Discount |
|
||
|
|
| 33 | `inp_pd_width` | int | 1 | Толщина Premium/Discount |
|
||
|
|
| 34 | `inp_qty_fvg_hist` | int | 500 | Глубина истории FVG (бары) |
|
||
|
|
| 35 | `inp_fvg_obj_col` | color | clrDeepSkyBlue | Цвет FVG объектов |
|
||
|
|
| 36 | `inp_fvg_buf_col` | color | clrNONE | Цвет FVG буферов |
|
||
|
|
| 37 | `inp_ifvg_obj_col` | color | clrDodgerBlue | Цвет iFVG объектов |
|
||
|
|
| 38 | `inp_ifvg_buf_col` | color | clrNONE | Цвет iFVG буферов |
|
||
|
|
| 39 | `inp_show_fvg` | bool | true | Показывать FVG |
|
||
|
|
| 40 | `inp_show_ifvg` | bool | false | Показывать iFVG |
|
||
|
|
| 41 | `inp_fvg_trend_only` | bool | true | Только зоны по тренду |
|
||
|
|
| 42 | `inp_fvg_eq_filter` | bool | false | Фильтр FVG по Equilibrium |
|
||
|
|
| 43 | `inp_fvg_eq_strict` | bool | false | Строгий режим фильтра |
|
||
|
|
| 44 | `inp_fvg_eq_use_lvl2` | bool | false | Использовать 2-й уровень |
|
||
|
|
|
||
|
|
**Примечание:** при использовании из EA визуальные параметры (цвета, стили, толщины) можно оставить по умолчанию — они влияют только на отображение на графике, не на данные буферов.
|