This commit is contained in:
2024-12-25 21:11:54 +03:30
parent f20dbaea13
commit c1d35aed03
5 changed files with 1176 additions and 7 deletions
+11
View File
@@ -37,6 +37,7 @@ const string X121SMCStrategyToken = "X121SMC";
const string X121SMCXTestToken = "X121XTest";
const string X121SMCXPVOBToken = "X121XPVOB";
const string X121SMCXPVDPToken = "X121XPVDP";
const string X121SMCXVWPBToken = "X121XVWPB";
const string X121SMCXPVSupDemToken = "X121XPVSUPDEM";
//
@@ -48,6 +49,7 @@ enum ENUM_X_121_SMC_PROVIDERS
X_121_SMC_PROVIDER_XTEST,
X_121_SMC_PROVIDER_XPVOB,
X_121_SMC_PROVIDER_XPVDP,
X_121_SMC_PROVIDER_XVWPB,
X_121_SMC_PROVIDER_XPVSUPDEM,
};
@@ -1967,6 +1969,11 @@ string ToString(ENUM_X_121_SMC_PROVIDERS value)
result = X121SMCXPVDPToken;
break;
//
case X_121_SMC_PROVIDER_XVWPB:
result = X121SMCXVWPBToken;
break;
//
case X_121_SMC_PROVIDER_XPVSUPDEM:
result = X121SMCXPVSupDemToken;
@@ -2008,6 +2015,10 @@ ENUM_X_121_SMC_PROVIDERS ParseProvider(string value)
{
result = X_121_SMC_PROVIDER_XPVDP;
}
else if (Contains(X121SMCXVWPBToken, value))
{
result = X_121_SMC_PROVIDER_XVWPB;
}
else if (Contains(X121SMCXPVSupDemToken, value))
{
result = X_121_SMC_PROVIDER_XPVSUPDEM;
@@ -419,13 +419,29 @@ bool DetectX121SMCXPVOBSiganlSetup(
//
// Setup Conditions ...
//
// Detect Market Trend ...
ENUM_X_DIRECTION trend;
bool hasTrend = consolidationCycleHelper
.DetectTrend(trend);
bool hasBullishTrend = hasTrend &&
IsBullish(trend);
bool hasBearishTrend = hasTrend &&
IsBearish(trend);
result = hasBullishTrend ||
hasBearishTrend;
if (!result)
{
return result;
}
//
// Select Source State ...
XPOIState state = decisionState;
//
// Detect Imbalance ...
//
bool hasBullishOB = conditions.HasBullishOB();
if (!hasBullishOB)
@@ -638,8 +654,20 @@ bool DetectX121SMCXPVOBSiganlSetup(
//
// Detect Setup Conditions based on Peaks or Vales Occurance ...
bool lookupForLong = isNewVale && hasBullishOB && hasBullishFVG;
bool lookupForShort = isNewPeak && hasBearishOB && hasBearishFVG;
//
bool lookupForLong = isNewVale &&
hasBullishOB &&
hasBullishFVG &&
hasBullishTrend;
//
bool lookupForShort = isNewPeak &&
hasBearishOB &&
hasBearishFVG &&
hasBearishTrend;
//
result = lookupForLong ||
lookupForShort;
if (!result)
@@ -300,6 +300,17 @@ struct X121SMCStrategyXPVSUPDEMSignalConditions
return result;
}
/**
* Clean Active Zone ...
*/
void CleanActiveZone()
{
//
activeSupplyZone = NULL;
activeDemandZone = NULL;
activeZoneFoundedAt = NULL;
}
/**
* Check Ticks Zone is Initialized or not ...
* @return ( bool )
@@ -527,6 +538,22 @@ bool DetectX121SMCXPVSUPDEMSiganlSetup(
//
// Setup Conditions ...
//
// Detect Market Trend ...
ENUM_X_DIRECTION trend;
bool hasTrend = consolidationCycleHelper
.DetectTrend(trend);
bool hasBullishTrend = hasTrend &&
IsBullish(trend);
bool hasBearishTrend = hasTrend &&
IsBearish(trend);
result = hasBullishTrend ||
hasBearishTrend;
if (!result)
{
return result;
}
//
// Select Source State ...
XPOIState state = consolidationState;
@@ -703,6 +730,28 @@ bool DetectX121SMCXPVSUPDEMSiganlSetup(
//
// Now we Have to Calculate Active Zones Ticks ...
//
bool isValidDemandZone =
hasActiveZone &&
hasBullishTrend &&
IsBullish(activeZoneDir);
//
bool isValidSupplyZone =
hasActiveZone &&
hasBearishTrend &&
IsBearish(activeZoneDir);
//
result = isValidDemandZone ||
isValidSupplyZone;
if (!result)
{
//
conditions.CleanActiveZone();
return result;
}
//
// Select Active Zone ...
XCBarZone *activeZone = NULL;
@@ -0,0 +1,950 @@
///////////////////////////////////////////////////////
//
// 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 X121SMCStrategyXVWPBSignalConditions
{
//
// Props ...
//
string symbol;
ENUM_TIMEFRAMES period;
//
double sl;
ENUM_X_DIRECTION dir;
ENUM_X_POSITION_TYPES type;
//
// Setup Props ...
//
datetime setupTime;
datetime triggerTime;
//
// Constructor ...
X121SMCStrategyXVWPBSignalConditions()
{
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 DetectX121SMCXVWPBSiganlSetup(
string _symbol,
ENUM_TIMEFRAMES _period,
//
X121SMCStrategyXVWPBSignalConditions &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;
}
//
XOHCL pBar;
result = pBar.Init(
symbol,
period,
pIndex //
);
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 ...
//
// Detect Market Trend ...
// ENUM_X_DIRECTION trend;
// bool hasTrend = consolidationCycleHelper
// .DetectTrend(trend);
// bool hasBullishTrend = hasTrend &&
// IsBullish(trend);
// bool hasBearishTrend = hasTrend &&
// IsBearish(trend);
// result = hasBullishTrend ||
// hasBearishTrend;
// if (!result)
// {
// return result;
// }
//
// Detect VWAP Bearish ...
//
double vwapFast = triggerConditions.x121Conditions.vwapFastBuffer[1];
double vwapMid = triggerConditions.x121Conditions.vwapMidBuffer[1];
double vwapSlow = triggerConditions.x121Conditions.vwapSlowBuffer[1];
//
double vwaps[3] = {
vwapFast,
vwapMid,
vwapSlow,
};
double vwapMax = GetMax(vwaps);
double vwapMin = GetMin(vwaps);
//
bool isCloseOverVwapMax =
//
ask > vwapMax &&
bid > vwapMax &&
(cBar.low > vwapMax ||
cBar.close > vwapMax)
//
;
//
bool isCloseUnderVwapMin =
//
ask < vwapMin &&
bid < vwapMin &&
(cBar.high < vwapMin ||
cBar.close < vwapMin)
//
;
//
bool isVWapBullishState = triggerConditions.x121Conditions.isVWapBullishState;
bool isVWapSwitchedToBullishState = triggerConditions.x121Conditions.isVWapSwitchedToBullishState;
//
bool isVWapBearishState = triggerConditions.x121Conditions.isVWapBearishState;
bool isVWapSwitchedToBearishState = triggerConditions.x121Conditions.isVWapSwitchedToBearishState;
//
bool isVWapBullishOrdered = triggerConditions.x121Conditions.isVWapBullishOrdered;
bool isVWapSwitchedToBullishOrdered = triggerConditions.x121Conditions.isVWapSwitchedToBullishOrdered;
//
bool isVWapBearishOrdered = triggerConditions.x121Conditions.isVWapBearishOrdered;
bool isVWapSwitchedToBearishOrdered = triggerConditions.x121Conditions.isVWapSwitchedToBearishOrdered;
//
// Summary VWap ...
//
bool isVwapBullishFormed =
//
isVWapSwitchedToBullishState
// isCloseOverVwapMax
// //
// &&
//
// (
// //
// // (isVWapBullishOrdered &&
// // isVWapSwitchedToBullishState)
// // //
// // ||
// // //
// // (isVWapBullishState &&
// // isVWapSwitchedToBullishOrdered)
// //
// )
//
;
//
bool isVwapBearishFormed =
//
isVWapSwitchedToBearishState
// isCloseUnderVwapMin
// //
// &&
//
// (
// //
// // (isVWapBearishOrdered &&
// // isVWapSwitchedToBearishState)
// // //
// // ||
// // //
// // (isVWapBearishState &&
// // isVWapSwitchedToBearishOrdered)
// //
// )
//
;
//
isBullish =
// hasBullishTrend &&
isVwapBullishFormed;
//
isBearish =
// hasBearishTrend &&
isVwapBearishFormed;
//
result = isBullish ||
isBearish;
//
// if (!result)
// {
// return result;
// }
// //
// double sar = triggerConditions.x121Conditions.sarBuffer[1];
// //
// bool isSarBullish = triggerConditions.x121Conditions.isSarBullish;
// bool isSarSwitchedToBullish = triggerConditions.x121Conditions.isSarSwitchedToBullish;
// //
// bool isSarBearish = triggerConditions.x121Conditions.isSarBearish;
// bool isSarSwitchedToBearish = triggerConditions.x121Conditions.isSarSwitchedToBearish;
// //
// bool isSarBullishFormed = isSarBullish ||
// isSarSwitchedToBullish;
// //
// bool isSarBearishFormed = isSarBearish ||
// isSarSwitchedToBearish;
// //
// isBullish =
// isBullish &&
// isSarBullishFormed;
// //
// isBearish =
// isBearish &&
// isSarBearishFormed;
// //
// result = isBullish ||
// isBearish;
// if (!result)
// {
// return result;
// }
// //
// // Detect Pull Backs ...
// //
// bool isSignalBarBullishPullBackFormed =
// cBar.IsBearish() &&
// pBar.IsBullish() &&
// cBar.low > pBar.low;
// //
// bool isSignalBarBearishPullBackFormed =
// cBar.IsBullish() &&
// pBar.IsBearish() &&
// cBar.high < pBar.high;
// //
// // Summary Pull Backs ...
// //
// bool isBullishBarFormed =
// isSignalBarBullishPullBackFormed;
// //
// bool isBearishhBarFormed =
// isSignalBarBearishPullBackFormed;
// //
// isBullish =
// isBullish &&
// isBullishBarFormed;
// //
// isBearish =
// isBearish &&
// isBearishhBarFormed;
// //
// result = isBullish ||
// isBearish;
// if (!result)
// {
// return result;
// }
// //
// 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 DetectX121SMCXVWPBSiganlTrigger(
//
X121SMCStrategyXVWPBSignalConditions &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;
}
//
XOHCL pBar;
result = pBar.Init(
symbol,
period,
pIndex //
);
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 ...
//
double triggerPeak = triggerConditions.x121Conditions.peaksBuffer[1];
double decisionPeak = decisionConditions.x121Conditions.peaksBuffer[1];
double analysePeak = analyseConditions.x121Conditions.peaksBuffer[1];
double verificationPeak = verificationConditions.x121Conditions.peaksBuffer[1];
double consolidationPeak = consolidationConditions.x121Conditions.peaksBuffer[1];
//
double triggerVale = triggerConditions.x121Conditions.valesBuffer[1];
double decisionVale = decisionConditions.x121Conditions.valesBuffer[1];
double analyseVale = analyseConditions.x121Conditions.valesBuffer[1];
double verificationVale = verificationConditions.x121Conditions.valesBuffer[1];
double consolidationVale = consolidationConditions.x121Conditions.valesBuffer[1];
//
bool isPeaksSame =
//
triggerPeak == decisionPeak &&
triggerPeak == analysePeak &&
triggerPeak == verificationPeak &&
triggerPeak == consolidationPeak
//
;
//
bool isValesSame =
//
triggerVale == decisionVale &&
triggerVale == analyseVale &&
triggerVale == verificationVale &&
triggerVale == consolidationVale
//
;
//
isBullish =
isValesSame &&
IsBullish(setupDir);
//
isBearish =
isPeaksSame &&
IsBearish(setupDir);
//
result = isBullish ||
isBearish;
if (!result)
{
return result;
}
//
conditions.Clean();
//
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;
}
//
+135 -4
View File
@@ -30,6 +30,7 @@
#include "../Signals/x-121.smc.test.signal.lib.mq5"
#include "../Signals/x-121.smc.xpvdp.signal.lib.mq5"
#include "../Signals/x-121.smc.xpvob.signal.lib.mq5"
#include "../Signals/x-121.smc.xvwpb.signal.lib.mq5"
#include "../Signals/x-121.smc.xpvsupdem.signal.lib.mq5"
//
@@ -156,15 +157,23 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
// Detect Signal Conditions ...
bool hasSignal = false;
//
bool useTestSignal = false;
bool useXPVOBSignal = false;
bool useXPVDPSignal = false;
bool useXVWPBSignal = true;
bool useXPVSUPDEMSignal = false;
//
bool hasTestSignal = false;
bool hasXPVOBSignal = false;
bool hasXPVDPSignal = false;
bool hasXVWPBSignal = false;
bool hasXPVSUPDEMSignal = false;
//
// Test Signal ...
if (!hasSignal)
if (useTestSignal && !hasSignal)
{
//
hasTestSignal = DetectTestSignal(conditions);
@@ -173,7 +182,7 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
//
// XPVOB Signal ...
if (!hasSignal)
if (useXPVOBSignal && !hasSignal)
{
//
hasXPVOBSignal = DetectXPVOBSignal(conditions);
@@ -182,16 +191,25 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
//
// XPVDP Signal ...
if (!hasSignal)
if (useXPVDPSignal && !hasSignal)
{
//
hasXPVDPSignal = DetectXPVDPSignal(conditions);
hasSignal = hasXPVDPSignal;
}
//
// XVWPB Signal ...
if (useXVWPBSignal && !hasSignal)
{
//
hasXVWPBSignal = DetectXVWPBSignal(conditions);
hasSignal = hasXVWPBSignal;
}
//
// XPVSUPDEM Signal ...
if (!hasSignal)
if (useXPVSUPDEMSignal && !hasSignal)
{
//
hasXPVSUPDEMSignal = DetectXPVSUPDEMSignal(conditions);
@@ -953,6 +971,119 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
return result;
}
//
// XVWPB Signal ...
X121SMCStrategyXVWPBSignalConditions mXVWPBConditions;
bool DetectXVWPBSignal(
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_XVWPB;
string providerStr = ToString(provider);
//
// Detect Setup Conditions ...
datetime setupTime = mXVWPBConditions.setupTime;
bool isSetuped = mXVWPBConditions.IsSetuped();
ENUM_X_DIRECTION setupDir = mXVWPBConditions.dir;
if (!isSetuped)
{
//
// Detect Signal Setup ...
isSetuped = DetectX121SMCXVWPBSiganlSetup(
symbol,
period,
mXVWPBConditions,
mTriggerCycleHelper,
mDecisionCycleHelper,
mAnalyseCycleHelper,
mVerificationCycleHelper,
mConsolidationCycleHelper,
mVisionCycleHelper //
);
//
setupDir = mXVWPBConditions.dir;
setupTime = mXVWPBConditions.setupTime;
}
result = isSetuped;
if (!result)
{
return result;
}
//
// Detect Trigger Conditions ...
bool canTrigger = mXVWPBConditions.CanTrigger();
datetime triggerTime = mXVWPBConditions.triggerTime;
if (!canTrigger)
{
//
// Detect Signal Trigger ...
canTrigger = DetectX121SMCXVWPBSiganlTrigger(
mXVWPBConditions,
symbol,
period,
mTriggerCycleHelper,
mDecisionCycleHelper,
mAnalyseCycleHelper,
mVerificationCycleHelper,
mConsolidationCycleHelper,
mVisionCycleHelper //
);
//
result = canTrigger;
if (!result)
{
return result;
}
//
triggerTime = mXVWPBConditions.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 = mXVWPBConditions.sl;
//
mXVWPBConditions.Clean();
//
return result;
}
//
// XPVSUPDEM Signal ...
X121SMCStrategyXPVSUPDEMSignalConditions mXPVSUPDEMConditions;