2026-05-17 23:03:18 +07:00
|
|
|
|
//+------------------------------------------------------------------+
|
2026-05-17 23:23:44 +07:00
|
|
|
|
//| Types.mqh |
|
|
|
|
|
|
//| Mô hình dữ liệu cho toàn bộ HyperICT (map trực tiếp spec §1–1.4) |
|
|
|
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
|
//| ĐÃ GIẢI QUYẾT (ánh xạ spec → code): |
|
|
|
|
|
|
//| • H0,H1,L0,L1 — SwingSet + SwingPoint |
|
|
|
|
|
|
//| • §1.1 trạng thái: ENUM_HTF_STATE (Pullback/CHoCH/Continue/…) |
|
|
|
|
|
|
//| • §1.2 Key LV1/L2 + vùng OB — KeyLevelPair, OrderBlockZone |
|
|
|
|
|
|
//| • §1.4 update tăng dần — UpdateContext (newH0, newL0, newL02) |
|
|
|
|
|
|
//| • Khóa snapshot HTF — HtfContext.snapshotReady, lockedAt |
|
|
|
|
|
|
//| CHƯA CÓ TRONG FILE NÀY: logic tính toán (nằm ở module khác) |
|
2026-05-17 23:03:18 +07:00
|
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
|
#ifndef HYPERICT_TYPES_MQH
|
|
|
|
|
|
#define HYPERICT_TYPES_MQH
|
|
|
|
|
|
|
2026-05-17 23:23:44 +07:00
|
|
|
|
//--- §1.1 tiên quyết cấu trúc: HH-HL (bull) / LH-LL (bear)
|
2026-05-17 23:03:18 +07:00
|
|
|
|
enum ENUM_STRUCT_BIAS
|
|
|
|
|
|
{
|
|
|
|
|
|
STRUCT_NONE = 0,
|
|
|
|
|
|
STRUCT_BULL = 1,
|
|
|
|
|
|
STRUCT_BEAR = -1
|
|
|
|
|
|
};
|
|
|
|
|
|
|
2026-05-17 23:23:44 +07:00
|
|
|
|
//--- §1.1 các trạng thái trend HTF (+ Fib pending, không phải Neutral)
|
2026-05-17 23:03:18 +07:00
|
|
|
|
enum ENUM_HTF_STATE
|
|
|
|
|
|
{
|
2026-05-17 23:23:44 +07:00
|
|
|
|
HTF_NEUTRAL = 0, // không phân loại được 4 swing / cấu trúc lẫn lộn
|
|
|
|
|
|
HTF_BULL_INCOMPLETE = 1, // HH-HL nhưng Fib hồi H1→L0 chưa đủ (§ tiên quyết)
|
2026-05-17 23:03:18 +07:00
|
|
|
|
HTF_BEAR_INCOMPLETE = 2,
|
2026-05-17 23:23:44 +07:00
|
|
|
|
HTF_BULL_PULLBACK = 3, // Fib OK + giá giữa L0–H0
|
|
|
|
|
|
HTF_BULL_CHOCH = 4, // body phá L0 (Key LV1) hoặc đang phase CHoCH
|
|
|
|
|
|
HTF_BULL_CONTINUE = 5, // body phá H0 (Key LV2) hoặc đang phase Continue
|
2026-05-17 23:03:18 +07:00
|
|
|
|
HTF_BEAR_PULLBACK = 6,
|
|
|
|
|
|
HTF_BEAR_CHOCH = 7,
|
|
|
|
|
|
HTF_BEAR_CONTINUE = 8
|
|
|
|
|
|
};
|
|
|
|
|
|
|
2026-05-17 23:23:44 +07:00
|
|
|
|
//--- §1.2 / §1.4: sự kiện phá Key level (body close trên bar HTF đóng)
|
2026-05-17 23:03:18 +07:00
|
|
|
|
enum ENUM_UPDATE_EVENT
|
|
|
|
|
|
{
|
|
|
|
|
|
UPD_NONE = 0,
|
2026-05-17 23:23:44 +07:00
|
|
|
|
UPD_CHOCH = 1, // phá Key LV1 → Change of Character
|
|
|
|
|
|
UPD_CONTINUE = 2 // phá Key LV2 → tiếp diễn xu hướng
|
2026-05-17 23:03:18 +07:00
|
|
|
|
};
|
|
|
|
|
|
|
2026-05-17 23:23:44 +07:00
|
|
|
|
//--- §1.4 các giai đoạn sau khi phá Key (không quét lại full lookback)
|
2026-05-17 23:03:18 +07:00
|
|
|
|
enum ENUM_UPDATE_PHASE
|
|
|
|
|
|
{
|
|
|
|
|
|
UPD_PHASE_IDLE = 0,
|
2026-05-17 23:23:44 +07:00
|
|
|
|
UPD_PHASE_BUILD = 1, // P1: track newH0/newL0; P2 CHoCH: xác nhận pivot
|
|
|
|
|
|
UPD_PHASE_CHOCH_RESOLVE = 2 // CHoCH P3: case1 về bull / case2 confirm bear
|
2026-05-17 23:03:18 +07:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
enum ENUM_CHOCH_BRANCH
|
|
|
|
|
|
{
|
|
|
|
|
|
CHOCH_BRANCH_NONE = 0,
|
|
|
|
|
|
CHOCH_BRANCH_BACK_TO_BULL = 1,
|
|
|
|
|
|
CHOCH_BRANCH_CONFIRM_BEAR = 2
|
|
|
|
|
|
};
|
|
|
|
|
|
|
2026-05-17 23:23:44 +07:00
|
|
|
|
//--- Đỉnh/đáy pivot (từ hiện tại về trước: H0/L0 mới nhất)
|
2026-05-17 23:03:18 +07:00
|
|
|
|
struct SwingPoint
|
|
|
|
|
|
{
|
|
|
|
|
|
double price;
|
|
|
|
|
|
datetime time;
|
|
|
|
|
|
int shift;
|
|
|
|
|
|
void Clear()
|
|
|
|
|
|
{
|
|
|
|
|
|
price = 0.0;
|
|
|
|
|
|
time = 0;
|
|
|
|
|
|
shift = -1;
|
|
|
|
|
|
}
|
|
|
|
|
|
bool Valid() const { return shift >= 0 && price > 0.0; }
|
|
|
|
|
|
};
|
|
|
|
|
|
|
2026-05-17 23:23:44 +07:00
|
|
|
|
//--- §1.2 vùng cung/cầu: swing → biên OB (nến đỏ @ L0 / nến xanh @ H0)
|
2026-05-17 23:03:18 +07:00
|
|
|
|
struct OrderBlockZone
|
|
|
|
|
|
{
|
|
|
|
|
|
double swingPrice;
|
|
|
|
|
|
double obHigh;
|
|
|
|
|
|
double obLow;
|
|
|
|
|
|
datetime obTime;
|
|
|
|
|
|
int obShift;
|
|
|
|
|
|
bool valid;
|
|
|
|
|
|
void Clear()
|
|
|
|
|
|
{
|
|
|
|
|
|
swingPrice = obHigh = obLow = 0.0;
|
|
|
|
|
|
obTime = 0;
|
|
|
|
|
|
obShift = -1;
|
|
|
|
|
|
valid = false;
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
|
2026-05-17 23:23:44 +07:00
|
|
|
|
//--- §1.2 Key LV1 / Key LV2 (giá + zone vẽ rectangle)
|
2026-05-17 23:03:18 +07:00
|
|
|
|
struct KeyLevelPair
|
|
|
|
|
|
{
|
|
|
|
|
|
double price;
|
|
|
|
|
|
OrderBlockZone zone;
|
|
|
|
|
|
};
|
|
|
|
|
|
|
2026-05-17 23:23:44 +07:00
|
|
|
|
//--- Bộ swing khóa: H0,H1,L0,L1
|
2026-05-17 23:03:18 +07:00
|
|
|
|
struct SwingSet
|
|
|
|
|
|
{
|
|
|
|
|
|
SwingPoint h0, h1, l0, l1;
|
|
|
|
|
|
bool hasH0, hasH1, hasL0, hasL1;
|
|
|
|
|
|
bool IsComplete() const
|
|
|
|
|
|
{
|
|
|
|
|
|
return hasH0 && hasH1 && hasL0 && hasL1;
|
|
|
|
|
|
}
|
|
|
|
|
|
void Clear()
|
|
|
|
|
|
{
|
|
|
|
|
|
h0.Clear(); h1.Clear(); l0.Clear(); l1.Clear();
|
|
|
|
|
|
hasH0 = hasH1 = hasL0 = hasL1 = false;
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
|
2026-05-17 23:23:44 +07:00
|
|
|
|
//--- §1.4 ngữ cảnh cập nhật incremental (newH0/newL0/newL02, khóa khi pivot confirm)
|
2026-05-17 23:03:18 +07:00
|
|
|
|
struct UpdateContext
|
|
|
|
|
|
{
|
|
|
|
|
|
ENUM_UPDATE_EVENT event;
|
|
|
|
|
|
ENUM_UPDATE_PHASE phase;
|
|
|
|
|
|
ENUM_CHOCH_BRANCH chochBranch;
|
|
|
|
|
|
SwingPoint newH0;
|
|
|
|
|
|
SwingPoint newL0;
|
2026-05-17 23:23:44 +07:00
|
|
|
|
SwingPoint newL02; // CHoCH bull case2 → roll thành L0
|
|
|
|
|
|
bool newH0Locked; // ngừng track high khi swing confirm
|
2026-05-17 23:03:18 +07:00
|
|
|
|
bool newLLocked;
|
2026-05-17 23:23:44 +07:00
|
|
|
|
bool case1TrackingH0; // CHoCH P3 case1: đang tạo đỉnh mới
|
2026-05-17 23:03:18 +07:00
|
|
|
|
void Clear()
|
|
|
|
|
|
{
|
|
|
|
|
|
event = UPD_NONE;
|
|
|
|
|
|
phase = UPD_PHASE_IDLE;
|
|
|
|
|
|
chochBranch = CHOCH_BRANCH_NONE;
|
|
|
|
|
|
newH0.Clear(); newL0.Clear(); newL02.Clear();
|
|
|
|
|
|
newH0Locked = newLLocked = false;
|
|
|
|
|
|
case1TrackingH0 = false;
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
|
2026-05-17 23:23:44 +07:00
|
|
|
|
//--- Trạng thái runtime toàn EA (một snapshot HTF tại thời điểm bot chạy / sau roll)
|
2026-05-17 23:03:18 +07:00
|
|
|
|
struct HtfContext
|
|
|
|
|
|
{
|
|
|
|
|
|
string symbol;
|
|
|
|
|
|
ENUM_TIMEFRAMES htf;
|
|
|
|
|
|
SwingSet swings;
|
|
|
|
|
|
ENUM_STRUCT_BIAS structBias;
|
2026-05-17 23:23:44 +07:00
|
|
|
|
bool fibOk; // § tiên quyết Fib (chỉ ý nghĩa pullback hợp lệ)
|
2026-05-17 23:03:18 +07:00
|
|
|
|
KeyLevelPair keyLv1;
|
|
|
|
|
|
KeyLevelPair keyLv2;
|
|
|
|
|
|
ENUM_HTF_STATE state;
|
|
|
|
|
|
UpdateContext update;
|
|
|
|
|
|
datetime lockedAt;
|
|
|
|
|
|
datetime lastHtfBar;
|
|
|
|
|
|
bool snapshotReady;
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
#endif // HYPERICT_TYPES_MQH
|