last ...
This commit is contained in:
@@ -63,6 +63,7 @@ enum ENUM_XCHARTOBJECTS
|
|||||||
X_BEARISH_FVG_OBJ = 9875,
|
X_BEARISH_FVG_OBJ = 9875,
|
||||||
X_TICK_ZONE_OBJ = 9876,
|
X_TICK_ZONE_OBJ = 9876,
|
||||||
X_TICKS_ZONE_OBJ = 9877,
|
X_TICKS_ZONE_OBJ = 9877,
|
||||||
|
X_CONSOLIDATION_ZONE_OBJ = 9878,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum ENUM_X_CHART_IDS
|
enum ENUM_X_CHART_IDS
|
||||||
@@ -1469,6 +1470,139 @@ class XCBullishFairValueGapObject : public XCZoneObject
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class XCConsolidationZoneObject : public XCBaseObject
|
||||||
|
{
|
||||||
|
//
|
||||||
|
public:
|
||||||
|
//
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creator ...
|
||||||
|
*
|
||||||
|
* @param chart_id: Long, Specified Chart ID ...
|
||||||
|
* @param window: Integer, Specified Chart Window ID ...
|
||||||
|
* @param zone: XConsolidationZone instance ...
|
||||||
|
* @param prefix: String ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool Create(
|
||||||
|
long chart_id,
|
||||||
|
int window,
|
||||||
|
XConsolidationZone &zone,
|
||||||
|
string prefix = NULL //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
result = zone.IsValid();
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
string name = zone.GetTag();
|
||||||
|
if (IsValid(prefix))
|
||||||
|
{
|
||||||
|
name = prefix + "_" + name;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
result = mRect.Create(
|
||||||
|
chart_id,
|
||||||
|
name,
|
||||||
|
window,
|
||||||
|
zone.From(),
|
||||||
|
zone.upper,
|
||||||
|
TimeCurrent(),
|
||||||
|
zone.lower //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
ObjName(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Virtual ...
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve Object Type ...
|
||||||
|
*
|
||||||
|
* @return ( ENUM_XCHARTOBJECTS )
|
||||||
|
*/
|
||||||
|
virtual ENUM_XCHARTOBJECTS Type()
|
||||||
|
{
|
||||||
|
return X_CONSOLIDATION_ZONE_OBJ;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Setter(s) ...
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set Zone Width ...
|
||||||
|
*
|
||||||
|
* @param value: Integer ...
|
||||||
|
*/
|
||||||
|
void ZoneWidth(int value)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
if (value < 1)
|
||||||
|
{
|
||||||
|
value = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
mRect.Width(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set Zone Color ...
|
||||||
|
*
|
||||||
|
* @param value: Color ...
|
||||||
|
*/
|
||||||
|
void ZoneColor(color value)
|
||||||
|
{
|
||||||
|
mRect.Color(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set Zone Style ...
|
||||||
|
*
|
||||||
|
* @param value: ENUM_LINE_STYLE member ...
|
||||||
|
*/
|
||||||
|
void ZoneStyle(ENUM_LINE_STYLE value)
|
||||||
|
{
|
||||||
|
mRect.Style(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set Zone Fill ...
|
||||||
|
*
|
||||||
|
* @param value: Boolean ...
|
||||||
|
*/
|
||||||
|
void ZoneFill(bool value)
|
||||||
|
{
|
||||||
|
mRect.Fill(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
private:
|
||||||
|
//
|
||||||
|
CChartObjectRectangle mRect;
|
||||||
|
|
||||||
|
//
|
||||||
|
};
|
||||||
|
|
||||||
//
|
//
|
||||||
// Bearish Fair Value Gaps ...
|
// Bearish Fair Value Gaps ...
|
||||||
class XCBearishFairValueGapObject : public XCZoneObject
|
class XCBearishFairValueGapObject : public XCZoneObject
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -44,12 +44,38 @@ enum ENUM_X_PRICE
|
|||||||
//
|
//
|
||||||
enum ENUM_X_DIRECTION
|
enum ENUM_X_DIRECTION
|
||||||
{
|
{
|
||||||
X_DIRECTION_ALL,
|
X_DIRECTION_ALL, // All
|
||||||
X_DIRECTION_NONE,
|
X_DIRECTION_NONE, // None
|
||||||
X_DIRECTION_BULLISH,
|
X_DIRECTION_BULLISH, // Bullish
|
||||||
X_DIRECTION_BEARISH,
|
X_DIRECTION_BEARISH, // Bearish
|
||||||
};
|
};
|
||||||
|
|
||||||
|
string ToString(ENUM_X_DIRECTION value)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
string result = NULL;
|
||||||
|
|
||||||
|
//
|
||||||
|
switch (value)
|
||||||
|
{
|
||||||
|
case X_DIRECTION_ALL:
|
||||||
|
result = "ALL";
|
||||||
|
break;
|
||||||
|
case X_DIRECTION_NONE:
|
||||||
|
result = "NONE";
|
||||||
|
break;
|
||||||
|
case X_DIRECTION_BULLISH:
|
||||||
|
result = "BULLISH";
|
||||||
|
break;
|
||||||
|
case X_DIRECTION_BEARISH:
|
||||||
|
result = "BEARISH";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Swing Types Enum ...
|
// Swing Types Enum ...
|
||||||
enum ENUM_X_SWING_TYPE
|
enum ENUM_X_SWING_TYPE
|
||||||
@@ -8571,7 +8597,8 @@ int FillPrice(
|
|||||||
_mLoopback,
|
_mLoopback,
|
||||||
open //
|
open //
|
||||||
);
|
);
|
||||||
if (!IsValidSize(result)) {
|
if (!IsValidSize(result))
|
||||||
|
{
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -8584,7 +8611,8 @@ int FillPrice(
|
|||||||
_mLoopback,
|
_mLoopback,
|
||||||
high //
|
high //
|
||||||
);
|
);
|
||||||
if (!IsValidSize(result)) {
|
if (!IsValidSize(result))
|
||||||
|
{
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -8597,7 +8625,8 @@ int FillPrice(
|
|||||||
_mLoopback,
|
_mLoopback,
|
||||||
low //
|
low //
|
||||||
);
|
);
|
||||||
if (!IsValidSize(result)) {
|
if (!IsValidSize(result))
|
||||||
|
{
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -8610,7 +8639,8 @@ int FillPrice(
|
|||||||
_mLoopback,
|
_mLoopback,
|
||||||
close //
|
close //
|
||||||
);
|
);
|
||||||
if (!IsValidSize(result)) {
|
if (!IsValidSize(result))
|
||||||
|
{
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3725,6 +3725,7 @@ struct XConsolidationZone
|
|||||||
double lower; // Lower ...
|
double lower; // Lower ...
|
||||||
|
|
||||||
//
|
//
|
||||||
|
datetime initTime;
|
||||||
int loopback; // Loopback ...
|
int loopback; // Loopback ...
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -3775,6 +3776,10 @@ struct XConsolidationZone
|
|||||||
_loopback > 0
|
_loopback > 0
|
||||||
//
|
//
|
||||||
;
|
;
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
upper = _upper;
|
upper = _upper;
|
||||||
@@ -3785,22 +3790,87 @@ struct XConsolidationZone
|
|||||||
|
|
||||||
//
|
//
|
||||||
result = IsValid();
|
result = IsValid();
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
initTime = TimeCurrent();
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update Breaked State ...
|
||||||
|
*/
|
||||||
|
void Update()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
if (!IsValid())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
if (IsBreaked())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
XOHCL cBar;
|
||||||
|
bool isInited = cBar.Init(
|
||||||
|
symbol,
|
||||||
|
period,
|
||||||
|
0 //
|
||||||
|
);
|
||||||
|
if (!isInited)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
XOHCL pBar;
|
||||||
|
isInited = cBar.GetPreviousBar(pBar);
|
||||||
|
if (!isInited)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Check Consolidation Breaks ...
|
||||||
|
// Update Zone ...
|
||||||
|
// Add it ...
|
||||||
|
bool isBOSTop = cBar.high > upper;
|
||||||
|
bool isBOSBottom = cBar.low < lower;
|
||||||
|
bool hasBOS = isBOSTop ||
|
||||||
|
isBOSBottom;
|
||||||
|
if (!hasBOS)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Calculate Break Direction ...
|
||||||
|
breakerBar = cBar;
|
||||||
|
breakDirection = isBOSTop
|
||||||
|
? X_DIRECTION_BULLISH
|
||||||
|
: isBOSBottom
|
||||||
|
? X_DIRECTION_BEARISH
|
||||||
|
: X_DIRECTION_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Cleanup ...
|
* Cleanup ...
|
||||||
*/
|
*/
|
||||||
void Clean()
|
void Clean()
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
symbol = NULL;
|
|
||||||
period = NULL;
|
|
||||||
upper = 0;
|
upper = 0;
|
||||||
lower = 0;
|
lower = 0;
|
||||||
loopback = 0;
|
loopback = 0;
|
||||||
|
symbol = NULL;
|
||||||
|
period = NULL;
|
||||||
|
initTime = NULL;
|
||||||
breakerBar.Clean();
|
breakerBar.Clean();
|
||||||
breakDirection = X_DIRECTION_NONE;
|
breakDirection = X_DIRECTION_NONE;
|
||||||
}
|
}
|
||||||
@@ -3966,6 +4036,62 @@ struct XConsolidationZone
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve Start Time ...
|
||||||
|
*
|
||||||
|
* @return ( datetime )
|
||||||
|
*/
|
||||||
|
datetime From()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
datetime result = NULL;
|
||||||
|
|
||||||
|
//
|
||||||
|
if (!IsValid())
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
int startIndex = iBarShift(
|
||||||
|
symbol,
|
||||||
|
period,
|
||||||
|
initTime //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
result = iTime(
|
||||||
|
symbol,
|
||||||
|
period,
|
||||||
|
loopback + startIndex //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve Unique Identifier ...
|
||||||
|
*
|
||||||
|
* @return ( string )
|
||||||
|
*/
|
||||||
|
string GetTag()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
string result =
|
||||||
|
//
|
||||||
|
GetTypeName(this) + "_" +
|
||||||
|
symbol + "_" +
|
||||||
|
ToString(period) + "_" +
|
||||||
|
ToString(upper) + "_" +
|
||||||
|
ToString(lower)
|
||||||
|
//
|
||||||
|
;
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
+2
-1
@@ -11,7 +11,8 @@
|
|||||||
],
|
],
|
||||||
"C_Cpp.clang_format_style": "{ BasedOnStyle: Microsoft, UseTab: Never, IndentWidth: 4, TabWidth: 4, ColumnLimit: 0}",
|
"C_Cpp.clang_format_style": "{ BasedOnStyle: Microsoft, UseTab: Never, IndentWidth: 4, TabWidth: 4, ColumnLimit: 0}",
|
||||||
"files.associations": {
|
"files.associations": {
|
||||||
"*.mq5": "cpp"
|
"*.mq5": "cpp",
|
||||||
|
"*.mqh": "cpp"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -997,6 +997,145 @@ class XC121SMCCycleHelper : public XCBase
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Count Pivot Points Change ...
|
||||||
|
*
|
||||||
|
* @return ( int )
|
||||||
|
*/
|
||||||
|
int CountPivotPoints()
|
||||||
|
{
|
||||||
|
return ArraySize(mPivotPoints);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve All Pivot Point Changes as a Collection ...
|
||||||
|
*
|
||||||
|
* @param pivots: XPVPivotPoint instance Reference ...
|
||||||
|
*
|
||||||
|
* @return ( int )
|
||||||
|
*/
|
||||||
|
int FillPivotPointss(XPVPivotPoint &pivots[])
|
||||||
|
{
|
||||||
|
//
|
||||||
|
int result = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
Clean(pivots);
|
||||||
|
|
||||||
|
//
|
||||||
|
int count = CountPivotPoints();
|
||||||
|
if (!IsValidSize(pivots))
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
Copy(
|
||||||
|
mPivotPoints,
|
||||||
|
pivots //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
result = ArraySize(pivots);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve All Peak Pivot Point Changes as a Collection ...
|
||||||
|
*
|
||||||
|
* @param pivots: XPVPivotPoint instance Reference ...
|
||||||
|
*
|
||||||
|
* @return ( int )
|
||||||
|
*/
|
||||||
|
int FillPeakPivotPoints(XPVPivotPoint &pivots[])
|
||||||
|
{
|
||||||
|
//
|
||||||
|
int result = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
Clean(pivots);
|
||||||
|
|
||||||
|
//
|
||||||
|
int count = CountPivotPoints();
|
||||||
|
if (!IsValidSize(count))
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
for (int i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XPVPivotPoint iPivot = mPivotPoints[i];
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isValid = iPivot.IsPeak();
|
||||||
|
if (isValid)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
AddRef(
|
||||||
|
iPivot,
|
||||||
|
pivots //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
result = ArraySize(pivots);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve All Vale Pivot Point Changes as a Collection ...
|
||||||
|
*
|
||||||
|
* @param pivots: XPVPivotPoint instance Reference ...
|
||||||
|
*
|
||||||
|
* @return ( int )
|
||||||
|
*/
|
||||||
|
int FillValePivotPoints(XPVPivotPoint &pivots[])
|
||||||
|
{
|
||||||
|
//
|
||||||
|
int result = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
Clean(pivots);
|
||||||
|
|
||||||
|
//
|
||||||
|
int count = CountPivotPoints();
|
||||||
|
if (!IsValidSize(count))
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
for (int i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XPVPivotPoint iPivot = mPivotPoints[i];
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isValid = iPivot.IsVale();
|
||||||
|
if (isValid)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
AddRef(
|
||||||
|
iPivot,
|
||||||
|
pivots //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
result = ArraySize(pivots);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Virtuals ...
|
// Virtuals ...
|
||||||
|
|
||||||
@@ -1456,9 +1595,9 @@ class XC121SMCCycleHelper : public XCBase
|
|||||||
int count = 0;
|
int count = 0;
|
||||||
double value = 0;
|
double value = 0;
|
||||||
int repetition = 0;
|
int repetition = 0;
|
||||||
int minRepetition = 40;
|
|
||||||
ENUM_TIMEFRAMES period = GetPeriod();
|
ENUM_TIMEFRAMES period = GetPeriod();
|
||||||
int periodSeconds = PeriodSeconds(period);
|
int periodSeconds = PeriodSeconds(period);
|
||||||
|
int minRepetition = mX121Helper.GetDonChainLength();
|
||||||
ENUM_XPV_PIVOTS type = isNewPeak
|
ENUM_XPV_PIVOTS type = isNewPeak
|
||||||
? XPV_PEAK
|
? XPV_PEAK
|
||||||
: XPV_VALE;
|
: XPV_VALE;
|
||||||
@@ -1485,6 +1624,10 @@ class XC121SMCCycleHelper : public XCBase
|
|||||||
prevChange = mValesChanges[count - 2];
|
prevChange = mValesChanges[count - 2];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
if (lastChange.IsValid() &&
|
||||||
|
prevChange.IsValid())
|
||||||
|
{
|
||||||
//
|
//
|
||||||
value = prevChange.after;
|
value = prevChange.after;
|
||||||
int delayTime = ((int)lastChange.time - (int)prevChange.time);
|
int delayTime = ((int)lastChange.time - (int)prevChange.time);
|
||||||
@@ -1498,6 +1641,7 @@ class XC121SMCCycleHelper : public XCBase
|
|||||||
XPVPivotPoint pivotPoint;
|
XPVPivotPoint pivotPoint;
|
||||||
pivotPoint.type = type;
|
pivotPoint.type = type;
|
||||||
pivotPoint.value = value;
|
pivotPoint.value = value;
|
||||||
|
pivotPoint.time = prevChange.time;
|
||||||
pivotPoint.repetition = repetition;
|
pivotPoint.repetition = repetition;
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -1514,6 +1658,7 @@ class XC121SMCCycleHelper : public XCBase
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
private:
|
private:
|
||||||
|
|||||||
@@ -455,6 +455,7 @@ struct XPVPivotPoint
|
|||||||
// Props ...
|
// Props ...
|
||||||
double value;
|
double value;
|
||||||
int repetition;
|
int repetition;
|
||||||
|
datetime time;
|
||||||
ENUM_XPV_PIVOTS type;
|
ENUM_XPV_PIVOTS type;
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -474,6 +475,7 @@ struct XPVPivotPoint
|
|||||||
{
|
{
|
||||||
//
|
//
|
||||||
value = 0;
|
value = 0;
|
||||||
|
time = NULL;
|
||||||
repetition = 0;
|
repetition = 0;
|
||||||
type = XPV_NONE;
|
type = XPV_NONE;
|
||||||
}
|
}
|
||||||
@@ -492,6 +494,7 @@ struct XPVPivotPoint
|
|||||||
result =
|
result =
|
||||||
//
|
//
|
||||||
value > 0 &&
|
value > 0 &&
|
||||||
|
IsValid(time) &&
|
||||||
repetition > 0 &&
|
repetition > 0 &&
|
||||||
type != XPV_NONE
|
type != XPV_NONE
|
||||||
//
|
//
|
||||||
@@ -500,6 +503,44 @@ struct XPVPivotPoint
|
|||||||
//
|
//
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check current Pivot Point is Peak or not ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool IsPeak()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
result = IsValid() &&
|
||||||
|
type == XPV_PEAK;
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check current Pivot Point is Vale or not ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool IsVale()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
result = IsValid() &&
|
||||||
|
type == XPV_VALE;
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
};
|
};
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -1967,7 +2008,7 @@ ENUM_X_121_SMC_PROVIDERS ParseProvider(string value)
|
|||||||
|
|
||||||
//
|
//
|
||||||
// Custom Providers Conditions ...
|
// Custom Providers Conditions ...
|
||||||
struct XTestProiderConditions
|
struct XSMCStrategySetupConditions
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
// Props ...
|
// Props ...
|
||||||
@@ -1978,49 +2019,29 @@ struct XTestProiderConditions
|
|||||||
|
|
||||||
//
|
//
|
||||||
double sl;
|
double sl;
|
||||||
|
ENUM_X_DIRECTION dir;
|
||||||
ENUM_X_POSITION_TYPES type;
|
ENUM_X_POSITION_TYPES type;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Setup Props ...
|
// Setup Props ...
|
||||||
|
|
||||||
//
|
//
|
||||||
bool isNewPeak;
|
datetime setupTime;
|
||||||
bool isNewVale;
|
datetime triggerTime;
|
||||||
|
XConsolidationZone zone;
|
||||||
//
|
|
||||||
bool hasVisionSupplyZone;
|
|
||||||
XCSupplyZone *visionSupplyZone;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool hasVisionDemandZone;
|
|
||||||
XCDemandZone *visionDemandZone;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool hasConsolidationSupportZone;
|
|
||||||
XCSupportZone *consolidationSupportZone;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool hasConsolidationResistanceZone;
|
|
||||||
XCResistanceZone *consolidationResistanceZone;
|
|
||||||
|
|
||||||
//
|
//
|
||||||
double peak;
|
double peak;
|
||||||
double vale;
|
double vale;
|
||||||
|
XPVPivotPoint validPeak;
|
||||||
//
|
XPVPivotPoint validVale;
|
||||||
bool hasSamePeaks;
|
|
||||||
bool hasSameVales;
|
|
||||||
|
|
||||||
//
|
|
||||||
datetime setupTime;
|
|
||||||
datetime triggerTime;
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Trigger Props ...
|
// Trigger Props ...
|
||||||
|
|
||||||
//
|
//
|
||||||
// Constructor ...
|
// Constructor ...
|
||||||
XTestProiderConditions()
|
XSMCStrategySetupConditions()
|
||||||
{
|
{
|
||||||
Clean();
|
Clean();
|
||||||
}
|
}
|
||||||
@@ -2035,31 +2056,23 @@ struct XTestProiderConditions
|
|||||||
{
|
{
|
||||||
//
|
//
|
||||||
sl = 0;
|
sl = 0;
|
||||||
peak = 0;
|
|
||||||
vale = 0;
|
|
||||||
|
|
||||||
//
|
|
||||||
isNewPeak = false;
|
|
||||||
isNewVale = false;
|
|
||||||
hasSamePeaks = false;
|
|
||||||
hasSameVales = false;
|
|
||||||
hasVisionSupplyZone = false;
|
|
||||||
hasVisionDemandZone = false;
|
|
||||||
hasConsolidationSupportZone = false;
|
|
||||||
hasConsolidationResistanceZone = false;
|
|
||||||
|
|
||||||
//
|
//
|
||||||
|
zone.Clean();
|
||||||
|
dir = X_DIRECTION_NONE;
|
||||||
type = X_POSITION_TYPE_NONE;
|
type = X_POSITION_TYPE_NONE;
|
||||||
|
|
||||||
//
|
//
|
||||||
symbol = NULL;
|
symbol = NULL;
|
||||||
period = NULL;
|
period = NULL;
|
||||||
triggerTime = NULL;
|
|
||||||
setupTime = NULL;
|
setupTime = NULL;
|
||||||
visionSupplyZone = NULL;
|
triggerTime = NULL;
|
||||||
visionDemandZone = NULL;
|
|
||||||
consolidationSupportZone = NULL;
|
//
|
||||||
consolidationResistanceZone = NULL;
|
peak = 0;
|
||||||
|
vale = 0;
|
||||||
|
validPeak.Clean();
|
||||||
|
validVale.Clean();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -2069,62 +2082,19 @@ struct XTestProiderConditions
|
|||||||
*
|
*
|
||||||
* @return ( bool )
|
* @return ( bool )
|
||||||
*/
|
*/
|
||||||
bool IsSetuped(
|
bool IsSetuped()
|
||||||
ENUM_X_DIRECTION &dir //
|
|
||||||
)
|
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
bool result = false;
|
bool result = false;
|
||||||
|
|
||||||
//
|
//
|
||||||
dir = X_DIRECTION_NONE;
|
result = IsValid(setupTime) &&
|
||||||
|
HasDirection(dir);
|
||||||
//
|
|
||||||
result = IsValid(setupTime);
|
|
||||||
if (!result)
|
if (!result)
|
||||||
{
|
{
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
|
||||||
bool isBullish =
|
|
||||||
//
|
|
||||||
isNewVale &&
|
|
||||||
hasSamePeaks &&
|
|
||||||
hasSameVales &&
|
|
||||||
hasVisionDemandZone &&
|
|
||||||
visionDemandZone != NULL &&
|
|
||||||
visionDemandZone.IsValid()
|
|
||||||
//
|
|
||||||
;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isBearish =
|
|
||||||
//
|
|
||||||
isNewPeak &&
|
|
||||||
hasSamePeaks &&
|
|
||||||
hasSameVales &&
|
|
||||||
hasVisionSupplyZone &&
|
|
||||||
visionSupplyZone != NULL &&
|
|
||||||
visionSupplyZone.IsValid()
|
|
||||||
//
|
|
||||||
;
|
|
||||||
|
|
||||||
//
|
|
||||||
result =
|
|
||||||
isBullish ||
|
|
||||||
isBearish;
|
|
||||||
if (!result)
|
|
||||||
{
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
dir =
|
|
||||||
isBullish
|
|
||||||
? X_DIRECTION_BULLISH
|
|
||||||
: X_DIRECTION_BEARISH;
|
|
||||||
|
|
||||||
//
|
//
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -2155,6 +2125,27 @@ struct XTestProiderConditions
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Helpers ...
|
||||||
|
|
||||||
|
void UpdateZone()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
if (!zone.IsValid() ||
|
||||||
|
!validPeak.IsValid() ||
|
||||||
|
!validVale.IsValid())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
zone.upper = validPeak.value;
|
||||||
|
zone.lower = validVale.value;
|
||||||
|
|
||||||
|
//
|
||||||
|
zone.Update();
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user