This commit is contained in:
2025-03-05 04:47:19 +03:30
parent 17c6704104
commit 8f9ad96b90
3 changed files with 507 additions and 36 deletions
@@ -339,6 +339,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
double targets[];
double reward = 0;
XBoxZone signalBox;
XOBFVG activatedZone;
double amountPercent = 0;
bool hasPriority = false;
bool hasSignalBox = false;
@@ -420,6 +421,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
//
result = false;
workingZone.Clean();
activatedZone.Clean();
hasWorkingZone = false;
//
@@ -462,6 +464,50 @@ class XCX121SMCXWZSignalDetector : public XCBase
}
}
//
// Detect Signal Box ...
hasSignalBox = hasWorkingZone &&
hasWaitingZones &&
workingZone.IsZoneRejected(
activatedZone,
zIndex //
);
if (hasSignalBox)
{
//
signalBox.Clean();
hasSignalBox = activatedZone.ToZone(signalBox);
if (hasSignalBox)
{
//
signalBox.to = cTime;
signalBoxDir = signalBox.dir;
provider = X121SMC_XWZ_PROVIDER_ACTIVATED_ZONE;
//
int idx = FindIndex(
activatedZone,
workingZone.waitingZones //
);
bool has = IsValidIndex(idx);
if (has)
{
//
ArrayRemove(
workingZone.waitingZones,
idx,
1 //
);
//
AddRef(
activatedZone,
workingZone.unavailableZones //
);
}
}
}
//
//
//
@@ -517,6 +563,9 @@ class XCX121SMCXWZSignalDetector : public XCBase
iObj.BoxWidth(1);
iObj.BoxColor(clrYellow);
iObj.BoxStyle(STYLE_SOLID);
//
workingZone.mDrawnObjects.Add(iObj);
}
//
@@ -535,20 +584,24 @@ class XCX121SMCXWZSignalDetector : public XCBase
//
double iSL = 0;
double signalBoxRange = (signalBox.upper - signalBox.lower);
if (signalBoxRange < points * 100)
{
iSL = pivot;
}
else
{
iSL = signalBox.lower + (signalBox.upper - signalBox.lower) / 2;
}
// double signalBoxRange = (signalBox.upper - signalBox.lower);
// if (signalBoxRange < points * 100)
// {
// iSL = pivot;
// }
// else
// {
// iSL = signalBox.lower + (signalBox.upper - signalBox.lower) / 2;
// }
// //
// if (provider == X121SMC_XWZ_PROVIDER_PV_ZONE)
// {
// }
//
if (provider == X121SMC_XWZ_PROVIDER_PV_ZONE)
{
}
iSL = pivot;
//
Add(
@@ -904,15 +957,10 @@ class XCX121SMCXWZSignalDetector : public XCBase
//
true, // Draw Supply Zone ...
true, // Draw Demand Zone ...
true // Draw Waiting Zones ...
true, // Draw Waiting Zones ...
true // Draw Waiting Zones Box Area ...
//
);
//
if (hasWaitingZones)
{
Print("Has Waiting Zones ...");
}
}
//
@@ -922,6 +970,10 @@ class XCX121SMCXWZSignalDetector : public XCBase
//
// Cleanup Resources ...
//
Clean(sls);
Clean(targets);
//
Clean(visionPoiEvents);
Clean(analysePoiEvents);
@@ -953,6 +1005,8 @@ class XCX121SMCXWZSignalDetector : public XCBase
consolidationXConditions.Clean();
//
signalBox.Clean();
activatedZone.Clean();
consolidationZBar.Clean();
//
+228 -13
View File
@@ -71,6 +71,7 @@ struct X121SMCStrategyXWZWorkingZone
//
XOBFVG waitingZones[];
XOBFVG unavailableZones[];
//
CArrayObj mDrawnObjects;
@@ -449,7 +450,8 @@ struct X121SMCStrategyXWZWorkingZone
// Detect OB FVG ...
result =
hasNewOrderBlock &&
hasNewFairValueGap;
hasNewFairValueGap &&
ob.GetDirection() == fvg.GetDirection();
if (result)
{
//
@@ -461,13 +463,8 @@ struct X121SMCStrategyXWZWorkingZone
if (has)
{
//
// Check Item Is not Exists ...
idx = FindIndex(
obFVG,
waitingZones //
);
has = !IsValidIndex(idx);
if (has)
has = IsExists(obFVG);
if (!has)
{
//
// New Waiting Zone ...
@@ -479,8 +476,18 @@ struct X121SMCStrategyXWZWorkingZone
else
{
//
// Update Exists Waiting Zone ...
waitingZones[idx].AddFVG(fvg);
// Check Item Is not Exists ...
idx = FindIndex(
obFVG,
waitingZones //
);
has = !IsValidIndex(idx);
if (!has)
{
//
// Update Exists Waiting Zone ...
waitingZones[idx].AddFVG(fvg);
}
}
}
}
@@ -591,8 +598,177 @@ struct X121SMCStrategyXWZWorkingZone
//
ZeroMemory(ob);
ZeroMemory(fvg);
ZeroMemory(supplyZone);
ZeroMemory(demandZone);
ZeroMemory(supply);
ZeroMemory(demand);
//
return result;
}
//
bool IsZoneRejected(
XOBFVG &zone,
int barIndex = 0 //
)
{
//
bool result = false;
//
// Cleanup Result ...
zone.Clean();
//
// Normalize Bar Index ...
if (barIndex < 0)
{
barIndex = 0;
}
//
// Validate ...
result = IsValid() &&
HasWaitingZones();
if (!result)
{
return result;
}
//
// Detecting Rejected Waiting Zone ...
int count = CountWaitingZones();
for (int i = 0; i < count; i++)
{
//
// Detecting XBoxZone Area of Waiting Zone ...
XBoxZone iBox;
bool hasBox = waitingZones[i]
.ToZone(iBox);
if (hasBox)
{
//
// Check Zone Rejection ...
int fromIDX = iBarShift(
iBox.symbol,
period,
iBox.from //
);
bool has = IsValidIndex(fromIDX);
if (has)
{
//
// Looking for Rejection ...
bool isBullish = iBox.IsBullish();
for (int j = barIndex; j < fromIDX; j++)
{
//
XOHCL iBar;
has = iBar.Init(
iBox.symbol,
period,
j //
);
if (has)
{
//
// Checking Box Rejected ...
//
bool isLowerReject =
//
isBullish &&
(iBar.low < iBox.upper &&
iBar.GetDown() > iBox.upper)
//
;
//
bool isUpperReject =
//
!isBullish &&
(iBar.high > iBox.lower &&
iBar.GetUp() < iBox.lower)
//
;
//
bool isRejected =
isLowerReject ||
isUpperReject;
result = isRejected;
if (result)
{
//
iBar.Clean();
break;
}
}
//
iBar.Clean();
}
}
}
//
// Validate Result ...
if (result)
{
//
iBox.Clean();
zone = waitingZones[i];
break;
}
//
iBox.Clean();
}
//
return result;
}
//
bool IsExists(XOBFVG &zone)
{
//
bool result = false;
//
// Check Validation ...
result = HasWaitingZones() ||
HasUnavailableZones();
if (!result)
{
return result;
}
//
int idx = -1;
//
// Check Index in Waiting Zones ...
idx = FindIndex(
zone,
waitingZones //
);
result = !IsValidIndex(idx);
if (!result)
{
return result;
}
//
// Check Index in Unavailable Zones ...
idx = FindIndex(
zone,
unavailableZones //
);
result = !IsValidIndex(idx);
if (!result)
{
return result;
}
//
return result;
@@ -957,7 +1133,8 @@ struct X121SMCStrategyXWZWorkingZone
XCPOIDrawer *drawer,
bool drawSupplyZone = false,
bool drawDemandZone = false,
bool drawWaitingZones = false //
bool drawWaitingZones = false,
bool drawWaitingZonesBoxArea = false //
)
{
//
@@ -1220,6 +1397,32 @@ struct X121SMCStrategyXWZWorkingZone
mDrawnObjects.Add(iObjects[j]);
}
}
//
if (drawWaitingZonesBoxArea)
{
//
XBoxZone iBox;
has = waitingZones[i].ToZone(
iBox //
);
if (has)
{
//
XCBoxObject *iBoxObj;
has = drawer.DrawBox(
iBox,
iBoxObj //
);
if (has)
{
mDrawnObjects.Add(iBoxObj);
}
}
//
iBox.Clean();
}
}
}
}
@@ -1257,6 +1460,18 @@ struct X121SMCStrategyXWZWorkingZone
return ArraySize(waitingZones);
}
//
bool HasUnavailableZones()
{
return HasChild(unavailableZones);
}
//
int CounUnavailableZones()
{
return ArraySize(unavailableZones);
}
//
};