This commit is contained in:
2024-12-11 17:50:57 +03:30
parent db5144b1ef
commit 4516229d36
4 changed files with 889 additions and 81 deletions
+298
View File
@@ -2681,3 +2681,301 @@
//////////////////////////////////////////////////////////////////////
//
int consolidationsCount = mTriggerCycleHelper.CountConsolidationZones();
result = IsValidSize(consolidationsCount);
if (!result)
{
//
conditions.Clean();
return result;
}
XConsolidationZone consolidations[];
mTriggerCycleHelper.FillConsolidationZones(consolidations);
//
// Detect Bid inside Of Zones ...
bool hasSupply = false;
bool hasDemand = false;
XCSupplyZone *supplyZone;
XCDemandZone *demandZone;
bool isBidInsideZone = false;
XConsolidationZone bidContainsConsolidationZone;
for (int i = consolidationsCount - 1; i >= 0; i--)
{
//
XConsolidationZone iZone = consolidations[i];
//
// Check Supply or Demand Zone ...
hasSupply = iZone.HasSupplyZone(supplyZone);
hasDemand = iZone.HasDemandZone(demandZone);
//
result = hasSupply ||
hasDemand;
if (!result)
{
continue;
}
//
// Check Bid inside Zone ...
if (hasSupply)
{
//
result = bid < supplyZone.Upper() &&
bid > supplyZone.Lower();
}
else
{
//
result = bid < demandZone.Upper() &&
bid > demandZone.Lower();
}
//
if (result)
{
break;
}
}
if (!result)
{
//
conditions.Clean();
return result;
}
//
if (hasSupply)
{
//
supplyZone.To(cTime);
XCSupplyZoneObject *iSupplyZoneObj;
result = mPOIDrawer.CreateSupplyZone(
supplyZone,
iSupplyZoneObj //
);
if (!result)
{
//
conditions.Clean();
return result;
}
}
//
if (hasDemand)
{
//
demandZone.To(cTime);
XCDemandZoneObject *iDemandZoneObj;
result = mPOIDrawer.CreateDemandZone(
demandZone,
iDemandZoneObj //
);
if (!result)
{
//
conditions.Clean();
return result;
}
}
//
Print("BID Inside Zone ...");
//////////////////////////////////////////////////////////////////////////
bool DetectCandlestic(
ENUM_X_DIRECTION &dir,
X121SMCStrategyConditions &conditions //
)
{
//
bool result = false;
//
dir = X_DIRECTION_NONE;
//
string symbol = GetSymbol();
ENUM_TIMEFRAMES period = GetPeriod();
//
int cIndex = 1;
int pIndex = cIndex + 1;
//
XOHCL cBar;
result = cBar.Init(
symbol,
period,
cIndex //
);
if (!result)
{
return result;
}
//
XOHCL pBar;
result = pBar.Init(
symbol,
period,
pIndex //
);
if (!result)
{
return result;
}
//
// Momentum Bars ...
XCMomentumBar *cBullishMomentum = NULL;
XCMomentumBar *cBearishMomentum = NULL;
XCMomentumBar *pBullishMomentum = NULL;
XCMomentumBar *pBearishMomentum = NULL;
int bullishMomentumBarsCount = conditions.triggerConditions.state
.CountBullishMomentumBars();
int bearishMomentumBarsCount = conditions.triggerConditions.state
.CountBearishMomentumBars();
if (IsValidSize(bullishMomentumBarsCount))
{
//
cBullishMomentum = conditions.triggerConditions.state.bullishMomentumBars[bullishMomentumBarsCount - 1];
pBullishMomentum = conditions.triggerConditions.state.bullishMomentumBars[bullishMomentumBarsCount - 2];
}
if (IsValidSize(bearishMomentumBarsCount))
{
//
cBearishMomentum = conditions.triggerConditions.state.bearishMomentumBars[bearishMomentumBarsCount - 1];
pBearishMomentum = conditions.triggerConditions.state.bearishMomentumBars[bearishMomentumBarsCount - 2];
}
//
// Rejection Bars ...
XCRejectionBar *cBullishRejection = NULL;
XCRejectionBar *cBearishRejection = NULL;
XCRejectionBar *pBullishRejection = NULL;
XCRejectionBar *pBearishRejection = NULL;
int bullishRejectionBarsCount = conditions.triggerConditions.state
.CountBullishRejectionBars();
int bearishRejectionBarsCount = conditions.triggerConditions.state
.CountBearishRejectionBars();
if (IsValidSize(bullishRejectionBarsCount))
{
//
cBullishRejection = conditions.triggerConditions.state.bullishRejectionBars[bullishRejectionBarsCount - 1];
pBullishRejection = conditions.triggerConditions.state.bullishRejectionBars[bullishRejectionBarsCount - 2];
}
if (IsValidSize(bearishRejectionBarsCount))
{
//
cBearishRejection = conditions.triggerConditions.state.bearishRejectionBars[bearishRejectionBarsCount - 1];
pBearishRejection = conditions.triggerConditions.state.bearishRejectionBars[bearishRejectionBarsCount - 2];
}
//
bool isBullish =
//
// pBar is Rejection and cBar is Momentum ...
// pBar is Momentum and cBar is Rejection ...
// cBar is Momentum and Rejection ...
//
pBullishMomentum != NULL &&
pBullishMomentum.IsValid() &&
//
cBullishMomentum != NULL &&
cBullishMomentum.IsValid() &&
//
//
pBullishRejection != NULL &&
pBullishRejection.IsValid() &&
//
cBullishRejection != NULL &&
cBullishRejection.IsValid() &&
//
(
//
(pBar.time == pBullishRejection.BarTime() &&
cBar.time == cBullishMomentum.BarTime())
//
||
//
(pBar.time == pBullishMomentum.BarTime() &&
cBar.time == cBullishRejection.BarTime())
//
||
//
(cBar.time == cBullishMomentum.BarTime() &&
cBar.time == cBullishRejection.BarTime())
//
)
//
;
//
bool isBearish =
//
// pBar is Rejection and cBar is Momentum ...
// pBar is Momentum and cBar is Rejection ...
// cBar is Momentum and Rejection ...
//
pBearishMomentum != NULL &&
pBearishMomentum.IsValid() &&
//
cBearishMomentum != NULL &&
cBearishMomentum.IsValid() &&
//
//
pBearishRejection != NULL &&
pBearishRejection.IsValid() &&
//
cBearishRejection != NULL &&
cBearishRejection.IsValid() &&
//
(
//
(pBar.time == pBearishRejection.BarTime() &&
cBar.time == cBearishMomentum.BarTime())
//
||
//
(pBar.time == pBearishMomentum.BarTime() &&
cBar.time == cBearishRejection.BarTime())
//
||
//
(cBar.time == cBearishMomentum.BarTime() &&
cBar.time == cBearishRejection.BarTime())
//
)
//
;
//
result = isBullish ||
isBearish;
if (!result)
{
return result;
}
//
dir =
isBullish
? X_DIRECTION_BULLISH
: X_DIRECTION_BEARISH;
//
return result;
}
/////////////////////////////////////////////////////////////////////////////////////