last works on implementing SMC Strategy based on POIs ...

This commit is contained in:
2024-10-25 22:07:13 +03:30
parent 5dc8ddb7da
commit ce1db83914
6 changed files with 2884 additions and 1857 deletions
+750 -2
View File
@@ -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;
}