This commit is contained in:
2025-02-09 09:31:34 +03:30
parent 8799d7713d
commit 42fec0e906
9 changed files with 1830 additions and 1785 deletions
+288
View File
@@ -0,0 +1,288 @@
#include "../Signals/x-121.smc.xobs.signal.lib.mq5"
bool useXOBSSignal;
useXOBSSignal = false;
bool hasXOBSSignal = false;
//
// XOBS Signal ...
if (useXOBSSignal && !hasSignal)
{
//
hasXOBSSignal = DetectXOBSSignal(conditions);
hasSignal = hasXOBSSignal;
}
Clean(mX121SMCXOBSConditionsCollection);
//
// XOBS Guard Detection ...
if (useXOBSSignal)
{
// //
// bool hasGuard = DetectX121SMCXOBSGuards(
// guards,
// positions,
// mTriggerCycleHelper,
// mDecisionCycleHelper,
// mAnalyseCycleHelper,
// mVerificationCycleHelper,
// mConsolidationCycleHelper,
// mVisionCycleHelper //
// );
}
//
// XOBS Signal ...
bool DetectXOBSSignal(
X121SMCStrategyConditions &conditions //
)
{
//
bool result = false;
//
bool isBullish = false;
bool isBearish = false;
//
int zIndex = 0;
int cIndex = zIndex + 1;
int pIndex = cIndex + 1;
int ppIndex = pIndex + 1;
//
string symbol = GetSymbol();
ENUM_TIMEFRAMES period = GetPeriod();
//
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 cLL = cBar.FindLowest(7, MODE_LOW);
double cHH = cBar.FindHighest(7, MODE_HIGH);
//
datetime cTime = TimeCurrent();
//
ENUM_X_121_SMC_PROVIDERS provider = X_121_SMC_PROVIDER_XOBS;
string providerStr = ToString(provider);
//
// Detect Setup Conditions ...
datetime setupTime = mX121SMCXOBSConditions.setupTime;
bool isSetuped = mX121SMCXOBSConditions.IsSetuped();
ENUM_X_DIRECTION setupDir = mX121SMCXOBSConditions.dir;
if (!isSetuped)
{
//
// Detect Signal Setup ...
// isSetuped = DetectX121SMCXOBSSignalSetup(
// symbol,
// period,
// mX121SMCXOBSConditions,
// mTriggerCycleHelper,
// mDecisionCycleHelper,
// mAnalyseCycleHelper,
// mVerificationCycleHelper,
// mConsolidationCycleHelper,
// mVisionCycleHelper //
// );
//
setupDir = mX121SMCXOBSConditions.dir;
setupTime = mX121SMCXOBSConditions.setupTime;
//
if (isSetuped)
{
//
int items = AddX121SMCXOBSConditionsIfNotExists(
mX121SMCXOBSConditions,
mX121SMCXOBSConditionsCollection //
);
//
mX121SMCXOBSConditions.Clean();
}
}
//
int conditionsCount = ArraySize(mX121SMCXOBSConditionsCollection);
result = IsValidSize(conditionsCount);
if (!result)
{
return result;
}
//
// Looking For Conditions ...
int selectedIndex = 0;
X121SMCStrategyXOBSSignalConditions mTmpConditions[];
Copy(
mX121SMCXOBSConditionsCollection,
mTmpConditions //
);
X121SMCStrategyXOBSSignalConditions mConditions;
for (int i = 0; i < conditionsCount; i++)
{
//
// Check Triggers ...
bool canTrigger = mTmpConditions[i].CanTrigger();
datetime triggerTime = mTmpConditions[i].triggerTime;
if (!canTrigger)
{
//
// Detect Signal Trigger ...
// canTrigger = DetectX121SMCXOBSSignalTrigger(
// mTmpConditions[i],
// symbol,
// period,
// mTriggerCycleHelper,
// mDecisionCycleHelper,
// mAnalyseCycleHelper,
// mVerificationCycleHelper,
// mConsolidationCycleHelper,
// mVisionCycleHelper //
// );
//
result = canTrigger;
if (!result)
{
//
bool isISetuped = mTmpConditions[i].IsSetuped();
if (!isISetuped)
{
//
ArrayRemove(
mX121SMCXOBSConditionsCollection,
i,
1 //
);
}
continue;
}
//
triggerTime = mTmpConditions[i].triggerTime;
}
//
if (canTrigger)
{
//
selectedIndex = i;
mConditions = mTmpConditions[i];
break;
}
}
//
result = IsValid(mConditions.setupTime) &&
HasDirection(mConditions.dir);
if (!result)
{
return result;
}
//
// Remove Selected Index from Main Collection ...
ArrayRemove(
mX121SMCXOBSConditionsCollection,
selectedIndex,
1 //
);
//
// Check Signal Direction ...
isBullish = IsBullish(mConditions.dir);
isBearish = IsBearish(mConditions.dir);
result = isBullish ||
isBearish;
if (!result)
{
return result;
}
//
// Issues Signal on Conditions ...
conditions.sl = mConditions.sl;
conditions.provider = providerStr;
conditions.signalDir = mConditions.dir;
conditions.target = mConditions.target;
//
return result;
}
//////////////////////////////////////////////////////////////////////////
X_121_SMC_PROVIDER_XOBS,
//
case X_121_SMC_PROVIDER_XOBS:
result = X121SMCXOBSToken;
break;
else if (Contains(X121SMCXOBSToken, value))
{
result = X_121_SMC_PROVIDER_XOBS;
}
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
File diff suppressed because it is too large Load Diff
+11 -2
View File
@@ -384,7 +384,10 @@ struct XTick
*
* @return ( bool )
*/
bool Init(string _symbol)
bool Init(
string _symbol,
ENUM_TIMEFRAMES _volumePeriod = NULL //
)
{
//
bool result = false;
@@ -401,7 +404,13 @@ struct XTick
double _bid = GetBid(_symbol);
double _ask = GetAsk(_symbol);
double _spread = GetSpread(_symbol);
long _volume = iTickVolume(_symbol, PERIOD_M1, 0);
//
long _volume = 0;
if (IsValid(_volumePeriod))
{
_volume = iTickVolume(_symbol, _volumePeriod, 0);
}
//
result = Init(
+12 -6
View File
@@ -4263,7 +4263,8 @@ class XCTicksZone : public XCTwoBarZone
*/
bool Init(
XOHCL &startBar,
XOHCL &endBar //
XOHCL &endBar,
ENUM_TIMEFRAMES forPeriod = NULL //
)
{
//
@@ -4277,6 +4278,11 @@ class XCTicksZone : public XCTwoBarZone
return result;
}
//
if (!IsSpecifiedValid(forPeriod)) {
forPeriod = endBar.period;
}
//
// Calculate Start and End Time ...
datetime from = startBar.time;
@@ -4308,7 +4314,7 @@ class XCTicksZone : public XCTwoBarZone
// Ticks Volumes ...
int ticksVolumeCount = CopyTickVolume(
symbol,
PERIOD_M1,
forPeriod,
from,
to,
mTickVolumes //
@@ -4465,12 +4471,12 @@ class XCTicksZone : public XCTwoBarZone
datetime to1M = (datetime)((int)endBar.time + PeriodSeconds(period) - 60);
int to1MIndex = iBarShift(
symbol,
PERIOD_M1,
forPeriod,
to1M //
);
int from1MIndex = iBarShift(
symbol,
PERIOD_M1,
forPeriod,
from //
);
for (int i = from1MIndex; i > to1MIndex; i--)
@@ -4479,7 +4485,7 @@ class XCTicksZone : public XCTwoBarZone
XOHCL iBar;
bool isInited = iBar.Init(
symbol,
PERIOD_M1,
forPeriod,
i //
);
if (!isInited)
@@ -4488,7 +4494,7 @@ class XCTicksZone : public XCTwoBarZone
}
ulong iVolume = iTickVolume(
symbol,
PERIOD_M1,
forPeriod,
i //
);
-10
View File
@@ -44,7 +44,6 @@ enum ENUM_X_121_SMC_PROVIDERS
{
//
X_121_SMC_PROVIDER_NONE,
X_121_SMC_PROVIDER_XOBS,
X_121_SMC_PROVIDER_XSUPDEMOBS,
};
@@ -712,11 +711,6 @@ string ToString(ENUM_X_121_SMC_PROVIDERS value)
case X_121_SMC_PROVIDER_XSUPDEMOBS:
result = X121SMCXSupDemOBSToken;
break;
//
case X_121_SMC_PROVIDER_XOBS:
result = X121SMCXOBSToken;
break;
}
//
@@ -746,10 +740,6 @@ ENUM_X_121_SMC_PROVIDERS ParseProvider(string value)
{
result = X_121_SMC_PROVIDER_XSUPDEMOBS;
}
else if (Contains(X121SMCXOBSToken, value))
{
result = X_121_SMC_PROVIDER_XOBS;
}
//
return result;
@@ -1678,7 +1678,7 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
//
X121SMCStrategyXSupDemOBSSignalConditions &conditions,
//
XC121SMCCycleHelper *triggerCycleHelper,
// XC121SMCCycleHelper *triggerCycleHelper,
XC121SMCCycleHelper *decisionCycleHelper,
XC121SMCCycleHelper *analyseCycleHelper,
XC121SMCCycleHelper *verificationCycleHelper,
@@ -1722,20 +1722,20 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
//
// Trigger ...
ENUM_XPOI_EVENTS triggerPoiEvents[];
ENUM_X_CYCLE_EVENTS triggerCycleEvents[];
X121SMCCycleConditions triggerConditions;
result = triggerCycleHelper.GetConditions(
triggerCycleEvents,
triggerPoiEvents,
triggerConditions,
zIndex,
loopback //
);
if (!result)
{
return result;
}
// ENUM_XPOI_EVENTS triggerPoiEvents[];
// ENUM_X_CYCLE_EVENTS triggerCycleEvents[];
// X121SMCCycleConditions triggerConditions;
// result = triggerCycleHelper.GetConditions(
// triggerCycleEvents,
// triggerPoiEvents,
// triggerConditions,
// zIndex,
// loopback //
// );
// if (!result)
// {
// return result;
// }
//
// Decision ...
@@ -1824,7 +1824,7 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
//
// Cycles POI States ...
XPOIState triggerState = triggerConditions.state;
// XPOIState triggerState = triggerConditions.state;
XPOIState decisionState = decisionConditions.state;
XPOIState analyseState = analyseConditions.state;
XPOIState verificationState = verificationConditions.state;
@@ -1833,7 +1833,7 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
//
// Cycle X121Conditions ...
X121Conditions triggerXConditions = triggerConditions.x121Conditions;
// X121Conditions triggerXConditions = triggerConditions.x121Conditions;
X121Conditions decisionXConditions = decisionConditions.x121Conditions;
X121Conditions analyseXConditions = analyseConditions.x121Conditions;
X121Conditions verificationXConditions = verificationConditions.x121Conditions;
@@ -1859,8 +1859,8 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
if (!result)
{
//
Clean(triggerPoiEvents);
Clean(triggerCycleEvents);
// Clean(triggerPoiEvents);
// Clean(triggerCycleEvents);
Clean(decisionPoiEvents);
Clean(decisionCycleEvents);
Clean(analysePoiEvents);
@@ -1874,7 +1874,7 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
//
visionState.Clean();
triggerState.Clean();
// triggerState.Clean();
analyseState.Clean();
decisionZBar.Clean();
decisionCBar.Clean();
@@ -1883,10 +1883,10 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
visionConditions.Clean();
visionXConditions.Clean();
verificationState.Clean();
triggerConditions.Clean();
// triggerConditions.Clean();
analyseConditions.Clean();
consolidationState.Clean();
triggerXConditions.Clean();
// triggerXConditions.Clean();
analyseXConditions.Clean();
decisionConditions.Clean();
decisionXConditions.Clean();
@@ -1905,8 +1905,8 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
if (!result)
{
//
Clean(triggerPoiEvents);
Clean(triggerCycleEvents);
// Clean(triggerPoiEvents);
// Clean(triggerCycleEvents);
Clean(decisionPoiEvents);
Clean(decisionCycleEvents);
Clean(analysePoiEvents);
@@ -1920,7 +1920,7 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
//
visionState.Clean();
triggerState.Clean();
// triggerState.Clean();
analyseState.Clean();
decisionZBar.Clean();
decisionCBar.Clean();
@@ -1929,10 +1929,10 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
visionConditions.Clean();
visionXConditions.Clean();
verificationState.Clean();
triggerConditions.Clean();
// triggerConditions.Clean();
analyseConditions.Clean();
consolidationState.Clean();
triggerXConditions.Clean();
// triggerXConditions.Clean();
analyseXConditions.Clean();
decisionConditions.Clean();
decisionXConditions.Clean();
@@ -1951,8 +1951,8 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
if (!result)
{
//
Clean(triggerPoiEvents);
Clean(triggerCycleEvents);
// Clean(triggerPoiEvents);
// Clean(triggerCycleEvents);
Clean(decisionPoiEvents);
Clean(decisionCycleEvents);
Clean(analysePoiEvents);
@@ -1966,7 +1966,7 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
//
visionState.Clean();
triggerState.Clean();
// triggerState.Clean();
analyseState.Clean();
decisionZBar.Clean();
decisionCBar.Clean();
@@ -1975,10 +1975,10 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
visionConditions.Clean();
visionXConditions.Clean();
verificationState.Clean();
triggerConditions.Clean();
// triggerConditions.Clean();
analyseConditions.Clean();
consolidationState.Clean();
triggerXConditions.Clean();
// triggerXConditions.Clean();
analyseXConditions.Clean();
decisionConditions.Clean();
decisionXConditions.Clean();
@@ -2196,8 +2196,8 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
if (isDestroyed)
{
//
Clean(triggerPoiEvents);
Clean(triggerCycleEvents);
// Clean(triggerPoiEvents);
// Clean(triggerCycleEvents);
Clean(decisionPoiEvents);
Clean(decisionCycleEvents);
Clean(analysePoiEvents);
@@ -2211,7 +2211,7 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
//
visionState.Clean();
triggerState.Clean();
// triggerState.Clean();
analyseState.Clean();
decisionZBar.Clean();
decisionCBar.Clean();
@@ -2220,10 +2220,10 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
visionConditions.Clean();
visionXConditions.Clean();
verificationState.Clean();
triggerConditions.Clean();
// triggerConditions.Clean();
analyseConditions.Clean();
consolidationState.Clean();
triggerXConditions.Clean();
// triggerXConditions.Clean();
analyseXConditions.Clean();
decisionConditions.Clean();
decisionXConditions.Clean();
@@ -2254,8 +2254,8 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
if (!result)
{
//
Clean(triggerPoiEvents);
Clean(triggerCycleEvents);
// Clean(triggerPoiEvents);
// Clean(triggerCycleEvents);
Clean(decisionPoiEvents);
Clean(decisionCycleEvents);
Clean(analysePoiEvents);
@@ -2269,7 +2269,7 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
//
visionState.Clean();
triggerState.Clean();
// triggerState.Clean();
analyseState.Clean();
decisionZBar.Clean();
decisionCBar.Clean();
@@ -2278,10 +2278,10 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
visionConditions.Clean();
visionXConditions.Clean();
verificationState.Clean();
triggerConditions.Clean();
// triggerConditions.Clean();
analyseConditions.Clean();
consolidationState.Clean();
triggerXConditions.Clean();
// triggerXConditions.Clean();
analyseXConditions.Clean();
decisionConditions.Clean();
decisionXConditions.Clean();
@@ -2299,7 +2299,7 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
//
// Re Draw Working Zone ...
RemoveX121SMCXSupDemOBSWorkingZoneDraws();
// RemoveX121SMCXSupDemOBSWorkingZoneDraws();
DrawX121SMCXSupDemOBSWorkingZone(
conditions,
visionCycleHelper.mPOIDrawer //
@@ -2440,8 +2440,8 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
if (!result)
{
//
Clean(triggerPoiEvents);
Clean(triggerCycleEvents);
// Clean(triggerPoiEvents);
// Clean(triggerCycleEvents);
Clean(decisionPoiEvents);
Clean(decisionCycleEvents);
Clean(analysePoiEvents);
@@ -2455,7 +2455,7 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
//
visionState.Clean();
triggerState.Clean();
// triggerState.Clean();
analyseState.Clean();
decisionZBar.Clean();
decisionCBar.Clean();
@@ -2464,10 +2464,10 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
visionConditions.Clean();
visionXConditions.Clean();
verificationState.Clean();
triggerConditions.Clean();
// triggerConditions.Clean();
analyseConditions.Clean();
consolidationState.Clean();
triggerXConditions.Clean();
// triggerXConditions.Clean();
analyseXConditions.Clean();
decisionConditions.Clean();
decisionXConditions.Clean();
@@ -2613,8 +2613,8 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
Clean(fvgs);
//
Clean(triggerPoiEvents);
Clean(triggerCycleEvents);
// Clean(triggerPoiEvents);
// Clean(triggerCycleEvents);
Clean(decisionPoiEvents);
Clean(decisionCycleEvents);
Clean(analysePoiEvents);
@@ -2628,7 +2628,7 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
//
visionState.Clean();
triggerState.Clean();
// triggerState.Clean();
analyseState.Clean();
decisionZBar.Clean();
decisionCBar.Clean();
@@ -2637,10 +2637,10 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
visionConditions.Clean();
visionXConditions.Clean();
verificationState.Clean();
triggerConditions.Clean();
// triggerConditions.Clean();
analyseConditions.Clean();
consolidationState.Clean();
triggerXConditions.Clean();
// triggerXConditions.Clean();
analyseXConditions.Clean();
decisionConditions.Clean();
decisionXConditions.Clean();
@@ -2728,8 +2728,8 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
Clean(fvgs);
//
Clean(triggerPoiEvents);
Clean(triggerCycleEvents);
// Clean(triggerPoiEvents);
// Clean(triggerCycleEvents);
Clean(decisionPoiEvents);
Clean(decisionCycleEvents);
Clean(analysePoiEvents);
@@ -2743,7 +2743,7 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
//
visionState.Clean();
triggerState.Clean();
// triggerState.Clean();
analyseState.Clean();
decisionZBar.Clean();
decisionCBar.Clean();
@@ -2752,10 +2752,10 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
visionConditions.Clean();
visionXConditions.Clean();
verificationState.Clean();
triggerConditions.Clean();
// triggerConditions.Clean();
analyseConditions.Clean();
consolidationState.Clean();
triggerXConditions.Clean();
// triggerXConditions.Clean();
analyseXConditions.Clean();
decisionConditions.Clean();
decisionXConditions.Clean();
@@ -2776,8 +2776,8 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
Clean(fvgs);
//
Clean(triggerPoiEvents);
Clean(triggerCycleEvents);
// Clean(triggerPoiEvents);
// Clean(triggerCycleEvents);
Clean(decisionPoiEvents);
Clean(decisionCycleEvents);
Clean(analysePoiEvents);
@@ -2791,16 +2791,16 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
//
visionState.Clean();
triggerState.Clean();
// triggerState.Clean();
analyseState.Clean();
decisionState.Clean();
visionConditions.Clean();
visionXConditions.Clean();
verificationState.Clean();
triggerConditions.Clean();
// triggerConditions.Clean();
analyseConditions.Clean();
consolidationState.Clean();
triggerXConditions.Clean();
// triggerXConditions.Clean();
analyseXConditions.Clean();
decisionConditions.Clean();
decisionXConditions.Clean();
@@ -3013,8 +3013,8 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
ZeroMemory(insideFVG);
//
Clean(triggerPoiEvents);
Clean(triggerCycleEvents);
// Clean(triggerPoiEvents);
// Clean(triggerCycleEvents);
Clean(decisionPoiEvents);
Clean(decisionCycleEvents);
Clean(analysePoiEvents);
@@ -3028,7 +3028,7 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
//
visionState.Clean();
triggerState.Clean();
// triggerState.Clean();
analyseState.Clean();
decisionZBar.Clean();
decisionCBar.Clean();
@@ -3037,10 +3037,10 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
visionConditions.Clean();
visionXConditions.Clean();
verificationState.Clean();
triggerConditions.Clean();
// triggerConditions.Clean();
analyseConditions.Clean();
consolidationState.Clean();
triggerXConditions.Clean();
// triggerXConditions.Clean();
analyseXConditions.Clean();
decisionConditions.Clean();
decisionXConditions.Clean();
@@ -3161,7 +3161,7 @@ bool DetectX121SMCXSupDemOBSSignalTrigger(
string _symbol,
ENUM_TIMEFRAMES _period,
//
XC121SMCCycleHelper *triggerCycleHelper,
// XC121SMCCycleHelper *triggerCycleHelper,
XC121SMCCycleHelper *decisionCycleHelper,
XC121SMCCycleHelper *analyseCycleHelper,
XC121SMCCycleHelper *verificationCycleHelper,
@@ -3459,7 +3459,7 @@ bool DetectX121SMCXSupDemOBSSignalTrigger(
bool DetectX121SMCXSupDemOBSGuards(
X121SMCGuard &guards[],
const XPosition &positions[],
XC121SMCCycleHelper *triggerCycleHelper,
// XC121SMCCycleHelper *triggerCycleHelper,
XC121SMCCycleHelper *decisionCycleHelper,
XC121SMCCycleHelper *analyseCycleHelper,
XC121SMCCycleHelper *verificationCycleHelper,
@@ -3473,28 +3473,28 @@ bool DetectX121SMCXSupDemOBSGuards(
//
string provider = ToString(X_121_SMC_PROVIDER_XSUPDEMOBS);
//
result = DetectX121SMCGuards(
provider,
guards,
positions,
triggerCycleHelper,
decisionCycleHelper,
analyseCycleHelper,
verificationCycleHelper,
consolidationCycleHelper,
visionCycleHelper,
//
true, // CloseOnTPNear Guard ...
true, // CloseLongsOnBearishTrend Guard ...
true, // CloseShortsOnBullishTrend Guard ...
true, // CloseAllWeekend Guard ...
true, // PartialCloseOnTrendChange Guard ...
true, // TrailStop Guard ...
true, // TrailTarget Guard ...
true // Hedge Guard ...
//
);
// //
// result = DetectX121SMCGuards(
// provider,
// guards,
// positions,
// // triggerCycleHelper,
// decisionCycleHelper,
// analyseCycleHelper,
// verificationCycleHelper,
// consolidationCycleHelper,
// visionCycleHelper,
// //
// true, // CloseOnTPNear Guard ...
// true, // CloseLongsOnBearishTrend Guard ...
// true, // CloseShortsOnBullishTrend Guard ...
// true, // CloseAllWeekend Guard ...
// true, // PartialCloseOnTrendChange Guard ...
// true, // TrailStop Guard ...
// true, // TrailTarget Guard ...
// true // Hedge Guard ...
// //
// );
//
return result;
+52 -300
View File
@@ -27,7 +27,6 @@
#include "../Classes/x-121.smc.market.cycle.helper.class.mq5"
//
#include "../Signals/x-121.smc.xobs.signal.lib.mq5"
#include "../Signals/x-121.smc.xsupdemobs.signal.lib.mq5"
//
@@ -42,7 +41,6 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
public:
//
// Props ...
bool useXOBSSignal;
bool useXSupDemOBSSignal;
//
@@ -104,11 +102,10 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
void Destroy() override
{
//
Clean(mX121SMCXOBSConditionsCollection);
Clean(mX121SMCXSupDemOBSConditionsCollection);
//
ZeroMemory(mTriggerCycleHelper);
// ZeroMemory(mTriggerCycleHelper);
ZeroMemory(mDecisionCycleHelper);
ZeroMemory(mAnalyseCycleHelper);
ZeroMemory(mVerificationCycleHelper);
@@ -116,7 +113,7 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
ZeroMemory(mVisionCycleHelper);
//
delete mTriggerCycleHelper;
// delete mTriggerCycleHelper;
delete mDecisionCycleHelper;
delete mAnalyseCycleHelper;
delete mVerificationCycleHelper;
@@ -204,18 +201,8 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
bool hasSignal = false;
//
bool hasXOBSSignal = false;
bool hasXSupDemOBSSignal = false;
//
// XOBS Signal ...
if (useXOBSSignal && !hasSignal)
{
//
hasXOBSSignal = DetectXOBSSignal(conditions);
hasSignal = hasXOBSSignal;
}
//
// XSupDemOBS Signal ...
if (useXSupDemOBSSignal && !hasSignal)
@@ -405,23 +392,6 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
return result;
}
//
// XOBS Guard Detection ...
if (useXOBSSignal)
{
//
bool hasGuard = DetectX121SMCXOBSGuards(
guards,
positions,
mTriggerCycleHelper,
mDecisionCycleHelper,
mAnalyseCycleHelper,
mVerificationCycleHelper,
mConsolidationCycleHelper,
mVisionCycleHelper //
);
}
//
// XSupDemOBS Guard Detection ...
if (useXSupDemOBSSignal)
@@ -430,7 +400,7 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
bool hasGuard = DetectX121SMCXSupDemOBSGuards(
guards,
positions,
mTriggerCycleHelper,
// mTriggerCycleHelper,
mDecisionCycleHelper,
mAnalyseCycleHelper,
mVerificationCycleHelper,
@@ -464,7 +434,7 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
// Props ...
//
XC121SMCCycleHelper *mTriggerCycleHelper;
// XC121SMCCycleHelper *mTriggerCycleHelper;
XC121SMCCycleHelper *mDecisionCycleHelper;
XC121SMCCycleHelper *mAnalyseCycleHelper;
XC121SMCCycleHelper *mVerificationCycleHelper;
@@ -477,223 +447,6 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
//
// Signalling Functions ...
//
// XOBS Signal ...
bool DetectXOBSSignal(
X121SMCStrategyConditions &conditions //
)
{
//
bool result = false;
//
bool isBullish = false;
bool isBearish = false;
//
int zIndex = 0;
int cIndex = zIndex + 1;
int pIndex = cIndex + 1;
int ppIndex = pIndex + 1;
//
string symbol = GetSymbol();
ENUM_TIMEFRAMES period = GetPeriod();
//
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 cLL = cBar.FindLowest(7, MODE_LOW);
double cHH = cBar.FindHighest(7, MODE_HIGH);
//
datetime cTime = TimeCurrent();
//
ENUM_X_121_SMC_PROVIDERS provider = X_121_SMC_PROVIDER_XOBS;
string providerStr = ToString(provider);
//
// Detect Setup Conditions ...
datetime setupTime = mX121SMCXOBSConditions.setupTime;
bool isSetuped = mX121SMCXOBSConditions.IsSetuped();
ENUM_X_DIRECTION setupDir = mX121SMCXOBSConditions.dir;
if (!isSetuped)
{
//
// Detect Signal Setup ...
isSetuped = DetectX121SMCXOBSSignalSetup(
symbol,
period,
mX121SMCXOBSConditions,
mTriggerCycleHelper,
mDecisionCycleHelper,
mAnalyseCycleHelper,
mVerificationCycleHelper,
mConsolidationCycleHelper,
mVisionCycleHelper //
);
//
setupDir = mX121SMCXOBSConditions.dir;
setupTime = mX121SMCXOBSConditions.setupTime;
//
if (isSetuped)
{
//
int items = AddX121SMCXOBSConditionsIfNotExists(
mX121SMCXOBSConditions,
mX121SMCXOBSConditionsCollection //
);
//
mX121SMCXOBSConditions.Clean();
}
}
//
int conditionsCount = ArraySize(mX121SMCXOBSConditionsCollection);
result = IsValidSize(conditionsCount);
if (!result)
{
return result;
}
//
// Looking For Conditions ...
int selectedIndex = 0;
X121SMCStrategyXOBSSignalConditions mTmpConditions[];
Copy(
mX121SMCXOBSConditionsCollection,
mTmpConditions //
);
X121SMCStrategyXOBSSignalConditions mConditions;
for (int i = 0; i < conditionsCount; i++)
{
//
// Check Triggers ...
bool canTrigger = mTmpConditions[i].CanTrigger();
datetime triggerTime = mTmpConditions[i].triggerTime;
if (!canTrigger)
{
//
// Detect Signal Trigger ...
canTrigger = DetectX121SMCXOBSSignalTrigger(
mTmpConditions[i],
symbol,
period,
mTriggerCycleHelper,
mDecisionCycleHelper,
mAnalyseCycleHelper,
mVerificationCycleHelper,
mConsolidationCycleHelper,
mVisionCycleHelper //
);
//
result = canTrigger;
if (!result)
{
//
bool isISetuped = mTmpConditions[i].IsSetuped();
if (!isISetuped)
{
//
ArrayRemove(
mX121SMCXOBSConditionsCollection,
i,
1 //
);
}
continue;
}
//
triggerTime = mTmpConditions[i].triggerTime;
}
//
if (canTrigger)
{
//
selectedIndex = i;
mConditions = mTmpConditions[i];
break;
}
}
//
result = IsValid(mConditions.setupTime) &&
HasDirection(mConditions.dir);
if (!result)
{
return result;
}
//
// Remove Selected Index from Main Collection ...
ArrayRemove(
mX121SMCXOBSConditionsCollection,
selectedIndex,
1 //
);
//
// Check Signal Direction ...
isBullish = IsBullish(mConditions.dir);
isBearish = IsBearish(mConditions.dir);
result = isBullish ||
isBearish;
if (!result)
{
return result;
}
//
// Issues Signal on Conditions ...
conditions.sl = mConditions.sl;
conditions.provider = providerStr;
conditions.signalDir = mConditions.dir;
conditions.target = mConditions.target;
//
return result;
}
//
// XSupDemOBS Signal ...
@@ -778,7 +531,7 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
symbol,
period,
mX121SMCXSupDemOBSConditions,
mTriggerCycleHelper,
// mTriggerCycleHelper,
mDecisionCycleHelper,
mAnalyseCycleHelper,
mVerificationCycleHelper,
@@ -835,7 +588,7 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
mTmpConditions[i],
symbol,
period,
mTriggerCycleHelper,
// mTriggerCycleHelper,
mDecisionCycleHelper,
mAnalyseCycleHelper,
mVerificationCycleHelper,
@@ -928,7 +681,6 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
void InitialHelpers()
{
//
useXOBSSignal = false;
useXSupDemOBSSignal = true;
//
@@ -1049,60 +801,60 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
//
// Trigger Cycle ...
mTriggerCycleHelper = new XC121SMCCycleHelper();
isInited = mTriggerCycleHelper.Init(
symbol,
PERIOD_M1,
x121Inputs,
requiredPOIS //
);
if (isInited)
{
//
// Configure POI Drawer ...
color bullishColor = clrYellowGreen;
color bearishColor = clrChocolate;
// mTriggerCycleHelper = new XC121SMCCycleHelper();
// isInited = mTriggerCycleHelper.Init(
// symbol,
// PERIOD_M1,
// x121Inputs,
// requiredPOIS //
// );
// if (isInited)
// {
// //
// // Configure POI Drawer ...
// color bullishColor = clrYellowGreen;
// color bearishColor = clrChocolate;
//
// Bars ...
mTriggerCycleHelper.mPOIDrawer.BarBullishColor(bullishColor);
mTriggerCycleHelper.mPOIDrawer.BarBearishColor(bearishColor);
// //
// // Bars ...
// mTriggerCycleHelper.mPOIDrawer.BarBullishColor(bullishColor);
// mTriggerCycleHelper.mPOIDrawer.BarBearishColor(bearishColor);
//
// Swings ...
mTriggerCycleHelper.mPOIDrawer.SwingLowColor(bullishColor);
mTriggerCycleHelper.mPOIDrawer.SwingHighColor(bearishColor);
// //
// // Swings ...
// mTriggerCycleHelper.mPOIDrawer.SwingLowColor(bullishColor);
// mTriggerCycleHelper.mPOIDrawer.SwingHighColor(bearishColor);
//
// Momentum ...
mTriggerCycleHelper.mPOIDrawer.BullishMomentumBarColor(bullishColor);
mTriggerCycleHelper.mPOIDrawer.BearishMomentumBarColor(bearishColor);
// //
// // Momentum ...
// mTriggerCycleHelper.mPOIDrawer.BullishMomentumBarColor(bullishColor);
// mTriggerCycleHelper.mPOIDrawer.BearishMomentumBarColor(bearishColor);
//
// Rejection ...
mTriggerCycleHelper.mPOIDrawer.BullishRejectionBarColor(bullishColor);
mTriggerCycleHelper.mPOIDrawer.BearishRejectionBarColor(bearishColor);
// //
// // Rejection ...
// mTriggerCycleHelper.mPOIDrawer.BullishRejectionBarColor(bullishColor);
// mTriggerCycleHelper.mPOIDrawer.BearishRejectionBarColor(bearishColor);
//
// Support and Resistance ...
mTriggerCycleHelper.mPOIDrawer.SupportZoneColor(bullishColor);
mTriggerCycleHelper.mPOIDrawer.ResistanceZoneColor(bearishColor);
// //
// // Support and Resistance ...
// mTriggerCycleHelper.mPOIDrawer.SupportZoneColor(bullishColor);
// mTriggerCycleHelper.mPOIDrawer.ResistanceZoneColor(bearishColor);
//
// Demand and Supply ...
mTriggerCycleHelper.mPOIDrawer.DemandZoneColor(bullishColor);
mTriggerCycleHelper.mPOIDrawer.SupplyZoneColor(bearishColor);
// //
// // Demand and Supply ...
// mTriggerCycleHelper.mPOIDrawer.DemandZoneColor(bullishColor);
// mTriggerCycleHelper.mPOIDrawer.SupplyZoneColor(bearishColor);
//
// Order Blocks ...
mTriggerCycleHelper.mPOIDrawer.BullishOrderBlockColor(bullishColor);
mTriggerCycleHelper.mPOIDrawer.BearishOrderBlockColor(bearishColor);
// //
// // Order Blocks ...
// mTriggerCycleHelper.mPOIDrawer.BullishOrderBlockColor(bullishColor);
// mTriggerCycleHelper.mPOIDrawer.BearishOrderBlockColor(bearishColor);
//
// Fair Value Gaps ...
mTriggerCycleHelper.mPOIDrawer.BullishFVGColor(bullishColor);
mTriggerCycleHelper.mPOIDrawer.BearishFVGColor(bearishColor);
}
// //
// // Fair Value Gaps ...
// mTriggerCycleHelper.mPOIDrawer.BullishFVGColor(bullishColor);
// mTriggerCycleHelper.mPOIDrawer.BearishFVGColor(bearishColor);
// }
//
// Decision Cycle ...