Files
Bell-PriceActionWithEma-EA/Include/HyperICT/Types.mqh
T
2026-05-25 02:01:26 +07:00

162 lines
5.1 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
//+------------------------------------------------------------------+
//| Types.mqh |
//| Mô hình dữ liệu cho toàn bộ HyperICT (map trực tiếp spec §11.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) |
//+------------------------------------------------------------------+
#ifndef HYPERICT_TYPES_MQH
#define HYPERICT_TYPES_MQH
//--- §1.1 tiên quyết cấu trúc: HH-HL (bull) / LH-LL (bear)
enum ENUM_STRUCT_BIAS
{
STRUCT_NONE = 0,
STRUCT_BULL = 1,
STRUCT_BEAR = -1
};
//--- §1.1 các trạng thái trend HTF (+ Fib pending, không phải Neutral)
enum ENUM_HTF_STATE
{
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)
HTF_BEAR_INCOMPLETE = 2,
HTF_BULL_PULLBACK = 3, // Fib OK + giá giữa L0H0
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
HTF_BEAR_PULLBACK = 6,
HTF_BEAR_CHOCH = 7,
HTF_BEAR_CONTINUE = 8
};
//--- §1.2 / §1.4: sự kiện phá Key level (body close trên bar HTF đóng)
enum ENUM_UPDATE_EVENT
{
UPD_NONE = 0,
UPD_CHOCH = 1, // phá Key LV1 → Change of Character
UPD_CONTINUE = 2 // phá Key LV2 → tiếp diễn xu hướng
};
//--- §1.4 các giai đoạn sau khi phá Key (không quét lại full lookback)
enum ENUM_UPDATE_PHASE
{
UPD_PHASE_IDLE = 0,
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
};
enum ENUM_CHOCH_BRANCH
{
CHOCH_BRANCH_NONE = 0,
CHOCH_BRANCH_BACK_TO_BULL = 1,
CHOCH_BRANCH_CONFIRM_BEAR = 2
};
//--- Đỉnh/đáy pivot (từ hiện tại về trước: H0/L0 mới nhất)
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; }
};
//--- §1.2 vùng cung/cầu: swing → biên OB (nến đỏ @ L0 / nến xanh @ H0)
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;
}
};
//--- §1.2 Key LV1 / Key LV2 (giá + zone vẽ rectangle)
struct KeyLevelPair
{
double price;
OrderBlockZone zone;
};
//--- Bộ swing khóa: H0,H1,L0,L1
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;
}
};
//--- §1.4 ngữ cảnh cập nhật incremental (newH0/newL0/newL02, khóa khi pivot confirm)
struct UpdateContext
{
ENUM_UPDATE_EVENT event;
ENUM_UPDATE_PHASE phase;
ENUM_CHOCH_BRANCH chochBranch;
SwingPoint newH0;
SwingPoint newL0;
SwingPoint newL02; // CHoCH bull case2 → roll thành L0
bool newH0Locked;
bool newLLocked; // newL0 hoàn thiện (P2) — không kéo newL0 nữa
bool case1TrackingH0; // P3 case1: phá lên H0
bool case2Active; // P3 case2: phá xuống newL0 đã khóa
bool newH0Case2Locked; // P3 case2: newH0 (hồi) đã confirm
void Clear()
{
event = UPD_NONE;
phase = UPD_PHASE_IDLE;
chochBranch = CHOCH_BRANCH_NONE;
newH0.Clear(); newL0.Clear(); newL02.Clear();
newH0Locked = newLLocked = false;
case1TrackingH0 = false;
case2Active = false;
newH0Case2Locked = false;
}
};
//--- Trạng thái runtime toàn EA (một snapshot HTF tại thời điểm bot chạy / sau roll)
struct HtfContext
{
string symbol;
ENUM_TIMEFRAMES htf;
SwingSet swings;
ENUM_STRUCT_BIAS structBias;
bool fibOk; // § tiên quyết Fib (chỉ ý nghĩa pullback hợp lệ)
KeyLevelPair keyLv1;
KeyLevelPair keyLv2;
ENUM_HTF_STATE state;
UpdateContext update;
datetime lockedAt;
datetime lastHtfBar;
bool snapshotReady;
};
#endif // HYPERICT_TYPES_MQH