implement trend pivots ...
This commit is contained in:
@@ -622,6 +622,9 @@ class XCXCAEAPOIDetector : public XCBase
|
|||||||
//
|
//
|
||||||
virtual void Default()
|
virtual void Default()
|
||||||
{
|
{
|
||||||
|
//
|
||||||
|
// COMMON ...
|
||||||
|
|
||||||
//
|
//
|
||||||
maxAllowedPivots = 50;
|
maxAllowedPivots = 50;
|
||||||
pivotVerifications = 5;
|
pivotVerifications = 5;
|
||||||
@@ -630,30 +633,41 @@ class XCXCAEAPOIDetector : public XCBase
|
|||||||
|
|
||||||
//
|
//
|
||||||
// PV ...
|
// PV ...
|
||||||
|
|
||||||
|
//
|
||||||
|
detectPeakPivots = false;
|
||||||
|
detectValePivots = false;
|
||||||
|
|
||||||
|
//
|
||||||
applySwingsOnPVPivots = false;
|
applySwingsOnPVPivots = false;
|
||||||
selectRejectedPVPivots = false;
|
selectRejectedPVPivots = false;
|
||||||
selectEngulfedPVPivots = false;
|
selectEngulfedPVPivots = false;
|
||||||
applySupportAndResistanceOnPVPivots = false;
|
applySupportAndResistanceOnPVPivots = false;
|
||||||
|
|
||||||
//
|
|
||||||
// PEAK ...
|
|
||||||
detectPeakPivots = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
// VALES ...
|
|
||||||
detectValePivots = false;
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// FVG ...
|
// FVG ...
|
||||||
|
|
||||||
|
//
|
||||||
|
detectFVGBullishPivots = false;
|
||||||
|
detectFVGBearishPivots = false;
|
||||||
|
|
||||||
|
//
|
||||||
maxAllowedFVGLife = 0;
|
maxAllowedFVGLife = 0;
|
||||||
detectFVGTypeOne = false;
|
detectFVGTypeOne = false;
|
||||||
detectFVGTypeTwo = false;
|
detectFVGTypeTwo = false;
|
||||||
applyPVToFVGBoundary = false;
|
applyPVToFVGBoundary = false;
|
||||||
detectFVGBullishPivots = false;
|
selectRejectedFVGPivots = false;
|
||||||
detectFVGBearishPivots = false;
|
selectEngulfedFVGPivots = false;
|
||||||
applyLastBarToFVGBoundary = false;
|
applyLastBarToFVGBoundary = false;
|
||||||
selectOnlyFVGWhichHasIndirectionalLastBar = false;
|
selectOnlyFVGWhichHasIndirectionalLastBar = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
// TREND ...
|
||||||
|
|
||||||
|
//
|
||||||
|
detectTrendBullishPivots = false;
|
||||||
|
detectTrendBearishPivots = false;
|
||||||
|
|
||||||
//
|
//
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -689,6 +703,8 @@ class XCXCAEAPOIDetector : public XCBase
|
|||||||
newValePivotDetected = false;
|
newValePivotDetected = false;
|
||||||
newFVGBullishPivotDetected = false;
|
newFVGBullishPivotDetected = false;
|
||||||
newFVGBearishPivotDetected = false;
|
newFVGBearishPivotDetected = false;
|
||||||
|
newTrendBullishPivotDetected = false;
|
||||||
|
newTrendBearishPivotDetected = false;
|
||||||
|
|
||||||
//
|
//
|
||||||
int index = barIndex;
|
int index = barIndex;
|
||||||
@@ -783,7 +799,7 @@ class XCXCAEAPOIDetector : public XCBase
|
|||||||
// FVG ...
|
// FVG ...
|
||||||
|
|
||||||
//
|
//
|
||||||
// FVG Bullish ...
|
// Bullish ...
|
||||||
if (detectFVGBullishPivots)
|
if (detectFVGBullishPivots)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
@@ -799,7 +815,7 @@ class XCXCAEAPOIDetector : public XCBase
|
|||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// FVG Bearish ...
|
// Bearish ...
|
||||||
if (detectFVGBearishPivots)
|
if (detectFVGBearishPivots)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
@@ -814,6 +830,41 @@ class XCXCAEAPOIDetector : public XCBase
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// TREND ...
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bullish ...
|
||||||
|
if (detectTrendBullishPivots)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
newTrendBullishPivotDetected = DetectTrendPivot(
|
||||||
|
barIndex,
|
||||||
|
X_DIRECTION_BULLISH,
|
||||||
|
zBar,
|
||||||
|
cBar,
|
||||||
|
pBar,
|
||||||
|
p2Bar,
|
||||||
|
conditions //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bearish ...
|
||||||
|
if (detectTrendBearishPivots)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
newTrendBearishPivotDetected = DetectTrendPivot(
|
||||||
|
barIndex,
|
||||||
|
X_DIRECTION_BEARISH,
|
||||||
|
zBar,
|
||||||
|
cBar,
|
||||||
|
pBar,
|
||||||
|
p2Bar,
|
||||||
|
conditions //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Others ...
|
// Others ...
|
||||||
|
|
||||||
@@ -843,14 +894,21 @@ class XCXCAEAPOIDetector : public XCBase
|
|||||||
|
|
||||||
//
|
//
|
||||||
// PV ...
|
// PV ...
|
||||||
ValidatePeakVales(
|
ValidatePeakValePivots(
|
||||||
unavailables,
|
unavailables,
|
||||||
barIndex //
|
barIndex //
|
||||||
);
|
);
|
||||||
|
|
||||||
//
|
//
|
||||||
// FVG ...
|
// FVG ...
|
||||||
ValidateFVGs(
|
ValidateFVGPivots(
|
||||||
|
unavailables,
|
||||||
|
barIndex //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// TREND ...
|
||||||
|
ValidateTrendPivots(
|
||||||
unavailables,
|
unavailables,
|
||||||
barIndex //
|
barIndex //
|
||||||
);
|
);
|
||||||
@@ -908,6 +966,13 @@ class XCXCAEAPOIDetector : public XCBase
|
|||||||
pivots,
|
pivots,
|
||||||
false //
|
false //
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
Copy(
|
||||||
|
trendBullishPivots,
|
||||||
|
pivots,
|
||||||
|
false //
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -927,6 +992,13 @@ class XCXCAEAPOIDetector : public XCBase
|
|||||||
pivots,
|
pivots,
|
||||||
false //
|
false //
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
Copy(
|
||||||
|
trendBearishPivots,
|
||||||
|
pivots,
|
||||||
|
false //
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -964,7 +1036,7 @@ class XCXCAEAPOIDetector : public XCBase
|
|||||||
bool applySupportAndResistanceOnPVPivots; // Apply Support and Resistance on PV Pivots ...
|
bool applySupportAndResistanceOnPVPivots; // Apply Support and Resistance on PV Pivots ...
|
||||||
|
|
||||||
//
|
//
|
||||||
void ValidatePeakVales(
|
void ValidatePeakValePivots(
|
||||||
XBoxZone &unavailables[],
|
XBoxZone &unavailables[],
|
||||||
int barIndex = 0 //
|
int barIndex = 0 //
|
||||||
)
|
)
|
||||||
@@ -1681,6 +1753,8 @@ class XCXCAEAPOIDetector : public XCBase
|
|||||||
bool detectFVGTypeOne; // Detect FVG Type One ( Validating Using MAnalyser ) ...
|
bool detectFVGTypeOne; // Detect FVG Type One ( Validating Using MAnalyser ) ...
|
||||||
bool detectFVGTypeTwo; // Detect FVG Type Two ( Validating Using PV ) ...
|
bool detectFVGTypeTwo; // Detect FVG Type Two ( Validating Using PV ) ...
|
||||||
bool applyPVToFVGBoundary; // Apply PV to FVG Boundary ...
|
bool applyPVToFVGBoundary; // Apply PV to FVG Boundary ...
|
||||||
|
bool selectRejectedFVGPivots; // Select Rejected FVG Pivots ...
|
||||||
|
bool selectEngulfedFVGPivots; // Select Engulfed FVG Pivots ...
|
||||||
bool applyLastBarToFVGBoundary; // Apply Last Bar to FVG Boundary ...
|
bool applyLastBarToFVGBoundary; // Apply Last Bar to FVG Boundary ...
|
||||||
bool selectOnlyFVGWhichHasIndirectionalLastBar; // Select Only FVGs which has Indirectionsl Last Bar, uses to Order Block ...
|
bool selectOnlyFVGWhichHasIndirectionalLastBar; // Select Only FVGs which has Indirectionsl Last Bar, uses to Order Block ...
|
||||||
|
|
||||||
@@ -1793,6 +1867,44 @@ class XCXCAEAPOIDetector : public XCBase
|
|||||||
double pMAC = conditions.macBuffer[pIDX];
|
double pMAC = conditions.macBuffer[pIDX];
|
||||||
double p2MAC = conditions.macBuffer[p2IDX];
|
double p2MAC = conditions.macBuffer[p2IDX];
|
||||||
|
|
||||||
|
//
|
||||||
|
// Detecting Bar Conditions ...
|
||||||
|
|
||||||
|
//
|
||||||
|
ENUM_X_DIRECTION p2BarDir;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Rejected ...
|
||||||
|
bool isP2BarRejected = helper
|
||||||
|
.barAnalyser
|
||||||
|
.IsRejected(
|
||||||
|
p2Bar,
|
||||||
|
p2BarDir,
|
||||||
|
false, // Force Type ...
|
||||||
|
true // Force Fibo Pressure ...
|
||||||
|
);
|
||||||
|
bool isP2BarBullishRejected =
|
||||||
|
isP2BarRejected &&
|
||||||
|
IsBullish(p2BarDir);
|
||||||
|
bool isP2BarBearishRejected =
|
||||||
|
isP2BarRejected &&
|
||||||
|
IsBearish(p2BarDir);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Engulfed ...
|
||||||
|
bool isP2BarEngulfed = helper
|
||||||
|
.barAnalyser
|
||||||
|
.IsEngulfed(
|
||||||
|
p2Bar,
|
||||||
|
p2BarDir //
|
||||||
|
);
|
||||||
|
bool isP2BarBullishEngulfed =
|
||||||
|
isP2BarEngulfed &&
|
||||||
|
IsBullish(p2BarDir);
|
||||||
|
bool isP2BarBearishEngulfed =
|
||||||
|
isP2BarEngulfed &&
|
||||||
|
IsBearish(p2BarDir);
|
||||||
|
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
@@ -1924,6 +2036,45 @@ class XCXCAEAPOIDetector : public XCBase
|
|||||||
p3Bar.Clean();
|
p3Bar.Clean();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Validate FVG based on Selection Type ...
|
||||||
|
if (hasEndCondition && (selectRejectedFVGPivots ||
|
||||||
|
selectEngulfedFVGPivots))
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Checking Bar Passed ...
|
||||||
|
|
||||||
|
//
|
||||||
|
bool canSelectUsingBar =
|
||||||
|
selectRejectedFVGPivots ||
|
||||||
|
selectEngulfedFVGPivots;
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isPivotRejected =
|
||||||
|
selectRejectedFVGPivots &&
|
||||||
|
(forBullish
|
||||||
|
? isP2BarBullishRejected
|
||||||
|
: isP2BarBearishRejected);
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isPivotEngulfed =
|
||||||
|
selectEngulfedFVGPivots &&
|
||||||
|
(forBullish
|
||||||
|
? isP2BarBullishEngulfed
|
||||||
|
: isP2BarBearishEngulfed);
|
||||||
|
|
||||||
|
bool isBarPassed =
|
||||||
|
!canSelectUsingBar
|
||||||
|
? true
|
||||||
|
: (isPivotRejected ||
|
||||||
|
isPivotEngulfed);
|
||||||
|
|
||||||
|
//
|
||||||
|
hasEndCondition =
|
||||||
|
isBarPassed &&
|
||||||
|
hasEndCondition;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// ReInstance Pivot ...
|
// ReInstance Pivot ...
|
||||||
if (hasStartCondition)
|
if (hasStartCondition)
|
||||||
@@ -2052,7 +2203,7 @@ class XCXCAEAPOIDetector : public XCBase
|
|||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
void ValidateFVGs(
|
void ValidateFVGPivots(
|
||||||
XBoxZone &unavailables[],
|
XBoxZone &unavailables[],
|
||||||
int barIndex = 0 //
|
int barIndex = 0 //
|
||||||
)
|
)
|
||||||
@@ -2127,6 +2278,388 @@ class XCXCAEAPOIDetector : public XCBase
|
|||||||
return ArraySize(fvgBearishPivots);
|
return ArraySize(fvgBearishPivots);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// TREND ...
|
||||||
|
|
||||||
|
//
|
||||||
|
bool DetectTrendPivot(
|
||||||
|
int barIndex,
|
||||||
|
ENUM_X_DIRECTION forDir,
|
||||||
|
XOHCL &zBar,
|
||||||
|
XOHCL &cBar,
|
||||||
|
XOHCL &pBar,
|
||||||
|
XOHCL &p2Bar,
|
||||||
|
XCAEAConditions &conditions //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Checking Direction ...
|
||||||
|
result = HasDirection(forDir);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
bool forBullish = IsBullish(forDir);
|
||||||
|
bool forBearish = IsBearish(forDir);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Check Allowed ...
|
||||||
|
result =
|
||||||
|
forBullish
|
||||||
|
? detectTrendBullishPivots
|
||||||
|
: detectTrendBearishPivots;
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Validate Args ...
|
||||||
|
result =
|
||||||
|
//
|
||||||
|
barIndex >= 0 &&
|
||||||
|
zBar.IsValid() &&
|
||||||
|
cBar.IsValid() &&
|
||||||
|
pBar.IsValid() &&
|
||||||
|
p2Bar.IsValid()
|
||||||
|
//
|
||||||
|
;
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Define Requirements ...
|
||||||
|
|
||||||
|
//
|
||||||
|
int zIDX = 0;
|
||||||
|
int cIDX = zIDX + 1;
|
||||||
|
int pIDX = cIDX + 1;
|
||||||
|
int p2IDX = pIDX + 1;
|
||||||
|
|
||||||
|
//
|
||||||
|
datetime cTime = zBar.time;
|
||||||
|
string symbol = zBar.symbol;
|
||||||
|
ENUM_TIMEFRAMES period = zBar.period;
|
||||||
|
double points = GetPoints(symbol);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Reading Conditional Values ...
|
||||||
|
|
||||||
|
//
|
||||||
|
// TREND ...
|
||||||
|
double zTrend = conditions.trendBuffer[zIDX];
|
||||||
|
double cTrend = conditions.trendBuffer[cIDX];
|
||||||
|
double pTrend = conditions.trendBuffer[pIDX];
|
||||||
|
double p2Trend = conditions.trendBuffer[p2IDX];
|
||||||
|
|
||||||
|
//
|
||||||
|
// TREND State ...
|
||||||
|
double zTrendState = conditions.trendStateBuffer[zIDX];
|
||||||
|
double cTrendState = conditions.trendStateBuffer[cIDX];
|
||||||
|
double pTrendState = conditions.trendStateBuffer[pIDX];
|
||||||
|
double p2TrendState = conditions.trendStateBuffer[p2IDX];
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Conditinal Conditions ...
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bullish ...
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isTrendBullish =
|
||||||
|
cTrendState > 0;
|
||||||
|
bool isTrendBullishPrev =
|
||||||
|
pTrendState > 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isTrendSwitchedToBullish = isTrendBullish &&
|
||||||
|
!isTrendBullishPrev;
|
||||||
|
bool isTrendFinishedFromBullish = !isTrendBullish &&
|
||||||
|
isTrendBullishPrev;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bearish ...
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isTrendBearish =
|
||||||
|
cTrendState < 0;
|
||||||
|
bool isTrendBearishPrev =
|
||||||
|
pTrendState < 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isTrendSwitchedToBearish = isTrendBearish &&
|
||||||
|
!isTrendBearishPrev;
|
||||||
|
bool isTrendFinishedFromBearish = !isTrendBearish &&
|
||||||
|
isTrendBearishPrev;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Summarizing Conditions ...
|
||||||
|
|
||||||
|
//
|
||||||
|
result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
bool hasStartCondition =
|
||||||
|
forBullish
|
||||||
|
? isTrendFinishedFromBullish
|
||||||
|
: isTrendFinishedFromBearish;
|
||||||
|
bool hasContinuationCondition =
|
||||||
|
forBullish
|
||||||
|
? isTrendBullish
|
||||||
|
: isTrendBearish;
|
||||||
|
bool hasEndCondition =
|
||||||
|
forBullish
|
||||||
|
? isTrendSwitchedToBullish
|
||||||
|
: isTrendSwitchedToBearish;
|
||||||
|
|
||||||
|
//
|
||||||
|
// ReInstance Pivot ...
|
||||||
|
if (hasStartCondition)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Bullish ...
|
||||||
|
if (forBullish)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
trendBullishPivot.Clean();
|
||||||
|
|
||||||
|
//
|
||||||
|
trendBullishPivot.symbol = symbol;
|
||||||
|
trendBullishPivot.period = period;
|
||||||
|
trendBullishPivot.type = XCA_TREND_BULL;
|
||||||
|
|
||||||
|
//
|
||||||
|
trendBullishPivot.to = pBar.time;
|
||||||
|
trendBullishPivot.from = pBar.time;
|
||||||
|
trendBullishPivot.value = pTrend;
|
||||||
|
trendBullishPivot.reserve = pTrend;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bearish ...
|
||||||
|
if (forBearish)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
trendBearishPivot.Clean();
|
||||||
|
|
||||||
|
//
|
||||||
|
trendBearishPivot.symbol = symbol;
|
||||||
|
trendBearishPivot.period = period;
|
||||||
|
trendBearishPivot.type = XCA_TREND_BEAR;
|
||||||
|
|
||||||
|
//
|
||||||
|
trendBearishPivot.to = pBar.time;
|
||||||
|
trendBearishPivot.from = pBar.time;
|
||||||
|
trendBearishPivot.value = pTrend;
|
||||||
|
trendBearishPivot.reserve = pTrend;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Calculate and Fill Pivot Requirements ...
|
||||||
|
if (hasContinuationCondition)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Bullish ...
|
||||||
|
if (forBullish)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
trendBullishPivot.from = pBar.time;
|
||||||
|
|
||||||
|
//
|
||||||
|
Add(
|
||||||
|
pTrend,
|
||||||
|
trendBullishPivot.values //
|
||||||
|
);
|
||||||
|
Add(
|
||||||
|
pTrend,
|
||||||
|
trendBullishPivot.values //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bearish ...
|
||||||
|
if (forBearish)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
trendBearishPivot.from = pBar.time;
|
||||||
|
|
||||||
|
//
|
||||||
|
Add(
|
||||||
|
pTrend,
|
||||||
|
trendBearishPivot.values //
|
||||||
|
);
|
||||||
|
Add(
|
||||||
|
pTrend,
|
||||||
|
trendBearishPivot.values //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// End up Pivot and Store it ...
|
||||||
|
if (hasEndCondition)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Bullish ...
|
||||||
|
if (forBullish)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Update Values ...
|
||||||
|
trendBullishPivot.value = GetMin(trendBullishPivot.values);
|
||||||
|
trendBullishPivot.reserve = GetMax(trendBullishPivot.values);
|
||||||
|
|
||||||
|
//
|
||||||
|
result =
|
||||||
|
trendBullishPivot.IsValid() &&
|
||||||
|
trendBullishPivot.GetAge() >= pivotVerifications;
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XBoxZone iBox;
|
||||||
|
result = trendBullishPivot.AsBox(iBox);
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
newTrendBullishPivotDetected = AddBox(
|
||||||
|
iBox,
|
||||||
|
trendBullishPivots //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
iBox.Clean();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
trendBullishPivot.Clean();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bearish ...
|
||||||
|
if (forBearish)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Update Values ...
|
||||||
|
trendBearishPivot.value = GetMax(trendBearishPivot.values);
|
||||||
|
trendBearishPivot.reserve = GetMin(trendBearishPivot.values);
|
||||||
|
|
||||||
|
//
|
||||||
|
result =
|
||||||
|
trendBearishPivot.IsValid() &&
|
||||||
|
trendBearishPivot.GetAge() >= pivotVerifications;
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XBoxZone iBox;
|
||||||
|
result = trendBearishPivot.AsBox(iBox);
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
newTrendBearishPivotDetected = AddBox(
|
||||||
|
iBox,
|
||||||
|
trendBearishPivots //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
iBox.Clean();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
trendBearishPivot.Clean();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
void ValidateTrendPivots(
|
||||||
|
XBoxZone &unavailables[],
|
||||||
|
int barIndex = 0 //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool has = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bullish ...
|
||||||
|
has = HasTrendBullishPivots();
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
ApplyValidationOnBoxes(
|
||||||
|
trendBullishPivots,
|
||||||
|
unavailables,
|
||||||
|
barIndex //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bearish ...
|
||||||
|
has = HasTrendBearishPivots();
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
ApplyValidationOnBoxes(
|
||||||
|
trendBearishPivots,
|
||||||
|
unavailables,
|
||||||
|
barIndex //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bullish ...
|
||||||
|
|
||||||
|
//
|
||||||
|
XCAPivot trendBullishPivot;
|
||||||
|
XBoxZone trendBullishPivots[];
|
||||||
|
bool detectTrendBullishPivots;
|
||||||
|
bool newTrendBullishPivotDetected;
|
||||||
|
|
||||||
|
//
|
||||||
|
bool HasTrendBullishPivots()
|
||||||
|
{
|
||||||
|
return HasChild(trendBullishPivots);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
int CountTrendBullishPivots()
|
||||||
|
{
|
||||||
|
return ArraySize(trendBullishPivots);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bearish ...
|
||||||
|
|
||||||
|
//
|
||||||
|
XCAPivot trendBearishPivot;
|
||||||
|
XBoxZone trendBearishPivots[];
|
||||||
|
bool detectTrendBearishPivots;
|
||||||
|
bool newTrendBearishPivotDetected;
|
||||||
|
|
||||||
|
//
|
||||||
|
bool HasTrendBearishPivots()
|
||||||
|
{
|
||||||
|
return HasChild(trendBearishPivots);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
int CountTrendBearishPivots()
|
||||||
|
{
|
||||||
|
return ArraySize(trendBearishPivots);
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Protected ...
|
// Protected ...
|
||||||
protected:
|
protected:
|
||||||
@@ -2378,6 +2911,8 @@ class XCXCAEAPOIDetector : public XCBase
|
|||||||
//
|
//
|
||||||
peakPivot.Clean();
|
peakPivot.Clean();
|
||||||
valePivot.Clean();
|
valePivot.Clean();
|
||||||
|
trendBullishPivot.Clean();
|
||||||
|
trendBearishPivot.Clean();
|
||||||
|
|
||||||
//
|
//
|
||||||
Clean(peakPivots);
|
Clean(peakPivots);
|
||||||
@@ -2386,6 +2921,10 @@ class XCXCAEAPOIDetector : public XCBase
|
|||||||
//
|
//
|
||||||
Clean(fvgBullishPivots);
|
Clean(fvgBullishPivots);
|
||||||
Clean(fvgBearishPivots);
|
Clean(fvgBearishPivots);
|
||||||
|
|
||||||
|
//
|
||||||
|
Clean(trendBullishPivots);
|
||||||
|
Clean(trendBearishPivots);
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -2394,6 +2933,9 @@ class XCXCAEAPOIDetector : public XCBase
|
|||||||
//
|
//
|
||||||
bool has = false;
|
bool has = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
// PV ...
|
||||||
|
|
||||||
//
|
//
|
||||||
// PEAK ...
|
// PEAK ...
|
||||||
has = HasPeakPivots();
|
has = HasPeakPivots();
|
||||||
@@ -2411,7 +2953,10 @@ class XCXCAEAPOIDetector : public XCBase
|
|||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// FVG Bullish ...
|
// FVG ...
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bullish ...
|
||||||
has = HasFVGBullishPivots();
|
has = HasFVGBullishPivots();
|
||||||
if (has)
|
if (has)
|
||||||
{
|
{
|
||||||
@@ -2419,12 +2964,31 @@ class XCXCAEAPOIDetector : public XCBase
|
|||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// FVG Bearish ...
|
// Bearish ...
|
||||||
has = HasFVGBearishPivots();
|
has = HasFVGBearishPivots();
|
||||||
if (has)
|
if (has)
|
||||||
{
|
{
|
||||||
ApplySortOnBoxes(fvgBearishPivots);
|
ApplySortOnBoxes(fvgBearishPivots);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// TREND ...
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bullish ...
|
||||||
|
has = HasTrendBullishPivots();
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
|
ApplySortOnBoxes(trendBullishPivots);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bearish ...
|
||||||
|
has = HasTrendBearishPivots();
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
|
ApplySortOnBoxes(trendBearishPivots);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -88,6 +88,8 @@ class XCXCAEAPOIDrawer : public XCBase
|
|||||||
bool drawValePivots;
|
bool drawValePivots;
|
||||||
bool drawFVGBullishPivots;
|
bool drawFVGBullishPivots;
|
||||||
bool drawFVGBearishPivots;
|
bool drawFVGBearishPivots;
|
||||||
|
bool drawTrendBullishPivots;
|
||||||
|
bool drawTrendBearishPivots;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Styling ...
|
// Styling ...
|
||||||
@@ -104,6 +106,10 @@ class XCXCAEAPOIDrawer : public XCBase
|
|||||||
XCAPivotStyle fvgBullishPivotStyle;
|
XCAPivotStyle fvgBullishPivotStyle;
|
||||||
XCAPivotStyle fvgBearishPivotStyle;
|
XCAPivotStyle fvgBearishPivotStyle;
|
||||||
|
|
||||||
|
//
|
||||||
|
XCAPivotStyle trendBullishPivotStyle;
|
||||||
|
XCAPivotStyle trendBearishPivotStyle;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Constructors ...
|
// Constructors ...
|
||||||
XCXCAEAPOIDrawer(
|
XCXCAEAPOIDrawer(
|
||||||
@@ -141,8 +147,12 @@ class XCXCAEAPOIDrawer : public XCBase
|
|||||||
{
|
{
|
||||||
//
|
//
|
||||||
// Drawing ...
|
// Drawing ...
|
||||||
|
drawPeakPivots = false;
|
||||||
|
drawValePivots = false;
|
||||||
drawFVGBullishPivots = false;
|
drawFVGBullishPivots = false;
|
||||||
drawFVGBearishPivots = false;
|
drawFVGBearishPivots = false;
|
||||||
|
drawTrendBullishPivots = false;
|
||||||
|
drawTrendBearishPivots = false;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Styling ...
|
// Styling ...
|
||||||
@@ -171,18 +181,30 @@ class XCXCAEAPOIDrawer : public XCBase
|
|||||||
// FVG ...
|
// FVG ...
|
||||||
fvgBullishPivotStyle = defaultBullishStyle;
|
fvgBullishPivotStyle = defaultBullishStyle;
|
||||||
fvgBearishPivotStyle = defaultBearishStyle;
|
fvgBearishPivotStyle = defaultBearishStyle;
|
||||||
|
|
||||||
|
//
|
||||||
|
// TREND ...
|
||||||
|
trendBullishPivotStyle = defaultBullishStyle;
|
||||||
|
trendBearishPivotStyle = defaultBearishStyle;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
void Draw(datetime to = NULL)
|
void Draw(datetime to = NULL)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
|
// PV ...
|
||||||
DrawPeakPivots(to);
|
DrawPeakPivots(to);
|
||||||
DrawValePivots(to);
|
DrawValePivots(to);
|
||||||
|
|
||||||
//
|
//
|
||||||
|
// FVG ...
|
||||||
DrawFVGBullishPivots(to);
|
DrawFVGBullishPivots(to);
|
||||||
DrawFVGBearishPivots(to);
|
DrawFVGBearishPivots(to);
|
||||||
|
|
||||||
|
//
|
||||||
|
// TREND ...
|
||||||
|
DrawTrendBullishPivots(to);
|
||||||
|
DrawTrendBearishPivots(to);
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -244,6 +266,24 @@ class XCXCAEAPOIDrawer : public XCBase
|
|||||||
to //
|
to //
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
//
|
||||||
|
case XCA_TREND_BULL:
|
||||||
|
//
|
||||||
|
DrawTrendBullishPivot(
|
||||||
|
box,
|
||||||
|
to //
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
|
||||||
|
//
|
||||||
|
case XCA_TREND_BEAR:
|
||||||
|
//
|
||||||
|
DrawTrendBearishPivot(
|
||||||
|
box,
|
||||||
|
to //
|
||||||
|
);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -293,6 +333,8 @@ class XCXCAEAPOIDrawer : public XCBase
|
|||||||
valePivotStyle.Clean();
|
valePivotStyle.Clean();
|
||||||
fvgBullishPivotStyle.Clean();
|
fvgBullishPivotStyle.Clean();
|
||||||
fvgBearishPivotStyle.Clean();
|
fvgBearishPivotStyle.Clean();
|
||||||
|
trendBullishPivotStyle.Clean();
|
||||||
|
trendBearishPivotStyle.Clean();
|
||||||
|
|
||||||
//
|
//
|
||||||
// Cleanup Pivot Objects Holder ...
|
// Cleanup Pivot Objects Holder ...
|
||||||
@@ -300,6 +342,8 @@ class XCXCAEAPOIDrawer : public XCBase
|
|||||||
mValePivotObjects.Clear();
|
mValePivotObjects.Clear();
|
||||||
mFVGBullishPivotObjects.Clear();
|
mFVGBullishPivotObjects.Clear();
|
||||||
mFVGBearishPivotObjects.Clear();
|
mFVGBearishPivotObjects.Clear();
|
||||||
|
mTrendBullishPivotObjects.Clear();
|
||||||
|
mTrendBearishPivotObjects.Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -445,6 +489,76 @@ class XCXCAEAPOIDrawer : public XCBase
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
void DrawTrendBullishPivots(datetime to = NULL)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool has = drawTrendBullishPivots;
|
||||||
|
if (!has)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
has = detector.HasTrendBullishPivots();
|
||||||
|
if (!has)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
int count = detector.CountTrendBullishPivots();
|
||||||
|
for (int i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XBoxZone iBox = detector.trendBullishPivots[i];
|
||||||
|
|
||||||
|
//
|
||||||
|
DrawTrendBullishPivot(
|
||||||
|
iBox,
|
||||||
|
to //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
iBox.Clean();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
void DrawTrendBearishPivots(datetime to = NULL)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool has = drawTrendBearishPivots;
|
||||||
|
if (!has)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
has = detector.HasTrendBearishPivots();
|
||||||
|
if (!has)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
int count = detector.CountTrendBearishPivots();
|
||||||
|
for (int i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XBoxZone iBox = detector.trendBearishPivots[i];
|
||||||
|
|
||||||
|
//
|
||||||
|
DrawTrendBearishPivot(
|
||||||
|
iBox,
|
||||||
|
to //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
iBox.Clean();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// One Item Drawers ...
|
// One Item Drawers ...
|
||||||
|
|
||||||
@@ -660,6 +774,112 @@ class XCXCAEAPOIDrawer : public XCBase
|
|||||||
ZeroMemory(iObj);
|
ZeroMemory(iObj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
void DrawTrendBullishPivot(
|
||||||
|
XBoxZone &item,
|
||||||
|
datetime to = NULL //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool has = drawTrendBullishPivots;
|
||||||
|
if (!has)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
has = item.IsValid() &&
|
||||||
|
item.type == GetBoxType(XCA_TREND_BULL) &&
|
||||||
|
item.dir == GetDirection(XCA_TREND_BULL);
|
||||||
|
if (!has)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
bool canUpdateTo = IsValid(to);
|
||||||
|
if (canUpdateTo)
|
||||||
|
{
|
||||||
|
// item.to = to;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
XCBoxObject *iObj;
|
||||||
|
has = drawer.DrawBox(
|
||||||
|
item,
|
||||||
|
iObj //
|
||||||
|
);
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Style Object ...
|
||||||
|
ApplyPivotStyle(
|
||||||
|
iObj,
|
||||||
|
trendBullishPivotStyle //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Store Object ...
|
||||||
|
mTrendBullishPivotObjects.Add(iObj);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
ZeroMemory(iObj);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
void DrawTrendBearishPivot(
|
||||||
|
XBoxZone &item,
|
||||||
|
datetime to = NULL //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool has = drawTrendBearishPivots;
|
||||||
|
if (!has)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
has = item.IsValid() &&
|
||||||
|
item.type == GetBoxType(XCA_TREND_BEAR) &&
|
||||||
|
item.dir == GetDirection(XCA_TREND_BEAR);
|
||||||
|
if (!has)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
bool canUpdateTo = IsValid(to);
|
||||||
|
if (canUpdateTo)
|
||||||
|
{
|
||||||
|
// item.to = to;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
XCBoxObject *iObj;
|
||||||
|
has = drawer.DrawBox(
|
||||||
|
item,
|
||||||
|
iObj //
|
||||||
|
);
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Style Object ...
|
||||||
|
ApplyPivotStyle(
|
||||||
|
iObj,
|
||||||
|
trendBearishPivotStyle //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Store Object ...
|
||||||
|
mTrendBearishPivotObjects.Add(iObj);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
ZeroMemory(iObj);
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Protected ...
|
// Protected ...
|
||||||
protected:
|
protected:
|
||||||
@@ -702,6 +922,10 @@ class XCXCAEAPOIDrawer : public XCBase
|
|||||||
CArrayObj mFVGBullishPivotObjects;
|
CArrayObj mFVGBullishPivotObjects;
|
||||||
CArrayObj mFVGBearishPivotObjects;
|
CArrayObj mFVGBearishPivotObjects;
|
||||||
|
|
||||||
|
//
|
||||||
|
CArrayObj mTrendBullishPivotObjects;
|
||||||
|
CArrayObj mTrendBearishPivotObjects;
|
||||||
|
|
||||||
//
|
//
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -207,16 +207,12 @@ class XCXCAEASignaller : XCBase
|
|||||||
// drawer.Draw(cTime);
|
// drawer.Draw(cTime);
|
||||||
|
|
||||||
//
|
//
|
||||||
drawer.DrawPeakPivots(cTime);
|
// drawer.DrawPeakPivots(cTime);
|
||||||
drawer.DrawValePivots(cTime);
|
// drawer.DrawValePivots(cTime);
|
||||||
drawer.DrawFVGBullishPivots(cTime);
|
// drawer.DrawFVGBullishPivots(cTime);
|
||||||
drawer.DrawFVGBearishPivots(cTime);
|
// drawer.DrawFVGBearishPivots(cTime);
|
||||||
// drawer.DrawRSICrossedOverOSPivots(cTime);
|
drawer.DrawTrendBullishPivots(cTime);
|
||||||
// drawer.DrawRSICrossedUnderOBPivots(cTime);
|
drawer.DrawTrendBearishPivots(cTime);
|
||||||
// drawer.DrawPeakResSWHPivots(cTime);
|
|
||||||
// drawer.DrawValeSupSWLPivots(cTime);
|
|
||||||
// drawer.DrawRSIPeakPivots(cTime);
|
|
||||||
// drawer.DrawRSIValePivots(cTime);
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Retrieve Valid Pviots ...
|
// Retrieve Valid Pviots ...
|
||||||
@@ -828,7 +824,7 @@ class XCXCAEASignaller : XCBase
|
|||||||
inputs.caInputs.showMAL = false;
|
inputs.caInputs.showMAL = false;
|
||||||
inputs.caInputs.showMAC = true;
|
inputs.caInputs.showMAC = true;
|
||||||
inputs.caInputs.showVidya = false;
|
inputs.caInputs.showVidya = false;
|
||||||
inputs.caInputs.showTrend = false;
|
inputs.caInputs.showTrend = true;
|
||||||
inputs.caInputs.showSwings = false;
|
inputs.caInputs.showSwings = false;
|
||||||
inputs.caInputs.showLongCycle = false;
|
inputs.caInputs.showLongCycle = false;
|
||||||
inputs.caInputs.showHindCycle = false;
|
inputs.caInputs.showHindCycle = false;
|
||||||
@@ -906,9 +902,22 @@ class XCXCAEASignaller : XCBase
|
|||||||
detector.applyPVToFVGBoundary = false;
|
detector.applyPVToFVGBoundary = false;
|
||||||
detector.detectFVGBullishPivots = true;
|
detector.detectFVGBullishPivots = true;
|
||||||
detector.detectFVGBearishPivots = true;
|
detector.detectFVGBearishPivots = true;
|
||||||
|
detector.selectRejectedFVGPivots = true;
|
||||||
|
detector.selectEngulfedFVGPivots = true;
|
||||||
detector.applyLastBarToFVGBoundary = false;
|
detector.applyLastBarToFVGBoundary = false;
|
||||||
detector.selectOnlyFVGWhichHasIndirectionalLastBar = true;
|
detector.selectOnlyFVGWhichHasIndirectionalLastBar = true;
|
||||||
|
|
||||||
|
//
|
||||||
|
// TREND ...
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bullish ...
|
||||||
|
detector.detectTrendBullishPivots = true;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bearish ...
|
||||||
|
detector.detectTrendBearishPivots = true;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Initialize and Configure Drawer ...
|
// Initialize and Configure Drawer ...
|
||||||
drawer = new XCXCAEAPOIDrawer(detector);
|
drawer = new XCXCAEAPOIDrawer(detector);
|
||||||
@@ -922,6 +931,8 @@ class XCXCAEASignaller : XCBase
|
|||||||
drawer.drawValePivots = true;
|
drawer.drawValePivots = true;
|
||||||
drawer.drawFVGBullishPivots = true;
|
drawer.drawFVGBullishPivots = true;
|
||||||
drawer.drawFVGBearishPivots = true;
|
drawer.drawFVGBearishPivots = true;
|
||||||
|
drawer.drawTrendBullishPivots = true;
|
||||||
|
drawer.drawTrendBearishPivots = true;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Configure Styles ...
|
// Configure Styles ...
|
||||||
@@ -968,6 +979,27 @@ class XCXCAEASignaller : XCBase
|
|||||||
drawer.fvgBearishPivotStyle = fvgBearishStyle;
|
drawer.fvgBearishPivotStyle = fvgBearishStyle;
|
||||||
fvgBearishStyle.Clean();
|
fvgBearishStyle.Clean();
|
||||||
|
|
||||||
|
//
|
||||||
|
// TREND ...
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bullish ...
|
||||||
|
XCAPivotStyle trendBullishStyle;
|
||||||
|
trendBullishStyle.width = 2;
|
||||||
|
trendBullishStyle.clr = clrLime;
|
||||||
|
trendBullishStyle.style = STYLE_DOT;
|
||||||
|
drawer.trendBullishPivotStyle = trendBullishStyle;
|
||||||
|
trendBullishStyle.Clean();
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bearish ...
|
||||||
|
XCAPivotStyle trendBearishStyle;
|
||||||
|
trendBearishStyle.width = 2;
|
||||||
|
trendBearishStyle.clr = clrRed;
|
||||||
|
trendBearishStyle.style = STYLE_DOT;
|
||||||
|
drawer.trendBearishPivotStyle = trendBearishStyle;
|
||||||
|
trendBearishStyle.Clean();
|
||||||
|
|
||||||
//
|
//
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user