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 ) * @return ( bool )
*/ */
bool Init(string _symbol) bool Init(
string _symbol,
ENUM_TIMEFRAMES _volumePeriod = NULL //
)
{ {
// //
bool result = false; bool result = false;
@@ -401,7 +404,13 @@ struct XTick
double _bid = GetBid(_symbol); double _bid = GetBid(_symbol);
double _ask = GetAsk(_symbol); double _ask = GetAsk(_symbol);
double _spread = GetSpread(_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( result = Init(
+12 -6
View File
@@ -4263,7 +4263,8 @@ class XCTicksZone : public XCTwoBarZone
*/ */
bool Init( bool Init(
XOHCL &startBar, XOHCL &startBar,
XOHCL &endBar // XOHCL &endBar,
ENUM_TIMEFRAMES forPeriod = NULL //
) )
{ {
// //
@@ -4277,6 +4278,11 @@ class XCTicksZone : public XCTwoBarZone
return result; return result;
} }
//
if (!IsSpecifiedValid(forPeriod)) {
forPeriod = endBar.period;
}
// //
// Calculate Start and End Time ... // Calculate Start and End Time ...
datetime from = startBar.time; datetime from = startBar.time;
@@ -4308,7 +4314,7 @@ class XCTicksZone : public XCTwoBarZone
// Ticks Volumes ... // Ticks Volumes ...
int ticksVolumeCount = CopyTickVolume( int ticksVolumeCount = CopyTickVolume(
symbol, symbol,
PERIOD_M1, forPeriod,
from, from,
to, to,
mTickVolumes // mTickVolumes //
@@ -4465,12 +4471,12 @@ class XCTicksZone : public XCTwoBarZone
datetime to1M = (datetime)((int)endBar.time + PeriodSeconds(period) - 60); datetime to1M = (datetime)((int)endBar.time + PeriodSeconds(period) - 60);
int to1MIndex = iBarShift( int to1MIndex = iBarShift(
symbol, symbol,
PERIOD_M1, forPeriod,
to1M // to1M //
); );
int from1MIndex = iBarShift( int from1MIndex = iBarShift(
symbol, symbol,
PERIOD_M1, forPeriod,
from // from //
); );
for (int i = from1MIndex; i > to1MIndex; i--) for (int i = from1MIndex; i > to1MIndex; i--)
@@ -4479,7 +4485,7 @@ class XCTicksZone : public XCTwoBarZone
XOHCL iBar; XOHCL iBar;
bool isInited = iBar.Init( bool isInited = iBar.Init(
symbol, symbol,
PERIOD_M1, forPeriod,
i // i //
); );
if (!isInited) if (!isInited)
@@ -4488,7 +4494,7 @@ class XCTicksZone : public XCTwoBarZone
} }
ulong iVolume = iTickVolume( ulong iVolume = iTickVolume(
symbol, symbol,
PERIOD_M1, forPeriod,
i // i //
); );
-10
View File
@@ -44,7 +44,6 @@ enum ENUM_X_121_SMC_PROVIDERS
{ {
// //
X_121_SMC_PROVIDER_NONE, X_121_SMC_PROVIDER_NONE,
X_121_SMC_PROVIDER_XOBS,
X_121_SMC_PROVIDER_XSUPDEMOBS, X_121_SMC_PROVIDER_XSUPDEMOBS,
}; };
@@ -712,11 +711,6 @@ string ToString(ENUM_X_121_SMC_PROVIDERS value)
case X_121_SMC_PROVIDER_XSUPDEMOBS: case X_121_SMC_PROVIDER_XSUPDEMOBS:
result = X121SMCXSupDemOBSToken; result = X121SMCXSupDemOBSToken;
break; 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; result = X_121_SMC_PROVIDER_XSUPDEMOBS;
} }
else if (Contains(X121SMCXOBSToken, value))
{
result = X_121_SMC_PROVIDER_XOBS;
}
// //
return result; return result;
@@ -1678,7 +1678,7 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
// //
X121SMCStrategyXSupDemOBSSignalConditions &conditions, X121SMCStrategyXSupDemOBSSignalConditions &conditions,
// //
XC121SMCCycleHelper *triggerCycleHelper, // XC121SMCCycleHelper *triggerCycleHelper,
XC121SMCCycleHelper *decisionCycleHelper, XC121SMCCycleHelper *decisionCycleHelper,
XC121SMCCycleHelper *analyseCycleHelper, XC121SMCCycleHelper *analyseCycleHelper,
XC121SMCCycleHelper *verificationCycleHelper, XC121SMCCycleHelper *verificationCycleHelper,
@@ -1722,20 +1722,20 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
// //
// Trigger ... // Trigger ...
ENUM_XPOI_EVENTS triggerPoiEvents[]; // ENUM_XPOI_EVENTS triggerPoiEvents[];
ENUM_X_CYCLE_EVENTS triggerCycleEvents[]; // ENUM_X_CYCLE_EVENTS triggerCycleEvents[];
X121SMCCycleConditions triggerConditions; // X121SMCCycleConditions triggerConditions;
result = triggerCycleHelper.GetConditions( // result = triggerCycleHelper.GetConditions(
triggerCycleEvents, // triggerCycleEvents,
triggerPoiEvents, // triggerPoiEvents,
triggerConditions, // triggerConditions,
zIndex, // zIndex,
loopback // // loopback //
); // );
if (!result) // if (!result)
{ // {
return result; // return result;
} // }
// //
// Decision ... // Decision ...
@@ -1824,7 +1824,7 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
// //
// Cycles POI States ... // Cycles POI States ...
XPOIState triggerState = triggerConditions.state; // XPOIState triggerState = triggerConditions.state;
XPOIState decisionState = decisionConditions.state; XPOIState decisionState = decisionConditions.state;
XPOIState analyseState = analyseConditions.state; XPOIState analyseState = analyseConditions.state;
XPOIState verificationState = verificationConditions.state; XPOIState verificationState = verificationConditions.state;
@@ -1833,7 +1833,7 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
// //
// Cycle X121Conditions ... // Cycle X121Conditions ...
X121Conditions triggerXConditions = triggerConditions.x121Conditions; // X121Conditions triggerXConditions = triggerConditions.x121Conditions;
X121Conditions decisionXConditions = decisionConditions.x121Conditions; X121Conditions decisionXConditions = decisionConditions.x121Conditions;
X121Conditions analyseXConditions = analyseConditions.x121Conditions; X121Conditions analyseXConditions = analyseConditions.x121Conditions;
X121Conditions verificationXConditions = verificationConditions.x121Conditions; X121Conditions verificationXConditions = verificationConditions.x121Conditions;
@@ -1859,8 +1859,8 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
if (!result) if (!result)
{ {
// //
Clean(triggerPoiEvents); // Clean(triggerPoiEvents);
Clean(triggerCycleEvents); // Clean(triggerCycleEvents);
Clean(decisionPoiEvents); Clean(decisionPoiEvents);
Clean(decisionCycleEvents); Clean(decisionCycleEvents);
Clean(analysePoiEvents); Clean(analysePoiEvents);
@@ -1874,7 +1874,7 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
// //
visionState.Clean(); visionState.Clean();
triggerState.Clean(); // triggerState.Clean();
analyseState.Clean(); analyseState.Clean();
decisionZBar.Clean(); decisionZBar.Clean();
decisionCBar.Clean(); decisionCBar.Clean();
@@ -1883,10 +1883,10 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
visionConditions.Clean(); visionConditions.Clean();
visionXConditions.Clean(); visionXConditions.Clean();
verificationState.Clean(); verificationState.Clean();
triggerConditions.Clean(); // triggerConditions.Clean();
analyseConditions.Clean(); analyseConditions.Clean();
consolidationState.Clean(); consolidationState.Clean();
triggerXConditions.Clean(); // triggerXConditions.Clean();
analyseXConditions.Clean(); analyseXConditions.Clean();
decisionConditions.Clean(); decisionConditions.Clean();
decisionXConditions.Clean(); decisionXConditions.Clean();
@@ -1905,8 +1905,8 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
if (!result) if (!result)
{ {
// //
Clean(triggerPoiEvents); // Clean(triggerPoiEvents);
Clean(triggerCycleEvents); // Clean(triggerCycleEvents);
Clean(decisionPoiEvents); Clean(decisionPoiEvents);
Clean(decisionCycleEvents); Clean(decisionCycleEvents);
Clean(analysePoiEvents); Clean(analysePoiEvents);
@@ -1920,7 +1920,7 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
// //
visionState.Clean(); visionState.Clean();
triggerState.Clean(); // triggerState.Clean();
analyseState.Clean(); analyseState.Clean();
decisionZBar.Clean(); decisionZBar.Clean();
decisionCBar.Clean(); decisionCBar.Clean();
@@ -1929,10 +1929,10 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
visionConditions.Clean(); visionConditions.Clean();
visionXConditions.Clean(); visionXConditions.Clean();
verificationState.Clean(); verificationState.Clean();
triggerConditions.Clean(); // triggerConditions.Clean();
analyseConditions.Clean(); analyseConditions.Clean();
consolidationState.Clean(); consolidationState.Clean();
triggerXConditions.Clean(); // triggerXConditions.Clean();
analyseXConditions.Clean(); analyseXConditions.Clean();
decisionConditions.Clean(); decisionConditions.Clean();
decisionXConditions.Clean(); decisionXConditions.Clean();
@@ -1951,8 +1951,8 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
if (!result) if (!result)
{ {
// //
Clean(triggerPoiEvents); // Clean(triggerPoiEvents);
Clean(triggerCycleEvents); // Clean(triggerCycleEvents);
Clean(decisionPoiEvents); Clean(decisionPoiEvents);
Clean(decisionCycleEvents); Clean(decisionCycleEvents);
Clean(analysePoiEvents); Clean(analysePoiEvents);
@@ -1966,7 +1966,7 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
// //
visionState.Clean(); visionState.Clean();
triggerState.Clean(); // triggerState.Clean();
analyseState.Clean(); analyseState.Clean();
decisionZBar.Clean(); decisionZBar.Clean();
decisionCBar.Clean(); decisionCBar.Clean();
@@ -1975,10 +1975,10 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
visionConditions.Clean(); visionConditions.Clean();
visionXConditions.Clean(); visionXConditions.Clean();
verificationState.Clean(); verificationState.Clean();
triggerConditions.Clean(); // triggerConditions.Clean();
analyseConditions.Clean(); analyseConditions.Clean();
consolidationState.Clean(); consolidationState.Clean();
triggerXConditions.Clean(); // triggerXConditions.Clean();
analyseXConditions.Clean(); analyseXConditions.Clean();
decisionConditions.Clean(); decisionConditions.Clean();
decisionXConditions.Clean(); decisionXConditions.Clean();
@@ -2196,8 +2196,8 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
if (isDestroyed) if (isDestroyed)
{ {
// //
Clean(triggerPoiEvents); // Clean(triggerPoiEvents);
Clean(triggerCycleEvents); // Clean(triggerCycleEvents);
Clean(decisionPoiEvents); Clean(decisionPoiEvents);
Clean(decisionCycleEvents); Clean(decisionCycleEvents);
Clean(analysePoiEvents); Clean(analysePoiEvents);
@@ -2211,7 +2211,7 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
// //
visionState.Clean(); visionState.Clean();
triggerState.Clean(); // triggerState.Clean();
analyseState.Clean(); analyseState.Clean();
decisionZBar.Clean(); decisionZBar.Clean();
decisionCBar.Clean(); decisionCBar.Clean();
@@ -2220,10 +2220,10 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
visionConditions.Clean(); visionConditions.Clean();
visionXConditions.Clean(); visionXConditions.Clean();
verificationState.Clean(); verificationState.Clean();
triggerConditions.Clean(); // triggerConditions.Clean();
analyseConditions.Clean(); analyseConditions.Clean();
consolidationState.Clean(); consolidationState.Clean();
triggerXConditions.Clean(); // triggerXConditions.Clean();
analyseXConditions.Clean(); analyseXConditions.Clean();
decisionConditions.Clean(); decisionConditions.Clean();
decisionXConditions.Clean(); decisionXConditions.Clean();
@@ -2254,8 +2254,8 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
if (!result) if (!result)
{ {
// //
Clean(triggerPoiEvents); // Clean(triggerPoiEvents);
Clean(triggerCycleEvents); // Clean(triggerCycleEvents);
Clean(decisionPoiEvents); Clean(decisionPoiEvents);
Clean(decisionCycleEvents); Clean(decisionCycleEvents);
Clean(analysePoiEvents); Clean(analysePoiEvents);
@@ -2269,7 +2269,7 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
// //
visionState.Clean(); visionState.Clean();
triggerState.Clean(); // triggerState.Clean();
analyseState.Clean(); analyseState.Clean();
decisionZBar.Clean(); decisionZBar.Clean();
decisionCBar.Clean(); decisionCBar.Clean();
@@ -2278,10 +2278,10 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
visionConditions.Clean(); visionConditions.Clean();
visionXConditions.Clean(); visionXConditions.Clean();
verificationState.Clean(); verificationState.Clean();
triggerConditions.Clean(); // triggerConditions.Clean();
analyseConditions.Clean(); analyseConditions.Clean();
consolidationState.Clean(); consolidationState.Clean();
triggerXConditions.Clean(); // triggerXConditions.Clean();
analyseXConditions.Clean(); analyseXConditions.Clean();
decisionConditions.Clean(); decisionConditions.Clean();
decisionXConditions.Clean(); decisionXConditions.Clean();
@@ -2299,7 +2299,7 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
// //
// Re Draw Working Zone ... // Re Draw Working Zone ...
RemoveX121SMCXSupDemOBSWorkingZoneDraws(); // RemoveX121SMCXSupDemOBSWorkingZoneDraws();
DrawX121SMCXSupDemOBSWorkingZone( DrawX121SMCXSupDemOBSWorkingZone(
conditions, conditions,
visionCycleHelper.mPOIDrawer // visionCycleHelper.mPOIDrawer //
@@ -2440,8 +2440,8 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
if (!result) if (!result)
{ {
// //
Clean(triggerPoiEvents); // Clean(triggerPoiEvents);
Clean(triggerCycleEvents); // Clean(triggerCycleEvents);
Clean(decisionPoiEvents); Clean(decisionPoiEvents);
Clean(decisionCycleEvents); Clean(decisionCycleEvents);
Clean(analysePoiEvents); Clean(analysePoiEvents);
@@ -2455,7 +2455,7 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
// //
visionState.Clean(); visionState.Clean();
triggerState.Clean(); // triggerState.Clean();
analyseState.Clean(); analyseState.Clean();
decisionZBar.Clean(); decisionZBar.Clean();
decisionCBar.Clean(); decisionCBar.Clean();
@@ -2464,10 +2464,10 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
visionConditions.Clean(); visionConditions.Clean();
visionXConditions.Clean(); visionXConditions.Clean();
verificationState.Clean(); verificationState.Clean();
triggerConditions.Clean(); // triggerConditions.Clean();
analyseConditions.Clean(); analyseConditions.Clean();
consolidationState.Clean(); consolidationState.Clean();
triggerXConditions.Clean(); // triggerXConditions.Clean();
analyseXConditions.Clean(); analyseXConditions.Clean();
decisionConditions.Clean(); decisionConditions.Clean();
decisionXConditions.Clean(); decisionXConditions.Clean();
@@ -2613,8 +2613,8 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
Clean(fvgs); Clean(fvgs);
// //
Clean(triggerPoiEvents); // Clean(triggerPoiEvents);
Clean(triggerCycleEvents); // Clean(triggerCycleEvents);
Clean(decisionPoiEvents); Clean(decisionPoiEvents);
Clean(decisionCycleEvents); Clean(decisionCycleEvents);
Clean(analysePoiEvents); Clean(analysePoiEvents);
@@ -2628,7 +2628,7 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
// //
visionState.Clean(); visionState.Clean();
triggerState.Clean(); // triggerState.Clean();
analyseState.Clean(); analyseState.Clean();
decisionZBar.Clean(); decisionZBar.Clean();
decisionCBar.Clean(); decisionCBar.Clean();
@@ -2637,10 +2637,10 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
visionConditions.Clean(); visionConditions.Clean();
visionXConditions.Clean(); visionXConditions.Clean();
verificationState.Clean(); verificationState.Clean();
triggerConditions.Clean(); // triggerConditions.Clean();
analyseConditions.Clean(); analyseConditions.Clean();
consolidationState.Clean(); consolidationState.Clean();
triggerXConditions.Clean(); // triggerXConditions.Clean();
analyseXConditions.Clean(); analyseXConditions.Clean();
decisionConditions.Clean(); decisionConditions.Clean();
decisionXConditions.Clean(); decisionXConditions.Clean();
@@ -2728,8 +2728,8 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
Clean(fvgs); Clean(fvgs);
// //
Clean(triggerPoiEvents); // Clean(triggerPoiEvents);
Clean(triggerCycleEvents); // Clean(triggerCycleEvents);
Clean(decisionPoiEvents); Clean(decisionPoiEvents);
Clean(decisionCycleEvents); Clean(decisionCycleEvents);
Clean(analysePoiEvents); Clean(analysePoiEvents);
@@ -2743,7 +2743,7 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
// //
visionState.Clean(); visionState.Clean();
triggerState.Clean(); // triggerState.Clean();
analyseState.Clean(); analyseState.Clean();
decisionZBar.Clean(); decisionZBar.Clean();
decisionCBar.Clean(); decisionCBar.Clean();
@@ -2752,10 +2752,10 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
visionConditions.Clean(); visionConditions.Clean();
visionXConditions.Clean(); visionXConditions.Clean();
verificationState.Clean(); verificationState.Clean();
triggerConditions.Clean(); // triggerConditions.Clean();
analyseConditions.Clean(); analyseConditions.Clean();
consolidationState.Clean(); consolidationState.Clean();
triggerXConditions.Clean(); // triggerXConditions.Clean();
analyseXConditions.Clean(); analyseXConditions.Clean();
decisionConditions.Clean(); decisionConditions.Clean();
decisionXConditions.Clean(); decisionXConditions.Clean();
@@ -2776,8 +2776,8 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
Clean(fvgs); Clean(fvgs);
// //
Clean(triggerPoiEvents); // Clean(triggerPoiEvents);
Clean(triggerCycleEvents); // Clean(triggerCycleEvents);
Clean(decisionPoiEvents); Clean(decisionPoiEvents);
Clean(decisionCycleEvents); Clean(decisionCycleEvents);
Clean(analysePoiEvents); Clean(analysePoiEvents);
@@ -2791,16 +2791,16 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
// //
visionState.Clean(); visionState.Clean();
triggerState.Clean(); // triggerState.Clean();
analyseState.Clean(); analyseState.Clean();
decisionState.Clean(); decisionState.Clean();
visionConditions.Clean(); visionConditions.Clean();
visionXConditions.Clean(); visionXConditions.Clean();
verificationState.Clean(); verificationState.Clean();
triggerConditions.Clean(); // triggerConditions.Clean();
analyseConditions.Clean(); analyseConditions.Clean();
consolidationState.Clean(); consolidationState.Clean();
triggerXConditions.Clean(); // triggerXConditions.Clean();
analyseXConditions.Clean(); analyseXConditions.Clean();
decisionConditions.Clean(); decisionConditions.Clean();
decisionXConditions.Clean(); decisionXConditions.Clean();
@@ -3013,8 +3013,8 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
ZeroMemory(insideFVG); ZeroMemory(insideFVG);
// //
Clean(triggerPoiEvents); // Clean(triggerPoiEvents);
Clean(triggerCycleEvents); // Clean(triggerCycleEvents);
Clean(decisionPoiEvents); Clean(decisionPoiEvents);
Clean(decisionCycleEvents); Clean(decisionCycleEvents);
Clean(analysePoiEvents); Clean(analysePoiEvents);
@@ -3028,7 +3028,7 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
// //
visionState.Clean(); visionState.Clean();
triggerState.Clean(); // triggerState.Clean();
analyseState.Clean(); analyseState.Clean();
decisionZBar.Clean(); decisionZBar.Clean();
decisionCBar.Clean(); decisionCBar.Clean();
@@ -3037,10 +3037,10 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
visionConditions.Clean(); visionConditions.Clean();
visionXConditions.Clean(); visionXConditions.Clean();
verificationState.Clean(); verificationState.Clean();
triggerConditions.Clean(); // triggerConditions.Clean();
analyseConditions.Clean(); analyseConditions.Clean();
consolidationState.Clean(); consolidationState.Clean();
triggerXConditions.Clean(); // triggerXConditions.Clean();
analyseXConditions.Clean(); analyseXConditions.Clean();
decisionConditions.Clean(); decisionConditions.Clean();
decisionXConditions.Clean(); decisionXConditions.Clean();
@@ -3161,7 +3161,7 @@ bool DetectX121SMCXSupDemOBSSignalTrigger(
string _symbol, string _symbol,
ENUM_TIMEFRAMES _period, ENUM_TIMEFRAMES _period,
// //
XC121SMCCycleHelper *triggerCycleHelper, // XC121SMCCycleHelper *triggerCycleHelper,
XC121SMCCycleHelper *decisionCycleHelper, XC121SMCCycleHelper *decisionCycleHelper,
XC121SMCCycleHelper *analyseCycleHelper, XC121SMCCycleHelper *analyseCycleHelper,
XC121SMCCycleHelper *verificationCycleHelper, XC121SMCCycleHelper *verificationCycleHelper,
@@ -3459,7 +3459,7 @@ bool DetectX121SMCXSupDemOBSSignalTrigger(
bool DetectX121SMCXSupDemOBSGuards( bool DetectX121SMCXSupDemOBSGuards(
X121SMCGuard &guards[], X121SMCGuard &guards[],
const XPosition &positions[], const XPosition &positions[],
XC121SMCCycleHelper *triggerCycleHelper, // XC121SMCCycleHelper *triggerCycleHelper,
XC121SMCCycleHelper *decisionCycleHelper, XC121SMCCycleHelper *decisionCycleHelper,
XC121SMCCycleHelper *analyseCycleHelper, XC121SMCCycleHelper *analyseCycleHelper,
XC121SMCCycleHelper *verificationCycleHelper, XC121SMCCycleHelper *verificationCycleHelper,
@@ -3473,28 +3473,28 @@ bool DetectX121SMCXSupDemOBSGuards(
// //
string provider = ToString(X_121_SMC_PROVIDER_XSUPDEMOBS); string provider = ToString(X_121_SMC_PROVIDER_XSUPDEMOBS);
// // //
result = DetectX121SMCGuards( // result = DetectX121SMCGuards(
provider, // provider,
guards, // guards,
positions, // positions,
triggerCycleHelper, // // triggerCycleHelper,
decisionCycleHelper, // decisionCycleHelper,
analyseCycleHelper, // analyseCycleHelper,
verificationCycleHelper, // verificationCycleHelper,
consolidationCycleHelper, // consolidationCycleHelper,
visionCycleHelper, // visionCycleHelper,
// // //
true, // CloseOnTPNear Guard ... // true, // CloseOnTPNear Guard ...
true, // CloseLongsOnBearishTrend Guard ... // true, // CloseLongsOnBearishTrend Guard ...
true, // CloseShortsOnBullishTrend Guard ... // true, // CloseShortsOnBullishTrend Guard ...
true, // CloseAllWeekend Guard ... // true, // CloseAllWeekend Guard ...
true, // PartialCloseOnTrendChange Guard ... // true, // PartialCloseOnTrendChange Guard ...
true, // TrailStop Guard ... // true, // TrailStop Guard ...
true, // TrailTarget Guard ... // true, // TrailTarget Guard ...
true // Hedge Guard ... // true // Hedge Guard ...
// // //
); // );
// //
return result; return result;
+52 -300
View File
@@ -27,7 +27,6 @@
#include "../Classes/x-121.smc.market.cycle.helper.class.mq5" #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" #include "../Signals/x-121.smc.xsupdemobs.signal.lib.mq5"
// //
@@ -42,7 +41,6 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
public: public:
// //
// Props ... // Props ...
bool useXOBSSignal;
bool useXSupDemOBSSignal; bool useXSupDemOBSSignal;
// //
@@ -104,11 +102,10 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
void Destroy() override void Destroy() override
{ {
// //
Clean(mX121SMCXOBSConditionsCollection);
Clean(mX121SMCXSupDemOBSConditionsCollection); Clean(mX121SMCXSupDemOBSConditionsCollection);
// //
ZeroMemory(mTriggerCycleHelper); // ZeroMemory(mTriggerCycleHelper);
ZeroMemory(mDecisionCycleHelper); ZeroMemory(mDecisionCycleHelper);
ZeroMemory(mAnalyseCycleHelper); ZeroMemory(mAnalyseCycleHelper);
ZeroMemory(mVerificationCycleHelper); ZeroMemory(mVerificationCycleHelper);
@@ -116,7 +113,7 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
ZeroMemory(mVisionCycleHelper); ZeroMemory(mVisionCycleHelper);
// //
delete mTriggerCycleHelper; // delete mTriggerCycleHelper;
delete mDecisionCycleHelper; delete mDecisionCycleHelper;
delete mAnalyseCycleHelper; delete mAnalyseCycleHelper;
delete mVerificationCycleHelper; delete mVerificationCycleHelper;
@@ -204,18 +201,8 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
bool hasSignal = false; bool hasSignal = false;
// //
bool hasXOBSSignal = false;
bool hasXSupDemOBSSignal = false; bool hasXSupDemOBSSignal = false;
//
// XOBS Signal ...
if (useXOBSSignal && !hasSignal)
{
//
hasXOBSSignal = DetectXOBSSignal(conditions);
hasSignal = hasXOBSSignal;
}
// //
// XSupDemOBS Signal ... // XSupDemOBS Signal ...
if (useXSupDemOBSSignal && !hasSignal) if (useXSupDemOBSSignal && !hasSignal)
@@ -405,23 +392,6 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
return result; return result;
} }
//
// XOBS Guard Detection ...
if (useXOBSSignal)
{
//
bool hasGuard = DetectX121SMCXOBSGuards(
guards,
positions,
mTriggerCycleHelper,
mDecisionCycleHelper,
mAnalyseCycleHelper,
mVerificationCycleHelper,
mConsolidationCycleHelper,
mVisionCycleHelper //
);
}
// //
// XSupDemOBS Guard Detection ... // XSupDemOBS Guard Detection ...
if (useXSupDemOBSSignal) if (useXSupDemOBSSignal)
@@ -430,7 +400,7 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
bool hasGuard = DetectX121SMCXSupDemOBSGuards( bool hasGuard = DetectX121SMCXSupDemOBSGuards(
guards, guards,
positions, positions,
mTriggerCycleHelper, // mTriggerCycleHelper,
mDecisionCycleHelper, mDecisionCycleHelper,
mAnalyseCycleHelper, mAnalyseCycleHelper,
mVerificationCycleHelper, mVerificationCycleHelper,
@@ -464,7 +434,7 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
// Props ... // Props ...
// //
XC121SMCCycleHelper *mTriggerCycleHelper; // XC121SMCCycleHelper *mTriggerCycleHelper;
XC121SMCCycleHelper *mDecisionCycleHelper; XC121SMCCycleHelper *mDecisionCycleHelper;
XC121SMCCycleHelper *mAnalyseCycleHelper; XC121SMCCycleHelper *mAnalyseCycleHelper;
XC121SMCCycleHelper *mVerificationCycleHelper; XC121SMCCycleHelper *mVerificationCycleHelper;
@@ -477,223 +447,6 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
// //
// Signalling Functions ... // 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 ... // XSupDemOBS Signal ...
@@ -778,7 +531,7 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
symbol, symbol,
period, period,
mX121SMCXSupDemOBSConditions, mX121SMCXSupDemOBSConditions,
mTriggerCycleHelper, // mTriggerCycleHelper,
mDecisionCycleHelper, mDecisionCycleHelper,
mAnalyseCycleHelper, mAnalyseCycleHelper,
mVerificationCycleHelper, mVerificationCycleHelper,
@@ -835,7 +588,7 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
mTmpConditions[i], mTmpConditions[i],
symbol, symbol,
period, period,
mTriggerCycleHelper, // mTriggerCycleHelper,
mDecisionCycleHelper, mDecisionCycleHelper,
mAnalyseCycleHelper, mAnalyseCycleHelper,
mVerificationCycleHelper, mVerificationCycleHelper,
@@ -928,7 +681,6 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
void InitialHelpers() void InitialHelpers()
{ {
// //
useXOBSSignal = false;
useXSupDemOBSSignal = true; useXSupDemOBSSignal = true;
// //
@@ -1049,60 +801,60 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
// //
// Trigger Cycle ... // Trigger Cycle ...
mTriggerCycleHelper = new XC121SMCCycleHelper(); // mTriggerCycleHelper = new XC121SMCCycleHelper();
isInited = mTriggerCycleHelper.Init( // isInited = mTriggerCycleHelper.Init(
symbol, // symbol,
PERIOD_M1, // PERIOD_M1,
x121Inputs, // x121Inputs,
requiredPOIS // // requiredPOIS //
); // );
if (isInited) // if (isInited)
{ // {
// // //
// Configure POI Drawer ... // // Configure POI Drawer ...
color bullishColor = clrYellowGreen; // color bullishColor = clrYellowGreen;
color bearishColor = clrChocolate; // color bearishColor = clrChocolate;
// // //
// Bars ... // // Bars ...
mTriggerCycleHelper.mPOIDrawer.BarBullishColor(bullishColor); // mTriggerCycleHelper.mPOIDrawer.BarBullishColor(bullishColor);
mTriggerCycleHelper.mPOIDrawer.BarBearishColor(bearishColor); // mTriggerCycleHelper.mPOIDrawer.BarBearishColor(bearishColor);
// // //
// Swings ... // // Swings ...
mTriggerCycleHelper.mPOIDrawer.SwingLowColor(bullishColor); // mTriggerCycleHelper.mPOIDrawer.SwingLowColor(bullishColor);
mTriggerCycleHelper.mPOIDrawer.SwingHighColor(bearishColor); // mTriggerCycleHelper.mPOIDrawer.SwingHighColor(bearishColor);
// // //
// Momentum ... // // Momentum ...
mTriggerCycleHelper.mPOIDrawer.BullishMomentumBarColor(bullishColor); // mTriggerCycleHelper.mPOIDrawer.BullishMomentumBarColor(bullishColor);
mTriggerCycleHelper.mPOIDrawer.BearishMomentumBarColor(bearishColor); // mTriggerCycleHelper.mPOIDrawer.BearishMomentumBarColor(bearishColor);
// // //
// Rejection ... // // Rejection ...
mTriggerCycleHelper.mPOIDrawer.BullishRejectionBarColor(bullishColor); // mTriggerCycleHelper.mPOIDrawer.BullishRejectionBarColor(bullishColor);
mTriggerCycleHelper.mPOIDrawer.BearishRejectionBarColor(bearishColor); // mTriggerCycleHelper.mPOIDrawer.BearishRejectionBarColor(bearishColor);
// // //
// Support and Resistance ... // // Support and Resistance ...
mTriggerCycleHelper.mPOIDrawer.SupportZoneColor(bullishColor); // mTriggerCycleHelper.mPOIDrawer.SupportZoneColor(bullishColor);
mTriggerCycleHelper.mPOIDrawer.ResistanceZoneColor(bearishColor); // mTriggerCycleHelper.mPOIDrawer.ResistanceZoneColor(bearishColor);
// // //
// Demand and Supply ... // // Demand and Supply ...
mTriggerCycleHelper.mPOIDrawer.DemandZoneColor(bullishColor); // mTriggerCycleHelper.mPOIDrawer.DemandZoneColor(bullishColor);
mTriggerCycleHelper.mPOIDrawer.SupplyZoneColor(bearishColor); // mTriggerCycleHelper.mPOIDrawer.SupplyZoneColor(bearishColor);
// // //
// Order Blocks ... // // Order Blocks ...
mTriggerCycleHelper.mPOIDrawer.BullishOrderBlockColor(bullishColor); // mTriggerCycleHelper.mPOIDrawer.BullishOrderBlockColor(bullishColor);
mTriggerCycleHelper.mPOIDrawer.BearishOrderBlockColor(bearishColor); // mTriggerCycleHelper.mPOIDrawer.BearishOrderBlockColor(bearishColor);
// // //
// Fair Value Gaps ... // // Fair Value Gaps ...
mTriggerCycleHelper.mPOIDrawer.BullishFVGColor(bullishColor); // mTriggerCycleHelper.mPOIDrawer.BullishFVGColor(bullishColor);
mTriggerCycleHelper.mPOIDrawer.BearishFVGColor(bearishColor); // mTriggerCycleHelper.mPOIDrawer.BearishFVGColor(bearishColor);
} // }
// //
// Decision Cycle ... // Decision Cycle ...