last ...
This commit is contained in:
@@ -30,7 +30,9 @@
|
||||
enum ENUM_X121SMC_XWZ_PROVIDERS
|
||||
{
|
||||
X121SMC_XWZ_PROVIDER_NONE,
|
||||
X121SMC_XWZ_PROVIDER_ACTIVATED_MA,
|
||||
X121SMC_XWZ_PROVIDER_ACTIVATED_BOX,
|
||||
X121SMC_XWZ_PROVIDER_ACTIVATED_AREA,
|
||||
X121SMC_XWZ_PROVIDER_ACTIVATED_ZONE,
|
||||
};
|
||||
|
||||
@@ -656,40 +658,32 @@ struct X121SMCStrategyXWZWorkingZone
|
||||
if (hasNewAnalyseOrderBlock)
|
||||
{
|
||||
//
|
||||
XCBaseObject *iObj;
|
||||
has = provider
|
||||
.visionCycleHelper
|
||||
.mPOIDrawer
|
||||
.CreateOrderBlock(
|
||||
analyseOB,
|
||||
iObj //
|
||||
);
|
||||
XOHCL obStartedBar;
|
||||
bool isOBStartedBodyOut = false;
|
||||
bool isOBStarted = analyseOB.IsStarted(
|
||||
analyseOB.GetDirection(),
|
||||
obStartedBar,
|
||||
isOBStartedBodyOut //
|
||||
);
|
||||
|
||||
//
|
||||
has = isOBStarted &&
|
||||
isOBStartedBodyOut;
|
||||
if (has)
|
||||
{
|
||||
//
|
||||
XOHCL obStartedBar;
|
||||
bool isOBStartedBodyOut = false;
|
||||
bool isOBStarted = analyseOB.IsStarted(
|
||||
analyseOB.GetDirection(),
|
||||
obStartedBar,
|
||||
isOBStartedBodyOut //
|
||||
);
|
||||
analyseOBBox.from =
|
||||
obStartedBar.NextAt();
|
||||
|
||||
//
|
||||
has = isOBStarted &&
|
||||
isOBStartedBodyOut;
|
||||
if (has)
|
||||
has = IsExists(analyseOBBox);
|
||||
if (!has)
|
||||
{
|
||||
//
|
||||
has = IsExists(analyseOBBox);
|
||||
if (!has)
|
||||
{
|
||||
//
|
||||
AddRef(
|
||||
analyseOBBox,
|
||||
waitingBoxes //
|
||||
);
|
||||
}
|
||||
AddRef(
|
||||
analyseOBBox,
|
||||
waitingBoxes //
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -881,6 +875,8 @@ struct X121SMCStrategyXWZWorkingZone
|
||||
bool IsZoneActivated(
|
||||
int &zoneIDX,
|
||||
int &fvgIDX,
|
||||
ENUM_X_DIRECTION &dir,
|
||||
ENUM_X121SMC_XWZ_PROVIDERS &signalProvider,
|
||||
X121SMCStrategySignalProviderData &provider,
|
||||
int barIndex = 0 //
|
||||
)
|
||||
@@ -888,11 +884,11 @@ struct X121SMCStrategyXWZWorkingZone
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
zoneIDX = -1;
|
||||
|
||||
//
|
||||
fvgIDX = -1;
|
||||
zoneIDX = -1;
|
||||
dir = X_DIRECTION_NONE;
|
||||
signalProvider = X121SMC_XWZ_PROVIDER_NONE;
|
||||
|
||||
//
|
||||
// Normalize Bar Index ...
|
||||
@@ -1119,7 +1115,9 @@ struct X121SMCStrategyXWZWorkingZone
|
||||
|
||||
//
|
||||
bool IsBoxActivated(
|
||||
int &boxIDX,
|
||||
XBoxZone &box,
|
||||
ENUM_X_DIRECTION &dir,
|
||||
ENUM_X121SMC_XWZ_PROVIDERS &signalProviderl,
|
||||
X121SMCStrategySignalProviderData &provider,
|
||||
int barIndex = 0 //
|
||||
)
|
||||
@@ -1128,7 +1126,9 @@ struct X121SMCStrategyXWZWorkingZone
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
boxIDX = -1;
|
||||
box.Clean();
|
||||
dir = X_DIRECTION_NONE;
|
||||
signalProviderl = X121SMC_XWZ_PROVIDER_NONE;
|
||||
|
||||
//
|
||||
if (barIndex < 0)
|
||||
@@ -1147,6 +1147,7 @@ struct X121SMCStrategyXWZWorkingZone
|
||||
//
|
||||
XOHCL bar;
|
||||
XOHCL cBar;
|
||||
XOHCL pBar;
|
||||
result = bar.Init(
|
||||
symbol,
|
||||
period,
|
||||
@@ -1155,6 +1156,9 @@ struct X121SMCStrategyXWZWorkingZone
|
||||
result =
|
||||
result &&
|
||||
bar.GetPreviousBar(cBar);
|
||||
result =
|
||||
result &&
|
||||
cBar.GetPreviousBar(pBar);
|
||||
if (!result)
|
||||
{
|
||||
//
|
||||
@@ -1169,6 +1173,8 @@ struct X121SMCStrategyXWZWorkingZone
|
||||
// Retrieve Some Required Data ...
|
||||
|
||||
//
|
||||
double peakZ = provider.decisionXConditions.peaksBuffer[0];
|
||||
double valeZ = provider.decisionXConditions.valesBuffer[0];
|
||||
double peak = provider.decisionXConditions.peaksBuffer[1];
|
||||
double vale = provider.decisionXConditions.valesBuffer[1];
|
||||
|
||||
@@ -1230,6 +1236,19 @@ struct X121SMCStrategyXWZWorkingZone
|
||||
provider.visionBearishScore > provider.visionBullishScore;
|
||||
|
||||
//
|
||||
bool isScoreBullish =
|
||||
isVisionScoreBullish &&
|
||||
isAnalyseScoreBullish &&
|
||||
isConsolidationScoreBullish;
|
||||
|
||||
//
|
||||
bool isScoreBearish =
|
||||
isVisionScoreBearish &&
|
||||
isAnalyseScoreBearish &&
|
||||
isConsolidationScoreBearish;
|
||||
|
||||
//
|
||||
// Waiting Boxes ...
|
||||
int count = CountWaitingBoxes();
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
@@ -1237,6 +1256,38 @@ struct X121SMCStrategyXWZWorkingZone
|
||||
XBoxZone iBox = waitingBoxes[i];
|
||||
bool isBullish = iBox.IsBullish();
|
||||
|
||||
//
|
||||
// Check Score ...
|
||||
|
||||
//
|
||||
bool isScorePassed =
|
||||
isBullish
|
||||
? isScoreBullish
|
||||
: isScoreBearish;
|
||||
|
||||
//
|
||||
// Check Bar Insides ...
|
||||
|
||||
//
|
||||
bool isPBarInside =
|
||||
(pBar.high <= iBox.upper &&
|
||||
pBar.low >= iBox.lower) ||
|
||||
(isBullish
|
||||
? pBar.low < iBox.upper &&
|
||||
pBar.GetDown() < iBox.upper
|
||||
: pBar.high > iBox.lower &&
|
||||
pBar.GetUp() > iBox.lower);
|
||||
|
||||
//
|
||||
bool isCBarInside =
|
||||
(cBar.high <= iBox.upper &&
|
||||
cBar.low >= iBox.lower) ||
|
||||
(isBullish
|
||||
? cBar.low < iBox.upper &&
|
||||
cBar.GetDown() < iBox.upper
|
||||
: cBar.high > iBox.lower &&
|
||||
cBar.GetUp() > iBox.lower);
|
||||
|
||||
//
|
||||
// Checking Rejection ...
|
||||
|
||||
@@ -1255,12 +1306,7 @@ struct X121SMCStrategyXWZWorkingZone
|
||||
cBar.GetUp() < iBox.lower;
|
||||
|
||||
//
|
||||
// Rejection ...
|
||||
bool isRejected = isBullishRejected ||
|
||||
isBearishRejected;
|
||||
|
||||
//
|
||||
// Checking Breaktion ...
|
||||
// Check Breaktion ...
|
||||
|
||||
//
|
||||
// Bullish ...
|
||||
@@ -1279,27 +1325,655 @@ struct X121SMCStrategyXWZWorkingZone
|
||||
cBar.high <= iBox.upper;
|
||||
|
||||
//
|
||||
// Breaktion ...
|
||||
bool isBreaked = isBullishBreaked ||
|
||||
isBearishBreaked;
|
||||
// Checking PV Pass ...
|
||||
|
||||
//
|
||||
result = isRejected ||
|
||||
isBreaked;
|
||||
bool isBullishPVPassed =
|
||||
isBullish &&
|
||||
vale == valeZ &&
|
||||
vale > iBox.lower &&
|
||||
vale < iBox.upper;
|
||||
|
||||
//
|
||||
bool isBearishPVPassed =
|
||||
!isBullish &&
|
||||
peak == peakZ &&
|
||||
peak > iBox.lower &&
|
||||
peak < iBox.upper;
|
||||
|
||||
//
|
||||
// Summarise ...
|
||||
|
||||
//
|
||||
// Rejection ...
|
||||
bool isRejected = isBullishRejected ||
|
||||
isBearishRejected;
|
||||
|
||||
//
|
||||
// Breaktion ...
|
||||
bool isBreaked =
|
||||
isPBarInside &&
|
||||
(isBullishBreaked ||
|
||||
isBearishBreaked);
|
||||
|
||||
//
|
||||
bool isPVPassed =
|
||||
(isBullishPVPassed ||
|
||||
isBearishPVPassed);
|
||||
|
||||
//
|
||||
// Trend Conditions ...
|
||||
|
||||
//
|
||||
bool isX3MABullish =
|
||||
provider.decisionXConditions.isX3MaFastOverMid &&
|
||||
provider.decisionXConditions.x3maMidBuffer[1] > provider.decisionXConditions.x3maSlowBuffer[1];
|
||||
|
||||
//
|
||||
bool isX3MABearish =
|
||||
provider.decisionXConditions.isX3MaFastUnderMid &&
|
||||
provider.decisionXConditions.x3maMidBuffer[1] < provider.decisionXConditions.x3maSlowBuffer[1];
|
||||
|
||||
//
|
||||
bool isVWapBullish =
|
||||
provider.decisionXConditions.isVWapFastOverMid &&
|
||||
provider.decisionXConditions.vwapMidBuffer[1] > provider.decisionXConditions.vwapSlowBuffer[1];
|
||||
|
||||
//
|
||||
bool isVWapBearish =
|
||||
provider.decisionXConditions.isX3MaFastUnderMid &&
|
||||
provider.decisionXConditions.vwapMidBuffer[1] < provider.decisionXConditions.vwapSlowBuffer[1];
|
||||
|
||||
//
|
||||
bool isTrendBullish =
|
||||
isX3MABullish &&
|
||||
isVWapBullish;
|
||||
|
||||
//
|
||||
bool isTrendBearish =
|
||||
isX3MABearish &&
|
||||
isVWapBearish;
|
||||
|
||||
//
|
||||
bool isTrendPassed =
|
||||
isBullish
|
||||
? isTrendBullish
|
||||
: isTrendBearish;
|
||||
|
||||
//
|
||||
// Summarize Conditions ...
|
||||
|
||||
//
|
||||
result =
|
||||
//
|
||||
// isBreaked ||
|
||||
// isRejected ||
|
||||
isPVPassed &&
|
||||
isRejected &&
|
||||
isTrendPassed &&
|
||||
isScorePassed
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
if (result)
|
||||
{
|
||||
//
|
||||
boxIDX = i;
|
||||
box = iBox;
|
||||
dir = iBox.dir;
|
||||
signalProviderl = X121SMC_XWZ_PROVIDER_ACTIVATED_BOX;
|
||||
|
||||
//
|
||||
iBox.Clean();
|
||||
break;
|
||||
}
|
||||
|
||||
//
|
||||
iBox.Clean();
|
||||
|
||||
//
|
||||
}
|
||||
|
||||
//
|
||||
// MA Trends ...
|
||||
if (!result)
|
||||
{
|
||||
//
|
||||
result = provider.analyseState.HasOrderBlocks();
|
||||
if (result)
|
||||
{
|
||||
//
|
||||
//
|
||||
// Trend Conditions ...
|
||||
|
||||
//
|
||||
bool isX3MABullish =
|
||||
provider.decisionXConditions.isX3MaFastCrossedOverMid;
|
||||
|
||||
//
|
||||
bool isX3MABearish =
|
||||
provider.decisionXConditions.isX3MaFastCrossedUnderMid;
|
||||
|
||||
//
|
||||
bool isVWapBullish =
|
||||
provider.decisionXConditions.isVWapFastCrossedOverMid;
|
||||
|
||||
//
|
||||
bool isVWapBearish =
|
||||
provider.decisionXConditions.isVWapFastCrossedUnderMid;
|
||||
|
||||
//
|
||||
//
|
||||
//
|
||||
|
||||
//
|
||||
bool isTrendBullish =
|
||||
(isX3MABullish ||
|
||||
isVWapBullish) &&
|
||||
provider.decisionXConditions.isNewPeakOverLast;
|
||||
|
||||
//
|
||||
bool isTrendBearish =
|
||||
(isX3MABearish ||
|
||||
isVWapBearish) &&
|
||||
provider.decisionXConditions.isNewValeUnderLast;
|
||||
|
||||
//
|
||||
result = isTrendBullish ||
|
||||
isTrendBearish;
|
||||
if (result)
|
||||
{
|
||||
//
|
||||
// Select Signal Box ...
|
||||
|
||||
//
|
||||
bool isScorePassed =
|
||||
isTrendBullish
|
||||
? isScoreBullish
|
||||
: isScoreBearish;
|
||||
|
||||
//
|
||||
XBoxZone tmpBoxes[];
|
||||
ToBox(
|
||||
provider.analyseState.orderBlocks,
|
||||
tmpBoxes //
|
||||
);
|
||||
Copy(
|
||||
waitingBoxes,
|
||||
tmpBoxes,
|
||||
false //
|
||||
);
|
||||
int idx = -1;
|
||||
// bool has = false;
|
||||
while (HasChild(tmpBoxes))
|
||||
{
|
||||
//
|
||||
if (isTrendBullish)
|
||||
{
|
||||
idx = GetHighest(tmpBoxes);
|
||||
}
|
||||
else
|
||||
{
|
||||
idx = GetLowest(tmpBoxes);
|
||||
}
|
||||
|
||||
//
|
||||
result = IsValidIndex(idx);
|
||||
if (!result)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
//
|
||||
XBoxZone iBox = tmpBoxes[idx];
|
||||
|
||||
//
|
||||
ArrayRemove(
|
||||
tmpBoxes,
|
||||
idx,
|
||||
1 //
|
||||
);
|
||||
|
||||
//
|
||||
int insideIDX = -1;
|
||||
bool hasInsideBox = HasInsideBox(
|
||||
insideIDX,
|
||||
iBox,
|
||||
tmpBoxes //
|
||||
);
|
||||
if (hasInsideBox)
|
||||
{
|
||||
//
|
||||
hasInsideBox =
|
||||
isTrendBullish
|
||||
? iBox.lower < tmpBoxes[insideIDX].lower
|
||||
: iBox.upper > tmpBoxes[insideIDX].upper;
|
||||
}
|
||||
|
||||
//
|
||||
bool isBullishPlacePassed =
|
||||
// !hasInsideBox &&
|
||||
isTrendBullish &&
|
||||
iBox.IsBullish() &&
|
||||
bar.low >= iBox.upper &&
|
||||
cBar.low >= iBox.upper &&
|
||||
provider.decisionXConditions.x3maMin >= iBox.lower &&
|
||||
provider.decisionXConditions.vwapMin >= iBox.lower;
|
||||
|
||||
//
|
||||
bool isBearishPlacePassed =
|
||||
// !hasInsideBox &&
|
||||
isTrendBearish &&
|
||||
iBox.IsBearish() &&
|
||||
bar.high <= iBox.lower &&
|
||||
cBar.high <= iBox.lower &&
|
||||
provider.decisionXConditions.x3maMax <= iBox.upper &&
|
||||
provider.decisionXConditions.vwapMax <= iBox.upper;
|
||||
|
||||
//
|
||||
result = isScorePassed &&
|
||||
(isBullishPlacePassed ||
|
||||
isBearishPlacePassed);
|
||||
if (result)
|
||||
{
|
||||
//
|
||||
box = iBox;
|
||||
iBox.Clean();
|
||||
dir =
|
||||
isTrendBullish
|
||||
? X_DIRECTION_BULLISH
|
||||
: X_DIRECTION_BEARISH;
|
||||
signalProviderl = X121SMC_XWZ_PROVIDER_ACTIVATED_MA;
|
||||
break;
|
||||
}
|
||||
|
||||
//
|
||||
}
|
||||
Clean(tmpBoxes);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Supply and Demand ...
|
||||
if (false && !result)
|
||||
{
|
||||
//
|
||||
int idx = -1;
|
||||
bool has = false;
|
||||
XBoxZone tmpBoxes[];
|
||||
|
||||
//
|
||||
// Detecting Youngest Zones ...
|
||||
|
||||
//
|
||||
XBoxZone bullishBox;
|
||||
bool hasBullishBox = false;
|
||||
if (!hasBullishBox)
|
||||
{
|
||||
//
|
||||
XCOrderBlock *ob = NULL;
|
||||
idx = GetYoungest(provider.analyseState.bullishOrderBlocks);
|
||||
has = IsValidIndex(idx);
|
||||
if (has)
|
||||
{
|
||||
//
|
||||
ob = provider.analyseState.bullishOrderBlocks[idx];
|
||||
|
||||
//
|
||||
XOHCL startedBar;
|
||||
bool isBodyOut = false;
|
||||
bool isStarted = ob.IsStarted(
|
||||
ob.GetDirection(),
|
||||
startedBar,
|
||||
isBodyOut //
|
||||
);
|
||||
has = isStarted &&
|
||||
isBodyOut;
|
||||
if (has)
|
||||
{
|
||||
//
|
||||
hasBullishBox = ToBox(
|
||||
bullishBox,
|
||||
ob //
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
if (!hasBullishBox)
|
||||
{
|
||||
bullishBox.Clean();
|
||||
}
|
||||
|
||||
//
|
||||
ZeroMemory(ob);
|
||||
}
|
||||
|
||||
//
|
||||
XBoxZone bearishBox;
|
||||
bool hasBearishBox = false;
|
||||
if (!hasBearishBox)
|
||||
{
|
||||
//
|
||||
XCOrderBlock *ob = NULL;
|
||||
idx = GetYoungest(provider.analyseState.bearishOrderBlocks);
|
||||
has = IsValidIndex(idx);
|
||||
if (has)
|
||||
{
|
||||
//
|
||||
ob = provider.analyseState.bearishOrderBlocks[idx];
|
||||
|
||||
//
|
||||
XOHCL startedBar;
|
||||
bool isBodyOut = false;
|
||||
bool isStarted = ob.IsStarted(
|
||||
ob.GetDirection(),
|
||||
startedBar,
|
||||
isBodyOut //
|
||||
);
|
||||
has = isStarted &&
|
||||
isBodyOut;
|
||||
if (has)
|
||||
{
|
||||
//
|
||||
hasBearishBox = ToBox(
|
||||
bearishBox,
|
||||
ob //
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
if (!hasBearishBox)
|
||||
{
|
||||
bearishBox.Clean();
|
||||
}
|
||||
|
||||
//
|
||||
ZeroMemory(ob);
|
||||
}
|
||||
|
||||
//
|
||||
XBoxZone bullishCZBox;
|
||||
bool hasBullishConsolidationZone = false;
|
||||
XConsolidationZone bullishConsolidationZone;
|
||||
hasBullishConsolidationZone = provider.decisionState.HasBullishConsolidationZones();
|
||||
if (hasBullishConsolidationZone)
|
||||
{
|
||||
//
|
||||
idx = GetYoungest(provider.decisionState.bullishConsolidationZones);
|
||||
hasBullishConsolidationZone = IsValidIndex(idx);
|
||||
if (hasBullishConsolidationZone)
|
||||
{
|
||||
//
|
||||
bullishConsolidationZone = provider.decisionState.bullishConsolidationZones[idx];
|
||||
if (hasBullishConsolidationZone)
|
||||
{
|
||||
//
|
||||
hasBullishConsolidationZone = ToBox(
|
||||
bullishCZBox,
|
||||
bullishConsolidationZone //
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
XBoxZone bearishCZBox;
|
||||
bool hasBearishConsolidationZone = false;
|
||||
XConsolidationZone bearishConsolidationZone;
|
||||
hasBearishConsolidationZone = provider.decisionState.HasBearishConsolidationZones();
|
||||
if (hasBearishConsolidationZone)
|
||||
{
|
||||
//
|
||||
idx = GetYoungest(provider.decisionState.bearishConsolidationZones);
|
||||
hasBearishConsolidationZone = IsValidIndex(idx);
|
||||
if (hasBearishConsolidationZone)
|
||||
{
|
||||
//
|
||||
bearishConsolidationZone = provider.decisionState.bearishConsolidationZones[idx];
|
||||
if (hasBearishConsolidationZone)
|
||||
{
|
||||
//
|
||||
hasBearishConsolidationZone = ToBox(
|
||||
bearishCZBox,
|
||||
bearishConsolidationZone //
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
//
|
||||
//
|
||||
|
||||
//
|
||||
// Supply Zone ...
|
||||
has = provider.visionState.HasSupplyZones();
|
||||
if (has)
|
||||
{
|
||||
//
|
||||
ToBox(
|
||||
provider.visionState.supplyZones,
|
||||
tmpBoxes //
|
||||
);
|
||||
|
||||
//
|
||||
while (HasChild(tmpBoxes))
|
||||
{
|
||||
//
|
||||
idx = GetYoungest(tmpBoxes);
|
||||
has = IsValidIndex(idx);
|
||||
if (!has)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
//
|
||||
XBoxZone iBox = tmpBoxes[idx];
|
||||
ArrayRemove(
|
||||
tmpBoxes,
|
||||
idx,
|
||||
1 //
|
||||
);
|
||||
|
||||
//
|
||||
// Price Must Be Inside a Zonne More Than 5 Bar ...
|
||||
bool isPriceInside =
|
||||
//
|
||||
bar.high < iBox.upper &&
|
||||
bar.low > iBox.lower &&
|
||||
//
|
||||
cBar.high < iBox.upper &&
|
||||
cBar.low > iBox.lower &&
|
||||
//
|
||||
pBar.high < iBox.upper &&
|
||||
pBar.low > iBox.lower
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
bool isBearishBoxPassed =
|
||||
hasBearishBox &&
|
||||
IsBoxInside(
|
||||
bearishBox,
|
||||
iBox //
|
||||
);
|
||||
|
||||
//
|
||||
bool isBearishCZBoxPassed =
|
||||
hasBearishConsolidationZone &&
|
||||
IsBoxInside(
|
||||
bearishCZBox,
|
||||
iBox //
|
||||
);
|
||||
|
||||
//
|
||||
result = isPriceInside &&
|
||||
(isBearishBoxPassed ||
|
||||
isBearishCZBoxPassed);
|
||||
if (result)
|
||||
{
|
||||
//
|
||||
if (isBearishBoxPassed)
|
||||
{
|
||||
box = bearishBox;
|
||||
}
|
||||
else
|
||||
{
|
||||
box = bearishCZBox;
|
||||
}
|
||||
|
||||
//
|
||||
iBox.to = TimeCurrent();
|
||||
XCBoxObject *iObj;
|
||||
provider.visionCycleHelper.mPOIDrawer.DrawBox(
|
||||
iBox,
|
||||
iObj //
|
||||
);
|
||||
|
||||
//
|
||||
dir = X_DIRECTION_BEARISH;
|
||||
signalProviderl = X121SMC_XWZ_PROVIDER_ACTIVATED_AREA;
|
||||
|
||||
//
|
||||
iBox.Clean();
|
||||
|
||||
//
|
||||
break;
|
||||
}
|
||||
|
||||
//
|
||||
iBox.Clean();
|
||||
}
|
||||
|
||||
//
|
||||
Clean(tmpBoxes);
|
||||
}
|
||||
|
||||
//
|
||||
// Demand Zone ...
|
||||
has = provider.visionState.HasDemandZones();
|
||||
if (!result && has)
|
||||
{
|
||||
//
|
||||
ToBox(
|
||||
provider.visionState.demandZones,
|
||||
tmpBoxes //
|
||||
);
|
||||
|
||||
//
|
||||
while (HasChild(tmpBoxes))
|
||||
{
|
||||
//
|
||||
idx = GetYoungest(tmpBoxes);
|
||||
has = IsValidIndex(idx);
|
||||
if (!has)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
//
|
||||
XBoxZone iBox = tmpBoxes[idx];
|
||||
ArrayRemove(
|
||||
tmpBoxes,
|
||||
idx,
|
||||
1 //
|
||||
);
|
||||
|
||||
//
|
||||
// Price Must Be Inside a Zonne More Than 5 Bar ...
|
||||
bool isPriceInside =
|
||||
//
|
||||
bar.high < iBox.upper &&
|
||||
bar.low > iBox.lower &&
|
||||
//
|
||||
cBar.high < iBox.upper &&
|
||||
cBar.low > iBox.lower &&
|
||||
//
|
||||
pBar.high < iBox.upper &&
|
||||
pBar.low > iBox.lower
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
bool isBullishBoxPassed =
|
||||
hasBullishBox &&
|
||||
IsBoxInside(
|
||||
bullishBox,
|
||||
iBox //
|
||||
);
|
||||
|
||||
//
|
||||
bool isBullishCZBoxPassed =
|
||||
hasBullishConsolidationZone &&
|
||||
IsBoxInside(
|
||||
bullishCZBox,
|
||||
iBox //
|
||||
);
|
||||
|
||||
//
|
||||
result = isPriceInside &&
|
||||
(isBullishBoxPassed ||
|
||||
isBullishCZBoxPassed);
|
||||
if (result)
|
||||
{
|
||||
//
|
||||
if (isBullishBoxPassed)
|
||||
{
|
||||
box = bullishBox;
|
||||
}
|
||||
else
|
||||
{
|
||||
box = bullishCZBox;
|
||||
}
|
||||
|
||||
//
|
||||
iBox.to = TimeCurrent();
|
||||
XCBoxObject *iObj;
|
||||
provider.visionCycleHelper.mPOIDrawer.DrawBox(
|
||||
iBox,
|
||||
iObj //
|
||||
);
|
||||
|
||||
//
|
||||
dir = X_DIRECTION_BULLISH;
|
||||
signalProviderl = X121SMC_XWZ_PROVIDER_ACTIVATED_AREA;
|
||||
|
||||
//
|
||||
iBox.Clean();
|
||||
|
||||
//
|
||||
break;
|
||||
}
|
||||
|
||||
//
|
||||
iBox.Clean();
|
||||
}
|
||||
|
||||
//
|
||||
Clean(tmpBoxes);
|
||||
}
|
||||
|
||||
//
|
||||
Clean(tmpBoxes);
|
||||
|
||||
//
|
||||
bullishBox.Clean();
|
||||
bearishBox.Clean();
|
||||
bullishCZBox.Clean();
|
||||
bearishCZBox.Clean();
|
||||
bullishConsolidationZone.Clean();
|
||||
bearishConsolidationZone.Clean();
|
||||
|
||||
//
|
||||
}
|
||||
|
||||
//
|
||||
bar.Clean();
|
||||
cBar.Clean();
|
||||
pBar.Clean();
|
||||
|
||||
//
|
||||
return result;
|
||||
|
||||
Reference in New Issue
Block a user