Files
MQL5Data/Documents/BKP/x-poi.bkp.mq5
T
2024-11-10 01:42:59 -08:00

1045 lines
17 KiB
Plaintext

//
// Represent a Session Working Time ...
struct XSession
{
//
// Props ...
ENUM_XSESSION session; // Session Identifier
string start; // Start Time
string end; // End Time
//
bool allowDraw;
color startColor;
ENUM_LINE_STYLE startStyle;
color endColor;
ENUM_LINE_STYLE endStyle;
/**
* Constructor ...
*/
void XSession()
{
Clean();
}
/**
* Clean Structure ...
*/
void Clean()
{
//
start = NULL;
end = NULL;
//
allowDraw = false;
endColor = clrAqua;
endStyle = STYLE_DOT;
startColor = clrAqua;
endStyle = STYLE_DOT;
}
/**
* Validate Structure ...
*
* @return ( bool )
*/
bool IsValid()
{
//
bool result = false;
//
result = IsValid(start) &&
IsValid(end);
//
return result;
}
/**
* Initialize Specified Session ...
*
* @param _session: ENUM_XSESSION member ...
* @param _start: String (Session Start Time) ...
* @param _end: String (Session End Time) ...
*
* @return ( bool )
*/
bool Init(
ENUM_XSESSION _session,
string _start,
string _end //
)
{
//
bool result = false;
//
result = IsValid(_start) &&
IsValid(_end);
if (!result)
{
return result;
}
//
end = _end;
start = _start;
session = _session;
//
result = IsValid();
//
return result;
}
//
};
//
struct XTradeDay
{
//
datetime from;
datetime to;
//
void XTradeDay()
{
Clean();
}
//
void Clean()
{
//
from = NULL;
to = NULL;
}
//
bool IsValid()
{
//
bool result = false;
//
result = IsValid(from) &&
IsValid(to);
//
return result;
}
//
string GetTag()
{
//
string result = NULL;
//
if (!IsValid())
{
return result;
}
//
result = ToString(X_POI_TRADING_DAY) + "_" + ToFormatString(from) + "_" + ToFormatString(to);
//
return result;
}
//
};
//
// Detected Session ...
struct XMarketSession
{
//
ENUM_XSESSION session;
datetime from;
datetime to;
//
void XMarketSession()
{
Clean();
}
//
void Clean()
{
from = NULL;
to = NULL;
}
//
bool IsValid()
{
//
bool result = false;
//
result = IsValid(from) &&
IsValid(to);
//
return result;
}
//
string GetTag()
{
//
string result = NULL;
//
if (!IsValid())
{
return result;
}
//
result =
ToString(X_POI_MARKET_SESSION) + "_" +
ToString(session) + "_" +
ToFormatString(from) +
"_" +
ToFormatString(to) + "_";
//
return result;
}
};
//
// Zone Struct ...
struct XZone
{
//
// Props ...
double upper;
double lower;
string prefix;
//
datetime from;
datetime to;
//
// Constructor ...
void XZone()
{
Clean();
}
//
bool Init(
double _upper,
double _lower,
string _prefix,
datetime _from,
datetime _to //
)
{
//
bool result = false;
//
result =
_upper > 0 &&
_lower > 0 &&
_upper > _lower &&
IsValid(_prefix) &&
IsValid(_from);
if (!result)
{
return result;
}
//
NormalizeTime(_to);
//
upper = _upper;
lower = _lower;
prefix = _prefix;
from = _from;
to = _to;
//
result = IsValid();
//
return result;
}
//
void Clean()
{
//
upper = 0;
lower = 0;
//
to = NULL;
from = NULL;
prefix = NULL;
}
//
bool IsValid()
{
//
bool result = false;
//
result = upper > 0 &&
lower > 0 &&
upper > lower &&
IsValid(to) &&
IsValid(from) &&
IsValid(prefix);
//
return result;
}
//
double GetRange()
{
//
double result = 0;
//
if (!IsValid())
{
return result;
}
//
result = upper - lower;
//
return result;
}
//
double GetMiddle()
{
//
double result = 0;
//
double range = GetRange();
if (range <= 0)
{
return result;
}
//
result = lower + (range / 2);
//
return result;
}
//
string GetTag()
{
//
string result = NULL;
//
result = prefix + "_" +
ToString(upper) + "_" +
ToString(lower);
//
return result;
}
};
//
// XOHCL Event Handler ...
typedef void (*TXOHCLEventHandler)(
ENUM_XPOI_EVENTS event,
XOHCL &bar //
);
//
// POI Event Handler ...
typedef void (*TXPOIEventHandler)(
ENUM_XPOI_EVENTS event //
);
//
// Session Event Handler ...
typedef void (*TXSessionEventHandler)(
ENUM_XSESSION session,
ENUM_XPOI_EVENTS event //
);
//
// Zone Handler ...
typedef void (*TXZoneEventHandler)(
ENUM_XPOI_EVENTS event,
XZone &zone //
);
//
// Model Exists Founded POIs ...
struct XPOIState
{
//
string symbol;
ENUM_TIMEFRAMES period;
datetime reportedAt;
//
XTradeDay tradingDays[];
XMarketSession marketSessions[];
//
XOHCL momentumBars[];
XOHCL rejectionBars[];
//
XOHCL swingHighs[];
XOHCL swingLows[];
//
XOHCL supportZones[];
XOHCL resistanceZones[];
//
XZone supplyZones[];
XZone demandZones[];
//
XZone bullishOrderBlocks[];
XZone bearishOrderBlocks[];
//
XZone bullishFVGs[];
XZone bearishFVGs[];
//
// Constructor ...
void XPOIState()
{
Clean();
}
//
// Actions ...
/**
* Cleanup all props ...
*/
void Clean()
{
//
symbol = NULL;
period = NULL;
reportedAt = NULL;
//
Clean(tradingDays);
Clean(marketSessions);
//
Clean(momentumBars);
Clean(rejectionBars);
//
Clean(swingHighs);
Clean(swingLows);
//
Clean(supportZones);
Clean(resistanceZones);
//
Clean(supplyZones);
Clean(demandZones);
//
Clean(bullishOrderBlocks);
Clean(bearishOrderBlocks);
//
Clean(bullishFVGs);
Clean(bearishFVGs);
}
/**
* Fill Trading Days ...
*
* @param source: XTradeDay instance Collection ...
* @param forceClean: Boolean ...
*
* @return ( int )
*/
int FillTradingDays(
XTradeDay &source[],
bool forceClean = true //
)
{
//
int result = 0;
//
if (forceClean)
{
Clean(tradingDays);
}
//
int count = ArraySize(source);
if (!IsValidSize(count))
{
return result;
}
//
Copy(
source,
tradingDays //
);
result = ArraySize(tradingDays);
//
return result;
}
/**
* Fill Market Sessions ...
*
* @param source: XMarketSession instance Collection ...
* @param forceClean: Boolean ...
*
* @return ( int )
*/
int FillMarketSessions(
XMarketSession &source[],
bool forceClean = true //
)
{
//
int result = 0;
//
if (forceClean)
{
Clean(marketSessions);
}
//
int count = ArraySize(source);
if (!IsValidSize(count))
{
return result;
}
//
Copy(
source,
marketSessions //
);
result = ArraySize(marketSessions);
//
return result;
}
/**
* Fill Momentum Bars ...
*
* @param source: XOHCL instance Collection ...
* @param forceClean: Boolean ...
*
* @return ( int )
*/
int FillMomentumBars(
XOHCL &source[],
bool forceClean = true //
)
{
//
int result = 0;
//
if (forceClean)
{
Clean(momentumBars);
}
//
int count = ArraySize(source);
if (!IsValidSize(count))
{
return result;
}
//
Copy(
source,
momentumBars //
);
result = ArraySize(momentumBars);
//
return result;
}
/**
* Fill Retection Bars ...
*
* @param source: XOHCL instance Collection ...
* @param forceClean: Boolean ...
*
* @return ( int )
*/
int FillRejectionBars(
XOHCL &source[],
bool forceClean = true //
)
{
//
int result = 0;
//
if (forceClean)
{
Clean(rejectionBars);
}
//
int count = ArraySize(source);
if (!IsValidSize(count))
{
return result;
}
//
Copy(
source,
rejectionBars //
);
result = ArraySize(rejectionBars);
//
return result;
}
/**
* Fill Swing Highs ...
*
* @param source: XOHCL instance Collection ...
* @param forceClean: Boolean ...
*
* @return ( int )
*/
int FillSwingHighs(
XOHCL &source[],
bool forceClean = true //
)
{
//
int result = 0;
//
if (forceClean)
{
Clean(swingHighs);
}
//
int count = ArraySize(source);
if (!IsValidSize(count))
{
return result;
}
//
Copy(
source,
swingHighs //
);
result = ArraySize(swingHighs);
//
return result;
}
/**
* Fill Swing Lows ...
*
* @param source: XOHCL instance Collection ...
* @param forceClean: Boolean ...
*
* @return ( int )
*/
int FillSwingLows(
XOHCL &source[],
bool forceClean = true //
)
{
//
int result = 0;
//
if (forceClean)
{
Clean(swingLows);
}
//
int count = ArraySize(source);
if (!IsValidSize(count))
{
return result;
}
//
Copy(
source,
swingLows //
);
result = ArraySize(swingLows);
//
return result;
}
/**
* Fill Support Zones ...
*
* @param source: XOHCL instance Collection ...
* @param forceClean: Boolean ...
*
* @return ( int )
*/
int FillSupportZones(
XOHCL &source[],
bool forceClean = true //
)
{
//
int result = 0;
//
if (forceClean)
{
Clean(supportZones);
}
//
int count = ArraySize(source);
if (!IsValidSize(count))
{
return result;
}
//
Copy(
source,
supportZones //
);
result = ArraySize(supportZones);
//
return result;
}
/**
* Fill Resistance Zones ...
*
* @param source: XOHCL instance Collection ...
* @param forceClean: Boolean ...
*
* @return ( int )
*/
int FillResistanceZones(
XOHCL &source[],
bool forceClean = true //
)
{
//
int result = 0;
//
if (forceClean)
{
Clean(resistanceZones);
}
//
int count = ArraySize(source);
if (!IsValidSize(count))
{
return result;
}
//
Copy(
source,
resistanceZones //
);
result = ArraySize(resistanceZones);
//
return result;
}
/**
* Fill Supply Zones ...
*
* @param source: XZone instance Collection ...
* @param forceClean: Boolean ...
*
* @return ( int )
*/
int FillSupplyZones(
XZone &source[],
bool forceClean = true //
)
{
//
int result = 0;
//
if (forceClean)
{
Clean(supplyZones);
}
//
int count = ArraySize(source);
if (!IsValidSize(count))
{
return result;
}
//
Copy(
source,
supplyZones //
);
result = ArraySize(supplyZones);
//
return result;
}
/**
* Fill Demand Zones ...
*
* @param source: XZone instance Collection ...
* @param forceClean: Boolean ...
*
* @return ( int )
*/
int FillDemandZones(
XZone &source[],
bool forceClean = true //
)
{
//
int result = 0;
//
if (forceClean)
{
Clean(demandZones);
}
//
int count = ArraySize(source);
if (!IsValidSize(count))
{
return result;
}
//
Copy(
source,
demandZones //
);
result = ArraySize(demandZones);
//
return result;
}
/**
* Fill Bullish Order Blockss ...
*
* @param source: XZone instance Collection ...
* @param forceClean: Boolean ...
*
* @return ( int )
*/
int FillBullishOrderBlocks(
XZone &source[],
bool forceClean = true //
)
{
//
int result = 0;
//
if (forceClean)
{
Clean(bullishOrderBlocks);
}
//
int count = ArraySize(source);
if (!IsValidSize(count))
{
return result;
}
//
Copy(
source,
bullishOrderBlocks //
);
result = ArraySize(bullishOrderBlocks);
//
return result;
}
/**
* Fill Bearish Order Blockss ...
*
* @param source: XZone instance Collection ...
* @param forceClean: Boolean ...
*
* @return ( int )
*/
int FillBearishOrderBlocks(
XZone &source[],
bool forceClean = true //
)
{
//
int result = 0;
//
if (forceClean)
{
Clean(bearishOrderBlocks);
}
//
int count = ArraySize(source);
if (!IsValidSize(count))
{
return result;
}
//
Copy(
source,
bearishOrderBlocks //
);
result = ArraySize(bearishOrderBlocks);
//
return result;
}
/**
* Fill Bullish FVGs ...
*
* @param source: XZone instance Collection ...
* @param forceClean: Boolean ...
*
* @return ( int )
*/
int FillBullishFVGs(
XZone &source[],
bool forceClean = true //
)
{
//
int result = 0;
//
if (forceClean)
{
Clean(bullishFVGs);
}
//
int count = ArraySize(source);
if (!IsValidSize(count))
{
return result;
}
//
Copy(
source,
bullishFVGs //
);
result = ArraySize(bullishFVGs);
//
return result;
}
/**
* Fill Bearish FVGs ...
*
* @param source: XZone instance Collection ...
* @param forceClean: Boolean ...
*
* @return ( int )
*/
int FillBearishFVGs(
XZone &source[],
bool forceClean = true //
)
{
//
int result = 0;
//
if (forceClean)
{
Clean(bearishFVGs);
}
//
int count = ArraySize(source);
if (!IsValidSize(count))
{
return result;
}
//
Copy(
source,
bearishFVGs //
);
result = ArraySize(bearishFVGs);
//
return result;
}
//
};