last ...
This commit is contained in:
@@ -183,6 +183,30 @@ class XCPOIDetector : public XCBaseAlert
|
||||
mSwingRange = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Pullback Range Validation ...
|
||||
*
|
||||
* @return ( int )
|
||||
*/
|
||||
int PullbackRange()
|
||||
{
|
||||
return mPullbackRange;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set Pullback Range Validation ...
|
||||
*
|
||||
* @param value: int ...
|
||||
*/
|
||||
void PullbackRange(int value)
|
||||
{
|
||||
//
|
||||
value = NormalizeInt(value, 1);
|
||||
|
||||
//
|
||||
mPullbackRange = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Momentum Detecting Loopback ...
|
||||
*
|
||||
@@ -659,6 +683,9 @@ class XCPOIDetector : public XCBaseAlert
|
||||
SwingRange(7);
|
||||
MomentumLoopback(2);
|
||||
|
||||
//
|
||||
PullbackRange(3);
|
||||
|
||||
//
|
||||
MomentumLoopback(2);
|
||||
|
||||
@@ -775,6 +802,13 @@ class XCPOIDetector : public XCBaseAlert
|
||||
iEvent //
|
||||
);
|
||||
|
||||
//
|
||||
// Pullback ...
|
||||
DetetctPullback(
|
||||
iBar,
|
||||
iEvent //
|
||||
);
|
||||
|
||||
//
|
||||
// Consolidation Zone ...
|
||||
DetectConsolidationZone(
|
||||
@@ -955,6 +989,21 @@ class XCPOIDetector : public XCBaseAlert
|
||||
);
|
||||
}
|
||||
|
||||
//
|
||||
// Pullback ...
|
||||
has = DetetctPullback(
|
||||
iBar,
|
||||
iEvent //
|
||||
);
|
||||
if (has)
|
||||
{
|
||||
//
|
||||
Add(
|
||||
iEvent,
|
||||
events //
|
||||
);
|
||||
}
|
||||
|
||||
//
|
||||
// Consolidation Zone ...
|
||||
has = DetectConsolidationZone(
|
||||
@@ -1139,6 +1188,27 @@ class XCPOIDetector : public XCBaseAlert
|
||||
state.swingHighs //
|
||||
);
|
||||
|
||||
//
|
||||
// Pullbacks ...
|
||||
|
||||
//
|
||||
Copy(
|
||||
mPullbacks,
|
||||
state.pullbacks //
|
||||
);
|
||||
|
||||
//
|
||||
Copy(
|
||||
mBullishPullbacks,
|
||||
state.bullishPullbacks //
|
||||
);
|
||||
|
||||
//
|
||||
Copy(
|
||||
mBearishPullbacks,
|
||||
state.bearishPullbacks //
|
||||
);
|
||||
|
||||
//
|
||||
// Momentums ...
|
||||
|
||||
@@ -1802,6 +1872,167 @@ class XCPOIDetector : public XCBaseAlert
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Detect Pullback ...
|
||||
*
|
||||
* @param bar: XOHCL instance ...
|
||||
* @param state: ENUM_XPOI_EVENTS member ...
|
||||
*
|
||||
* @return ( bool )
|
||||
*/
|
||||
bool DetetctPullback(
|
||||
XOHCL &bar,
|
||||
ENUM_XPOI_EVENTS &state //
|
||||
)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
state = X_POI_EVENT_NONE;
|
||||
|
||||
//
|
||||
result = bar.IsValid();
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
XOHCL sBar;
|
||||
if (bar.Index() == 0)
|
||||
{
|
||||
//
|
||||
result = sBar.Init(
|
||||
bar.symbol,
|
||||
bar.period,
|
||||
bar.Index() + 1 //
|
||||
);
|
||||
if (!result)
|
||||
{
|
||||
//
|
||||
sBar.Clean();
|
||||
return result;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
sBar = bar;
|
||||
}
|
||||
|
||||
//
|
||||
ENUM_X_DIRECTION iDir;
|
||||
result = mBarAnalyser.IsPullback(
|
||||
sBar,
|
||||
iDir,
|
||||
mPullbackRange,
|
||||
true // Force Body ...
|
||||
);
|
||||
if (!result)
|
||||
{
|
||||
//
|
||||
sBar.Clean();
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
bool isBullish = IsBullish(iDir);
|
||||
bool isBearish = IsBearish(iDir);
|
||||
result = isBullish ||
|
||||
isBearish;
|
||||
if (!result)
|
||||
{
|
||||
//
|
||||
sBar.Clean();
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
XOHCL fromBar;
|
||||
result = fromBar.Init(
|
||||
bar.symbol,
|
||||
bar.period,
|
||||
sBar.Index() + mPullbackRange //
|
||||
);
|
||||
if (!result)
|
||||
{
|
||||
//
|
||||
fromBar.Clean();
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
XBoxZone box;
|
||||
|
||||
//
|
||||
box.dir = iDir;
|
||||
box.to = sBar.time;
|
||||
box.from = fromBar.time;
|
||||
box.symbol = fromBar.symbol;
|
||||
box.period = fromBar.period;
|
||||
box.type = ToString(iDir) + "_XPullBK" + box.symbol + "_" + ToString(box.period);
|
||||
|
||||
//
|
||||
box.upper =
|
||||
isBullish
|
||||
? sBar.high
|
||||
: fromBar.high;
|
||||
|
||||
//
|
||||
box.lower =
|
||||
isBullish
|
||||
? fromBar.low
|
||||
: sBar.low;
|
||||
|
||||
//
|
||||
result = box.IsValid();
|
||||
if (result)
|
||||
{
|
||||
//
|
||||
AddRef(
|
||||
box,
|
||||
mPullbacks //
|
||||
);
|
||||
|
||||
//
|
||||
if (isBullish)
|
||||
{
|
||||
//
|
||||
AddRef(
|
||||
box,
|
||||
mBullishPullbacks //
|
||||
);
|
||||
}
|
||||
|
||||
//
|
||||
if (isBearish)
|
||||
{
|
||||
//
|
||||
AddRef(
|
||||
box,
|
||||
mBearishPullbacks //
|
||||
);
|
||||
}
|
||||
|
||||
//
|
||||
state =
|
||||
isBullish
|
||||
? X_BULLISH_PULLBACK_DETECTED
|
||||
: X_BEARISH_PULLBACK_DETECTED;
|
||||
}
|
||||
|
||||
//
|
||||
// Cleanup Resources ...
|
||||
|
||||
//
|
||||
box.Clean();
|
||||
sBar.Clean();
|
||||
fromBar.Clean();
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Detect Consolidation Zones ...
|
||||
*
|
||||
@@ -3093,6 +3324,13 @@ class XCPOIDetector : public XCBaseAlert
|
||||
XCSwing *mSwingHighs[]; // Holds Founded Swing Highs ...
|
||||
int mSwingRange; // Swing Detection Range ...
|
||||
|
||||
//
|
||||
// Pullbacks ...
|
||||
XBoxZone mPullbacks[]; // Holds Founded Pullbacks ...
|
||||
XBoxZone mBullishPullbacks[]; // Holds Founded Bullish Pullbacks ...
|
||||
XBoxZone mBearishPullbacks[]; // Holds Founded Bearish Pullbacks ...
|
||||
int mPullbackRange; // Pullback Detection Range ...
|
||||
|
||||
//
|
||||
// Momentums ...
|
||||
XCMomentumBar *mMomentums[]; // Holds Founded Momentum Bars ...
|
||||
|
||||
@@ -3355,6 +3355,7 @@ class XCPOIDrawer : public XCBase
|
||||
bool ignoreSupportZones = false,
|
||||
bool ignoreBullishSharps = false,
|
||||
bool ignoreBullishSpikes = false,
|
||||
bool ignoreBullishPullbacks = false,
|
||||
bool ignoreBullishMomentums = false,
|
||||
bool ignoreBullishRejections = false,
|
||||
bool ignoreBullishOrderBlocks = false,
|
||||
@@ -3367,6 +3368,7 @@ class XCPOIDrawer : public XCBase
|
||||
bool ignoreResistanceZones = false,
|
||||
bool ignoreBearishSharps = false,
|
||||
bool ignoreBearishSpikes = false,
|
||||
bool ignoreBearishPullbacks = false,
|
||||
bool ignoreBearishMomentums = false,
|
||||
bool ignoreBearishRejections = false,
|
||||
bool ignoreBearishOrderBlocks = false,
|
||||
@@ -3856,6 +3858,67 @@ class XCPOIDrawer : public XCBase
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Pullbacks ...
|
||||
|
||||
//
|
||||
// Bullish ...
|
||||
if (!ignoreBullishPullbacks)
|
||||
{
|
||||
//
|
||||
int count = state.CountBullishPullbacks();
|
||||
if (IsValidSize(count))
|
||||
{
|
||||
//
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
XCBoxObject *iObj;
|
||||
bool isCreated = DrawBox(
|
||||
state.bullishPullbacks[i],
|
||||
iObj //
|
||||
);
|
||||
if (isCreated)
|
||||
{
|
||||
//
|
||||
Add(
|
||||
(XCBaseObject *)iObj,
|
||||
drawnObjects //
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Bearish ...
|
||||
if (!ignoreBearishPullbacks)
|
||||
{
|
||||
//
|
||||
int count = state.CountBearishPullbacks();
|
||||
if (IsValidSize(count))
|
||||
{
|
||||
//
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
XCBoxObject *iObj;
|
||||
bool isCreated = DrawBox(
|
||||
state.bearishPullbacks[i],
|
||||
iObj //
|
||||
);
|
||||
if (isCreated)
|
||||
{
|
||||
//
|
||||
Add(
|
||||
(XCBaseObject *)iObj,
|
||||
drawnObjects //
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Consolidation Zones ...
|
||||
|
||||
|
||||
@@ -347,6 +347,7 @@ void DetectPOIState()
|
||||
showBullishPOIs && true, // SupportZones
|
||||
showBullishPOIs && true, // BullishSharps
|
||||
showBullishPOIs && true, // BullishSpikes
|
||||
showBullishPOIs && false, // BullishPullbacks
|
||||
showBullishPOIs && true, // BullishMomentums
|
||||
showBullishPOIs && true, // BullishRejections
|
||||
showBullishPOIs && true, // BullishOrderBlocks
|
||||
@@ -356,9 +357,10 @@ void DetectPOIState()
|
||||
// Bearish ...
|
||||
showBearishPOIs && true, // SwingHighs
|
||||
showBearishPOIs && true, // SupplyZones
|
||||
showBearishPOIs && true, // ResistanceZones
|
||||
showBearishPOIs && true, // BearishSharps
|
||||
showBearishPOIs && true, // BearishSpikes
|
||||
showBearishPOIs && true, // ResistanceZones
|
||||
showBearishPOIs && false, // BearishPullbacks
|
||||
showBearishPOIs && true, // BearishMomentums
|
||||
showBearishPOIs && true, // BearishRejections
|
||||
showBearishPOIs && true, // BearishOrderBlocks
|
||||
@@ -367,9 +369,9 @@ void DetectPOIState()
|
||||
);
|
||||
|
||||
//
|
||||
if (poiEventNotifier.hasNewConsolidationZone)
|
||||
if (poiEventNotifier.hasNewPullback)
|
||||
{
|
||||
Print("Consolidation ...");
|
||||
Print("Pullback ...");
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
@@ -76,6 +76,9 @@ enum ENUM_XPOIS
|
||||
//
|
||||
X_BULLISH_SPIKE,
|
||||
X_BEARISH_SPIKE,
|
||||
//
|
||||
X_BULLISH_PULLBACK,
|
||||
X_BEARISH_PULLBACK,
|
||||
};
|
||||
|
||||
//
|
||||
@@ -126,6 +129,8 @@ enum ENUM_XPOI_EVENTS
|
||||
X_BEARISH_SHARP_DETECTED,
|
||||
X_BULLISH_SPIKE_DETECTED,
|
||||
X_BEARISH_SPIKE_DETECTED,
|
||||
X_BULLISH_PULLBACK_DETECTED,
|
||||
X_BEARISH_PULLBACK_DETECTED,
|
||||
};
|
||||
|
||||
//
|
||||
|
||||
@@ -667,6 +667,12 @@ struct XPOIStateEvents
|
||||
bool hasNewBullishRejection;
|
||||
bool hasNewBearishRejection;
|
||||
|
||||
//
|
||||
// Pullbacks ...
|
||||
bool hasNewPullback;
|
||||
bool hasNewBullishPullback;
|
||||
bool hasNewBearishPullback;
|
||||
|
||||
//
|
||||
// Support/Resistance (s) ...
|
||||
bool hasNewSupportZone;
|
||||
@@ -796,6 +802,11 @@ struct XPOIStateEvents
|
||||
hasNewBullishRejection = HasNewBullishRejection(events);
|
||||
hasNewBearishRejection = HasNewBearishRejection(events);
|
||||
|
||||
//
|
||||
hasNewPullback = HasNewPullback(events);
|
||||
hasNewBullishPullback = HasNewBullishPullback(events);
|
||||
hasNewBearishPullback = HasNewBearishPullback(events);
|
||||
|
||||
//
|
||||
hasNewSupportZone = HasNewSupportZone(events);
|
||||
hasNewResistanceZone = HasNewResistanceZone(events);
|
||||
@@ -890,6 +901,11 @@ struct XPOIState
|
||||
XBoxZone bullishSharps[]; // Holds Founded Bullish Sharps ...
|
||||
XBoxZone bearishSharps[]; // Holds Founded Bearih Sharps ...
|
||||
|
||||
//
|
||||
XBoxZone pullbacks[]; // Holds Founded Pullbacks ...
|
||||
XBoxZone bullishPullbacks[]; // Holds Founded Bullish Pullbacks ...
|
||||
XBoxZone bearishPullbacks[]; // Holds Founded Bearish Pullbacks ...
|
||||
|
||||
//
|
||||
// Constructor ...
|
||||
void XPOIState()
|
||||
@@ -962,6 +978,12 @@ struct XPOIState
|
||||
Clean(bullishSharps);
|
||||
Clean(bearishSharps);
|
||||
|
||||
//
|
||||
// Pullbaks ...
|
||||
Clean(pullbacks);
|
||||
Clean(bullishPullbacks);
|
||||
Clean(bearishPullbacks);
|
||||
|
||||
//
|
||||
// Consolidation Zones ...
|
||||
Clean(consolidationZones);
|
||||
@@ -1020,6 +1042,11 @@ struct XPOIState
|
||||
HasBullishRejections() ||
|
||||
HasBearishRejections() ||
|
||||
//
|
||||
// Pullbacks ...
|
||||
HasPullbacks() ||
|
||||
HasBullishPullbacks() ||
|
||||
HasBearishPullbacks() ||
|
||||
//
|
||||
// Support / Resistance Zones ...
|
||||
HasSupportZones() ||
|
||||
HasResistanceZones() ||
|
||||
@@ -1197,6 +1224,51 @@ struct XPOIState
|
||||
return ArraySize(bearishRejections);
|
||||
}
|
||||
|
||||
//
|
||||
// Pullbacks ...
|
||||
|
||||
//
|
||||
// Has ...
|
||||
|
||||
//
|
||||
bool HasPullbacks()
|
||||
{
|
||||
return HasChild(pullbacks);
|
||||
}
|
||||
|
||||
//
|
||||
bool HasBullishPullbacks()
|
||||
{
|
||||
return HasChild(bullishPullbacks);
|
||||
}
|
||||
|
||||
//
|
||||
bool HasBearishPullbacks()
|
||||
{
|
||||
return HasChild(bearishPullbacks);
|
||||
}
|
||||
|
||||
//
|
||||
// Count ...
|
||||
|
||||
//
|
||||
int CountPullbacks()
|
||||
{
|
||||
return ArraySize(pullbacks);
|
||||
}
|
||||
|
||||
//
|
||||
int CountBullishPullbacks()
|
||||
{
|
||||
return ArraySize(bullishPullbacks);
|
||||
}
|
||||
|
||||
//
|
||||
int CountBearishPullbacks()
|
||||
{
|
||||
return ArraySize(bearishPullbacks);
|
||||
}
|
||||
|
||||
//
|
||||
// Support / Resistance Zones ...
|
||||
|
||||
@@ -5038,6 +5110,34 @@ bool HasNewBearishSharp(ENUM_XPOI_EVENTS &events[])
|
||||
);
|
||||
}
|
||||
|
||||
//
|
||||
// Pullbacks ...
|
||||
|
||||
//
|
||||
bool HasNewPullback(ENUM_XPOI_EVENTS &events[])
|
||||
{
|
||||
return HasNewBullishPullback(events) ||
|
||||
HasNewBearishPullback(events);
|
||||
}
|
||||
|
||||
//
|
||||
bool HasNewBullishPullback(ENUM_XPOI_EVENTS &events[])
|
||||
{
|
||||
return Contains(
|
||||
X_BULLISH_PULLBACK_DETECTED,
|
||||
events //
|
||||
);
|
||||
}
|
||||
|
||||
//
|
||||
bool HasNewBearishPullback(ENUM_XPOI_EVENTS &events[])
|
||||
{
|
||||
return Contains(
|
||||
X_BEARISH_PULLBACK_DETECTED,
|
||||
events //
|
||||
);
|
||||
}
|
||||
|
||||
//
|
||||
// Consolidation Zones ...
|
||||
|
||||
|
||||
Reference in New Issue
Block a user