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