# HyperICT
Expert Advisor **chỉ đọc cấu trúc thị trường HTF** (Higher Timeframe): swing H0–L1, Key Level, vùng cung/cầu (Order Block), trạng thái Pullback / CHoCH / Continue. **Không đặt lệnh.**
Phiên bản hiện tại: **0.11**
---
## Mục lục
1. [Cấu trúc thư mục](#folder-structure)
2. [Logic nghiệp vụ](#business-logic)
3. [Mô tả từng file](#file-reference)
4. [Luồng chạy (pipeline)](#pipeline)
5. [Cài đặt & sử dụng](#installation)
6. [Tham số input](#inputs)
7. [Trạng thái hiển thị](#display-states)
8. [API mở rộng](#api)
9. [Giới hạn & hướng phát triển](#roadmap)
10. [Map spec → module](#spec-map)
---
## Cấu trúc thư mục
```
MQL5/
├── Experts/
│ └── HyperICT.mq5 ← EA chính (OnInit / OnTick)
│
└── Include/
└── HyperICT/
├── README.md ← tài liệu này
├── Types.mqh ← enum, struct
├── Config.mqh ← input
├── FibValidator.mqh ← Fib 0.382 (chỉ tiên quyết)
├── SwingEngine.mqh ← pivot, snapshot, roll swing
├── KeyLevels.mqh ← Key LV1/L2, OB, body break
├── Classifier.mqh ← 7+ trạng thái trend
├── UpdateEngine.mqh ← §1.4 CHoCH / Continue
├── StateMachine.mqh ← pipeline điều phối
├── Draw.mqh ← vẽ chart
└── Panel.mqh ← panel góc chart
```
**Include trong code:** `#include `
---
## Logic nghiệp vụ
### Điều kiện tiên quyết (chỉ lúc xác định trend)
| Xu hướng | Cấu trúc | Fib |
|----------|---------|-----|
| **Bull** | HH-HL (`H0>H1` và `L0>L1`) | Sóng hồi **H1→L0** ≥ **38.2%** sóng **L1→H1** |
| **Bear** | LH-LL | Cùng công thức Fib |
- **Fib fail** → state `BULL/BEAR (Fib pending)` — *không* coi là Neutral.
- **Neutral** chỉ khi không đủ 4 swing hoặc cấu trúc không HH-HL / LH-LL.
### Swing H0, H1, L0, L1 (ghép theo leg — không lấy 2 đỉnh + 2 đáy tách rời)
Trên HTF, pivot được gán sao cho **Key LV1 tạo ra Key LV2** (đúng thứ tự thời gian):
| Bias | Key LV1 | Key LV2 | Cách gán |
|------|---------|---------|----------|
| **Bear** | **H0** = Key LV1 (đỉnh trước L0) | **L0** = Key LV2 | Thời gian: **H1 → L1 → H0 → L0** |
| **Bull** | **L0** = Key LV1 (đáy trước H0) | **H0** = Key LV2 | Thời gian: **L1 → H1 → L0 → H0** |
Gán pivot: từ L0/H0 gần nhất, lùi từng bước tới pivot cũ **kề** (không nhảy tới đỉnh/đáy xa hơn).
- **Đỉnh/đáy hình thành sau Key LV2** (ví dụ đỉnh nhỏ sau L0 trong bear) **không** gán là H0 — thuộc `newH0` / `UpdateEngine` §1.4.
- **Khóa snapshot** khi bot chạy — chỉ đổi khi phá Key (§1.4).
### Key Level (§1.2)
| Bias | Key LV1 | Key LV2 | Vùng cung | Vùng cầu |
|------|---------|---------|-----------|----------|
| Bull | **L0** | **H0** (= đỉnh cao nhất L0→H0) | L0 → high nến đỏ OB | H0 → low nến xanh OB |
| Bear | **H0** | **L0** | (đối xứng) | (đối xứng) |
- **Phá Key** = thân nến (`max/min` open–close) trên bar HTF **đã đóng** (shift 1).
- Phá **Key LV1** → tín hiệu **CHoCH**.
- Phá **Key LV2** → tín hiệu **Trend Continue**.
### Trạng thái trend (§1.1)
| State | Điều kiện chính |
|-------|-----------------|
| **Bull Pullback** | Fib OK + giá giữa L0–H0 |
| **Bull CHoCH** | Body phá dưới L0, hoặc đang xử lý §1.4 CHoCH |
| **Bull Continue** | Body phá trên H0 / đang tạo newH0 |
| **Bear Pullback / CHoCH / Continue** | Đối xứng |
| **Neutral** | Không phân loại được cấu trúc |
### Cập nhật sau phá Key (§1.4) — không quét lại full history
**Xác nhận đỉnh/đáy mới:** dùng `InpSwingRange` (pivot đủ N nến mỗi bên). **Không** dùng Fib trong giai đoạn này.
#### Bull Continue (phá H0)
1. **P1:** Body phá H0 → track `newH0` (nến xanh, high cao hơn), `newL0` (đáy impulse).
2. **P2:** Hồi đủ → `IsConfirmedSwingHigh(newH0)` → roll: `H0→H1`, `L0→L1`, `newH0→H0`, `newL0→L0`.
#### Bull CHoCH (phá L0)
1. **P1:** Track `newL0` (low thấp hơn).
2. **P2:** `IsConfirmedSwingLow(newL0)` **hoặc** hồi lên đủ `InpSwingRange` (swing high sau đáy) → khóa `newL0`, vào phase 3 (không kéo `newL0` nữa).
3. **P3 case 1:** Phá lên H0 → `newH0` confirm → roll bull (`L1` giữ).
4. **P3 case 2:** Body phá xuống `newL0` đã khóa → track `newH0` (confirm) → track `newL02` (confirm tuần tự) → roll bear.
Bear Continue / CHoCH: **đối xứng** với bull.
---
## Mô tả từng file
### `Experts/HyperICT.mq5`
- Entry point: khởi tạo `HtfContext`, gọi `StateMachine`, `Draw`, `Panel`.
- `OnTick`: logic HTF chỉ khi **nến HTF mới**; vẽ rectangle cập nhật mỗi tick.
- Export: `HyperICT_GetState()` cho EA khác.
### `Types.mqh`
- `ENUM_STRUCT_BIAS`, `ENUM_HTF_STATE`, `ENUM_UPDATE_EVENT`, `ENUM_UPDATE_PHASE`.
- `SwingPoint`, `SwingSet`, `OrderBlockZone`, `KeyLevelPair`, `UpdateContext`, `HtfContext`.
- Không chứa logic tính toán.
### `Config.mqh`
- Toàn bộ `input`: HTF, swing range, lookback, Fib ratio, màu vẽ, debug.
- Prefix object chart: `HICT_`.
### `FibValidator.mqh`
- `IsPullbackValid()` — H1→L0 vs L1→H1 × `InpFibMinRatio`.
- **Chỉ** dùng cho tiên quyết trend (và tính lại sau roll swing).
### `SwingEngine.mqh`
- `IsSwingHigh` / `IsSwingLow`, `CollectSwings`, `PickLastTwo`.
- `LockInitialSnapshot`, `ClassifyStructure` (HH-HL / LH-LL).
- `IsConfirmedSwingHigh/Low` — xác nhận pivot sau phá Key.
- `RollBullContinue`, `RollBullChochCase1/2`, `RollBearContinue`, …
### `KeyLevels.mqh`
- Body break above/below.
- `FindSupplyOB` / `FindDemandOB`.
- `BuildKeyLevels`, `PriceBetween` (Pullback zone).
### `Classifier.mqh`
- `Evaluate()` → một trong các `ENUM_HTF_STATE`.
- Ưu tiên: đang `update.phase` → CHoCH/Continue; sau đó Fib pending; sau đó Pullback/break.
### `UpdateEngine.mqh`
- `DetectBreakEvents` — phá Key LV1/L2.
- `ProcessBullContinueBuild`, `ProcessBullChochBuild`, `ProcessBullChochResolve`, …
- `OnHtfBarClose` — gọi mỗi nến HTF mới.
### `StateMachine.mqh`
- `Init()` → lock snapshot + `RefreshDerived`.
- `OnChartEvent()` → `IsNewHtfBar` → `UpdateEngine` → Fib + Key + Classifier.
### `Draw.mqh`
- Label H0–L1, newH0/newL0/newL02.
- Rectangle Key LV1/L2 (kéo tới thời điểm hiện tại).
### `Panel.mqh`
- Label góc trái: structure, Fib, state, Key prices, phase update.
---
## Luồng chạy (pipeline)
```mermaid
flowchart TD
A[OnInit] --> B[SwingEngine.LockInitialSnapshot]
B --> C[RefreshDerived: Fib + Key + Classify]
C --> D[Draw + Panel]
E[OnTick] --> F{Nến HTF mới?}
F -->|Không| G[Draw refresh rect]
F -->|Có| H[UpdateEngine.OnHtfBarClose]
H --> I[RefreshDerived]
I --> G
G --> J[Panel update]
```
---
## Cài đặt & sử dụng
1. Copy `Experts/HyperICT.mq5` và thư mục `Include/HyperICT/` vào terminal MT5.
2. MetaEditor → mở `HyperICT.mq5` → **F7** compile.
3. Kéo EA lên chart (symbol cần đủ lịch sử HTF).
4. Khuyến nghị: mở chart **cùng symbol**; HTF logic đọc `InpHtf` (mặc định H1) dù chart có thể M15/M5.
5. Bật `InpDebug = true` để xem log `[HyperICT]` và `[HyperICT/Update]` trong tab Experts.
### Gợi ý tinh chỉnh
| Triệu chứng | Thử |
|-------------|-----|
| Init fail / không đủ swing | Giảm `InpSwingRange` hoặc tăng `InpSwingLookback` |
| Pivot confirm chậm | Giảm `InpSwingRange` |
| Pivot nhiễu | Tăng `InpSwingRange` |
| Fib mãi pending | Kiểm tra sóng H1→L0 trên chart H1 |
---
## Tham số input
| Input | Mặc định | Ý nghĩa |
|-------|----------|---------|
| `InpHtf` | H1 | Timeframe cấu trúc |
| `InpSwingRange` | 3 | Nến mỗi bên pivot; confirm đỉnh/đáy §1.4 |
| `InpSwingLookback` | 400 | Số nến quét lúc lock ban đầu |
| `InpFibMinRatio` | 0.382 | Tiên quyết pullback (chỉ lúc lock trend) |
| `InpDrawSwings` | true | Label H0–L1 |
| `InpDrawZones` | true | Rectangle Key LV |
| `InpDrawPanel` | true | Panel trạng thái |
| `InpDebug` | false | Log chi tiết |
---
## Trạng thái hiển thị
| Panel text | Ý nghĩa |
|------------|---------|
| `BULL PULLBACK` | Bull hợp lệ, giá trong L0–H0 |
| `BULL (Fib pending)` | HH-HL nhưng hồi chưa đủ 38.2% |
| `BULL CHoCH` | Phá L0 hoặc đang update CHoCH |
| `BULL CONTINUE` | Phá H0 / đang tạo đỉnh mới |
| `BEAR …` | Đối xứng |
| `NEUTRAL` | Cấu trúc không rõ |
Khi đang update: dòng `Update: evt=… phase=… | swingR=…`.
---
## API mở rộng
```cpp
// Trong HyperICT.mq5 — có thể #include Types từ EA khác nếu cần enum
ENUM_HTF_STATE HyperICT_GetState();
```
Trả về `ctx.state` hiện tại. EA khác có thể đọc sau khi HyperICT chạy trên cùng chart (cần thiết kế thêm export nếu muốn đọc swing/Key từ bên ngoài).
---
## Giới hạn & hướng phát triển
### Đã có
- HTF structure, Key LV, OB đơn giản, 7+ states, snapshot lock, §1.4 incremental update với swing confirm.
### Chưa có
- Đặt lệnh, quản lý risk, session filter.
- LTF entry (MSS, FVG, …).
- OB mitigation filter chuẩn ICT.
- Vẽ trên chart HTF tách biệt (hiện dùng `ChartID()` đang mở).
- Alert / push notification.
### Hướng phát triển gợi ý
1. Test & harden `UpdateEngine` trên lịch sử (Strategy Tester visual).
2. Module `LTF` tách riêng, đọc `HyperICT_GetState()`.
3. Cải thiện `FindSupplyOB` / `FindDemandOB`.
4. Export struct `HtfContext` qua global hoặc file cho indicator.
---
## Map spec → module (tóm tắt)
| Spec | Module |
|------|--------|
| Tiên quyết Fib + HH-HL | `FibValidator`, `SwingEngine` |
| §1.1 States | `Classifier`, `Panel` |
| §1.2 Key + OB | `KeyLevels`, `Draw` |
| §1.3 Vẽ | `Draw` |
| §1.4 CHoCH/Continue | `UpdateEngine`, `SwingEngine` |
| Pipeline | `StateMachine` |
| Input | `Config` |
| Data model | `Types` |
---
*Tài liệu đồng bộ với HyperICT v0.11. Khi đổi logic, cập nhật comment đầu từng file `.mqh` và README này.*