last works on implementing SMC Strategy based on POIs ...
This commit is contained in:
@@ -437,8 +437,7 @@ struct XZone
|
||||
string result = NULL;
|
||||
|
||||
//
|
||||
result = prefix +
|
||||
"_XZone_" +
|
||||
result = prefix + "_" +
|
||||
ToString(upper) + "_" +
|
||||
ToString(lower);
|
||||
|
||||
@@ -474,6 +473,655 @@ typedef void (*TXZoneEventHandler)(
|
||||
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;
|
||||
}
|
||||
|
||||
//
|
||||
};
|
||||
|
||||
//
|
||||
// Extensions ...
|
||||
|
||||
@@ -611,3 +1259,103 @@ string ToString(ENUM_XSESSION value)
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate General Event Messages ...
|
||||
*
|
||||
* @param value: ENUM_XPOI_EVENTS member ...
|
||||
*
|
||||
* @return ( string )
|
||||
*/
|
||||
string ToString(ENUM_XPOI_EVENTS value)
|
||||
{
|
||||
//
|
||||
string result = NULL;
|
||||
|
||||
//
|
||||
switch (value)
|
||||
{
|
||||
//
|
||||
case X_TRADE_DAY_FIRST_BAR:
|
||||
result = "First Bar of Day";
|
||||
break;
|
||||
|
||||
//
|
||||
case X_TRADE_DAY_LAST_BAR:
|
||||
result = "Last Bar of Day";
|
||||
break;
|
||||
|
||||
//
|
||||
case X_SESSION_FIRST_BAR:
|
||||
result = "First Bar of Session";
|
||||
break;
|
||||
|
||||
//
|
||||
case X_SESSION_LAST_BAR:
|
||||
result = "Last Bar of Session";
|
||||
break;
|
||||
|
||||
//
|
||||
case X_MOMENTUM_BAR_DETECTED:
|
||||
result = "Momentum Bar Detected";
|
||||
break;
|
||||
|
||||
//
|
||||
case X_REJECTION_BAR_DETECTED:
|
||||
result = "Rejection Bar Detected";
|
||||
break;
|
||||
|
||||
//
|
||||
case X_SWING_HIGH_DETECTED:
|
||||
result = "Swing High Detected";
|
||||
break;
|
||||
|
||||
//
|
||||
case X_SWING_LOW_DETECTED:
|
||||
result = "Swing Low Detected";
|
||||
break;
|
||||
|
||||
//
|
||||
case X_SUPPORT_ZONE_DETECTED:
|
||||
result = "Support Zone Detected";
|
||||
break;
|
||||
|
||||
//
|
||||
case X_RESISTANCE_ZONE_DETECTED:
|
||||
result = "Resistance Zone Detected";
|
||||
break;
|
||||
|
||||
//
|
||||
case X_SUPPLY_ZONE_DETECTED:
|
||||
result = "Supply Zone Detected";
|
||||
break;
|
||||
|
||||
//
|
||||
case X_DEMAND_ZONE_DETECTED:
|
||||
result = "Demand Zone Detected";
|
||||
break;
|
||||
|
||||
//
|
||||
case X_BULLISH_ORDERBLOCK_DETECTED:
|
||||
result = "Bullish Order Block Detected";
|
||||
break;
|
||||
|
||||
//
|
||||
case X_BEARISH_ORDERBLOCK_DETECTED:
|
||||
result = "Bearish Orer Block Detected";
|
||||
break;
|
||||
|
||||
//
|
||||
case X_BULLISH_FVG_DETECTED:
|
||||
result = "Bullish FVG Detected";
|
||||
break;
|
||||
|
||||
//
|
||||
case X_BEARISH_FVG_DETECTED:
|
||||
result = "Bearish FVg Detected";
|
||||
break;
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
Reference in New Issue
Block a user