last ...
This commit is contained in:
@@ -2995,6 +2995,427 @@ struct XPOIState
|
|||||||
Clean(bearishFairValueGaps);
|
Clean(bearishFairValueGaps);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validate ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool IsValid()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
result =
|
||||||
|
IsSpecifiedValid(symbol) &&
|
||||||
|
IsSpecifiedValid(period) &&
|
||||||
|
IsSpecifiedValid(time);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check State has Childs or not ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool HasChild()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
result =
|
||||||
|
//
|
||||||
|
IsValidSize(CountSwingHighs()) ||
|
||||||
|
IsValidSize(CountSwingLows()) ||
|
||||||
|
IsValidSize(CountBullishMomentumBars()) ||
|
||||||
|
IsValidSize(CountBearishMomentumBars()) ||
|
||||||
|
IsValidSize(CountBullishRejectionBars()) ||
|
||||||
|
IsValidSize(CountBearishRejectionBars()) ||
|
||||||
|
IsValidSize(CountSupportZones()) ||
|
||||||
|
IsValidSize(CountResistanceZones()) ||
|
||||||
|
IsValidSize(CountSupplyZones()) ||
|
||||||
|
IsValidSize(CountDemandZones()) ||
|
||||||
|
IsValidSize(CountBullishOrderBlocks()) ||
|
||||||
|
IsValidSize(CountBearishOrderBlocks()) ||
|
||||||
|
IsValidSize(CountBullishFairValueGaps()) ||
|
||||||
|
IsValidSize(CountBearishFairValueGaps())
|
||||||
|
//
|
||||||
|
;
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fill Dest State by Current State's Data ...
|
||||||
|
*
|
||||||
|
* @param dest: XPOIState instance, reference to specified dest ...
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void Fill(XPOIState &dest)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
dest.Clean();
|
||||||
|
|
||||||
|
//
|
||||||
|
if (!IsValid() ||
|
||||||
|
!HasChild())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
dest.symbol = symbol;
|
||||||
|
dest.period = period;
|
||||||
|
dest.time = time;
|
||||||
|
|
||||||
|
//
|
||||||
|
Copy(
|
||||||
|
swingHighs,
|
||||||
|
dest.swingHighs,
|
||||||
|
false //
|
||||||
|
);
|
||||||
|
Copy(
|
||||||
|
swingLows,
|
||||||
|
dest.swingLows,
|
||||||
|
false //
|
||||||
|
);
|
||||||
|
Copy(
|
||||||
|
bullishMomentumBars,
|
||||||
|
dest.bullishMomentumBars,
|
||||||
|
false //
|
||||||
|
);
|
||||||
|
Copy(
|
||||||
|
bearishMomentumBars,
|
||||||
|
dest.bearishMomentumBars,
|
||||||
|
false //
|
||||||
|
);
|
||||||
|
Copy(
|
||||||
|
bullishRejectionBars,
|
||||||
|
dest.bullishRejectionBars,
|
||||||
|
false //
|
||||||
|
);
|
||||||
|
Copy(
|
||||||
|
bearishRejectionBars,
|
||||||
|
dest.bearishRejectionBars,
|
||||||
|
false //
|
||||||
|
);
|
||||||
|
Copy(
|
||||||
|
supportZones,
|
||||||
|
dest.supportZones,
|
||||||
|
false //
|
||||||
|
);
|
||||||
|
Copy(
|
||||||
|
resistanceZones,
|
||||||
|
dest.resistanceZones,
|
||||||
|
false //
|
||||||
|
);
|
||||||
|
Copy(
|
||||||
|
supplyZones,
|
||||||
|
dest.supplyZones,
|
||||||
|
false //
|
||||||
|
);
|
||||||
|
Copy(
|
||||||
|
demandZones,
|
||||||
|
dest.demandZones,
|
||||||
|
false //
|
||||||
|
);
|
||||||
|
Copy(
|
||||||
|
bullishOrderBlocks,
|
||||||
|
dest.bullishOrderBlocks,
|
||||||
|
false //
|
||||||
|
);
|
||||||
|
Copy(
|
||||||
|
bearishOrderBlocks,
|
||||||
|
dest.bearishOrderBlocks,
|
||||||
|
false //
|
||||||
|
);
|
||||||
|
Copy(
|
||||||
|
bullishFairValueGaps,
|
||||||
|
dest.bullishFairValueGaps,
|
||||||
|
false //
|
||||||
|
);
|
||||||
|
Copy(
|
||||||
|
bearishFairValueGaps,
|
||||||
|
dest.bearishFairValueGaps,
|
||||||
|
false //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Counters ...
|
||||||
|
|
||||||
|
//
|
||||||
|
int CountSwingHighs()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
int result = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
if (!IsValid())
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
result = ArraySize(swingHighs);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
int CountSwingLows()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
int result = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
if (!IsValid())
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
result = ArraySize(swingLows);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
int CountBullishMomentumBars()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
int result = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
if (!IsValid())
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
result = ArraySize(bullishMomentumBars);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
int CountBearishMomentumBars()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
int result = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
if (!IsValid())
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
result = ArraySize(bearishMomentumBars);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
int CountBullishRejectionBars()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
int result = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
if (!IsValid())
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
result = ArraySize(bullishRejectionBars);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
int CountBearishRejectionBars()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
int result = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
if (!IsValid())
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
result = ArraySize(bearishRejectionBars);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
int CountSupportZones()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
int result = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
if (!IsValid())
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
result = ArraySize(supportZones);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
int CountResistanceZones()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
int result = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
if (!IsValid())
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
result = ArraySize(resistanceZones);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
int CountSupplyZones()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
int result = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
if (!IsValid())
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
result = ArraySize(supplyZones);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
int CountDemandZones()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
int result = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
if (!IsValid())
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
result = ArraySize(demandZones);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
int CountBullishOrderBlocks()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
int result = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
if (!IsValid())
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
result = ArraySize(bullishOrderBlocks);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
int CountBearishOrderBlocks()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
int result = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
if (!IsValid())
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
result = ArraySize(bearishOrderBlocks);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
int CountBullishFairValueGaps()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
int result = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
if (!IsValid())
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
result = ArraySize(bullishFairValueGaps);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
int CountBearishFairValueGaps()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
int result = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
if (!IsValid())
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
result = ArraySize(bearishFairValueGaps);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -979,6 +979,7 @@ class XCX121SMCBaseStrategy : public XCBaseAlert
|
|||||||
*/
|
*/
|
||||||
void DrawState(
|
void DrawState(
|
||||||
XPOIState &state,
|
XPOIState &state,
|
||||||
|
bool forceUpdateTo = false,
|
||||||
bool drawSwingHighs = true,
|
bool drawSwingHighs = true,
|
||||||
bool drawSwingLows = true,
|
bool drawSwingLows = true,
|
||||||
bool drawSupportZones = true,
|
bool drawSupportZones = true,
|
||||||
@@ -997,6 +998,7 @@ class XCX121SMCBaseStrategy : public XCBaseAlert
|
|||||||
{
|
{
|
||||||
//
|
//
|
||||||
int count = 0;
|
int count = 0;
|
||||||
|
datetime cTime = TimeCurrent();
|
||||||
|
|
||||||
//
|
//
|
||||||
// Swings ...
|
// Swings ...
|
||||||
@@ -1073,6 +1075,9 @@ class XCX121SMCBaseStrategy : public XCBaseAlert
|
|||||||
{
|
{
|
||||||
//
|
//
|
||||||
XCSupportZone item = state.supportZones[i];
|
XCSupportZone item = state.supportZones[i];
|
||||||
|
if (forceUpdateTo) {
|
||||||
|
item.To(cTime);
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
XCSupportZoneObject *iObj;
|
XCSupportZoneObject *iObj;
|
||||||
@@ -1101,6 +1106,9 @@ class XCX121SMCBaseStrategy : public XCBaseAlert
|
|||||||
{
|
{
|
||||||
//
|
//
|
||||||
XCResistanceZone item = state.resistanceZones[i];
|
XCResistanceZone item = state.resistanceZones[i];
|
||||||
|
if (forceUpdateTo) {
|
||||||
|
item.To(cTime);
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
XCResistanceZoneObject *iObj;
|
XCResistanceZoneObject *iObj;
|
||||||
@@ -1132,6 +1140,9 @@ class XCX121SMCBaseStrategy : public XCBaseAlert
|
|||||||
{
|
{
|
||||||
//
|
//
|
||||||
XCSupplyZone item = state.supplyZones[i];
|
XCSupplyZone item = state.supplyZones[i];
|
||||||
|
if (forceUpdateTo) {
|
||||||
|
item.To(cTime);
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
XCSupplyZoneObject *iObj;
|
XCSupplyZoneObject *iObj;
|
||||||
@@ -1160,6 +1171,9 @@ class XCX121SMCBaseStrategy : public XCBaseAlert
|
|||||||
{
|
{
|
||||||
//
|
//
|
||||||
XCDemandZone item = state.demandZones[i];
|
XCDemandZone item = state.demandZones[i];
|
||||||
|
if (forceUpdateTo) {
|
||||||
|
item.To(cTime);
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
XCDemandZoneObject *iObj;
|
XCDemandZoneObject *iObj;
|
||||||
@@ -1191,6 +1205,9 @@ class XCX121SMCBaseStrategy : public XCBaseAlert
|
|||||||
{
|
{
|
||||||
//
|
//
|
||||||
XCOrderBlock item = state.bullishOrderBlocks[i];
|
XCOrderBlock item = state.bullishOrderBlocks[i];
|
||||||
|
if (forceUpdateTo) {
|
||||||
|
item.To(cTime);
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
XCBullishOrderBlockObject *iObj;
|
XCBullishOrderBlockObject *iObj;
|
||||||
@@ -1219,6 +1236,9 @@ class XCX121SMCBaseStrategy : public XCBaseAlert
|
|||||||
{
|
{
|
||||||
//
|
//
|
||||||
XCOrderBlock item = state.bearishOrderBlocks[i];
|
XCOrderBlock item = state.bearishOrderBlocks[i];
|
||||||
|
if (forceUpdateTo) {
|
||||||
|
item.To(cTime);
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
XCBearishOrderBlockObject *iObj;
|
XCBearishOrderBlockObject *iObj;
|
||||||
@@ -1250,6 +1270,9 @@ class XCX121SMCBaseStrategy : public XCBaseAlert
|
|||||||
{
|
{
|
||||||
//
|
//
|
||||||
XCFVG item = state.bullishFairValueGaps[i];
|
XCFVG item = state.bullishFairValueGaps[i];
|
||||||
|
if (forceUpdateTo) {
|
||||||
|
item.To(cTime);
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
XCBullishFairValueGapObject *iObj;
|
XCBullishFairValueGapObject *iObj;
|
||||||
@@ -1278,6 +1301,9 @@ class XCX121SMCBaseStrategy : public XCBaseAlert
|
|||||||
{
|
{
|
||||||
//
|
//
|
||||||
XCFVG item = state.bearishFairValueGaps[i];
|
XCFVG item = state.bearishFairValueGaps[i];
|
||||||
|
if (forceUpdateTo) {
|
||||||
|
item.To(cTime);
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
XCBearishFairValueGapObject *iObj;
|
XCBearishFairValueGapObject *iObj;
|
||||||
@@ -1415,6 +1441,8 @@ class XCX121SMCBaseStrategy : public XCBaseAlert
|
|||||||
// Ticks Zone ...
|
// Ticks Zone ...
|
||||||
if (state.ticksZone != NULL)
|
if (state.ticksZone != NULL)
|
||||||
{
|
{
|
||||||
|
//
|
||||||
|
// TODO: Implement this ...
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -93,6 +93,25 @@ class XCXPVPivotObject : public XCBaseObject
|
|||||||
ObjName(name);
|
ObjName(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
string mTrendName = "MID_" + name;
|
||||||
|
double mid = pivot.CalculateMid();
|
||||||
|
result = mTrend.Create(
|
||||||
|
chart_id,
|
||||||
|
mTrendName,
|
||||||
|
window,
|
||||||
|
pivot.from,
|
||||||
|
mid,
|
||||||
|
pivot.to,
|
||||||
|
mid //
|
||||||
|
);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
mRect.Delete();
|
||||||
|
mRect.Detach();
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -115,6 +134,7 @@ class XCXPVPivotObject : public XCBaseObject
|
|||||||
|
|
||||||
//
|
//
|
||||||
mRect.Width(value);
|
mRect.Width(value);
|
||||||
|
mTrend.Width(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -124,7 +144,9 @@ class XCXPVPivotObject : public XCBaseObject
|
|||||||
*/
|
*/
|
||||||
void PivotColor(color value)
|
void PivotColor(color value)
|
||||||
{
|
{
|
||||||
|
//
|
||||||
mRect.Color(value);
|
mRect.Color(value);
|
||||||
|
mTrend.Color(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -134,7 +156,9 @@ class XCXPVPivotObject : public XCBaseObject
|
|||||||
*/
|
*/
|
||||||
void PivotStyle(ENUM_LINE_STYLE value)
|
void PivotStyle(ENUM_LINE_STYLE value)
|
||||||
{
|
{
|
||||||
|
//
|
||||||
mRect.Style(value);
|
mRect.Style(value);
|
||||||
|
mTrend.Style(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -167,4 +191,5 @@ class XCXPVPivotObject : public XCBaseObject
|
|||||||
//
|
//
|
||||||
// Props ...
|
// Props ...
|
||||||
CChartObjectRectangle mRect;
|
CChartObjectRectangle mRect;
|
||||||
|
CChartObjectTrend mTrend;
|
||||||
};
|
};
|
||||||
@@ -61,6 +61,9 @@ struct XPVPivot
|
|||||||
//
|
//
|
||||||
ENUM_XPV_PIVOTS type;
|
ENUM_XPV_PIVOTS type;
|
||||||
|
|
||||||
|
//
|
||||||
|
XPOIState state;
|
||||||
|
|
||||||
//
|
//
|
||||||
XPVPivot()
|
XPVPivot()
|
||||||
{
|
{
|
||||||
@@ -90,6 +93,9 @@ struct XPVPivot
|
|||||||
|
|
||||||
//
|
//
|
||||||
type = XPV_NONE;
|
type = XPV_NONE;
|
||||||
|
|
||||||
|
//
|
||||||
|
state.Clean();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -930,4 +936,544 @@ bool DetectPivotDirection(
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Detect all POIs which inside a Pivot ...
|
||||||
|
*
|
||||||
|
* @param pivot: XPVPivot instance, Specified Pivot ...
|
||||||
|
* @param source: XPOIState instance, Reference to Source State ...
|
||||||
|
* @param state: XPOIState instance, Reference to Detected Pivots ...
|
||||||
|
* @param lookupSwingHighs: Boolean ...
|
||||||
|
* @param lookupSwingLows: Boolean ...
|
||||||
|
* @param lookupSupportZones: Boolean ...
|
||||||
|
* @param lookupResistanceZones: Boolean ...
|
||||||
|
* @param lookupSupplyZones: Boolean ...
|
||||||
|
* @param lookupDemandZones: Boolean ...
|
||||||
|
* @param lookupBullishOrderBlocks: Boolean ...
|
||||||
|
* @param lookupBearishOrderBlocks: Boolean ...
|
||||||
|
* @param lookupBullishFairValueGaps: Boolean ...
|
||||||
|
* @param lookupBearishFairValueGaps: Boolean ...
|
||||||
|
* @param lookupBullishRejectionBars: Boolean ...
|
||||||
|
* @param lookupBearishRejectionBars: Boolean ...
|
||||||
|
* @param lookupBullishMomentumBars: Boolean ...
|
||||||
|
* @param lookupBearishMomentumBars: Boolean ...
|
||||||
|
*/
|
||||||
|
void DetectPivotPOIs(
|
||||||
|
XPVPivot &pivot,
|
||||||
|
XPOIState &source,
|
||||||
|
XPOIState &state,
|
||||||
|
bool lookupSwingHighs = true,
|
||||||
|
bool lookupSwingLows = true,
|
||||||
|
bool lookupSupportZones = true,
|
||||||
|
bool lookupResistanceZones = true,
|
||||||
|
bool lookupSupplyZones = true,
|
||||||
|
bool lookupDemandZones = true,
|
||||||
|
bool lookupBullishOrderBlocks = true,
|
||||||
|
bool lookupBearishOrderBlocks = true,
|
||||||
|
bool lookupBullishFairValueGaps = true,
|
||||||
|
bool lookupBearishFairValueGaps = true,
|
||||||
|
bool lookupBullishRejectionBars = true,
|
||||||
|
bool lookupBearishRejectionBars = true,
|
||||||
|
bool lookupBullishMomentumBars = true,
|
||||||
|
bool lookupBearishMomentumBars = true //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
state.Clean();
|
||||||
|
|
||||||
|
//
|
||||||
|
if (!pivot.IsValid())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
int count = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
state.symbol = pivot.symbol;
|
||||||
|
state.period = pivot.period;
|
||||||
|
state.time = TimeCurrent();
|
||||||
|
|
||||||
|
//
|
||||||
|
// Swings ...
|
||||||
|
|
||||||
|
//
|
||||||
|
// Swing High ...
|
||||||
|
if (lookupSwingHighs)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
count = ArraySize(source.swingHighs);
|
||||||
|
if (IsValidSize(count))
|
||||||
|
{
|
||||||
|
//
|
||||||
|
for (int i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XCSwing *iSwing = source.swingHighs[i];
|
||||||
|
|
||||||
|
//
|
||||||
|
XOHCL iBar;
|
||||||
|
bool isFilled = iSwing.FillBar(iBar);
|
||||||
|
if (!isFilled)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isInside = iBar.high <= pivot.upper;
|
||||||
|
if (isInside)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Add(
|
||||||
|
iSwing,
|
||||||
|
state.swingHighs //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Swing Low ...
|
||||||
|
if (lookupSwingLows)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
count = ArraySize(source.swingLows);
|
||||||
|
if (IsValidSize(count))
|
||||||
|
{
|
||||||
|
//
|
||||||
|
for (int i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XCSwing *iSwing = source.swingLows[i];
|
||||||
|
|
||||||
|
//
|
||||||
|
XOHCL iBar;
|
||||||
|
bool isFilled = iSwing.FillBar(iBar);
|
||||||
|
if (!isFilled)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isInside = iBar.low >= pivot.lower;
|
||||||
|
if (isInside)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Add(
|
||||||
|
iSwing,
|
||||||
|
state.swingLows //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Support and Resistance Zones ...
|
||||||
|
|
||||||
|
//
|
||||||
|
// Support Zones ...
|
||||||
|
if (lookupSupportZones)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
count = ArraySize(source.supportZones);
|
||||||
|
if (IsValidSize(count))
|
||||||
|
{
|
||||||
|
//
|
||||||
|
for (int i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XCSupportZone *iZone = source.supportZones[i];
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isInside =
|
||||||
|
iZone.Upper() <= pivot.upper &&
|
||||||
|
iZone.Lower() >= pivot.lower;
|
||||||
|
if (isInside)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Add(
|
||||||
|
iZone,
|
||||||
|
state.supportZones //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Resistance Zones ...
|
||||||
|
if (lookupResistanceZones)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
count = ArraySize(source.resistanceZones);
|
||||||
|
if (IsValidSize(count))
|
||||||
|
{
|
||||||
|
//
|
||||||
|
for (int i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XCResistanceZone *iZone = source.resistanceZones[i];
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isInside =
|
||||||
|
iZone.Upper() <= pivot.upper &&
|
||||||
|
iZone.Lower() >= pivot.lower;
|
||||||
|
if (isInside)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Add(
|
||||||
|
iZone,
|
||||||
|
state.resistanceZones //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Supply and Demand Zones ...
|
||||||
|
|
||||||
|
//
|
||||||
|
// Supply Zones ...
|
||||||
|
if (lookupSupplyZones)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
count = ArraySize(source.supplyZones);
|
||||||
|
if (IsValidSize(count))
|
||||||
|
{
|
||||||
|
//
|
||||||
|
for (int i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XCSupplyZone *iZone = source.supplyZones[i];
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isInside =
|
||||||
|
iZone.Upper() <= pivot.upper &&
|
||||||
|
iZone.Lower() >= pivot.lower;
|
||||||
|
if (isInside)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Add(
|
||||||
|
iZone,
|
||||||
|
state.supplyZones //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Demand Zones ...
|
||||||
|
if (lookupDemandZones)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
count = ArraySize(source.demandZones);
|
||||||
|
if (IsValidSize(count))
|
||||||
|
{
|
||||||
|
//
|
||||||
|
for (int i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XCDemandZone *iZone = source.demandZones[i];
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isInside =
|
||||||
|
iZone.Upper() <= pivot.upper &&
|
||||||
|
iZone.Lower() >= pivot.lower;
|
||||||
|
if (isInside)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Add(
|
||||||
|
iZone,
|
||||||
|
state.demandZones //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Order Blocks ...
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bullish Order Blocks ...
|
||||||
|
if (lookupBullishOrderBlocks)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
count = ArraySize(source.bullishOrderBlocks);
|
||||||
|
if (IsValidSize(count))
|
||||||
|
{
|
||||||
|
//
|
||||||
|
for (int i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XCOrderBlock *iZone = source.bullishOrderBlocks[i];
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isInside =
|
||||||
|
iZone.Upper() <= pivot.upper &&
|
||||||
|
iZone.Lower() >= pivot.lower;
|
||||||
|
if (isInside)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Add(
|
||||||
|
iZone,
|
||||||
|
state.bullishOrderBlocks //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bearish Order Blocks ...
|
||||||
|
if (lookupBearishOrderBlocks)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
count = ArraySize(source.bearishOrderBlocks);
|
||||||
|
if (IsValidSize(count))
|
||||||
|
{
|
||||||
|
//
|
||||||
|
for (int i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XCOrderBlock *iZone = source.bearishOrderBlocks[i];
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isInside =
|
||||||
|
iZone.Upper() <= pivot.upper &&
|
||||||
|
iZone.Lower() >= pivot.lower;
|
||||||
|
if (isInside)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Add(
|
||||||
|
iZone,
|
||||||
|
state.bearishOrderBlocks //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Fair Value Gaps ...
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bullish Fair Value Gaps ...
|
||||||
|
if (lookupBullishFairValueGaps)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
count = ArraySize(source.bullishFairValueGaps);
|
||||||
|
if (IsValidSize(count))
|
||||||
|
{
|
||||||
|
//
|
||||||
|
for (int i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XCFVG *iZone = source.bullishFairValueGaps[i];
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isInside =
|
||||||
|
iZone.Upper() <= pivot.upper &&
|
||||||
|
iZone.Lower() >= pivot.lower;
|
||||||
|
if (isInside)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Add(
|
||||||
|
iZone,
|
||||||
|
state.bullishFairValueGaps //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bearish Fair Value Gaps ...
|
||||||
|
if (lookupBearishFairValueGaps)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
count = ArraySize(source.bearishFairValueGaps);
|
||||||
|
if (IsValidSize(count))
|
||||||
|
{
|
||||||
|
//
|
||||||
|
for (int i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XCFVG *iZone = source.bearishFairValueGaps[i];
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isInside =
|
||||||
|
iZone.Upper() <= pivot.upper &&
|
||||||
|
iZone.Lower() >= pivot.lower;
|
||||||
|
if (isInside)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Add(
|
||||||
|
iZone,
|
||||||
|
state.bearishFairValueGaps //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Rejection Bars ...
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bullish Rejection Bars ...
|
||||||
|
if (lookupBullishRejectionBars)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
count = ArraySize(source.bullishRejectionBars);
|
||||||
|
if (IsValidSize(count))
|
||||||
|
{
|
||||||
|
//
|
||||||
|
for (int i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XCRejectionBar *iRejection = source.bullishRejectionBars[i];
|
||||||
|
|
||||||
|
//
|
||||||
|
XOHCL iBar;
|
||||||
|
bool isFilled = iRejection.FillBar(iBar);
|
||||||
|
if (!isFilled)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isInside = iBar.low <= pivot.upper &&
|
||||||
|
iBar.low >= pivot.lower;
|
||||||
|
if (isInside)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Add(
|
||||||
|
iRejection,
|
||||||
|
state.bullishRejectionBars //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bearish Rejection Bars ...
|
||||||
|
if (lookupBearishRejectionBars)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
count = ArraySize(source.bearishRejectionBars);
|
||||||
|
if (IsValidSize(count))
|
||||||
|
{
|
||||||
|
//
|
||||||
|
for (int i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XCRejectionBar *iRejection = source.bearishRejectionBars[i];
|
||||||
|
|
||||||
|
//
|
||||||
|
XOHCL iBar;
|
||||||
|
bool isFilled = iRejection.FillBar(iBar);
|
||||||
|
if (!isFilled)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isInside = iBar.high <= pivot.upper &&
|
||||||
|
iBar.high >= pivot.lower;
|
||||||
|
if (isInside)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Add(
|
||||||
|
iRejection,
|
||||||
|
state.bearishRejectionBars //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Momentum Bars ...
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bullish Momentum Bars ...
|
||||||
|
if (lookupBullishMomentumBars)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
count = ArraySize(source.bullishMomentumBars);
|
||||||
|
if (IsValidSize(count))
|
||||||
|
{
|
||||||
|
//
|
||||||
|
for (int i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XCMomentumBar *iMomentum = source.bullishMomentumBars[i];
|
||||||
|
|
||||||
|
//
|
||||||
|
XOHCL iBar;
|
||||||
|
bool isFilled = iMomentum.FillBar(iBar);
|
||||||
|
if (!isFilled)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isInside = iBar.low <= pivot.upper &&
|
||||||
|
iBar.low >= pivot.lower;
|
||||||
|
if (isInside)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Add(
|
||||||
|
iMomentum,
|
||||||
|
state.bullishMomentumBars //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bearish Momenum Bars ...
|
||||||
|
if (lookupBearishMomentumBars)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
count = ArraySize(source.bearishMomentumBars);
|
||||||
|
if (IsValidSize(count))
|
||||||
|
{
|
||||||
|
//
|
||||||
|
for (int i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XCMomentumBar *iMomentum = source.bearishMomentumBars[i];
|
||||||
|
|
||||||
|
//
|
||||||
|
XOHCL iBar;
|
||||||
|
bool isFilled = iMomentum.FillBar(iBar);
|
||||||
|
if (!isFilled)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isInside = iBar.high <= pivot.upper &&
|
||||||
|
iBar.high >= pivot.lower;
|
||||||
|
if (isInside)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Add(
|
||||||
|
iMomentum,
|
||||||
|
state.bearishMomentumBars //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -182,6 +182,9 @@ class XCX121SMCTestStrategy : public XCX121SMCBaseStrategy
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
RedrawOrderFlow();
|
||||||
|
|
||||||
//
|
//
|
||||||
XPVPivot lastPivot;
|
XPVPivot lastPivot;
|
||||||
result = GetLastItem(
|
result = GetLastItem(
|
||||||
@@ -192,11 +195,6 @@ class XCX121SMCTestStrategy : public XCX121SMCBaseStrategy
|
|||||||
{
|
{
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
XPOIState pivotState;
|
|
||||||
DetectPivotPOIs(
|
|
||||||
lastPivot,
|
|
||||||
pivotState //
|
|
||||||
);
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Prepare Areas ...
|
// Prepare Areas ...
|
||||||
@@ -244,16 +242,32 @@ class XCX121SMCTestStrategy : public XCX121SMCBaseStrategy
|
|||||||
if (isCHOCHHappens)
|
if (isCHOCHHappens)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
DrawStateSwings(_5MState);
|
// When Chouch Happens we Have to Destry Order Flow and
|
||||||
|
// Clean another ...
|
||||||
|
|
||||||
|
//
|
||||||
Print("CHOCH ...");
|
Print("CHOCH ...");
|
||||||
|
|
||||||
|
//
|
||||||
|
result = false;
|
||||||
|
ResetOrderFlow();
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
if (isBOSHappens)
|
if (isBOSHappens)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
DrawStateSwings(_5MState);
|
// When Chouch Happens we Have to Destry Order Flow and
|
||||||
|
// Clean another ...
|
||||||
|
|
||||||
|
//
|
||||||
Print("BOS ...");
|
Print("BOS ...");
|
||||||
|
|
||||||
|
//
|
||||||
|
result = false;
|
||||||
|
ResetOrderFlow();
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -486,52 +500,6 @@ class XCX121SMCTestStrategy : public XCX121SMCBaseStrategy
|
|||||||
mOrderFlowDir //
|
mOrderFlowDir //
|
||||||
);
|
);
|
||||||
|
|
||||||
//
|
|
||||||
int orderFlowCount = ArraySize(mOrderFlow);
|
|
||||||
if (IsValidSize(orderFlowCount))
|
|
||||||
{
|
|
||||||
//
|
|
||||||
for (int i = 0; i < orderFlowCount; i++)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
XPVPivot iPivot = mOrderFlow[i];
|
|
||||||
|
|
||||||
//
|
|
||||||
XCXPVPivotObject *iObj;
|
|
||||||
iObj = new XCXPVPivotObject();
|
|
||||||
bool isCreated = iObj.Create(
|
|
||||||
mPOIDrawer.ChartIdentification(),
|
|
||||||
mPOIDrawer.SubWindowIdentification(),
|
|
||||||
iPivot //
|
|
||||||
);
|
|
||||||
if (isCreated)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
if (iPivot.IsPeak())
|
|
||||||
{
|
|
||||||
//
|
|
||||||
iObj.PivotWidth(1);
|
|
||||||
iObj.PivotFill(false);
|
|
||||||
iObj.PivotColor(clrAqua);
|
|
||||||
iObj.PivotStyle(STYLE_SOLID);
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
if (iPivot.IsVale())
|
|
||||||
{
|
|
||||||
//
|
|
||||||
iObj.PivotWidth(1);
|
|
||||||
iObj.PivotFill(false);
|
|
||||||
iObj.PivotStyle(STYLE_SOLID);
|
|
||||||
iObj.PivotColor(clrMagenta);
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
AddObjectIfNotExists(iObj);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
//
|
||||||
result = IsValidSize(ArraySize(mOrderFlow));
|
result = IsValidSize(ArraySize(mOrderFlow));
|
||||||
if (!result)
|
if (!result)
|
||||||
@@ -844,301 +812,419 @@ class XCX121SMCTestStrategy : public XCX121SMCBaseStrategy
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Find State Inside Pivots and Attached Them to Pivot ...
|
||||||
|
int orderFlowCount = ArraySize(mOrderFlow);
|
||||||
|
if (IsValidSize(orderFlowCount))
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool lookupSwingHighs = true;
|
||||||
|
bool lookupSwingLows = true;
|
||||||
|
bool lookupSupportZones = true;
|
||||||
|
bool lookupResistanceZones = true;
|
||||||
|
bool lookupSupplyZones = true;
|
||||||
|
bool lookupDemandZones = true;
|
||||||
|
bool lookupBullishOrderBlocks = true;
|
||||||
|
bool lookupBearishOrderBlocks = true;
|
||||||
|
bool lookupBullishFairValueGaps = true;
|
||||||
|
bool lookupBearishFairValueGaps = true;
|
||||||
|
bool lookupBullishRejectionBars = true;
|
||||||
|
bool lookupBearishRejectionBars = true;
|
||||||
|
bool lookupBullishMomentumBars = true;
|
||||||
|
bool lookupBearishMomentumBars = true;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Loop Through Order Flow ...
|
||||||
|
for (int i = 0; i < orderFlowCount; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XPVPivot iPivot = mOrderFlow[i];
|
||||||
|
|
||||||
|
//
|
||||||
|
// D1 ...
|
||||||
|
XPOIState d1;
|
||||||
|
if (_1DState.HasChild())
|
||||||
|
{
|
||||||
|
//
|
||||||
|
DetectPivotPOIs(
|
||||||
|
iPivot,
|
||||||
|
_1DState,
|
||||||
|
d1,
|
||||||
|
lookupSwingHighs,
|
||||||
|
lookupSwingLows,
|
||||||
|
lookupSupportZones,
|
||||||
|
lookupResistanceZones,
|
||||||
|
lookupSupplyZones,
|
||||||
|
lookupDemandZones,
|
||||||
|
lookupBullishOrderBlocks,
|
||||||
|
lookupBearishOrderBlocks,
|
||||||
|
lookupBullishFairValueGaps,
|
||||||
|
lookupBearishFairValueGaps,
|
||||||
|
lookupBullishRejectionBars,
|
||||||
|
lookupBearishRejectionBars,
|
||||||
|
lookupBullishMomentumBars,
|
||||||
|
lookupBearishMomentumBars //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
if (d1.HasChild())
|
||||||
|
{
|
||||||
|
d1.Fill(mOrderFlow[i].state);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// H4 ...
|
||||||
|
XPOIState h4;
|
||||||
|
if (_4HState.HasChild())
|
||||||
|
{
|
||||||
|
//
|
||||||
|
DetectPivotPOIs(
|
||||||
|
iPivot,
|
||||||
|
_4HState,
|
||||||
|
h4,
|
||||||
|
lookupSwingHighs,
|
||||||
|
lookupSwingLows,
|
||||||
|
lookupSupportZones,
|
||||||
|
lookupResistanceZones,
|
||||||
|
lookupSupplyZones,
|
||||||
|
lookupDemandZones,
|
||||||
|
lookupBullishOrderBlocks,
|
||||||
|
lookupBearishOrderBlocks,
|
||||||
|
lookupBullishFairValueGaps,
|
||||||
|
lookupBearishFairValueGaps,
|
||||||
|
lookupBullishRejectionBars,
|
||||||
|
lookupBearishRejectionBars,
|
||||||
|
lookupBullishMomentumBars,
|
||||||
|
lookupBearishMomentumBars //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
if (h4.HasChild())
|
||||||
|
{
|
||||||
|
h4.Fill(mOrderFlow[i].state);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// H2 ...
|
||||||
|
XPOIState h2;
|
||||||
|
if (_2HState.HasChild())
|
||||||
|
{
|
||||||
|
//
|
||||||
|
DetectPivotPOIs(
|
||||||
|
iPivot,
|
||||||
|
_2HState,
|
||||||
|
h2,
|
||||||
|
lookupSwingHighs,
|
||||||
|
lookupSwingLows,
|
||||||
|
lookupSupportZones,
|
||||||
|
lookupResistanceZones,
|
||||||
|
lookupSupplyZones,
|
||||||
|
lookupDemandZones,
|
||||||
|
lookupBullishOrderBlocks,
|
||||||
|
lookupBearishOrderBlocks,
|
||||||
|
lookupBullishFairValueGaps,
|
||||||
|
lookupBearishFairValueGaps,
|
||||||
|
lookupBullishRejectionBars,
|
||||||
|
lookupBearishRejectionBars,
|
||||||
|
lookupBullishMomentumBars,
|
||||||
|
lookupBearishMomentumBars //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
if (h2.HasChild())
|
||||||
|
{
|
||||||
|
h2.Fill(mOrderFlow[i].state);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// H1 ...
|
||||||
|
XPOIState h1;
|
||||||
|
if (_1HState.HasChild())
|
||||||
|
{
|
||||||
|
//
|
||||||
|
DetectPivotPOIs(
|
||||||
|
iPivot,
|
||||||
|
_1HState,
|
||||||
|
h1,
|
||||||
|
lookupSwingHighs,
|
||||||
|
lookupSwingLows,
|
||||||
|
lookupSupportZones,
|
||||||
|
lookupResistanceZones,
|
||||||
|
lookupSupplyZones,
|
||||||
|
lookupDemandZones,
|
||||||
|
lookupBullishOrderBlocks,
|
||||||
|
lookupBearishOrderBlocks,
|
||||||
|
lookupBullishFairValueGaps,
|
||||||
|
lookupBearishFairValueGaps,
|
||||||
|
lookupBullishRejectionBars,
|
||||||
|
lookupBearishRejectionBars,
|
||||||
|
lookupBullishMomentumBars,
|
||||||
|
lookupBearishMomentumBars //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
if (h1.HasChild())
|
||||||
|
{
|
||||||
|
h1.Fill(mOrderFlow[i].state);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// M15 ...
|
||||||
|
XPOIState m15;
|
||||||
|
if (_15MState.HasChild())
|
||||||
|
{
|
||||||
|
//
|
||||||
|
DetectPivotPOIs(
|
||||||
|
iPivot,
|
||||||
|
_15MState,
|
||||||
|
m15,
|
||||||
|
lookupSwingHighs,
|
||||||
|
lookupSwingLows,
|
||||||
|
lookupSupportZones,
|
||||||
|
lookupResistanceZones,
|
||||||
|
lookupSupplyZones,
|
||||||
|
lookupDemandZones,
|
||||||
|
lookupBullishOrderBlocks,
|
||||||
|
lookupBearishOrderBlocks,
|
||||||
|
lookupBullishFairValueGaps,
|
||||||
|
lookupBearishFairValueGaps,
|
||||||
|
lookupBullishRejectionBars,
|
||||||
|
lookupBearishRejectionBars,
|
||||||
|
lookupBullishMomentumBars,
|
||||||
|
lookupBearishMomentumBars //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
if (m15.HasChild())
|
||||||
|
{
|
||||||
|
m15.Fill(mOrderFlow[i].state);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// M5 ...
|
||||||
|
XPOIState m5;
|
||||||
|
if (_5MState.HasChild())
|
||||||
|
{
|
||||||
|
//
|
||||||
|
DetectPivotPOIs(
|
||||||
|
iPivot,
|
||||||
|
_5MState,
|
||||||
|
m5,
|
||||||
|
lookupSwingHighs,
|
||||||
|
lookupSwingLows,
|
||||||
|
lookupSupportZones,
|
||||||
|
lookupResistanceZones,
|
||||||
|
lookupSupplyZones,
|
||||||
|
lookupDemandZones,
|
||||||
|
lookupBullishOrderBlocks,
|
||||||
|
lookupBearishOrderBlocks,
|
||||||
|
lookupBullishFairValueGaps,
|
||||||
|
lookupBearishFairValueGaps,
|
||||||
|
lookupBullishRejectionBars,
|
||||||
|
lookupBearishRejectionBars,
|
||||||
|
lookupBullishMomentumBars,
|
||||||
|
lookupBearishMomentumBars //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
if (m5.HasChild())
|
||||||
|
{
|
||||||
|
m5.Fill(mOrderFlow[i].state);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// M1 ...
|
||||||
|
XPOIState m1;
|
||||||
|
if (_1MState.HasChild())
|
||||||
|
{
|
||||||
|
//
|
||||||
|
DetectPivotPOIs(
|
||||||
|
iPivot,
|
||||||
|
_1MState,
|
||||||
|
m1,
|
||||||
|
lookupSwingHighs,
|
||||||
|
lookupSwingLows,
|
||||||
|
lookupSupportZones,
|
||||||
|
lookupResistanceZones,
|
||||||
|
lookupSupplyZones,
|
||||||
|
lookupDemandZones,
|
||||||
|
lookupBullishOrderBlocks,
|
||||||
|
lookupBearishOrderBlocks,
|
||||||
|
lookupBullishFairValueGaps,
|
||||||
|
lookupBearishFairValueGaps,
|
||||||
|
lookupBullishRejectionBars,
|
||||||
|
lookupBearishRejectionBars,
|
||||||
|
lookupBullishMomentumBars,
|
||||||
|
lookupBearishMomentumBars //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
if (m1.HasChild())
|
||||||
|
{
|
||||||
|
m1.Fill(mOrderFlow[i].state);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DetectPivotPOIs(
|
/**
|
||||||
XPVPivot &pivot,
|
* Validate Order Flow ...
|
||||||
XPOIState &state,
|
*
|
||||||
bool lookupSwingHighs = true,
|
* @return ( bool )
|
||||||
bool lookupSwingLows = true,
|
*/
|
||||||
bool lookupSupportZones = true,
|
bool HasValidOrderFlow()
|
||||||
bool lookupResistanceZones = true,
|
{
|
||||||
bool lookupSupplyZones = true,
|
//
|
||||||
bool lookupDemandZones = true,
|
bool result = false;
|
||||||
bool lookupBullishOrderBlocks = true,
|
|
||||||
bool lookupBearishOrderBlocks = true,
|
//
|
||||||
bool lookupBullishFairValueGaps = true,
|
int orderFlowCount = ArraySize(mOrderFlow);
|
||||||
bool lookupBearishFairValueGaps = true,
|
result =
|
||||||
bool lookupBullishRejectionBars = true,
|
IsValidSize(orderFlowCount) &&
|
||||||
bool lookupBearishRejectionBars = true,
|
mOrderFlowDir != X_DIRECTION_ALL &&
|
||||||
bool lookupBullishMomentumBars = true,
|
mOrderFlowDir != X_DIRECTION_NONE;
|
||||||
bool lookupBearishMomentumBars = true //
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reset Order Flow ...
|
||||||
|
*/
|
||||||
|
void ResetOrderFlow()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Clean(mOrderFlow);
|
||||||
|
mOrderFlowDir = X_DIRECTION_NONE;
|
||||||
|
|
||||||
|
//
|
||||||
|
ClearDraws();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Draw Order Flow ...
|
||||||
|
*/
|
||||||
|
void RedrawOrderFlow(
|
||||||
|
bool forceClearDraws = true,
|
||||||
|
bool drawOrderFlow = true,
|
||||||
|
bool drawOrderFlowState = true,
|
||||||
|
bool drawOnlyLastOrderFlow = false,
|
||||||
|
bool drawOnlyLastOrderFlowState = true //
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
state.Clean();
|
if (forceClearDraws)
|
||||||
|
{
|
||||||
|
ClearDraws();
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
if (!pivot.IsValid())
|
if (!drawOrderFlow ||
|
||||||
|
!HasValidOrderFlow())
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
int count = 0;
|
int orderFlowCount = ArraySize(mOrderFlow);
|
||||||
|
for (int i = 0; i < orderFlowCount; i++)
|
||||||
//
|
|
||||||
// Swings ...
|
|
||||||
|
|
||||||
//
|
|
||||||
// Swing High ...
|
|
||||||
if (lookupSwingHighs)
|
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
count = ArraySize(state.swingHighs);
|
bool isLast = i == orderFlowCount - 1;
|
||||||
if (IsValidSize(count))
|
bool canDraw =
|
||||||
|
!drawOnlyLastOrderFlow ||
|
||||||
|
(isLast &&
|
||||||
|
drawOnlyLastOrderFlow);
|
||||||
|
if (!canDraw)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
XPVPivot iPivot = mOrderFlow[i];
|
||||||
|
|
||||||
|
//
|
||||||
|
XCXPVPivotObject *iObj;
|
||||||
|
iObj = new XCXPVPivotObject();
|
||||||
|
bool isCreated = iObj.Create(
|
||||||
|
mPOIDrawer.ChartIdentification(),
|
||||||
|
mPOIDrawer.SubWindowIdentification(),
|
||||||
|
iPivot //
|
||||||
|
);
|
||||||
|
if (isCreated)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
for (int i = 0; i < count; i++)
|
bool canDrawState =
|
||||||
|
drawOrderFlowState &&
|
||||||
|
(!drawOnlyLastOrderFlowState ||
|
||||||
|
(isLast &&
|
||||||
|
drawOnlyLastOrderFlowState));
|
||||||
|
if (canDrawState)
|
||||||
|
{
|
||||||
|
CustomStateDrawing(iPivot.state);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
if (iPivot.IsPeak())
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
XCSwing iSwing = state.swingHighs[i];
|
iObj.PivotWidth(1);
|
||||||
|
iObj.PivotFill(false);
|
||||||
|
iObj.PivotColor(clrAqua);
|
||||||
|
iObj.PivotStyle(STYLE_SOLID);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
if (iPivot.IsVale())
|
||||||
|
{
|
||||||
//
|
//
|
||||||
|
iObj.PivotWidth(1);
|
||||||
|
iObj.PivotFill(false);
|
||||||
|
iObj.PivotStyle(STYLE_SOLID);
|
||||||
|
iObj.PivotColor(clrMagenta);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Swing Low ...
|
|
||||||
if (lookupSwingLows)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
count = ArraySize(state.swingLows);
|
|
||||||
if (IsValidSize(count))
|
|
||||||
{
|
|
||||||
//
|
//
|
||||||
for (int i = 0; i < count; i++)
|
AddObjectIfNotExists(iObj);
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Support and Resistance Zones ...
|
|
||||||
|
|
||||||
//
|
|
||||||
// Support Zones ...
|
|
||||||
if (lookupSupportZones)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
count = ArraySize(state.supportZones);
|
|
||||||
if (IsValidSize(count))
|
|
||||||
{
|
|
||||||
//
|
|
||||||
for (int i = 0; i < count; i++)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Resistance Zones ...
|
|
||||||
if (lookupResistanceZones)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
count = ArraySize(state.resistanceZones);
|
|
||||||
if (IsValidSize(count))
|
|
||||||
{
|
|
||||||
//
|
|
||||||
for (int i = 0; i < count; i++)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Supply and Demand Zones ...
|
|
||||||
|
|
||||||
//
|
|
||||||
// Supply Zones ...
|
|
||||||
if (lookupSupplyZones)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
count = ArraySize(state.supplyZones);
|
|
||||||
if (IsValidSize(count))
|
|
||||||
{
|
|
||||||
//
|
|
||||||
for (int i = 0; i < count; i++)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Demand Zones ...
|
|
||||||
if (lookupDemandZones)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
count = ArraySize(state.demandZones);
|
|
||||||
if (IsValidSize(count))
|
|
||||||
{
|
|
||||||
//
|
|
||||||
for (int i = 0; i < count; i++)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Order Blocks ...
|
|
||||||
|
|
||||||
//
|
|
||||||
// Bullish Order Blocks ...
|
|
||||||
if (lookupBullishOrderBlocks)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
count = ArraySize(state.bullishOrderBlocks);
|
|
||||||
if (IsValidSize(count))
|
|
||||||
{
|
|
||||||
//
|
|
||||||
for (int i = 0; i < count; i++)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Bearish Order Blocks ...
|
|
||||||
if (lookupBearishOrderBlocks)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
count = ArraySize(state.bearishOrderBlocks);
|
|
||||||
if (IsValidSize(count))
|
|
||||||
{
|
|
||||||
//
|
|
||||||
for (int i = 0; i < count; i++)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Fair Value Gaps ...
|
|
||||||
|
|
||||||
//
|
|
||||||
// Bullish Fair Value Gaps ...
|
|
||||||
if (lookupBullishFairValueGaps)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
count = ArraySize(state.bullishFairValueGaps);
|
|
||||||
if (IsValidSize(count))
|
|
||||||
{
|
|
||||||
//
|
|
||||||
for (int i = 0; i < count; i++)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Bearish Fair Value Gaps ...
|
|
||||||
if (lookupBearishFairValueGaps)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
count = ArraySize(state.bearishFairValueGaps);
|
|
||||||
if (IsValidSize(count))
|
|
||||||
{
|
|
||||||
//
|
|
||||||
for (int i = 0; i < count; i++)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Rejection Bars ...
|
|
||||||
|
|
||||||
//
|
|
||||||
// Bullish Rejection Bars ...
|
|
||||||
if (lookupBullishRejectionBars)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
count = ArraySize(state.bullishRejectionBars);
|
|
||||||
if (IsValidSize(count))
|
|
||||||
{
|
|
||||||
//
|
|
||||||
for (int i = 0; i < count; i++)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Bearish Rejection Bars ...
|
|
||||||
if (lookupBearishRejectionBars)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
count = ArraySize(state.bearishRejectionBars);
|
|
||||||
if (IsValidSize(count))
|
|
||||||
{
|
|
||||||
//
|
|
||||||
for (int i = 0; i < count; i++)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Momentum Bars ...
|
|
||||||
|
|
||||||
//
|
|
||||||
// Bullish Momentum Bars ...
|
|
||||||
if (lookupBullishMomentumBars)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
count = ArraySize(state.bullishMomentumBars);
|
|
||||||
if (IsValidSize(count))
|
|
||||||
{
|
|
||||||
//
|
|
||||||
for (int i = 0; i < count; i++)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Bearish Momenum Bars ...
|
|
||||||
if (lookupBearishMomentumBars)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
count = ArraySize(state.bearishMomentumBars);
|
|
||||||
if (IsValidSize(count))
|
|
||||||
{
|
|
||||||
//
|
|
||||||
for (int i = 0; i < count; i++)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This function fulfills the will of the developer
|
* Custom Drawing State ...
|
||||||
* @param state: Argument 1
|
*
|
||||||
|
* @param state: XPOIState instance reference, Specified Which state to Draw ...
|
||||||
*/
|
*/
|
||||||
void DrawStateSwings(XPOIState &state)
|
void CustomStateDrawing(XPOIState &state)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
DrawState(
|
DrawState(
|
||||||
state, // State ...
|
state, // State ...
|
||||||
true, // Draw SwingHighs ..
|
true, // Update To of all Drawings Till now ...
|
||||||
true, // Draw SwingLows ..
|
false, // Draw SwingHighs ..
|
||||||
|
false, // Draw SwingLows ..
|
||||||
false, // Draw SupportZones ..
|
false, // Draw SupportZones ..
|
||||||
false, // Draw ResistanceZones ..
|
false, // Draw ResistanceZones ..
|
||||||
false, // Draw SupplyZones ..
|
false, // Draw SupplyZones ..
|
||||||
false, // Draw DemandZones ..
|
false, // Draw DemandZones ..
|
||||||
true, // Draw BullishOrderBlocks ..
|
true, // Draw BullishOrderBlocks ..
|
||||||
true, // Draw BearishOrderBlocks ..
|
true, // Draw BearishOrderBlocks ..
|
||||||
true, // Draw BullishFairValueGaps ..
|
false, // Draw BullishFairValueGaps ..
|
||||||
true, // Draw BearishFairValueGaps ..
|
false, // Draw BearishFairValueGaps ..
|
||||||
true, // Draw BullishRejectionBars ..
|
false, // Draw BullishRejectionBars ..
|
||||||
true, // Draw BearishRejectionBars ..
|
false, // Draw BearishRejectionBars ..
|
||||||
true, // Draw BullishMomentumBars ..
|
false, // Draw BullishMomentumBars ..
|
||||||
true // Draw BearishMomentumBars ..
|
false // Draw BearishMomentumBars ..
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1237,9 +1323,9 @@ class XCX121SMCTestStrategy : public XCX121SMCBaseStrategy
|
|||||||
x3vwapInputs.Default();
|
x3vwapInputs.Default();
|
||||||
|
|
||||||
//
|
//
|
||||||
x3vwapInputs.showFast = false;
|
x3vwapInputs.showFast = true;
|
||||||
x3vwapInputs.showMid = false;
|
x3vwapInputs.showMid = true;
|
||||||
x3vwapInputs.showSlow = false;
|
x3vwapInputs.showSlow = true;
|
||||||
|
|
||||||
//
|
//
|
||||||
x3vwapHelper = new XCX3VWAPHelper();
|
x3vwapHelper = new XCX3VWAPHelper();
|
||||||
|
|||||||
Reference in New Issue
Block a user