293 lines
6.8 KiB
Plaintext
293 lines
6.8 KiB
Plaintext
//+------------------------------------------------------------------+
|
|
//| Types.mqh — ICT 2026 data model |
|
|
//+------------------------------------------------------------------+
|
|
#ifndef ICT2026_TYPES_MQH
|
|
#define ICT2026_TYPES_MQH
|
|
|
|
enum ENUM_ICT_BIAS
|
|
{
|
|
ICT_BIAS_NONE = 0,
|
|
ICT_BIAS_BULL = 1,
|
|
ICT_BIAS_BEAR = -1,
|
|
ICT_BIAS_RANGE = 2
|
|
};
|
|
|
|
enum ENUM_ICT_STRUCT
|
|
{
|
|
ICT_STRUCT_NONE = 0,
|
|
ICT_STRUCT_BULL = 1,
|
|
ICT_STRUCT_BEAR = -1
|
|
};
|
|
|
|
enum ENUM_ICT_HTF_BIAS
|
|
{
|
|
ICT_HTF_NONE = 0,
|
|
ICT_HTF_UP = 1,
|
|
ICT_HTF_DOWN = -1,
|
|
ICT_HTF_SIDEWAY = 2
|
|
};
|
|
|
|
// BOS = Continue | CHoCH = Reversal
|
|
enum ENUM_ICT_MS_EVENT
|
|
{
|
|
ICT_MS_NONE = 0,
|
|
ICT_MS_BOS = 1,
|
|
ICT_MS_CHOCH = 2
|
|
};
|
|
|
|
enum ENUM_ICT_TREND
|
|
{
|
|
ICT_TREND_NONE = 0,
|
|
ICT_TREND_UP = 1,
|
|
ICT_TREND_DOWN = -1
|
|
};
|
|
|
|
// Rõ ràng (HH-HL/LH-LL) hoặc sớm (sau CHoCH, MS chưa rõ)
|
|
enum ENUM_ICT_TREND_PHASE
|
|
{
|
|
ICT_TREND_PHASE_NONE = 0,
|
|
ICT_TREND_PHASE_CLEAR = 1,
|
|
ICT_TREND_PHASE_EARLY = 2
|
|
};
|
|
|
|
struct IctSwingPoint
|
|
{
|
|
double price;
|
|
datetime time;
|
|
int shift;
|
|
|
|
void Clear()
|
|
{
|
|
price = 0.0;
|
|
time = 0;
|
|
shift = -1;
|
|
}
|
|
|
|
bool Valid() const { return shift >= 0 && price > 0.0; }
|
|
};
|
|
|
|
struct IctSwingSet
|
|
{
|
|
IctSwingPoint 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;
|
|
}
|
|
};
|
|
|
|
struct IctHTFBiasState
|
|
{
|
|
ENUM_ICT_HTF_BIAS bias;
|
|
double rangeHigh;
|
|
double rangeLow;
|
|
datetime lastUpdateTime;
|
|
};
|
|
|
|
struct IctDailyBiasState
|
|
{
|
|
ENUM_ICT_BIAS bias;
|
|
ENUM_ICT_TREND_PHASE biasPhase;
|
|
ENUM_ICT_STRUCT structural;
|
|
ENUM_ICT_MS_EVENT lastEvent;
|
|
bool fibOk;
|
|
IctSwingSet swings;
|
|
double keyLv1;
|
|
double keyLv2;
|
|
ENUM_ICT_STRUCT lastClearStructural;
|
|
double pdh;
|
|
double pdl;
|
|
double pdc;
|
|
double eq;
|
|
IctHTFBiasState htf;
|
|
datetime lastBarTime;
|
|
string reason;
|
|
string displayReason;
|
|
};
|
|
|
|
struct IctIntradayState
|
|
{
|
|
ENUM_ICT_TREND trend;
|
|
ENUM_ICT_TREND_PHASE trendPhase;
|
|
ENUM_ICT_STRUCT structural;
|
|
ENUM_ICT_MS_EVENT lastEvent;
|
|
IctSwingSet swings;
|
|
double keyLv1;
|
|
double keyLv2;
|
|
ENUM_ICT_STRUCT lastClearStructural;
|
|
datetime lastBarTime;
|
|
string displayReason;
|
|
bool isAllowTrade;
|
|
};
|
|
|
|
enum ENUM_ICT_FVG_SIDE
|
|
{
|
|
ICT_FVG_NONE = 0,
|
|
ICT_FVG_BULL = 1,
|
|
ICT_FVG_BEAR = -1
|
|
};
|
|
|
|
enum ENUM_ICT_FVG_STATE
|
|
{
|
|
ICT_FVG_AVAILABLE = 0,
|
|
ICT_FVG_USED = 1
|
|
};
|
|
|
|
enum ENUM_ICT_PD_ZONE
|
|
{
|
|
ICT_PD_NONE = 0,
|
|
ICT_PD_PREMIUM = 1,
|
|
ICT_PD_DISCOUNT = -1,
|
|
ICT_PD_EQUILIBRIUM = 2
|
|
};
|
|
|
|
enum ENUM_ICT_MSS_PHASE
|
|
{
|
|
ICT_MSS_IDLE = 0,
|
|
ICT_MSS_H1_TOUCH = 1, // Đã retest FVG H1 (POI): chạm + lấp ≥ InpMssH1MinFillPct trên H1
|
|
ICT_MSS_CHOCH = 2,
|
|
ICT_MSS_M5_FVG = 3,
|
|
ICT_MSS_ENTRY_FILL = 4,
|
|
ICT_MSS_READY = 5
|
|
};
|
|
|
|
struct IctFvgZone
|
|
{
|
|
ulong id;
|
|
ENUM_ICT_FVG_SIDE side;
|
|
ENUM_ICT_FVG_STATE state;
|
|
ENUM_ICT_PD_ZONE pdZone;
|
|
ENUM_ICT_PD_ZONE repPd;
|
|
double upper;
|
|
double lower;
|
|
double pdHigh;
|
|
double pdLow;
|
|
double pdEq;
|
|
double maxFillRatio;
|
|
datetime createdTime;
|
|
datetime timeStart;
|
|
datetime timeEnd;
|
|
datetime firstTouchTime;
|
|
datetime fvgUsedTime;
|
|
datetime expireTime;
|
|
bool locked;
|
|
datetime pdRangeStart;
|
|
datetime pdRangeEnd;
|
|
bool pdComplete;
|
|
bool pdSwing1Set;
|
|
bool mssH1Touch382;
|
|
|
|
void Clear()
|
|
{
|
|
id = 0;
|
|
side = ICT_FVG_NONE;
|
|
state = ICT_FVG_AVAILABLE;
|
|
pdZone = ICT_PD_NONE;
|
|
repPd = ICT_PD_NONE;
|
|
upper = 0.0;
|
|
lower = 0.0;
|
|
pdHigh = 0.0;
|
|
pdLow = 0.0;
|
|
pdEq = 0.0;
|
|
maxFillRatio = 0.0;
|
|
createdTime = 0;
|
|
timeStart = 0;
|
|
timeEnd = 0;
|
|
firstTouchTime = 0;
|
|
fvgUsedTime = 0;
|
|
expireTime = 0;
|
|
locked = false;
|
|
pdRangeStart = 0;
|
|
pdRangeEnd = 0;
|
|
pdComplete = false;
|
|
pdSwing1Set = false;
|
|
mssH1Touch382 = false;
|
|
}
|
|
};
|
|
|
|
struct IctMssState
|
|
{
|
|
ENUM_ICT_MSS_PHASE phase;
|
|
ulong h1FvgId;
|
|
datetime h1TouchTime;
|
|
ulong m5FvgId;
|
|
double chochKeyLevel;
|
|
datetime chochKeyTime;
|
|
datetime chochTime;
|
|
datetime m5FvgTime;
|
|
double slSwingPrice;
|
|
bool chochLocked;
|
|
ENUM_ICT_BIAS chochBias;
|
|
ulong pendingTicket;
|
|
datetime pendingPlacedTime;
|
|
double pendingEntry;
|
|
double pendingSl;
|
|
double pendingTp;
|
|
double partialTriggerPrice;
|
|
bool partialCloseDone;
|
|
double liveL0Price;
|
|
double liveH0Price;
|
|
datetime liveL0Time;
|
|
datetime liveH0Time;
|
|
double liveL1Price;
|
|
double liveH1Price;
|
|
datetime liveL1Time;
|
|
datetime liveH1Time;
|
|
datetime h1LastInvalidBarTime;
|
|
ulong h1WatchFvgId;
|
|
string displayReason;
|
|
|
|
void Clear()
|
|
{
|
|
phase = ICT_MSS_IDLE;
|
|
h1FvgId = 0;
|
|
h1TouchTime = 0;
|
|
m5FvgId = 0;
|
|
chochKeyLevel = 0.0;
|
|
chochKeyTime = 0;
|
|
chochTime = 0;
|
|
m5FvgTime = 0;
|
|
slSwingPrice = 0.0;
|
|
chochLocked = false;
|
|
chochBias = ICT_BIAS_NONE;
|
|
pendingTicket = 0;
|
|
pendingPlacedTime = 0;
|
|
pendingEntry = 0.0;
|
|
pendingSl = 0.0;
|
|
pendingTp = 0.0;
|
|
partialTriggerPrice = 0.0;
|
|
partialCloseDone = false;
|
|
liveL0Price = 0.0;
|
|
liveH0Price = 0.0;
|
|
liveL0Time = 0;
|
|
liveH0Time = 0;
|
|
liveL1Price = 0.0;
|
|
liveH1Price = 0.0;
|
|
liveL1Time = 0;
|
|
liveH1Time = 0;
|
|
h1LastInvalidBarTime = 0;
|
|
h1WatchFvgId = 0;
|
|
displayReason = "";
|
|
}
|
|
};
|
|
|
|
struct IctLowTfState
|
|
{
|
|
datetime lastBarTime;
|
|
datetime lastConfirmBarTime;
|
|
int activeCount;
|
|
int availableCount;
|
|
int confirmFvgCount;
|
|
string displayReason;
|
|
IctMssState mss;
|
|
};
|
|
|
|
#endif
|