This commit is contained in:
2025-01-09 10:43:02 +03:30
parent 9158a6cc6d
commit a8ecc92e46
4 changed files with 76 additions and 13 deletions
+1 -1
View File
@@ -6509,7 +6509,7 @@ struct XFVGOrderBlock
// //
result = result =
// //
dir = valueDir dir == valueDir
// //
&& &&
// //
+1
View File
@@ -834,6 +834,7 @@ bool TestPOIState(
} }
// //
// Detect an FVG for Order Block ...
for (int j = fvgsCount - 1; j >= 0; j--) for (int j = fvgsCount - 1; j >= 0; j--)
{ {
// //
@@ -671,6 +671,10 @@ bool DetectX121SMCXTWPVSiganlTrigger(
double decisionVale = decisionConditions.x121Conditions.valesBuffer[1]; double decisionVale = decisionConditions.x121Conditions.valesBuffer[1];
double isNewDecisionVale = decisionConditions.x121Conditions.isNewVale; double isNewDecisionVale = decisionConditions.x121Conditions.isNewVale;
//
bool isDecisionRSICrossedOverOverSold = decisionConditions.x121Conditions.isRSICrossedOverOverSold;
bool isDecisionRSICrossedUnderOverBought = decisionConditions.x121Conditions.isRSICrossedUnderOverBought;
// //
// Waits For Price to Go Inside FVG ... // Waits For Price to Go Inside FVG ...
bool isPriceInsideOB = IsPriceInsideZone( bool isPriceInsideOB = IsPriceInsideZone(
@@ -711,14 +715,18 @@ bool DetectX121SMCXTWPVSiganlTrigger(
isBullish = isBullish =
isBullish && isBullish &&
cBar.IsBullish() && cBar.IsBullish() &&
isNewDecisionVale; decisionVale < fvgOBUpper &&
decisionVale > fvgOBLower &&
isDecisionRSICrossedOverOverSold;
// //
// Detect Bearish Conditions ... // Detect Bearish Conditions ...
isBearish = isBearish =
isBearish && isBearish &&
cBar.IsBearish() && cBar.IsBearish() &&
isNewDecisionPeak; decisionPeak < fvgOBUpper &&
decisionPeak > fvgOBLower &&
isDecisionRSICrossedUnderOverBought;
// //
result = isBullish || result = isBullish ||
+64 -10
View File
@@ -536,6 +536,10 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
return result; return result;
} }
//
double cLL = cBar.FindLowest(7, MODE_LOW);
double cHH = cBar.FindHighest(7, MODE_HIGH);
// //
datetime cTime = TimeCurrent(); datetime cTime = TimeCurrent();
@@ -572,12 +576,21 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
if (isSetuped) if (isSetuped)
{ {
// //
AddRef( int items = AddX121SMCXTWPVConditionsIfNotExists(
mXTWPVConditions, mXTWPVConditions,
mXTWPVConditionsCollection); mXTWPVConditionsCollection //
);
// //
mXTWPVConditions.Clean(); mXTWPVConditions.Clean();
//
// Try to Normalize Conditions Collection ...
int maxAllowed = 6;
CleanupArray(
mXTWPVConditionsCollection,
maxAllowed //
);
} }
} }
@@ -592,18 +605,38 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
// //
// Looking For Conditions ... // Looking For Conditions ...
int selectedIndex = 0; int selectedIndex = 0;
X121SMCStrategyXTWPVSignalConditions mTmpConditions[];
Copy(
mXTWPVConditionsCollection,
mTmpConditions //
);
X121SMCStrategyXTWPVSignalConditions mConditions; X121SMCStrategyXTWPVSignalConditions mConditions;
for (int i = 0; i < conditionsCount; i++) for (int i = 0; i < conditionsCount; i++)
{ {
// //
// Update Conditions ... // Update Conditions ...
mXTWPVConditionsCollection[i].UpdateOrderBlocks(); mTmpConditions[i].UpdateOrderBlocks();
//
// Retrieve Required Data ...
ENUM_X_DIRECTION iDir = mTmpConditions[i].dir;
bool isIBullish = IsBullish(iDir);
double iUpper = 0;
double iLower = 0;
bool iHasBoundary = mTmpConditions[i].fvgOB.GetBoundary(
iUpper,
iLower //
);
if (!iHasBoundary)
{
continue;
}
// //
// Draw Conditions ... // Draw Conditions ...
// //
XFVGOrderBlock iFVGOB = mXTWPVConditionsCollection[i].fvgOB; XFVGOrderBlock iFVGOB = mTmpConditions[i].fvgOB;
XCBaseObject *drawnObjects[]; XCBaseObject *drawnObjects[];
mPOIDrawer.DrawFVGOrderBlock( mPOIDrawer.DrawFVGOrderBlock(
iFVGOB, iFVGOB,
@@ -611,16 +644,37 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
); );
AddObjectsIfNotExists(drawnObjects); AddObjectsIfNotExists(drawnObjects);
//
// Check Broken Order Blocks and Remove them ...
bool isBreaked =
isBullish
? (cBar.close < iLower ||
pBar.close < iLower)
: (cBar.close > iUpper ||
cBar.close > iUpper);
if (isBreaked)
{
//
ArrayRemove(
mXTWPVConditionsCollection,
i,
1 //
);
//
continue;
}
// //
// Check Triggers ... // Check Triggers ...
bool canTrigger = mXTWPVConditionsCollection[i].CanTrigger(); bool canTrigger = mTmpConditions[i].CanTrigger();
datetime triggerTime = mXTWPVConditionsCollection[i].triggerTime; datetime triggerTime = mTmpConditions[i].triggerTime;
if (!canTrigger) if (!canTrigger)
{ {
// //
// Detect Signal Trigger ... // Detect Signal Trigger ...
canTrigger = DetectX121SMCXTWPVSiganlTrigger( canTrigger = DetectX121SMCXTWPVSiganlTrigger(
mXTWPVConditionsCollection[i], mTmpConditions[i],
symbol, symbol,
period, period,
mTriggerCycleHelper, mTriggerCycleHelper,
@@ -635,11 +689,11 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
result = canTrigger; result = canTrigger;
if (!result) if (!result)
{ {
return result; continue;
} }
// //
triggerTime = mXTWPVConditionsCollection[i].triggerTime; triggerTime = mTmpConditions[i].triggerTime;
} }
// //
@@ -647,7 +701,7 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
{ {
// //
selectedIndex = i; selectedIndex = i;
mConditions = mXTWPVConditionsCollection[i]; mConditions = mTmpConditions[i];
break; break;
} }
} }