last ...
This commit is contained in:
@@ -2948,6 +2948,56 @@ class XCPOIDrawer : public XCBase
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create Specific Box on Chart ...
|
||||||
|
*
|
||||||
|
* @param box: XBoxZone instance Reference ...
|
||||||
|
* @param clr: Color ...
|
||||||
|
* @param width: Integer ...
|
||||||
|
* @param fill: Boolean ...
|
||||||
|
* @param style: ENUM_LINE_STYLE member ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool CreateBox(
|
||||||
|
XBoxZone &box,
|
||||||
|
XCBoxObject *&object,
|
||||||
|
color clr = clrYellowGreen,
|
||||||
|
int width = 1,
|
||||||
|
bool fill = false,
|
||||||
|
ENUM_LINE_STYLE style = STYLE_SOLID //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
object = NULL;
|
||||||
|
|
||||||
|
//
|
||||||
|
result = box.IsValid();
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
result = CreateBox(
|
||||||
|
object,
|
||||||
|
box.upper,
|
||||||
|
box.lower,
|
||||||
|
box.from,
|
||||||
|
box.to,
|
||||||
|
clr,
|
||||||
|
width,
|
||||||
|
fill,
|
||||||
|
style //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Draw Specified Signal ...
|
* Draw Specified Signal ...
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -913,8 +913,8 @@ bool DetectPriceInsideBox(
|
|||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
bool hasBullishFVG = state.HasBullishFVGs();
|
bool hasBullishFVGs = state.HasBullishFVGs();
|
||||||
bool hasBearishFVG = state.HasBearishFVGs();
|
bool hasBearishFVGs = state.HasBearishFVGs();
|
||||||
bool hasDemandZones = state.HasDemandZones();
|
bool hasDemandZones = state.HasDemandZones();
|
||||||
bool hasSupplyZones = state.HasSupplyZones();
|
bool hasSupplyZones = state.HasSupplyZones();
|
||||||
bool hasSupportZones = state.HasSupportZones();
|
bool hasSupportZones = state.HasSupportZones();
|
||||||
@@ -923,7 +923,7 @@ bool DetectPriceInsideBox(
|
|||||||
//
|
//
|
||||||
bool hasBullishZones =
|
bool hasBullishZones =
|
||||||
//
|
//
|
||||||
hasBullishFVG ||
|
hasBullishFVGs ||
|
||||||
hasDemandZones ||
|
hasDemandZones ||
|
||||||
hasSupportZones
|
hasSupportZones
|
||||||
//
|
//
|
||||||
@@ -932,7 +932,7 @@ bool DetectPriceInsideBox(
|
|||||||
//
|
//
|
||||||
bool hasBearishZones =
|
bool hasBearishZones =
|
||||||
//
|
//
|
||||||
hasBearishFVG ||
|
hasBearishFVGs ||
|
||||||
hasSupplyZones ||
|
hasSupplyZones ||
|
||||||
hasResistanceZones
|
hasResistanceZones
|
||||||
//
|
//
|
||||||
@@ -954,6 +954,7 @@ bool DetectPriceInsideBox(
|
|||||||
hasPriceInsideOB)
|
hasPriceInsideOB)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
|
// Use Price Inside OB as Box ...
|
||||||
box.to = priceInsideOB.To();
|
box.to = priceInsideOB.To();
|
||||||
box.from = priceInsideOB.From();
|
box.from = priceInsideOB.From();
|
||||||
box.upper = priceInsideOB.Upper();
|
box.upper = priceInsideOB.Upper();
|
||||||
@@ -964,6 +965,365 @@ bool DetectPriceInsideBox(
|
|||||||
{
|
{
|
||||||
//
|
//
|
||||||
// Detect Validate Zones ...
|
// Detect Validate Zones ...
|
||||||
|
int count = 0;
|
||||||
|
XBoxZone boxes[];
|
||||||
|
double upper = 0;
|
||||||
|
double lower = 0;
|
||||||
|
double price = 0;
|
||||||
|
datetime to = NULL;
|
||||||
|
datetime from = NULL;
|
||||||
|
ENUM_X_DIRECTION dir = X_DIRECTION_NONE;
|
||||||
|
if (IsBullish(boxDir))
|
||||||
|
{
|
||||||
|
//
|
||||||
|
double price = xConditions.valesBuffer[1];
|
||||||
|
ENUM_X_DIRECTION dir = X_DIRECTION_BULLISH;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bullish FVG ...
|
||||||
|
count = state.CountBullishFVGs();
|
||||||
|
for (int i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XCFVG *iFVG = state.bullishFVGs[i];
|
||||||
|
|
||||||
|
//
|
||||||
|
to = iFVG.To();
|
||||||
|
from = iFVG.From();
|
||||||
|
upper = iFVG.Upper();
|
||||||
|
lower = iFVG.Lower();
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isInside = IsPriceInsideZone(
|
||||||
|
price,
|
||||||
|
upper,
|
||||||
|
lower //
|
||||||
|
);
|
||||||
|
if (isInside)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XBoxZone iBox;
|
||||||
|
|
||||||
|
//
|
||||||
|
iBox.dir = dir;
|
||||||
|
iBox.symbol = symbol;
|
||||||
|
iBox.period = period;
|
||||||
|
|
||||||
|
//
|
||||||
|
iBox.to = to;
|
||||||
|
iBox.from = from;
|
||||||
|
iBox.upper = upper;
|
||||||
|
iBox.lower = lower;
|
||||||
|
|
||||||
|
//
|
||||||
|
if (iBox.IsValid())
|
||||||
|
{
|
||||||
|
//
|
||||||
|
AddRef(
|
||||||
|
iBox,
|
||||||
|
boxes //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Demand Zones ...
|
||||||
|
count = state.CountDemandZones();
|
||||||
|
for (int i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XCDemandZone *iDemand = state.demandZones[i];
|
||||||
|
|
||||||
|
//
|
||||||
|
to = iDemand.To();
|
||||||
|
from = iDemand.From();
|
||||||
|
upper = iDemand.Upper();
|
||||||
|
lower = iDemand.Lower();
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isInside = IsPriceInsideZone(
|
||||||
|
price,
|
||||||
|
upper,
|
||||||
|
lower //
|
||||||
|
);
|
||||||
|
if (isInside)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XBoxZone iBox;
|
||||||
|
|
||||||
|
//
|
||||||
|
iBox.dir = dir;
|
||||||
|
iBox.symbol = symbol;
|
||||||
|
iBox.period = period;
|
||||||
|
|
||||||
|
//
|
||||||
|
iBox.to = to;
|
||||||
|
iBox.from = from;
|
||||||
|
iBox.upper = upper;
|
||||||
|
iBox.lower = lower;
|
||||||
|
|
||||||
|
//
|
||||||
|
if (iBox.IsValid())
|
||||||
|
{
|
||||||
|
//
|
||||||
|
AddRef(
|
||||||
|
iBox,
|
||||||
|
boxes //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Support Zones ...
|
||||||
|
count = state.CountSupportZones();
|
||||||
|
for (int i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XCSupportZone *iSupport = state.supportZones[i];
|
||||||
|
|
||||||
|
//
|
||||||
|
to = iSupport.To();
|
||||||
|
from = iSupport.From();
|
||||||
|
upper = iSupport.Upper();
|
||||||
|
lower = iSupport.Lower();
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isInside = IsPriceInsideZone(
|
||||||
|
price,
|
||||||
|
upper,
|
||||||
|
lower //
|
||||||
|
);
|
||||||
|
if (isInside)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XBoxZone iBox;
|
||||||
|
|
||||||
|
//
|
||||||
|
iBox.dir = dir;
|
||||||
|
iBox.symbol = symbol;
|
||||||
|
iBox.period = period;
|
||||||
|
|
||||||
|
//
|
||||||
|
iBox.to = to;
|
||||||
|
iBox.from = from;
|
||||||
|
iBox.upper = upper;
|
||||||
|
iBox.lower = lower;
|
||||||
|
|
||||||
|
//
|
||||||
|
if (iBox.IsValid())
|
||||||
|
{
|
||||||
|
//
|
||||||
|
AddRef(
|
||||||
|
iBox,
|
||||||
|
boxes //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//
|
||||||
|
double price = xConditions.peaksBuffer[1];
|
||||||
|
ENUM_X_DIRECTION dir = X_DIRECTION_BEARISH;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bearish FVG ...
|
||||||
|
count = state.CountBearishFVGs();
|
||||||
|
for (int i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XCFVG *iFVG = state.bearishFVGs[i];
|
||||||
|
|
||||||
|
//
|
||||||
|
to = iFVG.To();
|
||||||
|
from = iFVG.From();
|
||||||
|
upper = iFVG.Upper();
|
||||||
|
lower = iFVG.Lower();
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isInside = IsPriceInsideZone(
|
||||||
|
price,
|
||||||
|
upper,
|
||||||
|
lower //
|
||||||
|
);
|
||||||
|
if (isInside)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XBoxZone iBox;
|
||||||
|
|
||||||
|
//
|
||||||
|
iBox.dir = dir;
|
||||||
|
iBox.symbol = symbol;
|
||||||
|
iBox.period = period;
|
||||||
|
|
||||||
|
//
|
||||||
|
iBox.to = to;
|
||||||
|
iBox.from = from;
|
||||||
|
iBox.upper = upper;
|
||||||
|
iBox.lower = lower;
|
||||||
|
|
||||||
|
//
|
||||||
|
if (iBox.IsValid())
|
||||||
|
{
|
||||||
|
//
|
||||||
|
AddRef(
|
||||||
|
iBox,
|
||||||
|
boxes //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Supply Zones ...
|
||||||
|
count = state.CountSupplyZones();
|
||||||
|
for (int i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XCSupplyZone *iSupply = state.supplyZones[i];
|
||||||
|
|
||||||
|
//
|
||||||
|
to = iSupply.To();
|
||||||
|
from = iSupply.From();
|
||||||
|
upper = iSupply.Upper();
|
||||||
|
lower = iSupply.Lower();
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isInside = IsPriceInsideZone(
|
||||||
|
price,
|
||||||
|
upper,
|
||||||
|
lower //
|
||||||
|
);
|
||||||
|
if (isInside)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XBoxZone iBox;
|
||||||
|
|
||||||
|
//
|
||||||
|
iBox.dir = dir;
|
||||||
|
iBox.symbol = symbol;
|
||||||
|
iBox.period = period;
|
||||||
|
|
||||||
|
//
|
||||||
|
iBox.to = to;
|
||||||
|
iBox.from = from;
|
||||||
|
iBox.upper = upper;
|
||||||
|
iBox.lower = lower;
|
||||||
|
|
||||||
|
//
|
||||||
|
if (iBox.IsValid())
|
||||||
|
{
|
||||||
|
//
|
||||||
|
AddRef(
|
||||||
|
iBox,
|
||||||
|
boxes //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Demand Zones ...
|
||||||
|
count = state.CountResistanceZones();
|
||||||
|
for (int i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XCResistanceZone *iResistance = state.resistanceZones[i];
|
||||||
|
|
||||||
|
//
|
||||||
|
to = iResistance.To();
|
||||||
|
from = iResistance.From();
|
||||||
|
upper = iResistance.Upper();
|
||||||
|
lower = iResistance.Lower();
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isInside = IsPriceInsideZone(
|
||||||
|
price,
|
||||||
|
upper,
|
||||||
|
lower //
|
||||||
|
);
|
||||||
|
if (isInside)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XBoxZone iBox;
|
||||||
|
|
||||||
|
//
|
||||||
|
iBox.dir = dir;
|
||||||
|
iBox.symbol = symbol;
|
||||||
|
iBox.period = period;
|
||||||
|
|
||||||
|
//
|
||||||
|
iBox.to = to;
|
||||||
|
iBox.from = from;
|
||||||
|
iBox.upper = upper;
|
||||||
|
iBox.lower = lower;
|
||||||
|
|
||||||
|
//
|
||||||
|
if (iBox.IsValid())
|
||||||
|
{
|
||||||
|
//
|
||||||
|
AddRef(
|
||||||
|
iBox,
|
||||||
|
boxes //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
int boxesCount = ArraySize(boxes);
|
||||||
|
bool hasBoxes = IsValidSize(boxes);
|
||||||
|
if (hasBoxes)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Filter Boxes ...
|
||||||
|
for (int i = 0; i < boxesCount; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XBoxZone iBox = boxes[i];
|
||||||
|
|
||||||
|
//
|
||||||
|
// Upper ...
|
||||||
|
if (box.upper == 0 || box.upper < iBox.upper)
|
||||||
|
{
|
||||||
|
box.upper = iBox.upper;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Lower ...
|
||||||
|
if (box.lower == 0 || box.lower < iBox.lower)
|
||||||
|
{
|
||||||
|
box.lower = iBox.lower;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// To ...
|
||||||
|
if (!IsValid(box.to) || box.to < iBox.to)
|
||||||
|
{
|
||||||
|
box.to = iBox.to;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// From ...
|
||||||
|
if (!IsValid(box.from) || box.from > iBox.from)
|
||||||
|
{
|
||||||
|
box.from = iBox.from;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Use Price Inside OB as Box ...
|
||||||
|
box.to = priceInsideOB.To();
|
||||||
|
box.from = priceInsideOB.From();
|
||||||
|
box.upper = priceInsideOB.Upper();
|
||||||
|
box.lower = priceInsideOB.Lower();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -687,106 +687,27 @@ bool DetectX121SMCXHKPVSignalSetup(
|
|||||||
// Detect Cycle State ...
|
// Detect Cycle State ...
|
||||||
|
|
||||||
//
|
//
|
||||||
visionCycleHelper.GetCycleState(conditions.state);
|
bool hasState = visionCycleHelper.GetCycleState(conditions.state);
|
||||||
|
|
||||||
//
|
//
|
||||||
//
|
XBoxZone priceBox;
|
||||||
//
|
bool hasBox = false;
|
||||||
|
if (hasState)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
hasBox = DetectPriceInsideBox(
|
||||||
|
priceBox,
|
||||||
|
decisionXConditions,
|
||||||
|
conditions.state //
|
||||||
|
);
|
||||||
|
|
||||||
// //
|
//
|
||||||
// bool hasPriceInsideOB = false;
|
if (hasBox)
|
||||||
// XCOrderBlock *priceInsideOB = NULL;
|
{
|
||||||
|
//
|
||||||
// //
|
// Here We Can Validate Box by Same Cycles Peaks and Vales ...
|
||||||
// if (!hasPriceInsideOB &&
|
}
|
||||||
// hasBullishOBs)
|
}
|
||||||
// {
|
|
||||||
// //
|
|
||||||
// for (int i = 0; i < bullishOBsCount; i++)
|
|
||||||
// {
|
|
||||||
// //
|
|
||||||
// XCOrderBlock *iOb = conditions.bullishOBs[i];
|
|
||||||
|
|
||||||
// //
|
|
||||||
// bool isInside = IsPriceInsideZone(
|
|
||||||
// decisionXConditions.valesBuffer[1],
|
|
||||||
// (XCZone *)iOb //
|
|
||||||
// );
|
|
||||||
// if (isInside)
|
|
||||||
// {
|
|
||||||
// //
|
|
||||||
// hasPriceInsideOB = true;
|
|
||||||
// priceInsideOB = iOb;
|
|
||||||
// break;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// //
|
|
||||||
// if (!hasPriceInsideOB &&
|
|
||||||
// hasBearishOBs)
|
|
||||||
// {
|
|
||||||
// //
|
|
||||||
// for (int i = 0; i < bearishOBsCount; i++)
|
|
||||||
// {
|
|
||||||
// //
|
|
||||||
// XCOrderBlock *iOb = conditions.bearishOBs[i];
|
|
||||||
|
|
||||||
// //
|
|
||||||
// bool isInside = IsPriceInsideZone(
|
|
||||||
// decisionXConditions.peaksBuffer[1],
|
|
||||||
// (XCZone *)iOb //
|
|
||||||
// );
|
|
||||||
// if (isInside)
|
|
||||||
// {
|
|
||||||
// //
|
|
||||||
// hasPriceInsideOB = true;
|
|
||||||
// priceInsideOB = iOb;
|
|
||||||
// break;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// //
|
|
||||||
// XStateZones obState;
|
|
||||||
// bool hasOBState = false;
|
|
||||||
// XOHCL priceInsideOBBreakerBar;
|
|
||||||
// if (hasPriceInsideOB)
|
|
||||||
// {
|
|
||||||
// //
|
|
||||||
// XOHCL toBar;
|
|
||||||
// XOHCL fromBar;
|
|
||||||
// ENUM_X_DIRECTION forDir =
|
|
||||||
// priceInsideOB.IsBullish()
|
|
||||||
// ? X_DIRECTION_BULLISH
|
|
||||||
// : X_DIRECTION_BEARISH;
|
|
||||||
// bool hasBreakerBar = HasBreakerBar(
|
|
||||||
// toBar,
|
|
||||||
// fromBar,
|
|
||||||
// priceInsideOBBreakerBar,
|
|
||||||
// forDir,
|
|
||||||
// priceInsideOB.GetSymbol(),
|
|
||||||
// priceInsideOB.GetPeriod(),
|
|
||||||
// priceInsideOB.Upper(),
|
|
||||||
// priceInsideOB.Lower(),
|
|
||||||
// priceInsideOB.From(),
|
|
||||||
// priceInsideOB.To() //
|
|
||||||
// );
|
|
||||||
// if (hasBreakerBar)
|
|
||||||
// {
|
|
||||||
// //
|
|
||||||
// CalculateStateZones(
|
|
||||||
// obState,
|
|
||||||
// analyseState,
|
|
||||||
// priceInsideOB.Upper(),
|
|
||||||
// priceInsideOB.Lower(),
|
|
||||||
// priceInsideOBBreakerBar.time //
|
|
||||||
// );
|
|
||||||
// }
|
|
||||||
|
|
||||||
// //
|
|
||||||
// hasOBState = obState.IsValid();
|
|
||||||
// }
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Draw ...
|
// Draw ...
|
||||||
@@ -795,6 +716,36 @@ bool DetectX121SMCXHKPVSignalSetup(
|
|||||||
conditions.state,
|
conditions.state,
|
||||||
drawnObjects //
|
drawnObjects //
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
if (hasBox)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool isBullish = IsBullish(priceBox.dir);
|
||||||
|
color boxColor = isBullish ? clrYellow : clrOrange;
|
||||||
|
//
|
||||||
|
XCBoxObject *iObj;
|
||||||
|
bool isCreated = visionCycleHelper.mPOIDrawer.CreateBox(
|
||||||
|
priceBox,
|
||||||
|
iObj,
|
||||||
|
boxColor,
|
||||||
|
1,
|
||||||
|
false,
|
||||||
|
STYLE_DASHDOTDOT //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
if (isCreated)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Add(
|
||||||
|
(XCBaseObject *)iObj,
|
||||||
|
drawnObjects //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
if (IsValidSize(drawnObjectsCount))
|
if (IsValidSize(drawnObjectsCount))
|
||||||
{
|
{
|
||||||
Print("Drawn Objects ...");
|
Print("Drawn Objects ...");
|
||||||
|
|||||||
Reference in New Issue
Block a user