This commit is contained in:
2025-01-07 21:48:52 +03:30
parent 3d95220cc7
commit 73f39629fb
5 changed files with 1308 additions and 106 deletions
+149 -18
View File
@@ -49,9 +49,8 @@ struct X121SMCStrategyXTWPVSignalConditions
datetime triggerTime;
//
// ENUM_X_DIRECTION orderBlockDir;
// XCOrderBlock *bullishOrderBlocks[];
// XCOrderBlock *bearishOrderBlocks[];
XFVGOrderBlock bullishOrderBlocks[];
XFVGOrderBlock bearishOrderBlocks[];
//
// Constructor ...
@@ -168,9 +167,39 @@ struct X121SMCStrategyXTWPVSignalConditions
void ExtensionClean()
{
//
// Clean(bullishOrderBlocks);
// Clean(bearishOrderBlocks);
// orderBlockDir = X_DIRECTION_NONE;
Clean(bullishOrderBlocks);
Clean(bearishOrderBlocks);
}
/**
* Update Order Blocks Date ...
*/
void UpdateOrderBlocks() {
//
int count = 0;
datetime cTime = TimeCurrent();
//
count = ArraySize(bullishOrderBlocks);
if (IsValidSize(count)) {
//
for (int i = 0; i < count; i++) {
//
bullishOrderBlocks[i].orderBlock.To(cTime);
bullishOrderBlocks[i].fairValueGap.To(cTime);
}
}
//
count = ArraySize(bearishOrderBlocks);
if (IsValidSize(count)) {
//
for (int i = 0; i < count; i++) {
//
bearishOrderBlocks[i].orderBlock.To(cTime);
bearishOrderBlocks[i].fairValueGap.To(cTime);
}
}
}
//
@@ -192,9 +221,7 @@ bool DetectX121SMCXTWPVSiganlSetup(
XC121SMCCycleHelper *analyseCycleHelper,
XC121SMCCycleHelper *verificationCycleHelper,
XC121SMCCycleHelper *consolidationCycleHelper,
XC121SMCCycleHelper *visionCycleHelper,
//
XCPOIDrawer *drawer //
XC121SMCCycleHelper *visionCycleHelper
//
)
{
@@ -393,7 +420,6 @@ bool DetectX121SMCXTWPVSiganlSetup(
XFVGOrderBlock bullishOrderBlocks[];
XFVGOrderBlock bearishOrderBlocks[];
bool isTested = TestPOIState(
drawer,
forDir,
bullishOrderBlocks,
bearishOrderBlocks,
@@ -402,6 +428,15 @@ bool DetectX121SMCXTWPVSiganlSetup(
decisionState //
);
//
isBullish =
isTested &&
IsBullish(forDir);
//
isBearish =
isTested &&
IsBearish(forDir);
//
result = isBullish ||
isBearish;
@@ -410,6 +445,17 @@ bool DetectX121SMCXTWPVSiganlSetup(
return result;
}
//
conditions.dir = forDir;
Copy(
bullishOrderBlocks,
conditions.bullishOrderBlocks //
);
Copy(
bearishOrderBlocks,
conditions.bearishOrderBlocks //
);
//
conditions.setupTime = cTime;
conditions.dir =
@@ -437,7 +483,7 @@ bool DetectX121SMCXTWPVSiganlTrigger(
XC121SMCCycleHelper *consolidationCycleHelper,
XC121SMCCycleHelper *visionCycleHelper,
//
int maxAllowedSetupAge = 60 //
int maxAllowedSetupAge = 0 //
//
)
{
@@ -638,6 +684,91 @@ bool DetectX121SMCXTWPVSiganlTrigger(
//
// Trigger Conditions ...
//
// Waits For Price to Go Inside FVG ...
XFVGOrderBlock fvgOrderBlock;
bool isPriceInsideOB = false;
bool isPriceInsideFVG = false;
if (isBullish)
{
//
int count = ArraySize(conditions.bullishOrderBlocks);
for (int i = 0; i < count; i++)
{
//
XFVGOrderBlock iModel = conditions.bullishOrderBlocks[i];
//
isPriceInsideOB = IsPriceInsideZone(
cBar,
iModel.orderBlock //
);
//
isPriceInsideFVG = IsPriceInsideZone(
cBar,
iModel.fairValueGap //
);
//
if (isPriceInsideOB &&
isPriceInsideFVG)
{
//
fvgOrderBlock = iModel;
break;
}
//
isPriceInsideOB = false;
isPriceInsideFVG = false;
}
}
else
{
//
int count = ArraySize(conditions.bearishOrderBlocks);
for (int i = 0; i < count; i++)
{
//
XFVGOrderBlock iModel = conditions.bearishOrderBlocks[i];
//
isPriceInsideOB = IsPriceInsideZone(
cBar,
iModel.orderBlock //
);
//
isPriceInsideFVG = IsPriceInsideZone(
cBar,
iModel.fairValueGap //
);
//
if (isPriceInsideOB &&
isPriceInsideFVG)
{
//
fvgOrderBlock = iModel;
break;
}
//
isPriceInsideOB = false;
isPriceInsideFVG = false;
}
}
//
result = isPriceInsideOB &&
isPriceInsideFVG &&
fvgOrderBlock.IsValid();
if (!result)
{
return result;
}
//
// Detect Bullish Conditions ...
isBullish =
@@ -657,13 +788,13 @@ bool DetectX121SMCXTWPVSiganlTrigger(
{
//
// Cleanup Setup Conditions ...
int setupAge = conditions.GetSetupAge();
if (IsValidSize(setupAge) &&
IsValidSize(maxAllowedSetupAge) &&
setupAge >= maxAllowedSetupAge)
{
conditions.Clean();
}
// int setupAge = conditions.GetSetupAge();
// if (IsValidSize(setupAge) &&
// IsValidSize(maxAllowedSetupAge) &&
// setupAge >= maxAllowedSetupAge)
// {
// conditions.Clean();
// }
//
return result;