complete signaller trigger cond 1 and 2 and apply sorting for Tagets and etc ...
This commit is contained in:
@@ -2223,6 +2223,82 @@ class XCBarAnalyser : public XCBase
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check Specified Bar's Prev Bar is Simple Swing or not ...
|
||||||
|
*
|
||||||
|
* @param bar: XOHCL instance reference, Specified Bar to it's Prev Check ...
|
||||||
|
* @param dir: ENUM_X_DIRECTION member, Specified Doji Direction ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool IsSwimpleSwing(
|
||||||
|
XOHCL &bar,
|
||||||
|
ENUM_X_DIRECTION &dir //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
dir = X_DIRECTION_NONE;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Valdate Args ...
|
||||||
|
result = bar.IsValid();
|
||||||
|
|
||||||
|
//
|
||||||
|
// Reading Requirements ...
|
||||||
|
XOHCL cBar;
|
||||||
|
XOHCL pBar;
|
||||||
|
XOHCL p2Bar;
|
||||||
|
result =
|
||||||
|
bar.GetPreviousBar(cBar);
|
||||||
|
result =
|
||||||
|
result &&
|
||||||
|
cBar.GetPreviousBar(pBar);
|
||||||
|
result =
|
||||||
|
result &&
|
||||||
|
pBar.GetPreviousBar(p2Bar);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
cBar.Clean();
|
||||||
|
pBar.Clean();
|
||||||
|
p2Bar.Clean();
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Now we Have to Check pBar is Swing Low or High ...
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isPBarSwingLow =
|
||||||
|
pBar.low < cBar.low &&
|
||||||
|
pBar.low < p2Bar.low;
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isPBarSwingHigh =
|
||||||
|
pBar.high > cBar.high &&
|
||||||
|
pBar.high > p2Bar.high;
|
||||||
|
|
||||||
|
//
|
||||||
|
result = isPBarSwingLow ||
|
||||||
|
isPBarSwingHigh;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Cleanup Resourses ...
|
||||||
|
|
||||||
|
//
|
||||||
|
cBar.Clean();
|
||||||
|
pBar.Clean();
|
||||||
|
p2Bar.Clean();
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check Specified Bar is Hammer Pattern or not ...
|
* Check Specified Bar is Hammer Pattern or not ...
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -397,9 +397,10 @@ void OnTick()
|
|||||||
|
|
||||||
//
|
//
|
||||||
// Handling Targets ...
|
// Handling Targets ...
|
||||||
Copy(
|
ApplyTargetsOnSignal(
|
||||||
|
eaConditions.dir,
|
||||||
eaConditions.targets,
|
eaConditions.targets,
|
||||||
eaSignal.targets //
|
eaSignal //
|
||||||
);
|
);
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -531,6 +531,145 @@ struct XTarget
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//
|
||||||
|
// Get Lowest Target index ...
|
||||||
|
int GetLowest(XTarget &targets[])
|
||||||
|
{
|
||||||
|
//
|
||||||
|
int result = -1;
|
||||||
|
|
||||||
|
//
|
||||||
|
if (!HasChild(targets))
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
XTarget iTarget;
|
||||||
|
int count = ArraySize(targets);
|
||||||
|
for (int i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool canSet =
|
||||||
|
!iTarget.IsValid()
|
||||||
|
? true
|
||||||
|
: iTarget.target > targets[i].target;
|
||||||
|
if (canSet)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
result = i;
|
||||||
|
iTarget = targets[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
iTarget.Clean();
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Get Highest Target index ...
|
||||||
|
int GetHighest(XTarget &targets[])
|
||||||
|
{
|
||||||
|
//
|
||||||
|
int result = -1;
|
||||||
|
|
||||||
|
//
|
||||||
|
if (!HasChild(targets))
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
XTarget iTarget;
|
||||||
|
int count = ArraySize(targets);
|
||||||
|
for (int i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool canSet =
|
||||||
|
!iTarget.IsValid()
|
||||||
|
? true
|
||||||
|
: iTarget.target < targets[i].target;
|
||||||
|
if (canSet)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
result = i;
|
||||||
|
iTarget = targets[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
iTarget.Clean();
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Apply Sorting on Targets ...
|
||||||
|
void ApplySortOnTargets(
|
||||||
|
ENUM_X_DIRECTION forDir, // Target Sorting Direction ...
|
||||||
|
XTarget &targets[] // Targets to Apply Sorting ...
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool has = HasChild(targets) &&
|
||||||
|
HasDirection(forDir);
|
||||||
|
if (!has)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isBullish = IsBullish(forDir);
|
||||||
|
bool isBearish = IsBearish(forDir);
|
||||||
|
|
||||||
|
//
|
||||||
|
XTarget tmp[];
|
||||||
|
Copy(
|
||||||
|
targets,
|
||||||
|
tmp //
|
||||||
|
);
|
||||||
|
Clean(targets);
|
||||||
|
while (HasChild(tmp))
|
||||||
|
{
|
||||||
|
//
|
||||||
|
int idx = -1;
|
||||||
|
if (isBullish)
|
||||||
|
{
|
||||||
|
idx = GetLowest(tmp);
|
||||||
|
}
|
||||||
|
else if (isBearish)
|
||||||
|
{
|
||||||
|
idx = GetHighest(tmp);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
has = IsValidIndex(idx);
|
||||||
|
if (!has)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
XTarget iTarget = tmp[idx];
|
||||||
|
ArrayRemove(
|
||||||
|
tmp,
|
||||||
|
idx,
|
||||||
|
1 //
|
||||||
|
);
|
||||||
|
AddRef(
|
||||||
|
iTarget,
|
||||||
|
targets //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
Clean(tmp);
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Model an Open Position ...
|
// Model an Open Position ...
|
||||||
struct XPosition
|
struct XPosition
|
||||||
@@ -5741,3 +5880,35 @@ int ExtractSymbolPositions(
|
|||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
// Apply a Collection of Targets
|
||||||
|
// on Specified Signal ...
|
||||||
|
void ApplyTargetsOnSignal(
|
||||||
|
ENUM_X_DIRECTION sortingDir, // Target Sorting Direction ...
|
||||||
|
XTarget &targets[], // Required Targets ...
|
||||||
|
XSignal &signal // Destination Signal ...
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool has =
|
||||||
|
HasChild(targets) &&
|
||||||
|
HasDirection(sortingDir);
|
||||||
|
if (!has)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Sort Targets ...
|
||||||
|
ApplySortOnTargets(
|
||||||
|
sortingDir,
|
||||||
|
targets //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
Copy(
|
||||||
|
targets,
|
||||||
|
signal.targets //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
@@ -1526,6 +1526,9 @@ class XCXCAEAPOIDetector : public XCBase
|
|||||||
//
|
//
|
||||||
Clean(tmp);
|
Clean(tmp);
|
||||||
|
|
||||||
|
//
|
||||||
|
result = ArraySize(pivots);
|
||||||
|
|
||||||
//
|
//
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -243,6 +243,20 @@ class XCXCAEAPOIDrawer : public XCBase
|
|||||||
DrawTrendBearishPivots(to);
|
DrawTrendBearishPivots(to);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
void DrawPivot(
|
||||||
|
XBoxZone &pivot,
|
||||||
|
datetime to = NULL //
|
||||||
|
) {
|
||||||
|
//
|
||||||
|
DrawBox(
|
||||||
|
pivot,
|
||||||
|
to,
|
||||||
|
false,
|
||||||
|
false //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
void DrawBox(
|
void DrawBox(
|
||||||
XBoxZone &box,
|
XBoxZone &box,
|
||||||
|
|||||||
@@ -185,6 +185,10 @@ struct XCAEAConditions
|
|||||||
double volumeBullish;
|
double volumeBullish;
|
||||||
double volumeBearish;
|
double volumeBearish;
|
||||||
double priceChangeRate;
|
double priceChangeRate;
|
||||||
|
bool bullishEngulfedBars[];
|
||||||
|
bool bearishEngulfedBars[];
|
||||||
|
bool bullishRejectedBars[];
|
||||||
|
bool bearishRejectedBars[];
|
||||||
|
|
||||||
//
|
//
|
||||||
// X3MA ...
|
// X3MA ...
|
||||||
@@ -835,10 +839,18 @@ struct XCAEAConditions
|
|||||||
volumeBearish = 0;
|
volumeBearish = 0;
|
||||||
Clean(velocities);
|
Clean(velocities);
|
||||||
priceChangeRate = 0;
|
priceChangeRate = 0;
|
||||||
|
Clean(bullishEngulfedBars);
|
||||||
|
Clean(bearishEngulfedBars);
|
||||||
|
Clean(bullishRejectedBars);
|
||||||
|
Clean(bearishRejectedBars);
|
||||||
ArraySetAsSeries(bars, true);
|
ArraySetAsSeries(bars, true);
|
||||||
ArraySetAsSeries(bodies, true);
|
ArraySetAsSeries(bodies, true);
|
||||||
ArraySetAsSeries(ranges, true);
|
ArraySetAsSeries(ranges, true);
|
||||||
ArraySetAsSeries(velocities, true);
|
ArraySetAsSeries(velocities, true);
|
||||||
|
ArraySetAsSeries(bullishEngulfedBars, true);
|
||||||
|
ArraySetAsSeries(bearishEngulfedBars, true);
|
||||||
|
ArraySetAsSeries(bullishRejectedBars, true);
|
||||||
|
ArraySetAsSeries(bearishRejectedBars, true);
|
||||||
|
|
||||||
//
|
//
|
||||||
// X3MA ...
|
// X3MA ...
|
||||||
@@ -3357,6 +3369,95 @@ class XCXCAEAHelper : XCBase
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Reading Bars Conditions ...
|
||||||
|
XOHCL iBar;
|
||||||
|
ENUM_X_DIRECTION iDir = X_DIRECTION_NONE;
|
||||||
|
for (int i = 0; i < ArraySize(conditions.bars); i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
iBar = conditions.bars[i];
|
||||||
|
|
||||||
|
//
|
||||||
|
// Reading Bars Patterns ...
|
||||||
|
|
||||||
|
//
|
||||||
|
// Rejection ...
|
||||||
|
bool isRejected =
|
||||||
|
barAnalyser
|
||||||
|
.IsRejected(
|
||||||
|
iBar,
|
||||||
|
iDir,
|
||||||
|
false,
|
||||||
|
true //
|
||||||
|
);
|
||||||
|
bool isBullishRejected =
|
||||||
|
isRejected &&
|
||||||
|
IsBullish(iDir);
|
||||||
|
bool isBearishRejected =
|
||||||
|
isRejected &&
|
||||||
|
IsBearish(iDir);
|
||||||
|
|
||||||
|
//
|
||||||
|
Add(
|
||||||
|
isBullishRejected,
|
||||||
|
conditions.bullishRejectedBars //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
Add(
|
||||||
|
isBearishRejected,
|
||||||
|
conditions.bearishRejectedBars //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Engulfing ...
|
||||||
|
bool isEngulfed =
|
||||||
|
barAnalyser
|
||||||
|
.IsEngulfed(
|
||||||
|
iBar,
|
||||||
|
iDir //
|
||||||
|
);
|
||||||
|
bool isBullishEngulfed =
|
||||||
|
isEngulfed &&
|
||||||
|
IsBullish(iDir);
|
||||||
|
bool isBearishEngulfed =
|
||||||
|
isEngulfed &&
|
||||||
|
IsBearish(iDir);
|
||||||
|
|
||||||
|
//
|
||||||
|
Add(
|
||||||
|
isBullishEngulfed,
|
||||||
|
conditions.bullishEngulfedBars //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
Add(
|
||||||
|
isBearishEngulfed,
|
||||||
|
conditions.bearishEngulfedBars //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Momentum ...
|
||||||
|
bool isMomentum =
|
||||||
|
barAnalyser
|
||||||
|
.IsMomentum(
|
||||||
|
iBar,
|
||||||
|
iDir,
|
||||||
|
1 //
|
||||||
|
);
|
||||||
|
bool isBullishMomentum =
|
||||||
|
isMomentum &&
|
||||||
|
IsBullish(iDir);
|
||||||
|
bool isBearishMomentum =
|
||||||
|
isMomentum &&
|
||||||
|
IsBearish(iDir);
|
||||||
|
|
||||||
|
//
|
||||||
|
iBar.Clean();
|
||||||
|
}
|
||||||
|
iBar.Clean();
|
||||||
|
|
||||||
//
|
//
|
||||||
int zIndex = barIndex;
|
int zIndex = barIndex;
|
||||||
int cIndex = zIndex + 1;
|
int cIndex = zIndex + 1;
|
||||||
@@ -3391,7 +3492,7 @@ class XCXCAEAHelper : XCBase
|
|||||||
fromBar.Init(
|
fromBar.Init(
|
||||||
zBar.symbol,
|
zBar.symbol,
|
||||||
zBar.period,
|
zBar.period,
|
||||||
zIndex + loopback);
|
zIndex + loopback - 1);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Conditions Retriever ...
|
// Conditions Retriever ...
|
||||||
|
|||||||
@@ -1609,11 +1609,227 @@ bool CanTriggerCond1(
|
|||||||
// Define Requirements ...
|
// Define Requirements ...
|
||||||
|
|
||||||
//
|
//
|
||||||
|
bool has = false;
|
||||||
string symbol = helper.GetSymbol();
|
string symbol = helper.GetSymbol();
|
||||||
bool isBullish = decisionZone.IsBullish();
|
bool isBullish = decisionZone.IsBullish();
|
||||||
bool isBearish = decisionZone.IsBearish();
|
bool isBearish = decisionZone.IsBearish();
|
||||||
ENUM_TIMEFRAMES period = helper.GetPeriod();
|
ENUM_TIMEFRAMES period = helper.GetPeriod();
|
||||||
|
|
||||||
|
//
|
||||||
|
int toIDX = decisionZone.ToIndex();
|
||||||
|
int fromIDX = decisionZone.FromIndex();
|
||||||
|
|
||||||
|
//
|
||||||
|
// Reading Bars ...
|
||||||
|
XOHCL zBar;
|
||||||
|
XOHCL cBar;
|
||||||
|
XOHCL pBar;
|
||||||
|
XOHCL p2Bar;
|
||||||
|
result = zBar.Init(
|
||||||
|
symbol,
|
||||||
|
period,
|
||||||
|
barIndex //
|
||||||
|
);
|
||||||
|
result =
|
||||||
|
result &&
|
||||||
|
zBar.GetPreviousBar(cBar);
|
||||||
|
result =
|
||||||
|
result &&
|
||||||
|
cBar.GetPreviousBar(pBar);
|
||||||
|
result =
|
||||||
|
result &&
|
||||||
|
pBar.GetPreviousBar(p2Bar);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
zBar.Clean();
|
||||||
|
cBar.Clean();
|
||||||
|
pBar.Clean();
|
||||||
|
p2Bar.Clean();
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Reading Bar's Conditions ...
|
||||||
|
XCAEAConditions iConditions;
|
||||||
|
result = helper.GetConditions(
|
||||||
|
iConditions,
|
||||||
|
barIndex,
|
||||||
|
loopback //
|
||||||
|
);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
zBar.Clean();
|
||||||
|
cBar.Clean();
|
||||||
|
pBar.Clean();
|
||||||
|
p2Bar.Clean();
|
||||||
|
iConditions.Clean();
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Reading Conditions Values ...
|
||||||
|
|
||||||
|
//
|
||||||
|
int zIDX = 0;
|
||||||
|
int cIDX = zIDX + 1;
|
||||||
|
int pIDX = cIDX + 1;
|
||||||
|
int p2IDX = pIDX + 1;
|
||||||
|
int p3IDX = p2IDX + 1;
|
||||||
|
|
||||||
|
//
|
||||||
|
// PEAK ...
|
||||||
|
double zPeak = iConditions.peakBuffer[zIDX];
|
||||||
|
double cPeak = iConditions.peakBuffer[cIDX];
|
||||||
|
double pPeak = iConditions.peakBuffer[pIDX];
|
||||||
|
double p2Peak = iConditions.peakBuffer[p2IDX];
|
||||||
|
double p3Peak = iConditions.peakBuffer[p3IDX];
|
||||||
|
|
||||||
|
//
|
||||||
|
// VALE ...
|
||||||
|
double zVale = iConditions.valeBuffer[zIDX];
|
||||||
|
double cVale = iConditions.valeBuffer[cIDX];
|
||||||
|
double pVale = iConditions.valeBuffer[pIDX];
|
||||||
|
double p2Vale = iConditions.valeBuffer[p2IDX];
|
||||||
|
double p3Vale = iConditions.valeBuffer[p3IDX];
|
||||||
|
|
||||||
|
//
|
||||||
|
// SWH ...
|
||||||
|
double zSWH = iConditions.swingHighBuffer[zIDX];
|
||||||
|
double cSWH = iConditions.swingHighBuffer[cIDX];
|
||||||
|
double pSWH = iConditions.swingHighBuffer[pIDX];
|
||||||
|
double p2SWH = iConditions.swingHighBuffer[p2IDX];
|
||||||
|
double p3SWH = iConditions.swingHighBuffer[p3IDX];
|
||||||
|
|
||||||
|
//
|
||||||
|
// SWL ...
|
||||||
|
double zSWL = iConditions.swingLowBuffer[zIDX];
|
||||||
|
double cSWL = iConditions.swingLowBuffer[cIDX];
|
||||||
|
double pSWL = iConditions.swingLowBuffer[pIDX];
|
||||||
|
double p2SWL = iConditions.swingLowBuffer[p2IDX];
|
||||||
|
double p3SWL = iConditions.swingLowBuffer[p3IDX];
|
||||||
|
|
||||||
|
//
|
||||||
|
// Required Conditions ...
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isPeakBraked =
|
||||||
|
zPeak == cPeak &&
|
||||||
|
cPeak == pPeak &&
|
||||||
|
(pPeak > p2Peak ||
|
||||||
|
pPeak > p3Peak);
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isValeBraked =
|
||||||
|
zVale == cVale &&
|
||||||
|
cVale == pVale &&
|
||||||
|
(pVale < p2Vale ||
|
||||||
|
pVale < p3Vale);
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isSWHBraked =
|
||||||
|
zSWH == cSWH &&
|
||||||
|
cSWH == pSWH &&
|
||||||
|
(pSWH > p2SWH ||
|
||||||
|
pSWH > p3SWH);
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isSWLBraked =
|
||||||
|
zSWL == cSWL &&
|
||||||
|
cSWL == pSWL &&
|
||||||
|
(pSWL < p2SWL ||
|
||||||
|
pSWL < p3SWL);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Select Activated Pivot ...
|
||||||
|
XBoxZone selectedPivot;
|
||||||
|
bool hasPivots = HasChild(decisionPivots);
|
||||||
|
int pivotsCount = ArraySize(decisionPivots);
|
||||||
|
if (hasPivots)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
for (int i = 0; i < pivotsCount; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Detect Type of Pivot ...
|
||||||
|
ENUM_XCA_PIVOTS iType = GetPivotType(decisionPivots[i]);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Check Rejection of Block ...
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isBullishBraked =
|
||||||
|
isBullish &&
|
||||||
|
(isSWLBraked &&
|
||||||
|
isValeBraked) &&
|
||||||
|
iType == XCA_OB_BULL &&
|
||||||
|
decisionPivots[i].IsBullish() &&
|
||||||
|
zVale < decisionPivots[i].upper &&
|
||||||
|
zVale > decisionPivots[i].lower;
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isBearishBraked =
|
||||||
|
isBearish &&
|
||||||
|
(isSWHBraked &&
|
||||||
|
isPeakBraked) &&
|
||||||
|
iType == XCA_OB_BEAR &&
|
||||||
|
decisionPivots[i].IsBearish() &&
|
||||||
|
zPeak < decisionPivots[i].upper &&
|
||||||
|
zPeak > decisionPivots[i].lower;
|
||||||
|
|
||||||
|
//
|
||||||
|
has = isBullishBraked ||
|
||||||
|
isBearishBraked;
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
selectedPivot = decisionPivots[i];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
bool hasSelectedPivot = selectedPivot.IsValid();
|
||||||
|
|
||||||
|
//
|
||||||
|
// Draw Selected Pivot ...
|
||||||
|
if (allowDraws &&
|
||||||
|
hasSelectedPivot)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Draw Pivot ...
|
||||||
|
XCBoxObject *iObj;
|
||||||
|
|
||||||
|
//
|
||||||
|
has = helper.poiDrawer.DrawBox(
|
||||||
|
selectedPivot,
|
||||||
|
iObj //
|
||||||
|
);
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
color iColor =
|
||||||
|
isBullish
|
||||||
|
? clrAqua
|
||||||
|
: clrMagenta;
|
||||||
|
|
||||||
|
//
|
||||||
|
iObj.BoxWidth(2);
|
||||||
|
iObj.BoxColor(iColor);
|
||||||
|
iObj.BoxStyle(STYLE_SOLID);
|
||||||
|
|
||||||
|
//
|
||||||
|
drawns.Add(iObj);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
ZeroMemory(iObj);
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Parse Conditions ...
|
// Parse Conditions ...
|
||||||
|
|
||||||
@@ -1622,11 +1838,15 @@ bool CanTriggerCond1(
|
|||||||
|
|
||||||
//
|
//
|
||||||
bool canTriggerLong =
|
bool canTriggerLong =
|
||||||
false;
|
isBullish &&
|
||||||
|
hasSelectedPivot &&
|
||||||
|
selectedPivot.IsBullish();
|
||||||
|
|
||||||
//
|
//
|
||||||
bool canTriggerShort =
|
bool canTriggerShort =
|
||||||
false;
|
isBearish &&
|
||||||
|
hasSelectedPivot &&
|
||||||
|
selectedPivot.IsBearish();
|
||||||
|
|
||||||
//
|
//
|
||||||
result = canTriggerLong ||
|
result = canTriggerLong ||
|
||||||
@@ -1641,15 +1861,51 @@ bool CanTriggerCond1(
|
|||||||
|
|
||||||
//
|
//
|
||||||
// Trigger Stop Loss ...
|
// Trigger Stop Loss ...
|
||||||
sl = 0;
|
sl = isBullish
|
||||||
|
? selectedPivot.lower
|
||||||
|
: selectedPivot.upper;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Trigger Targets ...
|
// Trigger Targets ...
|
||||||
|
XTarget iTarget;
|
||||||
|
if (canTriggerLong &&
|
||||||
|
zBar.close < decisionZone.upper)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
iTarget.doRF = true;
|
||||||
|
iTarget.target = decisionZone.upper;
|
||||||
|
}
|
||||||
|
if (canTriggerShort &&
|
||||||
|
zBar.close > decisionZone.lower)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
iTarget.doRF = true;
|
||||||
|
iTarget.target = decisionZone.lower;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
if (iTarget.IsValid())
|
||||||
|
{
|
||||||
|
//
|
||||||
|
AddRef(
|
||||||
|
iTarget,
|
||||||
|
targets //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
iTarget.Clean();
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Cleanup Resources ...
|
// Cleanup Resources ...
|
||||||
|
|
||||||
|
//
|
||||||
|
zBar.Clean();
|
||||||
|
cBar.Clean();
|
||||||
|
pBar.Clean();
|
||||||
|
p2Bar.Clean();
|
||||||
|
iConditions.Clean();
|
||||||
|
selectedPivot.Clean();
|
||||||
|
|
||||||
//
|
//
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -1692,6 +1948,7 @@ bool CanTriggerCond2(
|
|||||||
// Define Requirements ...
|
// Define Requirements ...
|
||||||
|
|
||||||
//
|
//
|
||||||
|
bool has = false;
|
||||||
string symbol = helper.GetSymbol();
|
string symbol = helper.GetSymbol();
|
||||||
bool isBullish = decisionZone.IsBullish();
|
bool isBullish = decisionZone.IsBullish();
|
||||||
bool isBearish = decisionZone.IsBearish();
|
bool isBearish = decisionZone.IsBearish();
|
||||||
@@ -1726,28 +1983,31 @@ bool CanTriggerCond2(
|
|||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
bool has = false;
|
// Select Activated Pivot ...
|
||||||
XBoxZone selectedPivot;
|
XBoxZone selectedPivot;
|
||||||
bool hasPivots = HasChild(decisionPivots);
|
bool hasPivots = HasChild(decisionPivots);
|
||||||
int pivotsCount = ArraySize(decisionPivots);
|
int pivotsCount = ArraySize(decisionPivots);
|
||||||
|
|
||||||
//
|
|
||||||
// Select Activated Pivot ...
|
|
||||||
if (hasPivots)
|
if (hasPivots)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
for (int i = 0; i < pivotsCount; i++)
|
for (int i = 0; i < pivotsCount; i++)
|
||||||
{
|
{
|
||||||
|
//
|
||||||
|
// Detect Type of Pivot ...
|
||||||
|
ENUM_XCA_PIVOTS iType = GetPivotType(decisionPivots[i]);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Check Rejection of Block ...
|
// Check Rejection of Block ...
|
||||||
has =
|
has =
|
||||||
isBullish
|
isBullish
|
||||||
? cBar.IsBullish() &&
|
? cBar.IsBullish() &&
|
||||||
|
iType == XCA_OB_BULL &&
|
||||||
decisionPivots[i].IsBullish() &&
|
decisionPivots[i].IsBullish() &&
|
||||||
cBar.low < decisionPivots[i].upper &&
|
cBar.low < decisionPivots[i].upper &&
|
||||||
cBar.low > decisionPivots[i].lower &&
|
cBar.low > decisionPivots[i].lower &&
|
||||||
cBar.close > decisionPivots[i].upper
|
cBar.close > decisionPivots[i].upper
|
||||||
: cBar.IsBearish() &&
|
: cBar.IsBearish() &&
|
||||||
|
iType == XCA_OB_BEAR &&
|
||||||
decisionPivots[i].IsBearish() &&
|
decisionPivots[i].IsBearish() &&
|
||||||
cBar.high > decisionPivots[i].lower &&
|
cBar.high > decisionPivots[i].lower &&
|
||||||
cBar.high < decisionPivots[i].upper &&
|
cBar.high < decisionPivots[i].upper &&
|
||||||
@@ -1756,82 +2016,10 @@ bool CanTriggerCond2(
|
|||||||
{
|
{
|
||||||
selectedPivot = decisionPivots[i];
|
selectedPivot = decisionPivots[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
// //
|
|
||||||
// // Draw Pivot ...
|
|
||||||
// XCBoxObject *iObj;
|
|
||||||
|
|
||||||
// //
|
|
||||||
// has = helper.poiDrawer.DrawBox(
|
|
||||||
// decisionPivots[i],
|
|
||||||
// iObj //
|
|
||||||
// );
|
|
||||||
// if (has)
|
|
||||||
// {
|
|
||||||
// drawns.Add(iObj);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// //
|
|
||||||
// ZeroMemory(iObj);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
|
||||||
// Check Selected Pivot is Exists or not ...
|
|
||||||
bool hasSelectedPivot = selectedPivot.IsValid();
|
bool hasSelectedPivot = selectedPivot.IsValid();
|
||||||
|
|
||||||
//
|
|
||||||
// Detect Liquidity For Selected Pivot ...
|
|
||||||
double ssl = 0;
|
|
||||||
double bsl = 0;
|
|
||||||
bool hasSSL = false;
|
|
||||||
bool hasBSL = false;
|
|
||||||
if (hasSelectedPivot)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// Required Info ...
|
|
||||||
// int toIDX = selectedPivot.ToIndex();
|
|
||||||
// int fromIDX = selectedPivot.FromIndex();
|
|
||||||
|
|
||||||
// //
|
|
||||||
// // SSL ...
|
|
||||||
// datetime sslTo = NULL;
|
|
||||||
// datetime sslFrom = NULL;
|
|
||||||
|
|
||||||
// //
|
|
||||||
// // BSL ...
|
|
||||||
// datetime bslTo = NULL;
|
|
||||||
// datetime bslFrom = NULL;
|
|
||||||
|
|
||||||
// //
|
|
||||||
// // Loop ...
|
|
||||||
// XOHCL iBar;
|
|
||||||
// for (int i = fromIDX; i > toIDX; i--)
|
|
||||||
// {
|
|
||||||
// //
|
|
||||||
// hasSSL =
|
|
||||||
// ssl > 0 &&
|
|
||||||
// IsValid(sslTo) &&
|
|
||||||
// IsValid(sslFrom);
|
|
||||||
|
|
||||||
// //
|
|
||||||
// hasBSL =
|
|
||||||
// bsl > 0 &&
|
|
||||||
// IsValid(bslTo) &&
|
|
||||||
// IsValid(bslFrom);
|
|
||||||
|
|
||||||
// //
|
|
||||||
// iBar.Clean();
|
|
||||||
|
|
||||||
// //
|
|
||||||
// if (hasSSL && hasBSL)
|
|
||||||
// {
|
|
||||||
// break;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// iBar.Clean();
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Draw Selected Pivot ...
|
// Draw Selected Pivot ...
|
||||||
if (allowDraws &&
|
if (allowDraws &&
|
||||||
@@ -1909,6 +2097,7 @@ bool CanTriggerCond2(
|
|||||||
//
|
//
|
||||||
zBar.Clean();
|
zBar.Clean();
|
||||||
cBar.Clean();
|
cBar.Clean();
|
||||||
|
selectedPivot.Clean();
|
||||||
|
|
||||||
//
|
//
|
||||||
return result;
|
return result;
|
||||||
|
|||||||
@@ -472,6 +472,14 @@ class XCXCAEASignaller : XCBase
|
|||||||
allowedTypes //
|
allowedTypes //
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
Add(
|
||||||
|
XCA_PEAK,
|
||||||
|
allowedTypes //
|
||||||
|
);
|
||||||
|
Add(
|
||||||
|
XCA_VALE,
|
||||||
|
allowedTypes //
|
||||||
|
);
|
||||||
int decisionPivotsCount = detector.FillPivots(
|
int decisionPivotsCount = detector.FillPivots(
|
||||||
conditions.decisionZone,
|
conditions.decisionZone,
|
||||||
decisionPivots,
|
decisionPivots,
|
||||||
@@ -480,6 +488,27 @@ class XCXCAEASignaller : XCBase
|
|||||||
cTime //
|
cTime //
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Draw Pivots of Decision Zone only when
|
||||||
|
// it's Too Large ...
|
||||||
|
if (false &&
|
||||||
|
allowDraws &&
|
||||||
|
isTooLarge &&
|
||||||
|
HasChild(decisionPivots))
|
||||||
|
{
|
||||||
|
//
|
||||||
|
for (int i = 0; i < decisionPivotsCount; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
drawer.DrawBox(
|
||||||
|
decisionPivots[i],
|
||||||
|
cTime,
|
||||||
|
false, // Draw Middle ...
|
||||||
|
true // Ignore Type ...
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Define a Temparory Objects
|
// Define a Temparory Objects
|
||||||
// Array instance for Holding Drawn Objects ...
|
// Array instance for Holding Drawn Objects ...
|
||||||
@@ -849,7 +878,7 @@ class XCXCAEASignaller : XCBase
|
|||||||
inputs.x3maInputs.fastLength = 5;
|
inputs.x3maInputs.fastLength = 5;
|
||||||
|
|
||||||
//
|
//
|
||||||
inputs.x3maInputs.showFast = false;
|
inputs.x3maInputs.showFast = true;
|
||||||
inputs.x3maInputs.showSlow = false;
|
inputs.x3maInputs.showSlow = false;
|
||||||
inputs.x3maInputs.showMedium = false;
|
inputs.x3maInputs.showMedium = false;
|
||||||
|
|
||||||
@@ -870,9 +899,9 @@ class XCXCAEASignaller : XCBase
|
|||||||
inputs.caInputs.showMAH = false;
|
inputs.caInputs.showMAH = false;
|
||||||
inputs.caInputs.showMAL = false;
|
inputs.caInputs.showMAL = false;
|
||||||
inputs.caInputs.showMAC = false;
|
inputs.caInputs.showMAC = false;
|
||||||
inputs.caInputs.showSar = false;
|
inputs.caInputs.showSar = true;
|
||||||
inputs.caInputs.showVidya = false;
|
inputs.caInputs.showVidya = false;
|
||||||
inputs.caInputs.showTrend = false;
|
inputs.caInputs.showTrend = true;
|
||||||
inputs.caInputs.showSwings = true;
|
inputs.caInputs.showSwings = true;
|
||||||
inputs.caInputs.showFiboLevel1 = false;
|
inputs.caInputs.showFiboLevel1 = false;
|
||||||
inputs.caInputs.showFiboLevel2 = false;
|
inputs.caInputs.showFiboLevel2 = false;
|
||||||
|
|||||||
Reference in New Issue
Block a user