last ...
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
Reference in New Issue
Block a user