last ...
This commit is contained in:
@@ -6471,9 +6471,9 @@ struct XFVGOrderBlock
|
||||
|
||||
/**
|
||||
* Check Model is same as another Istance ...
|
||||
*
|
||||
*
|
||||
* @param value: XFVGOrderBlock instance Reference ...
|
||||
*
|
||||
*
|
||||
* @return ( bool )
|
||||
*/
|
||||
bool IsSameAs(XFVGOrderBlock &value)
|
||||
@@ -6510,18 +6510,18 @@ struct XFVGOrderBlock
|
||||
result =
|
||||
//
|
||||
dir == valueDir
|
||||
//
|
||||
&&
|
||||
//
|
||||
orderBlock.From() == value.orderBlock.From() &&
|
||||
orderBlock.Upper() == value.orderBlock.Upper() &&
|
||||
orderBlock.Lower() == value.orderBlock.Lower()
|
||||
//
|
||||
&&
|
||||
//
|
||||
fairValueGap.From() == value.fairValueGap.From() &&
|
||||
fairValueGap.Upper() == value.fairValueGap.Upper() &&
|
||||
fairValueGap.Lower() == value.fairValueGap.Lower()
|
||||
//
|
||||
&&
|
||||
//
|
||||
orderBlock.From() == value.orderBlock.From() &&
|
||||
orderBlock.Upper() == value.orderBlock.Upper() &&
|
||||
orderBlock.Lower() == value.orderBlock.Lower()
|
||||
//
|
||||
&&
|
||||
//
|
||||
fairValueGap.From() == value.fairValueGap.From() &&
|
||||
fairValueGap.Upper() == value.fairValueGap.Upper() &&
|
||||
fairValueGap.Lower() == value.fairValueGap.Lower()
|
||||
//
|
||||
;
|
||||
|
||||
@@ -7720,6 +7720,910 @@ void DetectPivotPOIs(
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Fill Pivot Tick Zone ...
|
||||
*
|
||||
* @param pivot: XPVPivot instance Reference ...
|
||||
*/
|
||||
void CalculatePivotTickZone(
|
||||
XPVPivot &pivot,
|
||||
int ticksLevels,
|
||||
int ticksRange,
|
||||
ENUM_TIMEFRAMES _period = NULL //
|
||||
)
|
||||
{
|
||||
//
|
||||
string symbol = pivot.symbol;
|
||||
ENUM_TIMEFRAMES period = IsValid(_period)
|
||||
? _period
|
||||
: pivot.period;
|
||||
|
||||
//
|
||||
bool isInited = false;
|
||||
|
||||
//
|
||||
datetime from = pivot.from;
|
||||
XOHCL iFromBar;
|
||||
int iFromBarIndex = iBarShift(
|
||||
symbol,
|
||||
period,
|
||||
from //
|
||||
);
|
||||
isInited = iFromBar.Init(
|
||||
symbol,
|
||||
period,
|
||||
iFromBarIndex //
|
||||
);
|
||||
if (!isInited)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
datetime to = pivot.to;
|
||||
XOHCL iToBar;
|
||||
int iToBarIndex = iBarShift(
|
||||
symbol,
|
||||
period,
|
||||
to //
|
||||
);
|
||||
isInited = iToBar.Init(
|
||||
symbol,
|
||||
period,
|
||||
iToBarIndex //
|
||||
);
|
||||
if (!isInited)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
if (iFromBarIndex <= iToBarIndex)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
XCTicksZone *iZone;
|
||||
iZone = new XCTicksZone();
|
||||
|
||||
//
|
||||
isInited = ticksLevels > 0 &&
|
||||
ticksRange > 0;
|
||||
if (!isInited)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
isInited = iZone.Init(
|
||||
iFromBar,
|
||||
iToBar //
|
||||
);
|
||||
if (!isInited)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
pivot.state.ticksZone = iZone;
|
||||
}
|
||||
|
||||
/**
|
||||
* Filter State based on Pivot ...
|
||||
*
|
||||
* @param pivot: XPVPivot instance Reference ...
|
||||
* @param state: XPOIState instance Reference ...
|
||||
*/
|
||||
void FilterPivotState(
|
||||
XPVPivot &pivot,
|
||||
XPOIState &state //
|
||||
)
|
||||
{
|
||||
//
|
||||
bool isValid =
|
||||
pivot.IsValid() &&
|
||||
state.IsValid() &&
|
||||
state.HasChild();
|
||||
if (!isValid)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
int count = 0;
|
||||
|
||||
//
|
||||
double upper = pivot.upper;
|
||||
double lower = pivot.lower;
|
||||
|
||||
//
|
||||
//
|
||||
//
|
||||
|
||||
//
|
||||
// Resistance ...
|
||||
count = state.CountResistanceZones();
|
||||
if (IsValidSize(count))
|
||||
{
|
||||
//
|
||||
XCResistanceZone *tmp[];
|
||||
Copy(
|
||||
state.resistanceZones,
|
||||
tmp //
|
||||
);
|
||||
|
||||
//
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
XCResistanceZone *item = tmp[i];
|
||||
|
||||
//
|
||||
bool isValid = IsPriceInsideZone(
|
||||
upper,
|
||||
item //
|
||||
);
|
||||
if (!isValid)
|
||||
{
|
||||
//
|
||||
ArrayRemove(
|
||||
state.resistanceZones,
|
||||
i,
|
||||
1 //
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
ArrayFree(tmp);
|
||||
}
|
||||
|
||||
//
|
||||
// Supply ...
|
||||
count = state.CountSupplyZones();
|
||||
if (IsValidSize(count))
|
||||
{
|
||||
//
|
||||
XCSupplyZone *tmp[];
|
||||
Copy(
|
||||
state.supplyZones,
|
||||
tmp //
|
||||
);
|
||||
|
||||
//
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
XCSupplyZone *item = tmp[i];
|
||||
|
||||
//
|
||||
bool isValid = IsPriceInsideZone(
|
||||
upper,
|
||||
item //
|
||||
);
|
||||
if (!isValid)
|
||||
{
|
||||
//
|
||||
ArrayRemove(
|
||||
state.supplyZones,
|
||||
i,
|
||||
1 //
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
ArrayFree(tmp);
|
||||
}
|
||||
|
||||
//
|
||||
// Bearish Order Block ...
|
||||
count = state.CountBearishOrderBlocks();
|
||||
if (IsValidSize(count))
|
||||
{
|
||||
//
|
||||
XCOrderBlock *tmp[];
|
||||
Copy(
|
||||
state.bearishOrderBlocks,
|
||||
tmp //
|
||||
);
|
||||
|
||||
//
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
XCOrderBlock *item = tmp[i];
|
||||
|
||||
//
|
||||
bool isValid = IsPriceInsideZone(
|
||||
upper,
|
||||
item //
|
||||
);
|
||||
if (!isValid)
|
||||
{
|
||||
//
|
||||
ArrayRemove(
|
||||
state.bearishOrderBlocks,
|
||||
i,
|
||||
1 //
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
ArrayFree(tmp);
|
||||
}
|
||||
|
||||
//
|
||||
// Bearish Fair Value Gap ...
|
||||
count = state.CountBearishFairValueGaps();
|
||||
if (IsValidSize(count))
|
||||
{
|
||||
//
|
||||
XCFVG *tmp[];
|
||||
Copy(
|
||||
state.bearishFairValueGaps,
|
||||
tmp //
|
||||
);
|
||||
|
||||
//
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
XCFVG *item = tmp[i];
|
||||
|
||||
//
|
||||
bool isValid = IsPriceInsideZone(
|
||||
upper,
|
||||
item //
|
||||
);
|
||||
if (!isValid)
|
||||
{
|
||||
//
|
||||
ArrayRemove(
|
||||
state.bearishFairValueGaps,
|
||||
i,
|
||||
1 //
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
ArrayFree(tmp);
|
||||
}
|
||||
|
||||
//
|
||||
//
|
||||
//
|
||||
|
||||
//
|
||||
// Support ...
|
||||
count = state.CountSupportZones();
|
||||
if (IsValidSize(count))
|
||||
{
|
||||
//
|
||||
XCSupportZone *tmp[];
|
||||
Copy(
|
||||
state.supportZones,
|
||||
tmp //
|
||||
);
|
||||
|
||||
//
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
XCSupportZone *item = tmp[i];
|
||||
|
||||
//
|
||||
bool isValid = IsPriceInsideZone(
|
||||
lower,
|
||||
item //
|
||||
);
|
||||
if (!isValid)
|
||||
{
|
||||
//
|
||||
ArrayRemove(
|
||||
state.supportZones,
|
||||
i,
|
||||
1 //
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
ArrayFree(tmp);
|
||||
}
|
||||
|
||||
//
|
||||
// Demand ...
|
||||
count = state.CountDemandZones();
|
||||
if (IsValidSize(count))
|
||||
{
|
||||
//
|
||||
XCDemandZone *tmp[];
|
||||
Copy(
|
||||
state.demandZones,
|
||||
tmp //
|
||||
);
|
||||
|
||||
//
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
XCDemandZone *item = tmp[i];
|
||||
|
||||
//
|
||||
bool isValid = IsPriceInsideZone(
|
||||
lower,
|
||||
item //
|
||||
);
|
||||
if (!isValid)
|
||||
{
|
||||
//
|
||||
ArrayRemove(
|
||||
state.demandZones,
|
||||
i,
|
||||
1 //
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
ArrayFree(tmp);
|
||||
}
|
||||
|
||||
//
|
||||
// Bullish Order Block ...
|
||||
count = state.CountBullishOrderBlocks();
|
||||
if (IsValidSize(count))
|
||||
{
|
||||
//
|
||||
XCOrderBlock *tmp[];
|
||||
Copy(
|
||||
state.bullishOrderBlocks,
|
||||
tmp //
|
||||
);
|
||||
|
||||
//
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
XCOrderBlock *item = tmp[i];
|
||||
|
||||
//
|
||||
bool isValid = IsPriceInsideZone(
|
||||
lower,
|
||||
item //
|
||||
);
|
||||
if (!isValid)
|
||||
{
|
||||
//
|
||||
ArrayRemove(
|
||||
state.bullishOrderBlocks,
|
||||
i,
|
||||
1 //
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
ArrayFree(tmp);
|
||||
}
|
||||
|
||||
//
|
||||
// Bullish Fair Value Gap ...
|
||||
count = state.CountBullishFairValueGaps();
|
||||
if (IsValidSize(count))
|
||||
{
|
||||
//
|
||||
XCFVG *tmp[];
|
||||
Copy(
|
||||
state.bullishFairValueGaps,
|
||||
tmp //
|
||||
);
|
||||
|
||||
//
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
XCFVG *item = tmp[i];
|
||||
|
||||
//
|
||||
bool isValid = IsPriceInsideZone(
|
||||
lower,
|
||||
item //
|
||||
);
|
||||
if (!isValid)
|
||||
{
|
||||
//
|
||||
ArrayRemove(
|
||||
state.bullishFairValueGaps,
|
||||
i,
|
||||
1 //
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
ArrayFree(tmp);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Detect Box Date of Specified Pivot ...
|
||||
*/
|
||||
bool DetectPivotStateBoxData(
|
||||
XPVPivot &pivot,
|
||||
double &peakUpper,
|
||||
double &peakLower,
|
||||
datetime &peakFrom,
|
||||
datetime &peakTo,
|
||||
double &valeUpper,
|
||||
double &valeLower,
|
||||
datetime &valeFrom,
|
||||
datetime &valeTo //
|
||||
)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
peakUpper = 0;
|
||||
peakLower = 0;
|
||||
valeUpper = 0;
|
||||
valeLower = 0;
|
||||
|
||||
//
|
||||
peakFrom = NULL;
|
||||
peakTo = NULL;
|
||||
valeFrom = NULL;
|
||||
valeTo = NULL;
|
||||
|
||||
//
|
||||
result = pivot.IsValid();
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
int count = 0;
|
||||
|
||||
//
|
||||
//
|
||||
//
|
||||
|
||||
//
|
||||
// Resistance ...
|
||||
count = pivot.state.CountResistanceZones();
|
||||
if (IsValidSize(count))
|
||||
{
|
||||
//
|
||||
XCResistanceZone *tmp[];
|
||||
Copy(
|
||||
pivot.state.resistanceZones,
|
||||
tmp //
|
||||
);
|
||||
|
||||
//
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
XCResistanceZone *item = tmp[i];
|
||||
|
||||
//
|
||||
if (peakUpper == 0 ||
|
||||
peakUpper < item.Upper())
|
||||
{
|
||||
peakUpper = item.Upper();
|
||||
}
|
||||
|
||||
//
|
||||
if (peakLower == 0 ||
|
||||
peakLower > item.Lower())
|
||||
{
|
||||
peakLower = item.Lower();
|
||||
}
|
||||
|
||||
//
|
||||
if (!IsValid(peakFrom) ||
|
||||
peakFrom > item.From())
|
||||
{
|
||||
peakFrom = item.From();
|
||||
}
|
||||
|
||||
//
|
||||
if (!IsValid(peakTo) ||
|
||||
peakTo < item.To())
|
||||
{
|
||||
peakTo = item.To();
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
ArrayFree(tmp);
|
||||
}
|
||||
|
||||
//
|
||||
// Supply ...
|
||||
count = pivot.state.CountSupplyZones();
|
||||
if (IsValidSize(count))
|
||||
{
|
||||
//
|
||||
XCSupplyZone *tmp[];
|
||||
Copy(
|
||||
pivot.state.supplyZones,
|
||||
tmp //
|
||||
);
|
||||
|
||||
//
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
XCSupplyZone *item = tmp[i];
|
||||
|
||||
//
|
||||
if (peakUpper == 0 ||
|
||||
peakUpper < item.Upper())
|
||||
{
|
||||
peakUpper = item.Upper();
|
||||
}
|
||||
|
||||
//
|
||||
if (peakLower == 0 ||
|
||||
peakLower > item.Lower())
|
||||
{
|
||||
peakLower = item.Lower();
|
||||
}
|
||||
|
||||
//
|
||||
if (!IsValid(peakFrom) ||
|
||||
peakFrom > item.From())
|
||||
{
|
||||
peakFrom = item.From();
|
||||
}
|
||||
|
||||
//
|
||||
if (!IsValid(peakTo) ||
|
||||
peakTo < item.To())
|
||||
{
|
||||
peakTo = item.To();
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
ArrayFree(tmp);
|
||||
}
|
||||
|
||||
//
|
||||
// Bearish Order Block ...
|
||||
count = pivot.state.CountBearishOrderBlocks();
|
||||
if (IsValidSize(count))
|
||||
{
|
||||
//
|
||||
XCOrderBlock *tmp[];
|
||||
Copy(
|
||||
pivot.state.bearishOrderBlocks,
|
||||
tmp //
|
||||
);
|
||||
|
||||
//
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
XCOrderBlock *item = tmp[i];
|
||||
|
||||
//
|
||||
if (peakUpper == 0 ||
|
||||
peakUpper < item.Upper())
|
||||
{
|
||||
peakUpper = item.Upper();
|
||||
}
|
||||
|
||||
//
|
||||
if (peakLower == 0 ||
|
||||
peakLower > item.Lower())
|
||||
{
|
||||
peakLower = item.Lower();
|
||||
}
|
||||
|
||||
//
|
||||
if (!IsValid(peakFrom) ||
|
||||
peakFrom > item.From())
|
||||
{
|
||||
peakFrom = item.From();
|
||||
}
|
||||
|
||||
//
|
||||
if (!IsValid(peakTo) ||
|
||||
peakTo < item.To())
|
||||
{
|
||||
peakTo = item.To();
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
ArrayFree(tmp);
|
||||
}
|
||||
|
||||
//
|
||||
// Bearish Fair Value Gap ...
|
||||
count = pivot.state.CountBearishFairValueGaps();
|
||||
if (IsValidSize(count))
|
||||
{
|
||||
//
|
||||
XCFVG *tmp[];
|
||||
Copy(
|
||||
pivot.state.bearishFairValueGaps,
|
||||
tmp //
|
||||
);
|
||||
|
||||
//
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
XCFVG *item = tmp[i];
|
||||
|
||||
//
|
||||
if (peakUpper == 0 ||
|
||||
peakUpper < item.Upper())
|
||||
{
|
||||
peakUpper = item.Upper();
|
||||
}
|
||||
|
||||
//
|
||||
if (peakLower == 0 ||
|
||||
peakLower > item.Lower())
|
||||
{
|
||||
peakLower = item.Lower();
|
||||
}
|
||||
|
||||
//
|
||||
if (!IsValid(peakFrom) ||
|
||||
peakFrom > item.From())
|
||||
{
|
||||
peakFrom = item.From();
|
||||
}
|
||||
|
||||
//
|
||||
if (!IsValid(peakTo) ||
|
||||
peakTo < item.To())
|
||||
{
|
||||
peakTo = item.To();
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
ArrayFree(tmp);
|
||||
}
|
||||
|
||||
//
|
||||
//
|
||||
//
|
||||
|
||||
//
|
||||
// Support ...
|
||||
count = pivot.state.CountSupportZones();
|
||||
if (IsValidSize(count))
|
||||
{
|
||||
//
|
||||
XCSupportZone *tmp[];
|
||||
Copy(
|
||||
pivot.state.supportZones,
|
||||
tmp //
|
||||
);
|
||||
|
||||
//
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
XCSupportZone *item = tmp[i];
|
||||
|
||||
//
|
||||
if (valeUpper == 0 ||
|
||||
valeUpper < item.Upper())
|
||||
{
|
||||
valeUpper = item.Upper();
|
||||
}
|
||||
|
||||
//
|
||||
if (valeLower == 0 ||
|
||||
valeLower > item.Lower())
|
||||
{
|
||||
valeLower = item.Lower();
|
||||
}
|
||||
|
||||
//
|
||||
if (!IsValid(valeFrom) ||
|
||||
valeFrom > item.From())
|
||||
{
|
||||
valeFrom = item.From();
|
||||
}
|
||||
|
||||
//
|
||||
if (!IsValid(valeTo) ||
|
||||
valeTo < item.To())
|
||||
{
|
||||
valeTo = item.To();
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
ArrayFree(tmp);
|
||||
}
|
||||
|
||||
//
|
||||
// Demand ...
|
||||
count = pivot.state.CountDemandZones();
|
||||
if (IsValidSize(count))
|
||||
{
|
||||
//
|
||||
XCDemandZone *tmp[];
|
||||
Copy(
|
||||
pivot.state.demandZones,
|
||||
tmp //
|
||||
);
|
||||
|
||||
//
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
XCDemandZone *item = tmp[i];
|
||||
|
||||
//
|
||||
if (valeUpper == 0 ||
|
||||
valeUpper < item.Upper())
|
||||
{
|
||||
valeUpper = item.Upper();
|
||||
}
|
||||
|
||||
//
|
||||
if (valeLower == 0 ||
|
||||
valeLower > item.Lower())
|
||||
{
|
||||
valeLower = item.Lower();
|
||||
}
|
||||
|
||||
//
|
||||
if (!IsValid(valeFrom) ||
|
||||
valeFrom > item.From())
|
||||
{
|
||||
valeFrom = item.From();
|
||||
}
|
||||
|
||||
//
|
||||
if (!IsValid(valeTo) ||
|
||||
valeTo < item.To())
|
||||
{
|
||||
valeTo = item.To();
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
ArrayFree(tmp);
|
||||
}
|
||||
|
||||
//
|
||||
// Bullish Order Block ...
|
||||
count = pivot.state.CountBullishOrderBlocks();
|
||||
if (IsValidSize(count))
|
||||
{
|
||||
//
|
||||
XCOrderBlock *tmp[];
|
||||
Copy(
|
||||
pivot.state.bullishOrderBlocks,
|
||||
tmp //
|
||||
);
|
||||
|
||||
//
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
XCOrderBlock *item = tmp[i];
|
||||
|
||||
//
|
||||
if (valeUpper == 0 ||
|
||||
valeUpper < item.Upper())
|
||||
{
|
||||
valeUpper = item.Upper();
|
||||
}
|
||||
|
||||
//
|
||||
if (valeLower == 0 ||
|
||||
valeLower > item.Lower())
|
||||
{
|
||||
valeLower = item.Lower();
|
||||
}
|
||||
|
||||
//
|
||||
if (!IsValid(valeFrom) ||
|
||||
valeFrom > item.From())
|
||||
{
|
||||
valeFrom = item.From();
|
||||
}
|
||||
|
||||
//
|
||||
if (!IsValid(valeTo) ||
|
||||
valeTo < item.To())
|
||||
{
|
||||
valeTo = item.To();
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
ArrayFree(tmp);
|
||||
}
|
||||
|
||||
//
|
||||
// Bullish Fair Value Gap ...
|
||||
count = pivot.state.CountBullishFairValueGaps();
|
||||
if (IsValidSize(count))
|
||||
{
|
||||
//
|
||||
XCFVG *tmp[];
|
||||
Copy(
|
||||
pivot.state.bullishFairValueGaps,
|
||||
tmp //
|
||||
);
|
||||
|
||||
//
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
XCFVG *item = tmp[i];
|
||||
|
||||
//
|
||||
if (valeUpper == 0 ||
|
||||
valeUpper < item.Upper())
|
||||
{
|
||||
valeUpper = item.Upper();
|
||||
}
|
||||
|
||||
//
|
||||
if (valeLower == 0 ||
|
||||
valeLower > item.Lower())
|
||||
{
|
||||
valeLower = item.Lower();
|
||||
}
|
||||
|
||||
//
|
||||
if (!IsValid(valeFrom) ||
|
||||
valeFrom > item.From())
|
||||
{
|
||||
valeFrom = item.From();
|
||||
}
|
||||
|
||||
//
|
||||
if (!IsValid(valeTo) ||
|
||||
valeTo < item.To())
|
||||
{
|
||||
valeTo = item.To();
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
ArrayFree(tmp);
|
||||
}
|
||||
|
||||
//
|
||||
result = peakUpper > 0 &&
|
||||
peakLower > 0 &&
|
||||
valeUpper > 0 &&
|
||||
valeLower > 0 &&
|
||||
IsValid(peakTo) &&
|
||||
IsValid(valeTo) &&
|
||||
IsValid(peakFrom) &&
|
||||
IsValid(valeFrom) &&
|
||||
peakTo > peakFrom &&
|
||||
valeTo > valeFrom &&
|
||||
peakUpper > peakLower &&
|
||||
valeUpper > valeLower;
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Detect Price Inside Zones ...
|
||||
*
|
||||
@@ -9745,14 +10649,14 @@ double CalculateTarget(
|
||||
|
||||
/**
|
||||
* Test Market for Detect Order Block FVG ...
|
||||
*
|
||||
*
|
||||
* @param forDir: Direction
|
||||
* @param bullishOrderBlocks: Detected Bullish Order Blocks ...
|
||||
* @param bearishOrderBlocks: Detected Bearish Order Blocks ...
|
||||
* @param orderBlockState: Order Block Detection POIState ...
|
||||
* @param fairValueGapState: Fair Value Gap Detection POIState ...
|
||||
* @param barIndex: Bar Index ...
|
||||
*
|
||||
*
|
||||
* @return ( bool )
|
||||
*/
|
||||
bool DetectFVGOB(
|
||||
|
||||
Reference in New Issue
Block a user