last ...
This commit is contained in:
@@ -28,6 +28,7 @@
|
||||
|
||||
//
|
||||
#include "../Signals/x-121.smc.xsupdemobs.signal.class.mq5"
|
||||
#include "../Signals/x-121.smc.xwz.signal.class.mq5"
|
||||
|
||||
//
|
||||
// Definitions ...
|
||||
@@ -41,8 +42,10 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
|
||||
public:
|
||||
//
|
||||
// Props ...
|
||||
bool useXWZSignal;
|
||||
bool useXSupDemOBSSignal;
|
||||
XCX121SMCXSupDemOBSSignalDetector *mXSupDemONSSignalDetector;
|
||||
XCX121SMCXWZSignalDetector *mXWZSignalDetector;
|
||||
XCX121SMCXSupDemOBSSignalDetector *mXSupDemOBSSignalDetector;
|
||||
|
||||
//
|
||||
// Constructor(s) ...
|
||||
@@ -56,7 +59,10 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
|
||||
{
|
||||
//
|
||||
InitialHelpers();
|
||||
mXSupDemONSSignalDetector = new XCX121SMCXSupDemOBSSignalDetector();
|
||||
|
||||
//
|
||||
mXWZSignalDetector = new XCX121SMCXWZSignalDetector();
|
||||
mXSupDemOBSSignalDetector = new XCX121SMCXSupDemOBSSignalDetector();
|
||||
}
|
||||
|
||||
//
|
||||
@@ -104,12 +110,6 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
|
||||
*/
|
||||
void Destroy() override
|
||||
{
|
||||
//
|
||||
ZeroMemory(mDecisionCycleHelper);
|
||||
ZeroMemory(mAnalyseCycleHelper);
|
||||
ZeroMemory(mConsolidationCycleHelper);
|
||||
ZeroMemory(mVisionCycleHelper);
|
||||
|
||||
//
|
||||
delete mDecisionCycleHelper;
|
||||
delete mAnalyseCycleHelper;
|
||||
@@ -117,8 +117,18 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
|
||||
delete mVisionCycleHelper;
|
||||
|
||||
//
|
||||
ZeroMemory(mXSupDemONSSignalDetector);
|
||||
delete mXSupDemONSSignalDetector;
|
||||
ZeroMemory(mDecisionCycleHelper);
|
||||
ZeroMemory(mAnalyseCycleHelper);
|
||||
ZeroMemory(mConsolidationCycleHelper);
|
||||
ZeroMemory(mVisionCycleHelper);
|
||||
|
||||
//
|
||||
delete mXWZSignalDetector;
|
||||
ZeroMemory(mXWZSignalDetector);
|
||||
|
||||
//
|
||||
delete mXSupDemOBSSignalDetector;
|
||||
ZeroMemory(mXSupDemOBSSignalDetector);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -197,8 +207,22 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
|
||||
bool hasSignal = false;
|
||||
|
||||
//
|
||||
bool hasXWZSignal = false;
|
||||
bool hasXSupDemOBSSignal = false;
|
||||
|
||||
//
|
||||
// XSupDemOBS Signal ...
|
||||
X121SMCStrategyXWZSignalConditions mXWZConditions;
|
||||
if (useXWZSignal && !hasSignal)
|
||||
{
|
||||
//
|
||||
hasXWZSignal = DetectXWZSignal(
|
||||
conditions,
|
||||
mXWZConditions //
|
||||
);
|
||||
hasSignal = hasXWZSignal;
|
||||
}
|
||||
|
||||
//
|
||||
// XSupDemOBS Signal ...
|
||||
X121SMCStrategyXSupDemOBSSignalConditions mXSupDemOBSConditions;
|
||||
@@ -376,6 +400,20 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
|
||||
signal.trailSL = true;
|
||||
signal.trailSLStartOnReachTPLevel = 3;
|
||||
signal.fullTPLevel = signal.GetRiskRewardRatio();
|
||||
|
||||
// //
|
||||
// mXSupDemOBSSignalDetector.RemoveDraws();
|
||||
// mXSupDemOBSSignalDetector.DrawConditions(
|
||||
// mXSupDemOBSConditions,
|
||||
// mVisionCycleHelper.mPOIDrawer //
|
||||
// );
|
||||
|
||||
// //
|
||||
// mXSupDemOBSSignalDetector.RemoveWorkingZoneDraws();
|
||||
// mXSupDemOBSSignalDetector.DrawWorkingZone(
|
||||
// mXSupDemOBSConditions,
|
||||
// mVisionCycleHelper.mPOIDrawer //
|
||||
// );
|
||||
}
|
||||
|
||||
//
|
||||
@@ -430,6 +468,72 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
|
||||
//
|
||||
Clean(guards);
|
||||
|
||||
//
|
||||
int count = ArraySize(positions);
|
||||
result = IsValidSize(count);
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// XWZ Guard Detection ...
|
||||
if (useXWZSignal)
|
||||
{
|
||||
//
|
||||
X121SMCGuard xwzGuards[];
|
||||
bool hasGuard = mXWZSignalDetector.DetectGuards(
|
||||
xwzGuards,
|
||||
positions,
|
||||
mDecisionCycleHelper,
|
||||
mAnalyseCycleHelper,
|
||||
mConsolidationCycleHelper,
|
||||
mVisionCycleHelper //
|
||||
);
|
||||
|
||||
//
|
||||
if (hasGuard)
|
||||
{
|
||||
//
|
||||
Copy(
|
||||
xwzGuards,
|
||||
guards,
|
||||
false //
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// XSupDemOBS Guard Detection ...
|
||||
if (useXSupDemOBSSignal)
|
||||
{
|
||||
//
|
||||
X121SMCGuard xsupDemOBSGuards[];
|
||||
bool hasGuard = mXSupDemOBSSignalDetector.DetectGuards(
|
||||
xsupDemOBSGuards,
|
||||
positions,
|
||||
mDecisionCycleHelper,
|
||||
mAnalyseCycleHelper,
|
||||
mConsolidationCycleHelper,
|
||||
mVisionCycleHelper //
|
||||
);
|
||||
|
||||
//
|
||||
if (hasGuard)
|
||||
{
|
||||
//
|
||||
Copy(
|
||||
xsupDemOBSGuards,
|
||||
guards,
|
||||
false //
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
count = ArraySize(guards);
|
||||
result = IsValidSize(count);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
@@ -439,53 +543,9 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
|
||||
*/
|
||||
void DoUnwaitedTicksWork() override
|
||||
{
|
||||
//
|
||||
// Update All Cycle Helpers ...
|
||||
int zIndex = 0;
|
||||
int loopback = 7;
|
||||
|
||||
//
|
||||
// Decision ...
|
||||
mDecisionCycleHelper.Update();
|
||||
|
||||
// //
|
||||
// // Analyse ...
|
||||
// ENUM_XPOI_EVENTS analysePoiEvents[];
|
||||
// ENUM_X_CYCLE_EVENTS analyseCycleEvents[];
|
||||
// X121SMCCycleConditions analyseConditions;
|
||||
// mAnalyseCycleHelper.GetConditions(
|
||||
// analyseCycleEvents,
|
||||
// analysePoiEvents,
|
||||
// analyseConditions,
|
||||
// zIndex,
|
||||
// loopback //
|
||||
// );
|
||||
|
||||
// //
|
||||
// // Consolidation ...
|
||||
// ENUM_XPOI_EVENTS consolidationPoiEvents[];
|
||||
// ENUM_X_CYCLE_EVENTS consolidationCycleEvents[];
|
||||
// X121SMCCycleConditions consolidationConditions;
|
||||
// mConsolidationCycleHelper.GetConditions(
|
||||
// consolidationCycleEvents,
|
||||
// consolidationPoiEvents,
|
||||
// consolidationConditions,
|
||||
// zIndex,
|
||||
// loopback //
|
||||
// );
|
||||
|
||||
// //
|
||||
// // Vision ...
|
||||
// ENUM_XPOI_EVENTS visionPoiEvents[];
|
||||
// ENUM_X_CYCLE_EVENTS visionCycleEvents[];
|
||||
// X121SMCCycleConditions visionConditions;
|
||||
// mVisionCycleHelper.GetConditions(
|
||||
// visionCycleEvents,
|
||||
// visionPoiEvents,
|
||||
// visionConditions,
|
||||
// zIndex,
|
||||
// loopback //
|
||||
// );
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -519,6 +579,240 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
|
||||
//
|
||||
// Signalling Functions ...
|
||||
|
||||
//
|
||||
// XWZ Signal ...
|
||||
bool DetectXWZSignal(
|
||||
X121SMCStrategyConditions &conditions,
|
||||
X121SMCStrategyXWZSignalConditions &xSupDemOBSConditions //
|
||||
)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
// Validate Cycle Helpers ...
|
||||
result =
|
||||
//
|
||||
mVisionCycleHelper != NULL &&
|
||||
mAnalyseCycleHelper != NULL &&
|
||||
mDecisionCycleHelper != NULL &&
|
||||
mConsolidationCycleHelper != NULL
|
||||
//
|
||||
;
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
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_XSUPDEMOBS;
|
||||
string providerStr = ToString(provider);
|
||||
|
||||
//
|
||||
// Detect Setup Conditions ...
|
||||
datetime setupTime = mXWZSignalDetector.mConditions.setupTime;
|
||||
bool isSetuped = mXWZSignalDetector.mConditions.IsSetuped();
|
||||
ENUM_X_DIRECTION setupDir = mXWZSignalDetector.mConditions.dir;
|
||||
if (!isSetuped)
|
||||
{
|
||||
//
|
||||
// Detect Signal Setup ...
|
||||
isSetuped = mXWZSignalDetector.DetectSignalSetup(
|
||||
symbol,
|
||||
period,
|
||||
mDecisionCycleHelper,
|
||||
mAnalyseCycleHelper,
|
||||
mConsolidationCycleHelper,
|
||||
mVisionCycleHelper //
|
||||
);
|
||||
|
||||
//
|
||||
setupDir = mXWZSignalDetector.mConditions.dir;
|
||||
setupTime = mXWZSignalDetector.mConditions.setupTime;
|
||||
|
||||
//
|
||||
if (isSetuped)
|
||||
{
|
||||
//
|
||||
int items = mXWZSignalDetector
|
||||
.AddConditionsIfNotExists();
|
||||
|
||||
//
|
||||
mXWZSignalDetector.mConditions.Clean();
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
int conditionsCount = ArraySize(mXWZSignalDetector.mConditionsCollection);
|
||||
result = IsValidSize(conditionsCount);
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Looking For Conditions ...
|
||||
int selectedIndex = 0;
|
||||
X121SMCStrategyXWZSignalConditions mTmpConditions[];
|
||||
Copy(
|
||||
mXWZSignalDetector.mConditionsCollection,
|
||||
mTmpConditions //
|
||||
);
|
||||
X121SMCStrategyXWZSignalConditions 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 = mXWZSignalDetector
|
||||
.DetectSignalTrigger(
|
||||
mTmpConditions[i],
|
||||
symbol,
|
||||
period,
|
||||
mDecisionCycleHelper,
|
||||
mAnalyseCycleHelper,
|
||||
mConsolidationCycleHelper,
|
||||
mVisionCycleHelper //
|
||||
);
|
||||
|
||||
//
|
||||
result = canTrigger;
|
||||
if (!result)
|
||||
{
|
||||
//
|
||||
bool isISetuped = mTmpConditions[i].IsSetuped();
|
||||
if (!isISetuped)
|
||||
{
|
||||
//
|
||||
ArrayRemove(
|
||||
mXWZSignalDetector.mConditionsCollection,
|
||||
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(
|
||||
mXWZSignalDetector.mConditionsCollection,
|
||||
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;
|
||||
|
||||
//
|
||||
xSupDemOBSConditions = mConditions;
|
||||
|
||||
//
|
||||
mConditions.Clean();
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// XSupDemOBS Signal ...
|
||||
bool DetectXSupDemOBSSignal(
|
||||
@@ -607,14 +901,14 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
|
||||
|
||||
//
|
||||
// Detect Setup Conditions ...
|
||||
datetime setupTime = mXSupDemONSSignalDetector.mConditions.setupTime;
|
||||
bool isSetuped = mXSupDemONSSignalDetector.mConditions.IsSetuped();
|
||||
ENUM_X_DIRECTION setupDir = mXSupDemONSSignalDetector.mConditions.dir;
|
||||
datetime setupTime = mXSupDemOBSSignalDetector.mConditions.setupTime;
|
||||
bool isSetuped = mXSupDemOBSSignalDetector.mConditions.IsSetuped();
|
||||
ENUM_X_DIRECTION setupDir = mXSupDemOBSSignalDetector.mConditions.dir;
|
||||
if (!isSetuped)
|
||||
{
|
||||
//
|
||||
// Detect Signal Setup ...
|
||||
isSetuped = mXSupDemONSSignalDetector.DetectSignalSetup(
|
||||
isSetuped = mXSupDemOBSSignalDetector.DetectSignalSetup(
|
||||
symbol,
|
||||
period,
|
||||
mDecisionCycleHelper,
|
||||
@@ -624,23 +918,23 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
|
||||
);
|
||||
|
||||
//
|
||||
setupDir = mXSupDemONSSignalDetector.mConditions.dir;
|
||||
setupTime = mXSupDemONSSignalDetector.mConditions.setupTime;
|
||||
setupDir = mXSupDemOBSSignalDetector.mConditions.dir;
|
||||
setupTime = mXSupDemOBSSignalDetector.mConditions.setupTime;
|
||||
|
||||
//
|
||||
if (isSetuped)
|
||||
{
|
||||
//
|
||||
int items = mXSupDemONSSignalDetector
|
||||
int items = mXSupDemOBSSignalDetector
|
||||
.AddConditionsIfNotExists();
|
||||
|
||||
//
|
||||
mXSupDemONSSignalDetector.mConditions.Clean();
|
||||
mXSupDemOBSSignalDetector.mConditions.Clean();
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
int conditionsCount = ArraySize(mXSupDemONSSignalDetector.mConditionsCollection);
|
||||
int conditionsCount = ArraySize(mXSupDemOBSSignalDetector.mConditionsCollection);
|
||||
result = IsValidSize(conditionsCount);
|
||||
if (!result)
|
||||
{
|
||||
@@ -652,7 +946,7 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
|
||||
int selectedIndex = 0;
|
||||
X121SMCStrategyXSupDemOBSSignalConditions mTmpConditions[];
|
||||
Copy(
|
||||
mXSupDemONSSignalDetector.mConditionsCollection,
|
||||
mXSupDemOBSSignalDetector.mConditionsCollection,
|
||||
mTmpConditions //
|
||||
);
|
||||
X121SMCStrategyXSupDemOBSSignalConditions mConditions;
|
||||
@@ -666,7 +960,7 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
|
||||
{
|
||||
//
|
||||
// Detect Signal Trigger ...
|
||||
canTrigger = mXSupDemONSSignalDetector
|
||||
canTrigger = mXSupDemOBSSignalDetector
|
||||
.DetectSignalTrigger(
|
||||
mTmpConditions[i],
|
||||
symbol,
|
||||
@@ -687,7 +981,7 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
|
||||
{
|
||||
//
|
||||
ArrayRemove(
|
||||
mXSupDemONSSignalDetector.mConditionsCollection,
|
||||
mXSupDemOBSSignalDetector.mConditionsCollection,
|
||||
i,
|
||||
1 //
|
||||
);
|
||||
@@ -720,7 +1014,7 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
|
||||
//
|
||||
// Remove Selected Index from Main Collection ...
|
||||
ArrayRemove(
|
||||
mXSupDemONSSignalDetector.mConditionsCollection,
|
||||
mXSupDemOBSSignalDetector.mConditionsCollection,
|
||||
selectedIndex,
|
||||
1 //
|
||||
);
|
||||
@@ -768,7 +1062,8 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
|
||||
void InitialHelpers()
|
||||
{
|
||||
//
|
||||
useXSupDemOBSSignal = true;
|
||||
useXWZSignal = true;
|
||||
useXSupDemOBSSignal = false;
|
||||
|
||||
//
|
||||
string symbol = GetSymbol();
|
||||
|
||||
Reference in New Issue
Block a user