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 =
//
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--)
{
//
@@ -671,6 +671,10 @@ bool DetectX121SMCXTWPVSiganlTrigger(
double decisionVale = decisionConditions.x121Conditions.valesBuffer[1];
double isNewDecisionVale = decisionConditions.x121Conditions.isNewVale;
//
bool isDecisionRSICrossedOverOverSold = decisionConditions.x121Conditions.isRSICrossedOverOverSold;
bool isDecisionRSICrossedUnderOverBought = decisionConditions.x121Conditions.isRSICrossedUnderOverBought;
//
// Waits For Price to Go Inside FVG ...
bool isPriceInsideOB = IsPriceInsideZone(
@@ -711,14 +715,18 @@ bool DetectX121SMCXTWPVSiganlTrigger(
isBullish =
isBullish &&
cBar.IsBullish() &&
isNewDecisionVale;
decisionVale < fvgOBUpper &&
decisionVale > fvgOBLower &&
isDecisionRSICrossedOverOverSold;
//
// Detect Bearish Conditions ...
isBearish =
isBearish &&
cBar.IsBearish() &&
isNewDecisionPeak;
decisionPeak < fvgOBUpper &&
decisionPeak > fvgOBLower &&
isDecisionRSICrossedUnderOverBought;
//
result = isBullish ||
+64 -10
View File
@@ -536,6 +536,10 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
return result;
}
//
double cLL = cBar.FindLowest(7, MODE_LOW);
double cHH = cBar.FindHighest(7, MODE_HIGH);
//
datetime cTime = TimeCurrent();
@@ -572,12 +576,21 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
if (isSetuped)
{
//
AddRef(
int items = AddX121SMCXTWPVConditionsIfNotExists(
mXTWPVConditions,
mXTWPVConditionsCollection);
mXTWPVConditionsCollection //
);
//
mXTWPVConditions.Clean();
//
// Try to Normalize Conditions Collection ...
int maxAllowed = 6;
CleanupArray(
mXTWPVConditionsCollection,
maxAllowed //
);
}
}
@@ -592,18 +605,38 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
//
// Looking For Conditions ...
int selectedIndex = 0;
X121SMCStrategyXTWPVSignalConditions mTmpConditions[];
Copy(
mXTWPVConditionsCollection,
mTmpConditions //
);
X121SMCStrategyXTWPVSignalConditions mConditions;
for (int i = 0; i < conditionsCount; i++)
{
//
// 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 ...
//
XFVGOrderBlock iFVGOB = mXTWPVConditionsCollection[i].fvgOB;
XFVGOrderBlock iFVGOB = mTmpConditions[i].fvgOB;
XCBaseObject *drawnObjects[];
mPOIDrawer.DrawFVGOrderBlock(
iFVGOB,
@@ -611,16 +644,37 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
);
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 ...
bool canTrigger = mXTWPVConditionsCollection[i].CanTrigger();
datetime triggerTime = mXTWPVConditionsCollection[i].triggerTime;
bool canTrigger = mTmpConditions[i].CanTrigger();
datetime triggerTime = mTmpConditions[i].triggerTime;
if (!canTrigger)
{
//
// Detect Signal Trigger ...
canTrigger = DetectX121SMCXTWPVSiganlTrigger(
mXTWPVConditionsCollection[i],
mTmpConditions[i],
symbol,
period,
mTriggerCycleHelper,
@@ -635,11 +689,11 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
result = canTrigger;
if (!result)
{
return result;
continue;
}
//
triggerTime = mXTWPVConditionsCollection[i].triggerTime;
triggerTime = mTmpConditions[i].triggerTime;
}
//
@@ -647,7 +701,7 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
{
//
selectedIndex = i;
mConditions = mXTWPVConditionsCollection[i];
mConditions = mTmpConditions[i];
break;
}
}