complete XPVSUPDEM Provider and attached it to SMC Strategy ...
also Cleanup Test Provider and Make a Backup of it for Next Usages ...
This commit is contained in:
@@ -1527,7 +1527,6 @@ class XCConsolidationZoneObject : public XCBaseObject
|
|||||||
ObjName(name);
|
ObjName(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -2168,7 +2167,7 @@ class XCTickZoneObject : public XCBaseObject
|
|||||||
chart_id,
|
chart_id,
|
||||||
lblName,
|
lblName,
|
||||||
window,
|
window,
|
||||||
from,
|
to,
|
||||||
zone.high //
|
zone.high //
|
||||||
);
|
);
|
||||||
if (!result)
|
if (!result)
|
||||||
@@ -2179,6 +2178,23 @@ class XCTickZoneObject : public XCBaseObject
|
|||||||
//
|
//
|
||||||
mLabel.Description(ToString(zone.percent) + "%");
|
mLabel.Description(ToString(zone.percent) + "%");
|
||||||
|
|
||||||
|
//
|
||||||
|
string lblVName = "LBLV_" + name;
|
||||||
|
result = mVLabel.Create(
|
||||||
|
chart_id,
|
||||||
|
lblVName,
|
||||||
|
window,
|
||||||
|
to,
|
||||||
|
zone.low //
|
||||||
|
);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
mVLabel.Description(ToString(zone.volumePercent) + "%");
|
||||||
|
|
||||||
//
|
//
|
||||||
ObjName(name);
|
ObjName(name);
|
||||||
|
|
||||||
@@ -2256,7 +2272,9 @@ class XCTickZoneObject : public XCBaseObject
|
|||||||
*/
|
*/
|
||||||
void LabelColor(color value)
|
void LabelColor(color value)
|
||||||
{
|
{
|
||||||
|
//
|
||||||
mLabel.Color(value);
|
mLabel.Color(value);
|
||||||
|
mVLabel.Color(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -2266,7 +2284,9 @@ class XCTickZoneObject : public XCBaseObject
|
|||||||
*/
|
*/
|
||||||
void LabelSize(int value)
|
void LabelSize(int value)
|
||||||
{
|
{
|
||||||
|
//
|
||||||
mLabel.FontSize(value);
|
mLabel.FontSize(value);
|
||||||
|
mVLabel.FontSize(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -2276,7 +2296,9 @@ class XCTickZoneObject : public XCBaseObject
|
|||||||
*/
|
*/
|
||||||
void LabelFont(string value)
|
void LabelFont(string value)
|
||||||
{
|
{
|
||||||
|
//
|
||||||
mLabel.Font(value);
|
mLabel.Font(value);
|
||||||
|
mVLabel.Font(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -2286,7 +2308,9 @@ class XCTickZoneObject : public XCBaseObject
|
|||||||
*/
|
*/
|
||||||
void LabelAngle(double value)
|
void LabelAngle(double value)
|
||||||
{
|
{
|
||||||
|
//
|
||||||
mLabel.Angle(value);
|
mLabel.Angle(value);
|
||||||
|
mVLabel.Angle(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -2295,6 +2319,7 @@ class XCTickZoneObject : public XCBaseObject
|
|||||||
// Props ...
|
// Props ...
|
||||||
CChartObjectRectangle mRect;
|
CChartObjectRectangle mRect;
|
||||||
CChartObjectLabel mLabel;
|
CChartObjectLabel mLabel;
|
||||||
|
CChartObjectLabel mVLabel;
|
||||||
|
|
||||||
//
|
//
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ class XCBaseExpert : public XCBaseAlert
|
|||||||
{
|
{
|
||||||
//
|
//
|
||||||
mMagicNumber = value;
|
mMagicNumber = value;
|
||||||
InitEA();
|
ReConfigure();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -103,7 +103,7 @@ class XCBaseExpert : public XCBaseAlert
|
|||||||
{
|
{
|
||||||
//
|
//
|
||||||
mSlippage = value;
|
mSlippage = value;
|
||||||
InitEA();
|
ReConfigure();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -125,7 +125,7 @@ class XCBaseExpert : public XCBaseAlert
|
|||||||
{
|
{
|
||||||
//
|
//
|
||||||
mTagPrefix = value;
|
mTagPrefix = value;
|
||||||
InitEA();
|
ReConfigure();
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -150,7 +150,7 @@ class XCBaseExpert : public XCBaseAlert
|
|||||||
{
|
{
|
||||||
//
|
//
|
||||||
mPeriod = value;
|
mPeriod = value;
|
||||||
InitEA();
|
ReConfigure();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -172,7 +172,7 @@ class XCBaseExpert : public XCBaseAlert
|
|||||||
{
|
{
|
||||||
//
|
//
|
||||||
mSymbol = value;
|
mSymbol = value;
|
||||||
InitEA();
|
ReConfigure();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -194,7 +194,7 @@ class XCBaseExpert : public XCBaseAlert
|
|||||||
{
|
{
|
||||||
//
|
//
|
||||||
mMultiSymbol = value;
|
mMultiSymbol = value;
|
||||||
InitEA();
|
ReConfigure();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -216,7 +216,7 @@ class XCBaseExpert : public XCBaseAlert
|
|||||||
{
|
{
|
||||||
//
|
//
|
||||||
mSymbols = value;
|
mSymbols = value;
|
||||||
InitEA();
|
ReConfigure();
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -241,7 +241,7 @@ class XCBaseExpert : public XCBaseAlert
|
|||||||
{
|
{
|
||||||
//
|
//
|
||||||
mDisabled = value;
|
mDisabled = value;
|
||||||
InitEA();
|
ReConfigure();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -263,7 +263,7 @@ class XCBaseExpert : public XCBaseAlert
|
|||||||
{
|
{
|
||||||
//
|
//
|
||||||
mAllowLong = value;
|
mAllowLong = value;
|
||||||
InitEA();
|
ReConfigure();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -285,7 +285,7 @@ class XCBaseExpert : public XCBaseAlert
|
|||||||
{
|
{
|
||||||
//
|
//
|
||||||
mAllowShort = value;
|
mAllowShort = value;
|
||||||
InitEA();
|
ReConfigure();
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -310,7 +310,7 @@ class XCBaseExpert : public XCBaseAlert
|
|||||||
{
|
{
|
||||||
//
|
//
|
||||||
mReportNewMonths = value;
|
mReportNewMonths = value;
|
||||||
InitEA();
|
ReConfigure();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -332,7 +332,7 @@ class XCBaseExpert : public XCBaseAlert
|
|||||||
{
|
{
|
||||||
//
|
//
|
||||||
mReportNewWeeks = value;
|
mReportNewWeeks = value;
|
||||||
InitEA();
|
ReConfigure();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -354,7 +354,7 @@ class XCBaseExpert : public XCBaseAlert
|
|||||||
{
|
{
|
||||||
//
|
//
|
||||||
mReportNewDays = value;
|
mReportNewDays = value;
|
||||||
InitEA();
|
ReConfigure();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -376,7 +376,7 @@ class XCBaseExpert : public XCBaseAlert
|
|||||||
{
|
{
|
||||||
//
|
//
|
||||||
mReportNewHours = value;
|
mReportNewHours = value;
|
||||||
InitEA();
|
ReConfigure();
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -805,6 +805,10 @@ class XCBaseExpert : public XCBaseAlert
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual void ReConfigure()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generate Identifier Tag ...
|
* Generate Identifier Tag ...
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -0,0 +1,830 @@
|
|||||||
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// SaherElm IT Center MQL5 X121 SMC Signal Class
|
||||||
|
// -------------------------------------------------
|
||||||
|
// Name:
|
||||||
|
// Description: provide all Signalling functions ...
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// Maintainer:
|
||||||
|
// ------------
|
||||||
|
// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com)
|
||||||
|
//
|
||||||
|
//////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Global Properties ...
|
||||||
|
#property library
|
||||||
|
#property copyright "Copyright 2023, SaherElm IT Center"
|
||||||
|
#property link "https://www.saherelm.ir"
|
||||||
|
#property version "1.00"
|
||||||
|
#property strict
|
||||||
|
|
||||||
|
//
|
||||||
|
// Imports ...
|
||||||
|
#include "../Classes/x-121.smc.market.cycle.helper.class.mq5"
|
||||||
|
#include "../Libraries/x-121.smc.lib.mq5"
|
||||||
|
|
||||||
|
//
|
||||||
|
// Definitions ...
|
||||||
|
struct X121SMCStrategyTestSignalConditions
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Props ...
|
||||||
|
|
||||||
|
//
|
||||||
|
string symbol;
|
||||||
|
ENUM_TIMEFRAMES period;
|
||||||
|
|
||||||
|
//
|
||||||
|
double sl;
|
||||||
|
ENUM_X_DIRECTION dir;
|
||||||
|
ENUM_X_POSITION_TYPES type;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Setup Props ...
|
||||||
|
|
||||||
|
//
|
||||||
|
datetime setupTime;
|
||||||
|
datetime triggerTime;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Constructor ...
|
||||||
|
X121SMCStrategyTestSignalConditions()
|
||||||
|
{
|
||||||
|
Clean();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Tools ...
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cleaning Up ...
|
||||||
|
*/
|
||||||
|
void Clean()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
sl = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
dir = X_DIRECTION_NONE;
|
||||||
|
type = X_POSITION_TYPE_NONE;
|
||||||
|
|
||||||
|
//
|
||||||
|
symbol = NULL;
|
||||||
|
period = NULL;
|
||||||
|
setupTime = NULL;
|
||||||
|
triggerTime = NULL;
|
||||||
|
|
||||||
|
//
|
||||||
|
ExtensionClean();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check Condition is Setting Up ...
|
||||||
|
*
|
||||||
|
* @param dir: ENUM_X_DIRECTION member, Setting Up Direction ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool IsSetuped()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
result = IsValid(setupTime) &&
|
||||||
|
HasDirection(dir);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Calculate Setup Age ...
|
||||||
|
*
|
||||||
|
* @return ( int )
|
||||||
|
*/
|
||||||
|
int GetSetupAge()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
int result = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
if (!IsSetuped())
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
result = (int)(TimeCurrent() - setupTime) / PeriodSeconds(period);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Detect How we Can Trigger Signal ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool CanTrigger()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
result =
|
||||||
|
//
|
||||||
|
sl > 0 &&
|
||||||
|
IsValid(symbol) &&
|
||||||
|
IsValid(period) &&
|
||||||
|
IsValid(triggerTime) &&
|
||||||
|
type != X_POSITION_TYPE_ALL &&
|
||||||
|
type != X_POSITION_TYPE_NONE
|
||||||
|
//
|
||||||
|
;
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Extensions ...
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clean Additional Properties ...
|
||||||
|
*/
|
||||||
|
void ExtensionClean()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
};
|
||||||
|
|
||||||
|
//
|
||||||
|
// Extension Functions ...
|
||||||
|
|
||||||
|
//
|
||||||
|
// Detect Setup Conditions ...
|
||||||
|
bool DetectX121SMCTestSiganlSetup(
|
||||||
|
string _symbol,
|
||||||
|
ENUM_TIMEFRAMES _period,
|
||||||
|
//
|
||||||
|
X121SMCStrategyTestSignalConditions &conditions,
|
||||||
|
//
|
||||||
|
XC121SMCCycleHelper *triggerCycleHelper,
|
||||||
|
XC121SMCCycleHelper *decisionCycleHelper,
|
||||||
|
XC121SMCCycleHelper *analyseCycleHelper,
|
||||||
|
XC121SMCCycleHelper *verificationCycleHelper,
|
||||||
|
XC121SMCCycleHelper *consolidationCycleHelper,
|
||||||
|
XC121SMCCycleHelper *visionCycleHelper
|
||||||
|
//
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isBullish = false;
|
||||||
|
bool isBearish = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
int zIndex = 0;
|
||||||
|
int cIndex = zIndex + 1;
|
||||||
|
int pIndex = cIndex + 1;
|
||||||
|
int ppIndex = pIndex + 1;
|
||||||
|
|
||||||
|
//
|
||||||
|
int loopback = 10;
|
||||||
|
|
||||||
|
//
|
||||||
|
string symbol = _symbol;
|
||||||
|
ENUM_TIMEFRAMES period = _period;
|
||||||
|
|
||||||
|
//
|
||||||
|
conditions.symbol = symbol;
|
||||||
|
conditions.period = period;
|
||||||
|
|
||||||
|
//
|
||||||
|
XOHCL zBar;
|
||||||
|
result = zBar.Init(
|
||||||
|
symbol,
|
||||||
|
period,
|
||||||
|
zIndex //
|
||||||
|
);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
XOHCL cBar;
|
||||||
|
result = cBar.Init(
|
||||||
|
symbol,
|
||||||
|
period,
|
||||||
|
cIndex //
|
||||||
|
);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
double ask = GetAsk(symbol);
|
||||||
|
double bid = GetBid(symbol);
|
||||||
|
datetime cTime = TimeCurrent();
|
||||||
|
|
||||||
|
//
|
||||||
|
double ll = cBar.FindLowest(9, MODE_LOW);
|
||||||
|
double hh = cBar.FindHighest(9, MODE_HIGH);
|
||||||
|
|
||||||
|
//
|
||||||
|
int zoneValidationDivider = 10;
|
||||||
|
int validPivotRepetition = triggerCycleHelper.mX121Helper
|
||||||
|
.GetDonChainLength();
|
||||||
|
|
||||||
|
//
|
||||||
|
double selectedSL = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Cycles Conditions ...
|
||||||
|
|
||||||
|
//
|
||||||
|
// Trigger ...
|
||||||
|
ENUM_XPOI_EVENTS triggerPoiEvents[];
|
||||||
|
ENUM_X_CYCLE_EVENTS triggerCycleEvents[];
|
||||||
|
X121SMCCycleConditions triggerConditions;
|
||||||
|
result = triggerCycleHelper.GetConditions(
|
||||||
|
triggerCycleEvents,
|
||||||
|
triggerPoiEvents,
|
||||||
|
triggerConditions,
|
||||||
|
zIndex,
|
||||||
|
loopback //
|
||||||
|
);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Decision ...
|
||||||
|
ENUM_XPOI_EVENTS decisionPoiEvents[];
|
||||||
|
ENUM_X_CYCLE_EVENTS decisionCycleEvents[];
|
||||||
|
X121SMCCycleConditions decisionConditions;
|
||||||
|
result = decisionCycleHelper.GetConditions(
|
||||||
|
decisionCycleEvents,
|
||||||
|
decisionPoiEvents,
|
||||||
|
decisionConditions,
|
||||||
|
zIndex,
|
||||||
|
loopback //
|
||||||
|
);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Analyse ...
|
||||||
|
ENUM_XPOI_EVENTS analysePoiEvents[];
|
||||||
|
ENUM_X_CYCLE_EVENTS analyseCycleEvents[];
|
||||||
|
X121SMCCycleConditions analyseConditions;
|
||||||
|
result = analyseCycleHelper.GetConditions(
|
||||||
|
analyseCycleEvents,
|
||||||
|
analysePoiEvents,
|
||||||
|
analyseConditions,
|
||||||
|
zIndex,
|
||||||
|
loopback //
|
||||||
|
);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Verification ...
|
||||||
|
ENUM_XPOI_EVENTS verificationPoiEvents[];
|
||||||
|
ENUM_X_CYCLE_EVENTS verificationCycleEvents[];
|
||||||
|
X121SMCCycleConditions verificationConditions;
|
||||||
|
result = verificationCycleHelper.GetConditions(
|
||||||
|
verificationCycleEvents,
|
||||||
|
verificationPoiEvents,
|
||||||
|
verificationConditions,
|
||||||
|
zIndex,
|
||||||
|
loopback //
|
||||||
|
);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Consolidation ...
|
||||||
|
ENUM_XPOI_EVENTS consolidationPoiEvents[];
|
||||||
|
ENUM_X_CYCLE_EVENTS consolidationCycleEvents[];
|
||||||
|
X121SMCCycleConditions consolidationConditions;
|
||||||
|
result = consolidationCycleHelper.GetConditions(
|
||||||
|
consolidationCycleEvents,
|
||||||
|
consolidationPoiEvents,
|
||||||
|
consolidationConditions,
|
||||||
|
zIndex,
|
||||||
|
loopback //
|
||||||
|
);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Vision ...
|
||||||
|
ENUM_XPOI_EVENTS visionPoiEvents[];
|
||||||
|
ENUM_X_CYCLE_EVENTS visionCycleEvents[];
|
||||||
|
X121SMCCycleConditions visionConditions;
|
||||||
|
result = visionCycleHelper.GetConditions(
|
||||||
|
visionCycleEvents,
|
||||||
|
visionPoiEvents,
|
||||||
|
visionConditions,
|
||||||
|
zIndex,
|
||||||
|
loopback //
|
||||||
|
);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Cycles POI States ...
|
||||||
|
XPOIState triggerState = triggerConditions.state;
|
||||||
|
XPOIState decisionState = decisionConditions.state;
|
||||||
|
XPOIState analyseState = analyseConditions.state;
|
||||||
|
XPOIState verificationState = verificationConditions.state;
|
||||||
|
XPOIState consolidationState = consolidationConditions.state;
|
||||||
|
XPOIState visionState = visionConditions.state;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Setup Conditions ...
|
||||||
|
|
||||||
|
//
|
||||||
|
isBullish =
|
||||||
|
//
|
||||||
|
false
|
||||||
|
//
|
||||||
|
;
|
||||||
|
|
||||||
|
//
|
||||||
|
isBearish =
|
||||||
|
//
|
||||||
|
false
|
||||||
|
//
|
||||||
|
;
|
||||||
|
|
||||||
|
//
|
||||||
|
result = isBullish ||
|
||||||
|
isBearish;
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Clean Conditions for Regenerate ...
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
conditions.setupTime = cTime;
|
||||||
|
conditions.dir =
|
||||||
|
isBullish
|
||||||
|
? X_DIRECTION_BULLISH
|
||||||
|
: X_DIRECTION_BEARISH;
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Detect Trigger Conditions ...
|
||||||
|
bool DetectX121SMCTestSiganlTrigger(
|
||||||
|
//
|
||||||
|
X121SMCStrategyTestSignalConditions &conditions,
|
||||||
|
//
|
||||||
|
string _symbol,
|
||||||
|
ENUM_TIMEFRAMES _period,
|
||||||
|
//
|
||||||
|
XC121SMCCycleHelper *triggerCycleHelper,
|
||||||
|
XC121SMCCycleHelper *decisionCycleHelper,
|
||||||
|
XC121SMCCycleHelper *analyseCycleHelper,
|
||||||
|
XC121SMCCycleHelper *verificationCycleHelper,
|
||||||
|
XC121SMCCycleHelper *consolidationCycleHelper,
|
||||||
|
XC121SMCCycleHelper *visionCycleHelper,
|
||||||
|
//
|
||||||
|
int maxAllowedSetupAge = 60 //
|
||||||
|
//
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
result = conditions.IsSetuped();
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
datetime setupTime = conditions.setupTime;
|
||||||
|
ENUM_X_DIRECTION setupDir = conditions.dir;
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isBullish = false;
|
||||||
|
bool isBearish = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
int zIndex = 0;
|
||||||
|
int cIndex = zIndex + 1;
|
||||||
|
int pIndex = cIndex + 1;
|
||||||
|
int ppIndex = pIndex + 1;
|
||||||
|
|
||||||
|
//
|
||||||
|
int loopback = 10;
|
||||||
|
|
||||||
|
//
|
||||||
|
string symbol = _symbol;
|
||||||
|
ENUM_TIMEFRAMES period = _period;
|
||||||
|
|
||||||
|
//
|
||||||
|
XOHCL zBar;
|
||||||
|
result = zBar.Init(
|
||||||
|
symbol,
|
||||||
|
period,
|
||||||
|
zIndex //
|
||||||
|
);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
XOHCL cBar;
|
||||||
|
result = cBar.Init(
|
||||||
|
symbol,
|
||||||
|
period,
|
||||||
|
cIndex //
|
||||||
|
);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
double ask = GetAsk(symbol);
|
||||||
|
double bid = GetBid(symbol);
|
||||||
|
datetime cTime = TimeCurrent();
|
||||||
|
|
||||||
|
//
|
||||||
|
double ll = cBar.FindLowest(9, MODE_LOW);
|
||||||
|
double hh = cBar.FindHighest(9, MODE_HIGH);
|
||||||
|
|
||||||
|
//
|
||||||
|
int zoneValidationDivider = 10;
|
||||||
|
int validPivotRepetition = triggerCycleHelper.mX121Helper
|
||||||
|
.GetDonChainLength();
|
||||||
|
|
||||||
|
//
|
||||||
|
double selectedSL = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Cycles Conditions ...
|
||||||
|
|
||||||
|
//
|
||||||
|
// Trigger ...
|
||||||
|
ENUM_XPOI_EVENTS triggerPoiEvents[];
|
||||||
|
ENUM_X_CYCLE_EVENTS triggerCycleEvents[];
|
||||||
|
X121SMCCycleConditions triggerConditions;
|
||||||
|
result = triggerCycleHelper.GetConditions(
|
||||||
|
triggerCycleEvents,
|
||||||
|
triggerPoiEvents,
|
||||||
|
triggerConditions,
|
||||||
|
zIndex,
|
||||||
|
loopback //
|
||||||
|
);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Decision ...
|
||||||
|
ENUM_XPOI_EVENTS decisionPoiEvents[];
|
||||||
|
ENUM_X_CYCLE_EVENTS decisionCycleEvents[];
|
||||||
|
X121SMCCycleConditions decisionConditions;
|
||||||
|
result = decisionCycleHelper.GetConditions(
|
||||||
|
decisionCycleEvents,
|
||||||
|
decisionPoiEvents,
|
||||||
|
decisionConditions,
|
||||||
|
zIndex,
|
||||||
|
loopback //
|
||||||
|
);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Analyse ...
|
||||||
|
ENUM_XPOI_EVENTS analysePoiEvents[];
|
||||||
|
ENUM_X_CYCLE_EVENTS analyseCycleEvents[];
|
||||||
|
X121SMCCycleConditions analyseConditions;
|
||||||
|
result = analyseCycleHelper.GetConditions(
|
||||||
|
analyseCycleEvents,
|
||||||
|
analysePoiEvents,
|
||||||
|
analyseConditions,
|
||||||
|
zIndex,
|
||||||
|
loopback //
|
||||||
|
);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Verification ...
|
||||||
|
ENUM_XPOI_EVENTS verificationPoiEvents[];
|
||||||
|
ENUM_X_CYCLE_EVENTS verificationCycleEvents[];
|
||||||
|
X121SMCCycleConditions verificationConditions;
|
||||||
|
result = verificationCycleHelper.GetConditions(
|
||||||
|
verificationCycleEvents,
|
||||||
|
verificationPoiEvents,
|
||||||
|
verificationConditions,
|
||||||
|
zIndex,
|
||||||
|
loopback //
|
||||||
|
);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Consolidation ...
|
||||||
|
ENUM_XPOI_EVENTS consolidationPoiEvents[];
|
||||||
|
ENUM_X_CYCLE_EVENTS consolidationCycleEvents[];
|
||||||
|
X121SMCCycleConditions consolidationConditions;
|
||||||
|
result = consolidationCycleHelper.GetConditions(
|
||||||
|
consolidationCycleEvents,
|
||||||
|
consolidationPoiEvents,
|
||||||
|
consolidationConditions,
|
||||||
|
zIndex,
|
||||||
|
loopback //
|
||||||
|
);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Vision ...
|
||||||
|
ENUM_XPOI_EVENTS visionPoiEvents[];
|
||||||
|
ENUM_X_CYCLE_EVENTS visionCycleEvents[];
|
||||||
|
X121SMCCycleConditions visionConditions;
|
||||||
|
result = visionCycleHelper.GetConditions(
|
||||||
|
visionCycleEvents,
|
||||||
|
visionPoiEvents,
|
||||||
|
visionConditions,
|
||||||
|
zIndex,
|
||||||
|
loopback //
|
||||||
|
);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Cycles POI States ...
|
||||||
|
XPOIState triggerState = triggerConditions.state;
|
||||||
|
XPOIState decisionState = decisionConditions.state;
|
||||||
|
XPOIState analyseState = analyseConditions.state;
|
||||||
|
XPOIState verificationState = verificationConditions.state;
|
||||||
|
XPOIState consolidationState = consolidationConditions.state;
|
||||||
|
XPOIState visionState = visionConditions.state;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Trigger Conditions ...
|
||||||
|
|
||||||
|
//
|
||||||
|
isBullish =
|
||||||
|
//
|
||||||
|
false
|
||||||
|
//
|
||||||
|
;
|
||||||
|
|
||||||
|
//
|
||||||
|
isBearish =
|
||||||
|
//
|
||||||
|
false
|
||||||
|
//
|
||||||
|
;
|
||||||
|
|
||||||
|
//
|
||||||
|
result = isBullish ||
|
||||||
|
isBearish;
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Cleanup Setup Conditions ...
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
conditions.triggerTime = cTime;
|
||||||
|
conditions.sl = isBullish
|
||||||
|
? 0
|
||||||
|
: 0;
|
||||||
|
conditions.type = isBullish
|
||||||
|
? X_POSITION_TYPE_LONG
|
||||||
|
: X_POSITION_TYPE_SHORT;
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Test Signal ...
|
||||||
|
X121SMCStrategyTestSignalConditions mTestConditions;
|
||||||
|
bool DetectTestSignal(
|
||||||
|
X121SMCStrategyConditions &conditions //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isBullish = false;
|
||||||
|
bool isBearish = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
string symbol = GetSymbol();
|
||||||
|
ENUM_TIMEFRAMES period = GetPeriod();
|
||||||
|
|
||||||
|
//
|
||||||
|
datetime cTime = TimeCurrent();
|
||||||
|
|
||||||
|
//
|
||||||
|
ENUM_X_121_SMC_PROVIDERS provider = X_121_SMC_PROVIDER_XTEST;
|
||||||
|
string providerStr = ToString(provider);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Detect Setup Conditions ...
|
||||||
|
datetime setupTime = mTestConditions.setupTime;
|
||||||
|
bool isSetuped = mTestConditions.IsSetuped();
|
||||||
|
ENUM_X_DIRECTION setupDir = mTestConditions.dir;
|
||||||
|
if (!isSetuped)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Detect Signal Setup ...
|
||||||
|
isSetuped = DetectX121SMCTestSiganlSetup(
|
||||||
|
symbol,
|
||||||
|
period,
|
||||||
|
mTestConditions,
|
||||||
|
mTriggerCycleHelper,
|
||||||
|
mDecisionCycleHelper,
|
||||||
|
mAnalyseCycleHelper,
|
||||||
|
mVerificationCycleHelper,
|
||||||
|
mConsolidationCycleHelper,
|
||||||
|
mVisionCycleHelper //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
setupDir = mTestConditions.dir;
|
||||||
|
setupTime = mTestConditions.setupTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ClearDraws();
|
||||||
|
// ENUM_X_DIRECTION activeZoneDir;
|
||||||
|
// bool hasTicksZone = mTestConditions.HasTicksZone();
|
||||||
|
// bool hasActiveZone = mTestConditions.HasActiveZone(activeZoneDir);
|
||||||
|
// if (hasActiveZone)
|
||||||
|
// {
|
||||||
|
// //
|
||||||
|
// if (IsBullish(activeZoneDir))
|
||||||
|
// {
|
||||||
|
// //
|
||||||
|
// mTestConditions.activeDemandZone.To(cTime);
|
||||||
|
// XCDemandZoneObject *iObj;
|
||||||
|
// bool isCreated = mPOIDrawer.CreateDemandZone(
|
||||||
|
// mTestConditions.activeDemandZone,
|
||||||
|
// iObj //
|
||||||
|
// );
|
||||||
|
// if (isCreated)
|
||||||
|
// {
|
||||||
|
// AddObjectIfNotExists(iObj);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
// //
|
||||||
|
// mTestConditions.activeSupplyZone.To(cTime);
|
||||||
|
// XCSupplyZoneObject *iObj;
|
||||||
|
// bool isCreated = mPOIDrawer.CreateSupplyZone(
|
||||||
|
// mTestConditions.activeSupplyZone,
|
||||||
|
// iObj //
|
||||||
|
// );
|
||||||
|
// if (isCreated)
|
||||||
|
// {
|
||||||
|
// AddObjectIfNotExists(iObj);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// if (hasTicksZone)
|
||||||
|
// {
|
||||||
|
// //
|
||||||
|
// XCTicksZoneObject *iObj;
|
||||||
|
// bool isCreated = mPOIDrawer.CreateTicksZone(
|
||||||
|
// mTestConditions.ticksZone,
|
||||||
|
// iObj //
|
||||||
|
// );
|
||||||
|
// if (isCreated)
|
||||||
|
// {
|
||||||
|
// AddObjectIfNotExists(iObj);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
//
|
||||||
|
result = isSetuped;
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Detect Trigger Conditions ...
|
||||||
|
bool canTrigger = mTestConditions.CanTrigger();
|
||||||
|
datetime triggerTime = mTestConditions.triggerTime;
|
||||||
|
if (!canTrigger)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Detect Signal Trigger ...
|
||||||
|
canTrigger = DetectX121SMCTestSiganlTrigger(
|
||||||
|
mTestConditions,
|
||||||
|
symbol,
|
||||||
|
period,
|
||||||
|
mTriggerCycleHelper,
|
||||||
|
mDecisionCycleHelper,
|
||||||
|
mAnalyseCycleHelper,
|
||||||
|
mVerificationCycleHelper,
|
||||||
|
mConsolidationCycleHelper,
|
||||||
|
mVisionCycleHelper //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
result = canTrigger;
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
triggerTime = mTestConditions.triggerTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Check Signal Direction ...
|
||||||
|
|
||||||
|
//
|
||||||
|
isBullish = IsBullish(setupDir);
|
||||||
|
isBearish = IsBearish(setupDir);
|
||||||
|
result = isBullish ||
|
||||||
|
isBearish;
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Issues Signal on Conditions ...
|
||||||
|
conditions.signalDir = setupDir;
|
||||||
|
conditions.provider = providerStr;
|
||||||
|
conditions.sl = mTestConditions.sl;
|
||||||
|
|
||||||
|
//
|
||||||
|
mTestConditions.Clean();
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////////////////////////
|
||||||
@@ -377,7 +377,15 @@ class XCZone : public XCBasePOI
|
|||||||
*/
|
*/
|
||||||
bool IsValidFrom()
|
bool IsValidFrom()
|
||||||
{
|
{
|
||||||
return IsSpecifiedValid(From());
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
datetime from = From();
|
||||||
|
result = IsSpecifiedValid(from);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -2822,6 +2830,10 @@ class XCTicksZone : public XCTwoBarZone
|
|||||||
|
|
||||||
//
|
//
|
||||||
result = IsValid();
|
result = IsValid();
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Try to Find Out PERIOD_1M times in each zone ...
|
// Try to Find Out PERIOD_1M times in each zone ...
|
||||||
|
|||||||
@@ -1330,6 +1330,37 @@ class XC121SMCCycleHelper : public XCBase
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Last Peaks Pivot Point ...
|
||||||
|
*
|
||||||
|
* @param pivot: XPVPivotPoint instance Reference ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool GetLastPeakPivotPoint(XPVPivotPoint &pivot)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
pivot.Clean();
|
||||||
|
|
||||||
|
//
|
||||||
|
XPVPivotPoint pivots[];
|
||||||
|
int count = FillPeakPivotPoints(pivots);
|
||||||
|
result = IsValidSize(count);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
pivot = pivots[count - 1];
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieve All Vale Pivot Point Changes as a Collection ...
|
* Retrieve All Vale Pivot Point Changes as a Collection ...
|
||||||
*
|
*
|
||||||
@@ -1377,6 +1408,37 @@ class XC121SMCCycleHelper : public XCBase
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Last Vale Pivot Point ...
|
||||||
|
*
|
||||||
|
* @param pivot: XPVPivotPoint instance Reference ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool GetLastValePivotPoint(XPVPivotPoint &pivot)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
pivot.Clean();
|
||||||
|
|
||||||
|
//
|
||||||
|
XPVPivotPoint pivots[];
|
||||||
|
int count = FillValePivotPoints(pivots);
|
||||||
|
result = IsValidSize(count);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
pivot = pivots[count - 1];
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get Current Active Pivot ...
|
* Get Current Active Pivot ...
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1277,6 +1277,17 @@ class XC121SMCExpert : public XCBaseExpert
|
|||||||
mTradeHandler.ResumePausedSymbols();
|
mTradeHandler.ResumePausedSymbols();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Re Configure Materials on Properties Changed ...
|
||||||
|
*/
|
||||||
|
void ReConfigure() override
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// TODO: Enable this on Production ...
|
||||||
|
// ReConfigureTradeHandler();
|
||||||
|
// ReConfigureAllStrategies();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generate Identifier Tag ...
|
* Generate Identifier Tag ...
|
||||||
*
|
*
|
||||||
@@ -1562,15 +1573,6 @@ class XC121SMCExpert : public XCBaseExpert
|
|||||||
double mHedgingMinVolumeStep; // Minimum Volume Step for Hedging ...
|
double mHedgingMinVolumeStep; // Minimum Volume Step for Hedging ...
|
||||||
double mHedgeingMinRequiredProfitPerVolumeStep; // Minimum Required Profit Per Volume Step for Hedging ...
|
double mHedgeingMinRequiredProfitPerVolumeStep; // Minimum Required Profit Per Volume Step for Hedging ...
|
||||||
|
|
||||||
//
|
|
||||||
// Reconfigure Class On Properties Change ...
|
|
||||||
void ReConfigure()
|
|
||||||
{
|
|
||||||
//
|
|
||||||
ReConfigureTradeHandler();
|
|
||||||
ReConfigureAllStrategies();
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
//
|
||||||
double CalculateAdditionalVolumeMultiplier(XSignal &signal)
|
double CalculateAdditionalVolumeMultiplier(XSignal &signal)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ const string X121SMCStrategyToken = "X121SMC";
|
|||||||
//
|
//
|
||||||
const string X121SMCXTestToken = "X121XTest";
|
const string X121SMCXTestToken = "X121XTest";
|
||||||
const string X121SMCXPVOBToken = "X121XPVOB";
|
const string X121SMCXPVOBToken = "X121XPVOB";
|
||||||
|
const string X121SMCXPVSupDemToken = "X121XPVSUPDEM";
|
||||||
|
|
||||||
//
|
//
|
||||||
// X121 SMC Providers ...
|
// X121 SMC Providers ...
|
||||||
@@ -45,6 +46,7 @@ enum ENUM_X_121_SMC_PROVIDERS
|
|||||||
X_121_SMC_PROVIDER_NONE,
|
X_121_SMC_PROVIDER_NONE,
|
||||||
X_121_SMC_PROVIDER_XTEST,
|
X_121_SMC_PROVIDER_XTEST,
|
||||||
X_121_SMC_PROVIDER_XPVOB,
|
X_121_SMC_PROVIDER_XPVOB,
|
||||||
|
X_121_SMC_PROVIDER_XPVSUPDEM,
|
||||||
};
|
};
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -1957,6 +1959,11 @@ string ToString(ENUM_X_121_SMC_PROVIDERS value)
|
|||||||
case X_121_SMC_PROVIDER_XPVOB:
|
case X_121_SMC_PROVIDER_XPVOB:
|
||||||
result = X121SMCXPVOBToken;
|
result = X121SMCXPVOBToken;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
//
|
||||||
|
case X_121_SMC_PROVIDER_XPVSUPDEM:
|
||||||
|
result = X121SMCXPVSupDemToken;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -1990,6 +1997,10 @@ ENUM_X_121_SMC_PROVIDERS ParseProvider(string value)
|
|||||||
{
|
{
|
||||||
result = X_121_SMC_PROVIDER_XPVOB;
|
result = X_121_SMC_PROVIDER_XPVOB;
|
||||||
}
|
}
|
||||||
|
else if (Contains(X121SMCXPVSupDemToken, value))
|
||||||
|
{
|
||||||
|
result = X_121_SMC_PROVIDER_XPVSUPDEM;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
return result;
|
return result;
|
||||||
|
|||||||
@@ -47,9 +47,6 @@ struct X121SMCStrategyTestSignalConditions
|
|||||||
datetime setupTime;
|
datetime setupTime;
|
||||||
datetime triggerTime;
|
datetime triggerTime;
|
||||||
|
|
||||||
//
|
|
||||||
// Trigger Props ...
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Constructor ...
|
// Constructor ...
|
||||||
X121SMCStrategyTestSignalConditions()
|
X121SMCStrategyTestSignalConditions()
|
||||||
@@ -79,6 +76,7 @@ struct X121SMCStrategyTestSignalConditions
|
|||||||
triggerTime = NULL;
|
triggerTime = NULL;
|
||||||
|
|
||||||
//
|
//
|
||||||
|
ExtensionClean();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -157,6 +155,13 @@ struct X121SMCStrategyTestSignalConditions
|
|||||||
//
|
//
|
||||||
// Extensions ...
|
// Extensions ...
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clean Additional Properties ...
|
||||||
|
*/
|
||||||
|
void ExtensionClean()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -359,26 +364,30 @@ bool DetectX121SMCTestSiganlSetup(
|
|||||||
XPOIState consolidationState = consolidationConditions.state;
|
XPOIState consolidationState = consolidationConditions.state;
|
||||||
XPOIState visionState = visionConditions.state;
|
XPOIState visionState = visionConditions.state;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Setup Conditions ...
|
||||||
|
|
||||||
|
//
|
||||||
|
isBullish =
|
||||||
|
//
|
||||||
|
false
|
||||||
|
//
|
||||||
|
;
|
||||||
|
|
||||||
|
//
|
||||||
|
isBearish =
|
||||||
|
//
|
||||||
|
false
|
||||||
|
//
|
||||||
|
;
|
||||||
|
|
||||||
//
|
//
|
||||||
result = isBullish ||
|
result = isBullish ||
|
||||||
isBearish;
|
isBearish;
|
||||||
if (!result)
|
if (!result)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
// if (lookupForLong)
|
// Clean Conditions for Regenerate ...
|
||||||
// {
|
|
||||||
// //
|
|
||||||
// conditions.activeFVG = NULL;
|
|
||||||
// Clean(conditions.bullishOBs);
|
|
||||||
// Clean(conditions.bullishFVGs);
|
|
||||||
// }
|
|
||||||
// else if (lookupForShort)
|
|
||||||
// {
|
|
||||||
// //
|
|
||||||
// conditions.activeFVG = NULL;
|
|
||||||
// Clean(conditions.bearishOBs);
|
|
||||||
// Clean(conditions.bearishFVGs);
|
|
||||||
// }
|
|
||||||
|
|
||||||
//
|
//
|
||||||
return result;
|
return result;
|
||||||
@@ -605,13 +614,18 @@ bool DetectX121SMCTestSiganlTrigger(
|
|||||||
// Trigger Conditions ...
|
// Trigger Conditions ...
|
||||||
|
|
||||||
//
|
//
|
||||||
// Create Trigger ...
|
isBullish =
|
||||||
|
//
|
||||||
|
false
|
||||||
|
//
|
||||||
|
;
|
||||||
|
|
||||||
//
|
//
|
||||||
isBullish = false;
|
isBearish =
|
||||||
|
//
|
||||||
//
|
false
|
||||||
isBearish = false;
|
//
|
||||||
|
;
|
||||||
|
|
||||||
//
|
//
|
||||||
result = isBullish ||
|
result = isBullish ||
|
||||||
@@ -620,13 +634,6 @@ bool DetectX121SMCTestSiganlTrigger(
|
|||||||
{
|
{
|
||||||
//
|
//
|
||||||
// Cleanup Setup Conditions ...
|
// Cleanup Setup Conditions ...
|
||||||
int setupAge = conditions.GetSetupAge();
|
|
||||||
if (IsValidSize(setupAge) &&
|
|
||||||
IsValidSize(maxAllowedSetupAge) &&
|
|
||||||
setupAge >= maxAllowedSetupAge)
|
|
||||||
{
|
|
||||||
conditions.Clean();
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
//
|
||||||
return result;
|
return result;
|
||||||
@@ -645,7 +652,4 @@ bool DetectX121SMCTestSiganlTrigger(
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
|
||||||
// Tools Functions ...
|
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -56,9 +56,6 @@ struct X121SMCStrategyXPVOBSignalConditions
|
|||||||
XCFVG *bullishFVGs[];
|
XCFVG *bullishFVGs[];
|
||||||
XCFVG *bearishFVGs[];
|
XCFVG *bearishFVGs[];
|
||||||
|
|
||||||
//
|
|
||||||
// Trigger Props ...
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Constructor ...
|
// Constructor ...
|
||||||
X121SMCStrategyXPVOBSignalConditions()
|
X121SMCStrategyXPVOBSignalConditions()
|
||||||
@@ -420,11 +417,15 @@ bool DetectX121SMCXPVOBSiganlSetup(
|
|||||||
XPOIState visionState = visionConditions.state;
|
XPOIState visionState = visionConditions.state;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Detect Imbalances ...
|
// Setup Conditions ...
|
||||||
|
|
||||||
//
|
//
|
||||||
|
// Select Source State ...
|
||||||
XPOIState state = decisionState;
|
XPOIState state = decisionState;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Detect Imbalance ...
|
||||||
|
|
||||||
//
|
//
|
||||||
bool hasBullishOB = conditions.HasBullishOB();
|
bool hasBullishOB = conditions.HasBullishOB();
|
||||||
if (!hasBullishOB)
|
if (!hasBullishOB)
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -29,6 +29,7 @@
|
|||||||
//
|
//
|
||||||
#include "../Signals/x-121.smc.test.signal.class.mq5"
|
#include "../Signals/x-121.smc.test.signal.class.mq5"
|
||||||
#include "../Signals/x-121.smc.xpvob.signal.class.mq5"
|
#include "../Signals/x-121.smc.xpvob.signal.class.mq5"
|
||||||
|
#include "../Signals/x-121.smc.xpvsupdem.signal.class.mq5"
|
||||||
|
|
||||||
//
|
//
|
||||||
// Definitions ...
|
// Definitions ...
|
||||||
@@ -157,6 +158,7 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
|
|||||||
//
|
//
|
||||||
bool hasTestSignal = false;
|
bool hasTestSignal = false;
|
||||||
bool hasXPVOBSignal = false;
|
bool hasXPVOBSignal = false;
|
||||||
|
bool hasXPVSUPDEMSignal = false;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Test Signal ...
|
// Test Signal ...
|
||||||
@@ -176,6 +178,15 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
|
|||||||
// hasSignal = hasXPVOBSignal;
|
// hasSignal = hasXPVOBSignal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// XPVSUPDEM Signal ...
|
||||||
|
if (!hasSignal)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
hasXPVSUPDEMSignal = DetectXPVSUPDEMSignal(conditions);
|
||||||
|
hasSignal = hasXPVSUPDEMSignal;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
result = hasSignal;
|
result = hasSignal;
|
||||||
if (!result)
|
if (!result)
|
||||||
@@ -262,12 +273,10 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
|
|||||||
signal.time = TimeCurrent();
|
signal.time = TimeCurrent();
|
||||||
|
|
||||||
//
|
//
|
||||||
// XPVOB Signal ...
|
// Configure Signal Protecting ...
|
||||||
if (hasXPVOBSignal)
|
if (hasXPVOBSignal ||
|
||||||
|
hasXPVSUPDEMSignal)
|
||||||
{
|
{
|
||||||
//
|
|
||||||
// Add Aditionsal Info ...
|
|
||||||
|
|
||||||
//
|
//
|
||||||
signal.fullTPLevel = r2r;
|
signal.fullTPLevel = r2r;
|
||||||
signal.partialCloseOnTPLevel = 2;
|
signal.partialCloseOnTPLevel = 2;
|
||||||
@@ -545,23 +554,66 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
|
|||||||
mVisionCycleHelper //
|
mVisionCycleHelper //
|
||||||
);
|
);
|
||||||
|
|
||||||
//
|
|
||||||
result = isSetuped;
|
|
||||||
if (!result)
|
|
||||||
{
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
//
|
||||||
setupDir = mTestConditions.dir;
|
setupDir = mTestConditions.dir;
|
||||||
setupTime = mTestConditions.setupTime;
|
setupTime = mTestConditions.setupTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ClearDraws();
|
||||||
|
// ENUM_X_DIRECTION activeZoneDir;
|
||||||
|
// bool hasTicksZone = mTestConditions.HasTicksZone();
|
||||||
|
// bool hasActiveZone = mTestConditions.HasActiveZone(activeZoneDir);
|
||||||
|
// if (hasActiveZone)
|
||||||
|
// {
|
||||||
|
// //
|
||||||
|
// if (IsBullish(activeZoneDir))
|
||||||
|
// {
|
||||||
|
// //
|
||||||
|
// mTestConditions.activeDemandZone.To(cTime);
|
||||||
|
// XCDemandZoneObject *iObj;
|
||||||
|
// bool isCreated = mPOIDrawer.CreateDemandZone(
|
||||||
|
// mTestConditions.activeDemandZone,
|
||||||
|
// iObj //
|
||||||
|
// );
|
||||||
|
// if (isCreated)
|
||||||
|
// {
|
||||||
|
// AddObjectIfNotExists(iObj);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
// //
|
||||||
|
// mTestConditions.activeSupplyZone.To(cTime);
|
||||||
|
// XCSupplyZoneObject *iObj;
|
||||||
|
// bool isCreated = mPOIDrawer.CreateSupplyZone(
|
||||||
|
// mTestConditions.activeSupplyZone,
|
||||||
|
// iObj //
|
||||||
|
// );
|
||||||
|
// if (isCreated)
|
||||||
|
// {
|
||||||
|
// AddObjectIfNotExists(iObj);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// if (hasTicksZone)
|
||||||
|
// {
|
||||||
|
// //
|
||||||
|
// XCTicksZoneObject *iObj;
|
||||||
|
// bool isCreated = mPOIDrawer.CreateTicksZone(
|
||||||
|
// mTestConditions.ticksZone,
|
||||||
|
// iObj //
|
||||||
|
// );
|
||||||
|
// if (isCreated)
|
||||||
|
// {
|
||||||
|
// AddObjectIfNotExists(iObj);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
//
|
//
|
||||||
// Draw Conditions Active FVG ...
|
result = isSetuped;
|
||||||
if (isSetuped)
|
if (!result)
|
||||||
{
|
{
|
||||||
//
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -681,43 +733,43 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
|
|||||||
|
|
||||||
//
|
//
|
||||||
// Draw Conditions Active FVG ...
|
// Draw Conditions Active FVG ...
|
||||||
if (isSetuped)
|
// if (isSetuped)
|
||||||
{
|
// {
|
||||||
//
|
// //
|
||||||
XCFVG *iFVG = mXPVOBConditions.activeFVG;
|
// XCFVG *iFVG = mXPVOBConditions.activeFVG;
|
||||||
if (iFVG != NULL && iFVG.IsValid())
|
// if (iFVG != NULL && iFVG.IsValid())
|
||||||
{
|
// {
|
||||||
//
|
// //
|
||||||
ClearDraws();
|
// ClearDraws();
|
||||||
iFVG.To(cTime);
|
// iFVG.To(cTime);
|
||||||
if (IsBullish(setupDir) && iFVG.IsBullish())
|
// if (IsBullish(setupDir) && iFVG.IsBullish())
|
||||||
{
|
// {
|
||||||
//
|
// //
|
||||||
XCBullishFairValueGapObject *iObj;
|
// XCBullishFairValueGapObject *iObj;
|
||||||
bool isCreated = mPOIDrawer.CreateBullishFairValueGap(
|
// bool isCreated = mPOIDrawer.CreateBullishFairValueGap(
|
||||||
iFVG,
|
// iFVG,
|
||||||
iObj //
|
// iObj //
|
||||||
);
|
// );
|
||||||
if (isCreated)
|
// if (isCreated)
|
||||||
{
|
// {
|
||||||
AddObjectIfNotExists(iObj);
|
// AddObjectIfNotExists(iObj);
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
else if (IsBearish(setupDir) && iFVG.IsBearish())
|
// else if (IsBearish(setupDir) && iFVG.IsBearish())
|
||||||
{
|
// {
|
||||||
//
|
// //
|
||||||
XCBearishFairValueGapObject *iObj;
|
// XCBearishFairValueGapObject *iObj;
|
||||||
bool isCreated = mPOIDrawer.CreateBearishFairValueGap(
|
// bool isCreated = mPOIDrawer.CreateBearishFairValueGap(
|
||||||
iFVG,
|
// iFVG,
|
||||||
iObj //
|
// iObj //
|
||||||
);
|
// );
|
||||||
if (isCreated)
|
// if (isCreated)
|
||||||
{
|
// {
|
||||||
AddObjectIfNotExists(iObj);
|
// AddObjectIfNotExists(iObj);
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
//
|
//
|
||||||
// Detect Trigger Conditions ...
|
// Detect Trigger Conditions ...
|
||||||
@@ -776,6 +828,171 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// XPVSUPDEM Signal ...
|
||||||
|
X121SMCStrategyXPVSUPDEMSignalConditions mXPVSUPDEMConditions;
|
||||||
|
bool DetectXPVSUPDEMSignal(
|
||||||
|
X121SMCStrategyConditions &conditions //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isBullish = false;
|
||||||
|
bool isBearish = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
string symbol = GetSymbol();
|
||||||
|
ENUM_TIMEFRAMES period = GetPeriod();
|
||||||
|
|
||||||
|
//
|
||||||
|
datetime cTime = TimeCurrent();
|
||||||
|
|
||||||
|
//
|
||||||
|
ENUM_X_121_SMC_PROVIDERS provider = X_121_SMC_PROVIDER_XPVSUPDEM;
|
||||||
|
string providerStr = ToString(provider);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Detect Setup Conditions ...
|
||||||
|
datetime setupTime = mXPVSUPDEMConditions.setupTime;
|
||||||
|
bool isSetuped = mXPVSUPDEMConditions.IsSetuped();
|
||||||
|
ENUM_X_DIRECTION setupDir = mXPVSUPDEMConditions.dir;
|
||||||
|
if (!isSetuped)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Detect Signal Setup ...
|
||||||
|
isSetuped = DetectX121SMCXPVSUPDEMSiganlSetup(
|
||||||
|
symbol,
|
||||||
|
period,
|
||||||
|
mXPVSUPDEMConditions,
|
||||||
|
mTriggerCycleHelper,
|
||||||
|
mDecisionCycleHelper,
|
||||||
|
mAnalyseCycleHelper,
|
||||||
|
mVerificationCycleHelper,
|
||||||
|
mConsolidationCycleHelper,
|
||||||
|
mVisionCycleHelper //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
setupDir = mXPVSUPDEMConditions.dir;
|
||||||
|
setupTime = mXPVSUPDEMConditions.setupTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ClearDraws();
|
||||||
|
// ENUM_X_DIRECTION activeZoneDir;
|
||||||
|
// bool hasTicksZone = mXPVSUPDEMConditions.HasTicksZone();
|
||||||
|
// bool hasActiveZone = mXPVSUPDEMConditions.HasActiveZone(activeZoneDir);
|
||||||
|
// if (hasActiveZone)
|
||||||
|
// {
|
||||||
|
// //
|
||||||
|
// if (IsBullish(activeZoneDir))
|
||||||
|
// {
|
||||||
|
// //
|
||||||
|
// mXPVSUPDEMConditions.activeDemandZone.To(cTime);
|
||||||
|
// XCDemandZoneObject *iObj;
|
||||||
|
// bool isCreated = mPOIDrawer.CreateDemandZone(
|
||||||
|
// mXPVSUPDEMConditions.activeDemandZone,
|
||||||
|
// iObj //
|
||||||
|
// );
|
||||||
|
// if (isCreated)
|
||||||
|
// {
|
||||||
|
// AddObjectIfNotExists(iObj);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
// //
|
||||||
|
// mXPVSUPDEMConditions.activeSupplyZone.To(cTime);
|
||||||
|
// XCSupplyZoneObject *iObj;
|
||||||
|
// bool isCreated = mPOIDrawer.CreateSupplyZone(
|
||||||
|
// mXPVSUPDEMConditions.activeSupplyZone,
|
||||||
|
// iObj //
|
||||||
|
// );
|
||||||
|
// if (isCreated)
|
||||||
|
// {
|
||||||
|
// AddObjectIfNotExists(iObj);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// if (hasTicksZone)
|
||||||
|
// {
|
||||||
|
// //
|
||||||
|
// XCTicksZoneObject *iObj;
|
||||||
|
// bool isCreated = mPOIDrawer.CreateTicksZone(
|
||||||
|
// mXPVSUPDEMConditions.ticksZone,
|
||||||
|
// iObj //
|
||||||
|
// );
|
||||||
|
// if (isCreated)
|
||||||
|
// {
|
||||||
|
// AddObjectIfNotExists(iObj);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
//
|
||||||
|
result = isSetuped;
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Detect Trigger Conditions ...
|
||||||
|
bool canTrigger = mXPVSUPDEMConditions.CanTrigger();
|
||||||
|
datetime triggerTime = mXPVSUPDEMConditions.triggerTime;
|
||||||
|
if (!canTrigger)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Detect Signal Trigger ...
|
||||||
|
canTrigger = DetectX121SMCXPVSUPDEMSiganlTrigger(
|
||||||
|
mXPVSUPDEMConditions,
|
||||||
|
symbol,
|
||||||
|
period,
|
||||||
|
mTriggerCycleHelper,
|
||||||
|
mDecisionCycleHelper,
|
||||||
|
mAnalyseCycleHelper,
|
||||||
|
mVerificationCycleHelper,
|
||||||
|
mConsolidationCycleHelper,
|
||||||
|
mVisionCycleHelper //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
result = canTrigger;
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
triggerTime = mXPVSUPDEMConditions.triggerTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Check Signal Direction ...
|
||||||
|
|
||||||
|
//
|
||||||
|
isBullish = IsBullish(setupDir);
|
||||||
|
isBearish = IsBearish(setupDir);
|
||||||
|
result = isBullish ||
|
||||||
|
isBearish;
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Issues Signal on Conditions ...
|
||||||
|
conditions.signalDir = setupDir;
|
||||||
|
conditions.provider = providerStr;
|
||||||
|
conditions.sl = mXPVSUPDEMConditions.sl;
|
||||||
|
|
||||||
|
//
|
||||||
|
mXPVSUPDEMConditions.Clean();
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Private ...
|
// Private ...
|
||||||
private:
|
private:
|
||||||
|
|||||||
Reference in New Issue
Block a user