This commit is contained in:
2025-02-24 19:15:41 +03:30
parent cee35a424b
commit 3ed72f0271
4 changed files with 634 additions and 212 deletions
+283 -92
View File
@@ -1273,42 +1273,6 @@ bool IsBoxUsed(
return result; return result;
} }
/**
* Converts a Consolidation Zone ...
*
* @param zone: XConsolidationZone instance Reference ...
* @param dest: XCZone pointer Reference ...
*
* @return ( bool )
*/
bool ToZone(
XConsolidationZone &zone,
XCZone *&dest //
)
{
//
bool result = false;
//
dest = NULL;
//
result = zone.IsValid();
if (!result)
{
return result;
}
//
dest = new XCZone();
dest.Upper(zone.upper);
dest.Lower(zone.lower);
result = dest.IsValidBoundary();
//
return result;
}
/** /**
* Converts to XBoxZone ... * Converts to XBoxZone ...
* *
@@ -1586,7 +1550,7 @@ bool ToBox(
box.upper = item.upper; box.upper = item.upper;
box.lower = item.lower; box.lower = item.lower;
box.dir = item.breakDir; box.dir = item.breakDir;
box.from = item.initTime; box.from = item.From();
box.symbol = item.symbol; box.symbol = item.symbol;
box.period = item.period; box.period = item.period;
box.to = item.breakerBar.time; box.to = item.breakerBar.time;
@@ -1600,18 +1564,20 @@ bool ToBox(
} }
/** /**
* Get Oldest Zone ... * Converts to XBoxZone ...
* *
* @return ( int ) * @return ( bool )
*/ */
int GetOldest( int ToBox(
XCZone *&source[] // XConsolidationZone &source[],
XBoxZone &dest[] //
) )
{ {
// //
int result = -1; int result = 0;
// //
Clean(dest);
int count = ArraySize(source); int count = ArraySize(source);
if (!IsValidSize(count)) if (!IsValidSize(count))
{ {
@@ -1619,68 +1585,36 @@ int GetOldest(
} }
// //
XCZone *oldest = NULL;
for (int i = 0; i < count; i++) for (int i = 0; i < count; i++)
{ {
// //
XCZone *iZone = source[i]; XConsolidationZone iZone = source[i];
// //
bool canSet = XBoxZone iBox;
oldest == NULL || bool hasBox = ToBox(
(oldest != NULL && iBox,
oldest.From() > iZone.From()); iZone //
if (canSet) );
//
if (hasBox)
{ {
// //
result = i; AddRef(
oldest = iZone; iBox,
dest //
);
} }
}
//
return result;
}
/**
* Get Youngest Zone ...
*
* @return ( int )
*/
int GetYoungest(
XCZone *&source[] //
)
{
//
int result = -1;
//
int count = ArraySize(source);
if (!IsValidSize(count))
{
return result;
}
//
XCZone *youngest = NULL;
for (int i = 0; i < count; i++)
{
//
XCZone *iZone = source[i];
// //
bool canSet = iBox.Clean();
youngest == NULL || iZone.Clean();
(youngest != NULL &&
youngest.From() < iZone.From());
if (canSet)
{
//
result = i;
youngest = iZone;
}
} }
//
result = ArraySize(dest);
// //
return result; return result;
} }
@@ -1726,6 +1660,9 @@ int GetOldest(
} }
} }
//
selected.Clean();
// //
return result; return result;
} }
@@ -1771,6 +1708,9 @@ int GetYoungest(
} }
} }
//
selected.Clean();
// //
return result; return result;
} }
@@ -1816,6 +1756,9 @@ int GetHighest(
} }
} }
//
selected.Clean();
// //
return result; return result;
} }
@@ -1868,6 +1811,254 @@ int GetLowest(
return result; return result;
} }
/**
* Get Oldest Box Index ...
*
* @param source: XBoxZone instance Reference Collection ...
*
* @return ( int )
*/
int GetOldest(
XConsolidationZone &source[] //
)
{
//
int result = -1;
//
int count = ArraySize(source);
if (!IsValidSize(count))
{
return result;
}
//
XBoxZone tmpBoxes[];
int boxesCount = ToBox(
source,
tmpBoxes //
);
if (!IsValidSize(boxesCount))
{
//
Clean(tmpBoxes);
return result;
}
//
XBoxZone selected;
for (int i = 0; i < boxesCount; i++)
{
//
XBoxZone iBox = tmpBoxes[i];
//
bool canSet =
!selected.IsValid()
? true
: selected.from > iBox.from;
if (canSet)
{
//
result = i;
selected = iBox;
}
}
//
Clean(tmpBoxes);
selected.Clean();
//
return result;
}
/**
* Get Youngest Box Index ...
*
* @param source: XBoxZone instance Reference Collection ...
*
* @return ( int )
*/
int GetYoungest(
XConsolidationZone &source[] //
)
{
//
int result = -1;
//
int count = ArraySize(source);
if (!IsValidSize(count))
{
return result;
}
//
XBoxZone tmpBoxes[];
int boxesCount = ToBox(
source,
tmpBoxes //
);
if (!IsValidSize(boxesCount))
{
//
Clean(tmpBoxes);
return result;
}
//
XBoxZone selected;
for (int i = 0; i < boxesCount; i++)
{
//
XBoxZone iBox = tmpBoxes[i];
//
bool canSet =
!selected.IsValid()
? true
: selected.from < iBox.from;
if (canSet)
{
//
result = i;
selected = iBox;
}
}
//
Clean(tmpBoxes);
selected.Clean();
//
return result;
}
/**
* Get Highest Box Index ...
*
* @param source: XBoxZone instance Reference Collection ...
*
* @return ( int )
*/
int GetHighest(
XConsolidationZone &source[] //
)
{
//
int result = -1;
//
int count = ArraySize(source);
if (!IsValidSize(count))
{
return result;
}
//
XBoxZone tmpBoxes[];
int boxesCount = ToBox(
source,
tmpBoxes //
);
if (!IsValidSize(boxesCount))
{
//
Clean(tmpBoxes);
return result;
}
//
XBoxZone selected;
for (int i = 0; i < boxesCount; i++)
{
//
XBoxZone iBox = tmpBoxes[i];
//
bool canSet =
!selected.IsValid()
? true
: selected.upper < iBox.upper;
if (canSet)
{
//
result = i;
selected = iBox;
}
}
//
Clean(tmpBoxes);
selected.Clean();
//
return result;
}
/**
* Get Lowest Box Index ...
*
* @param source: XBoxZone instance Reference Collection ...
*
* @return ( int )
*/
int GetLowest(
XConsolidationZone &source[] //
)
{
//
int result = -1;
//
int count = ArraySize(source);
if (!IsValidSize(count))
{
return result;
}
//
XBoxZone tmpBoxes[];
int boxesCount = ToBox(
source,
tmpBoxes //
);
if (!IsValidSize(boxesCount))
{
//
Clean(tmpBoxes);
return result;
}
//
XBoxZone selected;
for (int i = 0; i < boxesCount; i++)
{
//
XBoxZone iBox = tmpBoxes[i];
//
bool canSet =
!selected.IsValid()
? true
: selected.lower > iBox.lower;
if (canSet)
{
//
result = i;
selected = iBox;
}
}
//
Clean(tmpBoxes);
selected.Clean();
//
return result;
}
// //
template <typename T> template <typename T>
void SortZones( void SortZones(
+347 -117
View File
@@ -34,6 +34,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
public: public:
// //
// Props ... // Props ...
XOBFVG chochZone;
XOBFVG targetZone; XOBFVG targetZone;
XOBFVG signalZone; XOBFVG signalZone;
XOBFVG waitingZone; XOBFVG waitingZone;
@@ -605,6 +606,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
// Checking Order Flow Break ... // Checking Order Flow Break ...
int breakedIDX = -1; int breakedIDX = -1;
bool isOrderFlowBreaked = bool isOrderFlowBreaked =
hasOrderFlow &&
workingZone.IsOrderFlowBreaked( workingZone.IsOrderFlowBreaked(
breakedIDX, breakedIDX,
true, // Force OB Breaked true, // Force OB Breaked
@@ -624,59 +626,21 @@ class XCX121SMCXWZSignalDetector : public XCBase
); );
// //
Clean(workingZone.orderFlow); signalZone = workingZone.orderFlow[breakedIDX];
hasOrderFlow = false; provider = X121SMC_XWZ_PROVIDER_ACTIVATED_CHOCH;
//
ArrayRemove(
workingZone.orderFlow,
breakedIDX,
1 //
);
// //
CleanupArray( CleanupArray(
workingZone.brokenOrderFlow, workingZone.brokenOrderFlow,
10 // 10 //
); );
//
// TODO: Here Implement CHOCH Trading Senario ...
//
}
result = !isOrderFlowBreaked;
if (!result)
{
//
Clean(visionPoiEvents);
Clean(analysePoiEvents);
Clean(decisionPoiEvents);
Clean(consolidationPoiEvents);
//
Clean(visionCycleEvents);
Clean(analyseCycleEvents);
Clean(decisionCycleEvents);
Clean(consolidationCycleEvents);
//
visionState.Clean();
analyseState.Clean();
decisionState.Clean();
consolidationState.Clean();
//
visionConditions.Clean();
analyseConditions.Clean();
decisionConditions.Clean();
consolidationConditions.Clean();
//
visionXConditions.Clean();
analyseXConditions.Clean();
decisionXConditions.Clean();
consolidationXConditions.Clean();
//
mConditions.Clean();
consolidationZBar.Clean();
//
return result;
} }
// //
@@ -1150,6 +1114,48 @@ class XCX121SMCXWZSignalDetector : public XCBase
waitingZone.Clean(); waitingZone.Clean();
} }
//
if (signalZone.IsValid() &&
provider == X121SMC_XWZ_PROVIDER_ACTIVATED_CHOCH)
{
//
ENUM_X_DIRECTION iForDir = Opposit(signalZone.GetDirection());
if (hasNewAnalyseOB &&
hasNewAnalyseFVG)
{
//
bool isSameDir =
newAnalyseOB.GetDirection() == iForDir &&
newAnalyseFVG.GetDirection() == iForDir;
bool isOneInsideAnoter =
//
(newAnalyseFVG.Upper() < newAnalyseOB.Upper() &&
newAnalyseFVG.Upper() > newAnalyseOB.Lower())
//
||
//
(newAnalyseOB.Upper() < newAnalyseFVG.Upper() &&
newAnalyseOB.Upper() > newAnalyseFVG.Lower())
//
;
//
bool isZoneDetected =
isSameDir &&
isOneInsideAnoter;
if (isZoneDetected)
{
//
XOBFVG iSignalZone;
iSignalZone.ob = newAnalyseOB;
iSignalZone.fvg = newAnalyseFVG;
//
chochZone = iSignalZone;
}
}
}
// //
ZeroMemory(newOB); ZeroMemory(newOB);
ZeroMemory(newFVG); ZeroMemory(newFVG);
@@ -1157,6 +1163,74 @@ class XCX121SMCXWZSignalDetector : public XCBase
ZeroMemory(newAnalyseFVG); ZeroMemory(newAnalyseFVG);
} }
//
bool isPriceInsideCHOCHZone = false;
bool hasCHOCHZone = chochZone.IsValid();
if (hasCHOCHZone)
{
//
XCBaseObject *objects[];
bool isCreated = visionCycleHelper
.mPOIDrawer
.DrawOBFVG(
chochZone,
objects //
);
if (isCreated)
{
AddDrawnObjects(objects);
}
//
XOHCL cBar;
bool isInited = cBar.Init(
symbol,
period,
cIndex //
);
//
isPriceInsideCHOCHZone =
isInited &&
cBar.low >= chochZone.fvg.Lower() &&
cBar.high <= chochZone.fvg.Upper();
if (isPriceInsideCHOCHZone)
{
//
// Reverse Trend and ReCalculate Requirements
// For CHOCH Tradng ...
//
trend = chochZone.GetDirection();
//
isBullish = IsBullish(trend);
isBearish = IsBearish(trend);
//
bool hasPriority = workingZone
.DetectPriority(
priority,
trend,
zIndex,
period //
);
//
bool hasRewardAmount = CalculateRiskReward(
priority,
reward,
amountPercent //
);
//
provider = X121SMC_XWZ_PROVIDER_ACTIVATED_CHOCH;
}
//
cBar.Clean();
}
// //
// Reading Trand Line Value ... // Reading Trand Line Value ...
double zValue = workingZone.GetOrderFlowTrendLinePrice( double zValue = workingZone.GetOrderFlowTrendLinePrice(
@@ -1264,6 +1338,44 @@ class XCX121SMCXWZSignalDetector : public XCBase
signalZone.Clean(); signalZone.Clean();
} }
//
// TODO: Implement CHOCH Trading Senario ...
bool hasCHOCHConditions =
hasCHOCHZone &&
chochZone.IsValid() &&
isPriceInsideCHOCHZone &&
provider == X121SMC_XWZ_PROVIDER_ACTIVATED_CHOCH;
//
hasChochBullishConditions =
hasCHOCHConditions &&
chochZone.IsBullish();
hasChochBearishConditions =
hasCHOCHConditions &&
chochZone.IsBearish();
//
if (hasCHOCHConditions)
{
//
mConditions.signalZone = chochZone;
mConditions.targetZone = targetZone;
//
point = hasChochBullishConditions
? chochZone.ob.Upper()
: chochZone.ob.Lower();
//
pivot = hasChochBearishConditions
? chochZone.ob.Lower()
: chochZone.ob.Upper();
//
chochZone.Clean();
signalZone.Clean();
}
// //
// TODO: Implement Trend Line Trading Senario ... // TODO: Implement Trend Line Trading Senario ...
@@ -1276,6 +1388,9 @@ class XCX121SMCXWZSignalDetector : public XCBase
// //
// TODO: Implement Support and Resistance Trading Senario ... // TODO: Implement Support and Resistance Trading Senario ...
//
// TODO: Implement Mitigation Blocks Trading Senario ...
// //
// Summarize ... // Summarize ...
@@ -1287,6 +1402,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
hasSupResBullishConditions || hasSupResBullishConditions ||
hasTrendLineBullishConditions || hasTrendLineBullishConditions ||
hasOrderFlowhBullishConditions || hasOrderFlowhBullishConditions ||
hasInsideZoneBullishConditions ||
hasBQuarterLineBullishConditions hasBQuarterLineBullishConditions
// //
; ;
@@ -1299,6 +1415,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
hasSupResBearishConditions || hasSupResBearishConditions ||
hasTrendLineBearishConditions || hasTrendLineBearishConditions ||
hasOrderFlowhBearishConditions || hasOrderFlowhBearishConditions ||
hasInsideZoneBearishConditions ||
hasBQuarterLineBearishConditions hasBQuarterLineBearishConditions
// //
; ;
@@ -1533,13 +1650,21 @@ class XCX121SMCXWZSignalDetector : public XCBase
bullishScore, bullishScore,
bearishScore // bearishScore //
); );
bool isBullishScorePassed =
isBullish &&
bullishScore > (bearishScore * 1.5);
bool isBearishScorePassed =
isBearish &&
bearishScore > (bullishScore * 1.5);
bool isScorePassed = isBullishScorePassed ||
isBearishScorePassed;
// //
// Base SL Used Pivot of Conditions ... // Base SL Used Pivot of Conditions ...
Add( // Add(
conditions.pivot, // conditions.pivot,
sls // // sls //
); // );
// //
int lowestSupportIDX = -1; int lowestSupportIDX = -1;
@@ -1588,11 +1713,15 @@ class XCX121SMCXWZSignalDetector : public XCBase
; ;
// //
if (isBullish) isSupportRejected =
isBullish &&
isSupportRejected;
if (isSupportRejected)
{ {
// //
double vPivot = conditions.signalZone.supportZones[lowestSupportIDX].Lower(); double vPivot = conditions.signalZone.supportZones[lowestSupportIDX].Lower();
bool canSetPivot = conditions.pivot < vPivot; bool canSetPivot = vPivot > conditions.pivot &&
vPivot < conditions.point;
if (canSetPivot) if (canSetPivot)
{ {
// //
@@ -1609,7 +1738,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
if (IsValidIndex(highestResistanceIDX)) if (IsValidIndex(highestResistanceIDX))
{ {
// //
isSupportRejected = isResistanceRejected =
// //
isBarInited && isBarInited &&
( (
@@ -1627,11 +1756,15 @@ class XCX121SMCXWZSignalDetector : public XCBase
; ;
// //
if (isBearish) isResistanceRejected =
isBearish &&
isResistanceRejected;
if (isResistanceRejected)
{ {
// //
double vPivot = conditions.signalZone.resistanceZones[highestResistanceIDX].Upper(); double vPivot = conditions.signalZone.resistanceZones[highestResistanceIDX].Upper();
bool canSetPivot = conditions.pivot > vPivot; bool canSetPivot = vPivot < conditions.pivot &&
vPivot > conditions.point;
if (canSetPivot) if (canSetPivot)
{ {
// //
@@ -1650,73 +1783,122 @@ class XCX121SMCXWZSignalDetector : public XCBase
// //
// Consolidation Zone Detection ... // Consolidation Zone Detection ...
//
// Detect Consolidation Zones ...
// //
// Bullish Consolidation Zone ... // Bullish Consolidation Zone ...
XConsolidationZone lastBullishConsolidationZone; XConsolidationZone bullishCZones[];
bool hasBullishConsolidationZone = decisionCycleHelper bool hasBullishConsolidationZone = false;
.GetLastDirectionalConsolidationZone( XConsolidationZone bullishConsolidationZone;
X_DIRECTION_BULLISH, int bullishCZonesCount = decisionCycleHelper.FillConsolidationZones(
lastBullishConsolidationZone // X_DIRECTION_BULLISH,
); bullishCZones //
if (hasBullishConsolidationZone) );
bool hasBullishConsolidationZones = IsValidSize(bullishCZonesCount);
if (hasBullishConsolidationZones)
{ {
// //
// Validate Consolidation Zone ... int idx = -1;
hasBullishConsolidationZone = while (HasChild(bullishCZones))
lastBullishConsolidationZone.lower > conditions.pivot;
//
if (isBullish &&
hasBullishConsolidationZone)
{ {
// //
double vPivot = lastBullishConsolidationZone.lower; idx = GetYoungest(bullishCZones);
bool canSetPivot = conditions.pivot < vPivot; hasBullishConsolidationZone = IsValidIndex(idx);
if (canSetPivot) if (hasBullishConsolidationZone)
{ {
// //
Add( bullishConsolidationZone = bullishCZones[idx];
vPivot,
sls // //
ArrayRemove(
bullishCZones,
idx,
1 //
); );
//
// Check Zone Based On pivot, since this is the SL ...
hasBullishConsolidationZone =
isBullish &&
hasBullishConsolidationZone &&
bullishConsolidationZone.lower > conditions.pivot &&
bullishConsolidationZone.upper <= conditions.point;
if (hasBullishConsolidationZone)
{
//
XCConsolidationZoneObject *iObj;
bool isCreated = decisionCycleHelper.mPOIDrawer.CreateConsolidationZone(
bullishConsolidationZone,
iObj //
);
if (isCreated)
{
mObjects.Add(iObj);
}
//
Add(
bullishConsolidationZone.lower,
sls //
);
}
} }
} }
} }
lastBullishConsolidationZone.Clean(); Clean(bullishCZones);
bullishConsolidationZone.Clean();
// //
// Bearish Consolidation Zone ... // Bearish Consolidation Zone ...
XConsolidationZone lastBearishConsolidationZone; XConsolidationZone bearishCZones[];
bool hasBearishConsolidationZone = decisionCycleHelper bool hasBearishConsolidationZone = false;
.GetLastDirectionalConsolidationZone( XConsolidationZone bearishConsolidationZone;
X_DIRECTION_BEARISH, int bearishCZonesCount = decisionCycleHelper.FillConsolidationZones(
lastBearishConsolidationZone // X_DIRECTION_BEARISH,
); bearishCZones //
if (hasBearishConsolidationZone) );
bool hasBearishConsolidationZones = IsValidSize(bearishCZones);
if (hasBearishConsolidationZones)
{ {
// //
// Validate Consolidation Zone ... int idx = -1;
hasBearishConsolidationZone = while (HasChild(bearishCZones))
lastBearishConsolidationZone.upper < conditions.pivot;
//
if (isBearish &&
hasBearishConsolidationZone)
{ {
// //
double vPivot = lastBearishConsolidationZone.upper; idx = GetYoungest(bearishCZones);
bool canSetPivot = conditions.pivot > vPivot; hasBearishConsolidationZone = IsValidIndex(idx);
if (canSetPivot) if (hasBearishConsolidationZone)
{ {
// //
Add( bearishConsolidationZone = bearishCZones[idx];
vPivot,
sls // //
ArrayRemove(
bearishCZones,
idx,
1 //
); );
//
hasBearishConsolidationZone =
isBearish &&
hasBearishConsolidationZone &&
bearishConsolidationZone.upper < conditions.pivot &&
bearishConsolidationZone.lower >= conditions.point;
if (hasBearishConsolidationZone)
{
//
Add(
bearishConsolidationZone.upper,
sls //
);
}
} }
} }
} }
lastBearishConsolidationZone.Clean(); Clean(bearishCZones);
bearishConsolidationZone.Clean();
// //
// Check VWap Crossing ... // Check VWap Crossing ...
@@ -1733,12 +1915,17 @@ class XCX121SMCXWZSignalDetector : public XCBase
decisionXConditions.isVWapSwitchedToBullishOrdered) decisionXConditions.isVWapSwitchedToBullishOrdered)
// //
; ;
if (isBullish &&
isVWapSwitchedToBullish) //
isVWapSwitchedToBullish =
isBullish &&
isVWapSwitchedToBullish;
if (isVWapSwitchedToBullish)
{ {
// //
double vPivot = decisionXConditions.vwapMin; double vPivot = decisionXConditions.vwapMin;
bool canSetPivot = conditions.pivot < vPivot; bool canSetPivot = vPivot > conditions.pivot &&
vPivot < conditions.point;
if (canSetPivot) if (canSetPivot)
{ {
// //
@@ -1761,12 +1948,17 @@ class XCX121SMCXWZSignalDetector : public XCBase
decisionXConditions.isVWapSwitchedToBearishOrdered) decisionXConditions.isVWapSwitchedToBearishOrdered)
// //
; ;
if (isBearish &&
isVWapSwitchedToBearish) //
isVWapSwitchedToBearish =
isBearish &&
isVWapSwitchedToBearish;
if (isVWapSwitchedToBearish)
{ {
// //
double vPivot = decisionXConditions.vwapMax; double vPivot = decisionXConditions.vwapMax;
bool canSetPivot = conditions.pivot > vPivot; bool canSetPivot = vPivot < conditions.pivot &&
vPivot > conditions.point;
if (canSetPivot) if (canSetPivot)
{ {
// //
@@ -1794,16 +1986,36 @@ class XCX121SMCXWZSignalDetector : public XCBase
); );
cBar.Clean(); cBar.Clean();
//
bool isCommonsPassed =
//
(isSupportRejected ||
isResistanceRejected ||
isVWapSwitchedToBullish ||
isVWapSwitchedToBearish ||
hasBullishConsolidationZone ||
hasBearishConsolidationZone)
//
;
// //
// Trigger Conditions ... // Trigger Conditions ...
//
bool canTriggerCHOCHZone =
//
isScorePassed &&
isCommonsPassed &&
conditions.provider == X121SMC_XWZ_PROVIDER_ACTIVATED_CHOCH
//
;
// //
bool canTriggerActivatedZone = bool canTriggerActivatedZone =
// //
// isPointBreaked && // isPointBreaked &&
(isSupportRejected || isScorePassed &&
hasBullishConsolidationZone) && isCommonsPassed &&
bullishScore > (bearishScore * 1.5) &&
conditions.provider == X121SMC_XWZ_PROVIDER_ACTIVATED_ZONE conditions.provider == X121SMC_XWZ_PROVIDER_ACTIVATED_ZONE
// //
; ;
@@ -1811,16 +2023,15 @@ class XCX121SMCXWZSignalDetector : public XCBase
// //
bool canTriggerPriceInsideZone = bool canTriggerPriceInsideZone =
// //
// isPointBreaked && isScorePassed &&
(isResistanceRejected || isCommonsPassed &&
hasBearishConsolidationZone) &&
bearishScore > (bullishScore * 1.5) &&
conditions.provider == X121SMC_XWZ_PROVIDER_PRICE_INSIDE_ZONE conditions.provider == X121SMC_XWZ_PROVIDER_PRICE_INSIDE_ZONE
// //
; ;
// //
bool canTrigger = (canTriggerActivatedZone || bool canTrigger = (canTriggerCHOCHZone ||
canTriggerActivatedZone ||
canTriggerPriceInsideZone); canTriggerPriceInsideZone);
// //
@@ -1887,7 +2098,20 @@ class XCX121SMCXWZSignalDetector : public XCBase
// //
double iAtr = decisionXConditions.atrBuffer[1]; double iAtr = decisionXConditions.atrBuffer[1];
iAtr *= 0; iAtr *= 1.5;
//
// Since Pivot Value almost used
// as Default SL, if there isn't any Refind SL
// we use Default ...
if (!HasChild(sls))
{
//
Add(
conditions.pivot,
sls //
);
}
// //
double slsMin = GetMin(sls); double slsMin = GetMin(sls);
@@ -1895,8 +2119,8 @@ class XCX121SMCXWZSignalDetector : public XCBase
// //
double sl = isBullish double sl = isBullish
? slsMax - iAtr ? slsMin - iAtr
: slsMin + iAtr; : slsMax + iAtr;
double risk = MathAbs(entry - sl); double risk = MathAbs(entry - sl);
// //
@@ -1953,6 +2177,9 @@ class XCX121SMCXWZSignalDetector : public XCBase
// //
; ;
//
return false;
// //
result = isCycleHelpersValid; result = isCycleHelpersValid;
if (!result) if (!result)
@@ -2417,7 +2644,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
// //
// Trail Stops Using Consolidation Zones ... // Trail Stops Using Consolidation Zones ...
bool canTraiLonglUsingCZone = bool canTraiLonglUsingCZone =
// //
(isLong && (isLong &&
isInProfit && isInProfit &&
@@ -2432,7 +2659,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
} }
// //
bool canTraiShortlUsingCZone = bool canTraiShortlUsingCZone =
// //
(!isLong && (!isLong &&
isInProfit && isInProfit &&
@@ -3264,6 +3491,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
void DeInit() void DeInit()
{ {
// //
chochZone.Clean();
signalZone.Clean(); signalZone.Clean();
targetZone.Clean(); targetZone.Clean();
mConditions.Clean(); mConditions.Clean();
@@ -3289,7 +3517,9 @@ class XCX121SMCXWZSignalDetector : public XCBase
value = NormalizeTime(value); value = NormalizeTime(value);
// //
chochZone.UpdateTo(value);
targetZone.UpdateTo(value); targetZone.UpdateTo(value);
signalZone.UpdateTo(value);
workingZone.UpdateTo(value); workingZone.UpdateTo(value);
mConditions.UpdateTo(value); mConditions.UpdateTo(value);
waitingZone.UpdateTo(value); waitingZone.UpdateTo(value);
@@ -31,6 +31,7 @@ enum ENUM_X121SMC_XWZ_PROVIDERS
{ {
X121SMC_XWZ_PROVIDER_NONE, X121SMC_XWZ_PROVIDER_NONE,
X121SMC_XWZ_PROVIDER_ACTIVATED_ZONE, X121SMC_XWZ_PROVIDER_ACTIVATED_ZONE,
X121SMC_XWZ_PROVIDER_ACTIVATED_CHOCH,
X121SMC_XWZ_PROVIDER_PRICE_INSIDE_ZONE, X121SMC_XWZ_PROVIDER_PRICE_INSIDE_ZONE,
}; };
@@ -371,9 +371,9 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
// //
// Configuring Global Protector ... // Configuring Global Protector ...
signal.trailSL = true; // signal.trailSL = true;
signal.trailSLStartOnReachTPLevel = 3; // signal.trailSLStartOnReachTPLevel = 3;
signal.fullTPLevel = signal.GetRiskRewardRatio(); // signal.fullTPLevel = signal.GetRiskRewardRatio();
// // // //
// mXSupDemOBSSignalDetector.RemoveDraws(); // mXSupDemOBSSignalDetector.RemoveDraws();