last works on XCAEA Pivots ...

This commit is contained in:
2025-04-24 05:53:12 +03:30
parent a21799a9aa
commit 65178361d8
6 changed files with 3963 additions and 823 deletions
+25 -431
View File
@@ -421,7 +421,7 @@ int AddGuard(
//
bool DetectXCAEAConditions(
XBoxZone &boxes[],
XBoxZone &pivots[],
XCAEAConditions &conditions,
XBoxZone &pivotBox,
XBoxZone &box,
@@ -492,121 +492,6 @@ bool DetectXCAEAConditions(
//
// Reading Parameters ...
//
// KI ...
//
double cKI = conditions.kiBuffer[cIDX];
double pKI = conditions.kiBuffer[pIDX];
double p2KI = conditions.kiBuffer[p2IDX];
//
double cKIState = conditions.kiStateBuffer[cIDX];
double pKIState = conditions.kiStateBuffer[pIDX];
double p2KIState = conditions.kiStateBuffer[p2IDX];
//
// TKI ...
//
double cTKI = conditions.tkiBuffer[cIDX];
double pTKI = conditions.tkiBuffer[pIDX];
double p2TKI = conditions.tkiBuffer[p2IDX];
//
double cTKIState = conditions.tkiStateBuffer[cIDX];
double pTKIState = conditions.tkiStateBuffer[pIDX];
double p2TKIState = conditions.tkiStateBuffer[p2IDX];
//
// TREND ...
//
double cTrend = conditions.trendBuffer[cIDX];
double pTrend = conditions.trendBuffer[pIDX];
double p2Trend = conditions.trendBuffer[p2IDX];
//
double ctrendState = conditions.trendStateBuffer[cIDX];
double ptrendState = conditions.trendStateBuffer[pIDX];
double p2trendState = conditions.trendStateBuffer[p2IDX];
//
// SWING Low ...
double cSWL = conditions.swingLowBuffer[cIDX];
double pSWL = conditions.swingLowBuffer[pIDX];
double p2SWL = conditions.swingLowBuffer[p2IDX];
//
// SWING High ...
double cSWH = conditions.swingHighBuffer[cIDX];
double pSWH = conditions.swingHighBuffer[pIDX];
double p2SWH = conditions.swingHighBuffer[p2IDX];
//
// PEAK ...
double zPeak = conditions.peakBuffer[zIDX];
double cPeak = conditions.peakBuffer[cIDX];
double pPeak = conditions.peakBuffer[pIDX];
double p2Peak = conditions.peakBuffer[p2IDX];
double p3Peak = conditions.peakBuffer[p3IDX];
//
// VALE ...
double zVale = conditions.valeBuffer[zIDX];
double cVale = conditions.valeBuffer[cIDX];
double pVale = conditions.valeBuffer[pIDX];
double p2Vale = conditions.valeBuffer[p2IDX];
double p3Vale = conditions.valeBuffer[p3IDX];
//
// VIDYA ...
double zVidya = conditions.vidyaBuffer[zIDX];
double cVidya = conditions.vidyaBuffer[cIDX];
double pVidya = conditions.vidyaBuffer[pIDX];
double p2Vidya = conditions.vidyaBuffer[p2IDX];
double p3Vidya = conditions.vidyaBuffer[p3IDX];
//
double zVidyaState = conditions.vidyaStateBuffer[zIDX];
double cVidyaState = conditions.vidyaStateBuffer[cIDX];
double pVidyaState = conditions.vidyaStateBuffer[pIDX];
double p2VidyaState = conditions.vidyaStateBuffer[p2IDX];
double p3VidyaState = conditions.vidyaStateBuffer[p3IDX];
//
// RSI ...
double zRSI = conditions.rsiBuffer[zIDX];
double cRSI = conditions.rsiBuffer[cIDX];
double pRSI = conditions.rsiBuffer[pIDX];
double p2RSI = conditions.rsiBuffer[p2IDX];
double p3RSI = conditions.rsiBuffer[p3IDX];
//
// CCI ...
double zCCI = conditions.cciBuffer[zIDX];
double cCCI = conditions.cciBuffer[cIDX];
double pCCI = conditions.cciBuffer[pIDX];
double p2CCI = conditions.cciBuffer[p2IDX];
double p3CCI = conditions.cciBuffer[p3IDX];
//
// RVI ...
//
double zRVI = conditions.rviBuffer[zIDX];
double cRVI = conditions.rviBuffer[cIDX];
double pRVI = conditions.rviBuffer[pIDX];
double p2RVI = conditions.rviBuffer[p2IDX];
double p3RVI = conditions.rviBuffer[p3IDX];
//
double zRVISignal = conditions.rviSignalBuffer[zIDX];
double cRVISignal = conditions.rviSignalBuffer[cIDX];
double pRVISignal = conditions.rviSignalBuffer[pIDX];
double p2RVISignal = conditions.rviSignalBuffer[p2IDX];
double p3RVISignal = conditions.rviSignalBuffer[p3IDX];
//
// Reading Bars ...
@@ -770,293 +655,17 @@ bool DetectXCAEAConditions(
// Conditions ...
//
bool isRSIBullish =
zRSI >= cRSI &&
cRSI > pRSI;
bool isRSIBearish =
zRSI <= cRSI &&
cRSI < pRSI;
//
bool isCCIBullish =
zCCI >= cCCI &&
cCCI > pCCI &&
(zCCI > conditions.cciOSLevel ||
cCCI > conditions.cciOSLevel);
bool isCCIBearish =
zCCI >= cCCI &&
cCCI > pCCI &&
(zCCI < conditions.cciOBLevel ||
cCCI < conditions.cciOBLevel);
//
// Detect Selected Box ...
XBoxZone oscBoxes[];
XBoxZone lastOSCBox;
// Detect Selected Pivot ...
XBoxZone oscPivots[];
XBoxZone lastOSCPivot;
double providedSL = 0;
bool isBoxFVG = false;
bool hasOSCBox = false;
bool hasPivotBox = false;
bool isBoxPeakVale = false;
bool isBoxRejected = false;
bool isBoxActivated = false;
bool isBoxFullSifeRejected = false;
bool hasBoxes = HasChild(boxes);
if (hasBoxes)
bool hasPivots = HasChild(pivots);
if (hasPivots)
{
//
// Detect Selected Boxes ...
XBoxZone tmp[];
Copy(
boxes,
tmp //
);
while (HasChild(tmp))
{
//
idx = GetYoungest(tmp);
has = IsValidIndex(idx);
if (!has)
{
break;
}
//
XBoxZone iBox;
iBox = tmp[idx];
ArrayRemove(
tmp,
idx,
1 //
);
//
// Check Selected Box not RSI or CCI ...
isBoxFVG = Contains(
"XCA_FVG",
iBox.type //
);
isBoxPeakVale =
Contains(
"XCA_PEAKSWHRES",
iBox.type //
) ||
Contains(
"XCA_VALESWLSUP",
iBox.type //
);
has = isBoxFVG ||
isBoxPeakVale;
if (!has)
{
//
bool isOSC = Contains(
"XCA_CCI_VALE",
iBox.type //
) ||
Contains(
"XCA_CCI_PEAK",
iBox.type //
) ||
Contains(
"XCA_RSI_VALE",
iBox.type //
) ||
Contains(
"XCA_RSI_PEAK",
iBox.type //
);
if (isOSC)
{
//
AddRef(
iBox,
oscBoxes //
);
}
//
iBox.Clean();
//
continue;
}
//
bool isBullish = iBox.IsBullish();
bool isBearish = iBox.IsBearish();
//
double rejectedCheckPrice =
isBullish
? iBox.upper
: iBox.lower;
double rejectedFullCheckPrice =
isBullish
? iBox.lower
: iBox.upper;
//
// Check Box Selecting Senarios ...
//
// Selecting Rejected Boxes ...
isBoxRejected = cBar.IsRejected(
rejectedCheckPrice,
iBox.dir,
false,
false //
);
//
// Selecting Rejected Boxes ...
isBoxFullSifeRejected = cBar.IsRejected(
rejectedFullCheckPrice,
iBox.dir,
false,
false //
);
//
// Selecting Activation Boxes ...
//
bool isBullishActivated =
isBullish &&
cBar.IsBullish() &&
cBar.GetUp() > rejectedCheckPrice &&
cBar.GetDown() < rejectedCheckPrice;
//
bool isBearishActivated =
isBearish &&
cBar.IsBearish() &&
cBar.GetUp() > rejectedCheckPrice &&
cBar.GetDown() < rejectedCheckPrice;
//
isBoxActivated = isBullishActivated ||
isBearishActivated;
//
// Detect Box is Selected or not ...
has =
isBoxRejected ||
isBoxActivated ||
isBoxFullSifeRejected;
if (has)
{
//
pivotBox = iBox;
//
iBox.Clean();
break;
}
//
iBox.Clean();
}
//
Clean(tmp);
}
//
// Check OSC Boxes ...
bool hasOSCBoxes = HasChild(oscBoxes);
if (hasOSCBoxes)
{
//
// Detect Newest OSC Box ...
idx = GetYoungest(oscBoxes);
has = IsValidIndex(idx);
if (has)
{
lastOSCBox = oscBoxes[idx];
}
//
// Validate OSC Box is Valid or not ...
has = lastOSCBox.IsValid();
if (has)
{
//
// Check Bar is Inside OSC Box or not ...
has = cBar.time > lastOSCBox.from &&
cBar.time <= lastOSCBox.to;
if (!has)
{
lastOSCBox.Clean();
}
}
//
hasOSCBox = lastOSCBox.IsValid();
if (hasOSCBox)
{
// //
// XCBoxObject *iObj;
// has = helper.poiDrawer.DrawBox(
// lastOSCBox,
// iObj //
// );
// if (has) {
// iObj.BoxWidth(4);
// }
}
}
//
// Force Conditions to Have Selected Box ...
hasPivotBox = hasBoxes &&
pivotBox.IsValid();
if (hasPivotBox)
{
// //
// pivotBox.to = TimeCurrent();
// //
// // Draw Pivot Box Here ...
// if (isBoxPeakVale)
// {
// //
// XCBoxObject *iObj;
// has = helper.poiDrawer.DrawBox(
// pivotBox,
// iObj //
// );
// if (has)
// {
// //
// iObj.BoxWidth(5);
// iObj.BoxColor(clrDodgerBlue);
// Print("Draw Pivot Box ...");
// }
// }
}
//
// If all Conditions required Boxes ...
// if (!result)
// {
// //
// zBar.Clean();
// cBar.Clean();
// pBar.Clean();
// p2Bar.Clean();
// p3Bar.Clean();
// p4Bar.Clean();
// //
// box.Clean();
// pivotBox.Clean();
// conditions.Clean();
// //
// return result;
// }
//
// Signaller Summarization ...
@@ -1066,32 +675,14 @@ bool DetectXCAEAConditions(
//
bool isCond1Bullish =
//
false &&
hasPivotBox &&
isBoxPeakVale &&
isScoreBullish &&
pivotBox.IsBullish() &&
(conditions.isValeUnderLast ||
(conditions.isValeSameLast &&
pConditions.isValeUnderLast)) &&
conditions.isRSICrossedOverOS &&
conditions.isCCICrossedOverOS
false
//
;
//
bool isCond1Bearish =
//
false &&
hasPivotBox &&
isBoxPeakVale &&
isScoreBearish &&
pivotBox.IsBearish() &&
(conditions.isPeakOverLast ||
(conditions.isPeakSameLast &&
pConditions.isPeakOverLast)) &&
conditions.isRSICrossedUnderOB &&
conditions.isCCICrossedUnderOB
false
//
;
@@ -1119,20 +710,14 @@ bool DetectXCAEAConditions(
//
bool isCond2Bullish =
//
hasOSCBox &&
// cVidyaState < 0 &&
lastOSCBox.IsBullish() // &&
// lastOSCBox.upper < cVidya
false
//
;
//
bool isCond2Bearish =
//
hasOSCBox &&
// cVidyaState > 0 &&
lastOSCBox.IsBearish() // &&
// lastOSCBox.lower > cVidya
false
//
;
@@ -1143,24 +728,30 @@ bool DetectXCAEAConditions(
{
//
providedSL =
isCond1Bullish
isCond2Bullish
? MathMin(pBar.low, pivotBox.lower)
: MathMax(pBar.high, pivotBox.upper);
//
Print("Cond2");
isCond2Bullish = false;
isCond2Bearish = false;
}
//
// Cond3 Act Using CCi Peaks and Vales ...
//
bool isCond3Bullish = false;
bool isCond3Bullish =
//
false
//
;
//
bool isCond3Bearish = false;
bool isCond3Bearish =
//
false
//
;
//
bool isCond3 = isCond3Bullish ||
@@ -1168,6 +759,10 @@ bool DetectXCAEAConditions(
if (isCond3)
{
//
providedSL =
isCond3Bullish
? MathMin(pBar.low, pivotBox.lower)
: MathMax(pBar.high, pivotBox.upper);
//
Print("Cond3");
@@ -1267,7 +862,6 @@ bool DetectXCAEAConditions(
p2Bar.Clean();
p3Bar.Clean();
p4Bar.Clean();
Clean(oscBoxes);
pConditions.Clean();
//