Files
MQL5Data/Documents/BKP/121.smc.strategy.tmp.mq5
T
2024-10-28 13:56:20 +03:30

229 lines
7.7 KiB
Plaintext

//
// LONG ...
//
bool isSoImportantLong =
iConditions.demandZone.IsValid() &&
iConditions.bullishFVG.IsValid() &&
iConditions.bullishOrderBlock.IsValid();
//
bool isImportantLong =
iConditions.demandZone.IsValid() &&
(iConditions.bullishFVG.IsValid() ||
iConditions.bullishOrderBlock.IsValid());
//
bool isRiskyLong =
iConditions.demandZone.IsValid() &&
(iConditions.bullishFVG.IsValid() ||
iConditions.bullishOrderBlock.IsValid());
//
bool hasLongConditions = isSoImportantLong ||
isImportantLong ||
isRiskyLong;
//
if (hasLongConditions)
{
//
// Find Trigger for Input Positions ...
// - [] Breakout;
// - [] Engulf;
// - [] Rejection Bar;
// - [] Momentum Bar;
//
type = POSITION_TYPE_BUY;
entry = GetEntry(mSymbol, type);
sl = iConditions.demandZone.lower - (10 * points);
risk = entry - sl;
reward = risk * r2r;
tp = entry + reward;
//
bool isSpreadOK = IsSpreadPass();
//
// Price Must Breakout the Upper of Demand ...
bool isBreakout =
//
cBar.IsBullish() &&
zBar.low > conditions.demandZone.upper &&
cBar.high > conditions.demandZone.upper &&
cBar.close > conditions.demandZone.upper &&
(cBar.open < conditions.demandZone.upper ||
cBar.low < conditions.demandZone.upper)
//
;
//
// Price Must have Bullish Trend and Momentum on Ticks ...
bool isTicksBullishMomentum =
IsTicksBullish() &&
IsTicksHasMomentum();
//
// Detect momentum / Swing Low / Rejection Bars ...
bool hasMomentumBars = false;
int swingLowsCount = ArraySize(_5MState.swingLows);
int momentumBarsCount = ArraySize(_5MState.momentumBars);
int rejectionBarsCount = ArraySize(_5MState.rejectionBars);
if (IsValidSize(swingLowsCount) ||
IsValidSize(momentumBarsCount) ||
IsValidSize(rejectionBarsCount))
{
//
int foundedPOIs = 0;
//
// Check Swing Lows ...
if (IsValidSize(swingLowsCount))
{
//
for (int i = 0; i < swingLowsCount; i++)
{
//
XOHCL iBar = _5MState.swingLows[i];
//
if (iBar.time > iConditions.demandZone.from)
{
//
if (iBar.low < entry)
{
//
foundedPOIs++;
DrawSwingBar(iBar, true);
}
}
}
}
//
// Check Momentum Bars ...
if (IsValidSize(momentumBarsCount))
{
//
for (int i = 0; i < momentumBarsCount; i++)
{
//
XOHCL iBar = _5MState.momentumBars[i];
//
if (iBar.time > iConditions.demandZone.from)
{
//
if (iBar.IsBullish() && iBar.low < entry)
{
//
foundedPOIs++;
DrawMomentumBar(iBar);
}
}
}
}
//
// Check Rejection Bars ...
if (IsValidSize(rejectionBarsCount))
{
//
for (int i = 0; i < rejectionBarsCount; i++)
{
//
XOHCL iBar = _5MState.rejectionBars[i];
//
if (iBar.time > iConditions.demandZone.from)
{
//
if (iBar.low < entry &&
iBar.GetLowShadow() > iBar.GetHighShadow())
{
//
foundedPOIs++;
DrawRejectionBar(iBar);
}
}
}
}
//
pushers = foundedPOIs;
hasMomentumBars = foundedPOIs > 0;
}
//
hasLongConditions =
hasLongConditions &&
//
isSpreadOK &&
//
isBreakout &&
isTicksBullishMomentum &&
//
hasMomentumBars
//
;
//
if (hasLongConditions)
{
//
removeIDX = i;
conditions = iConditions;
result = hasLongConditions;
//
break;
}
}
//
// SHORT ...
//
bool isSoImportantShort =
iConditions.supplyZone.IsValid() &&
iConditions.bearishFVG.IsValid() &&
iConditions.bearishOrderBlock.IsValid();
//
bool isImportantShort =
iConditions.supplyZone.IsValid() &&
(iConditions.bearishFVG.IsValid() ||
iConditions.bearishOrderBlock.IsValid());
//
bool isRiskyShort =
iConditions.supplyZone.IsValid() &&
(!iConditions.bearishFVG.IsValid() &&
!iConditions.bearishOrderBlock.IsValid());
//
bool hasShortConditions = isSoImportantShort ||
isImportantShort ||
isRiskyShort;
//
if (hasShortConditions)
{
//
// Find Trigger for Input Positions ...
// - [] Breakout;
// - [] Engulf;
// - [] Rejection Bar;
// - [] Momentum Bar;
//
//
// removeIDX = i;
// conditions = iConditions;
// // DrawConditions(iConditions);
// Print("hasShortConditions");
break;
}