try to remove matd and put XMC instead it for controllingbehaviour ...

This commit is contained in:
2024-06-21 16:52:05 +03:30
parent fdf5442255
commit 238941960a
7 changed files with 768 additions and 126 deletions
+76 -77
View File
@@ -28,6 +28,7 @@
#include "../Classes/x-saherelm.xalert.class.mq5"
//
#include "../Helpers/x-saherelm.xmc.helper.mq5"
#include "../Helpers/x-saherelm.xpv.helper.mq5"
#include "../Helpers/x-saherelm.xtd.helper.mq5"
#include "../Helpers/x-saherelm.xhk.helper.mq5"
@@ -40,7 +41,6 @@
#include "../Helpers/x-saherelm.xasct.helper.mq5"
#include "../Helpers/x-saherelm.xsslc.helper.mq5"
#include "../Helpers/x-saherelm.xhull.helper.mq5"
#include "../Helpers/x-saherelm.xmatd.helper.mq5"
#include "../Helpers/x-saherelm.xadxtd.helper.mq5"
//
@@ -204,6 +204,7 @@ struct X121SetupInputs
//
// Helpers Inputs ...
XMCInputs mcInputs; // XMC Inputs
XPVInputs pvInputs; // XPV Inputs
XTDInputs tdInputs; // XTD Inputs
XHKInputs hkInputs; // XHK Inputs
@@ -213,7 +214,6 @@ struct X121SetupInputs
XMRBInputs mrbInputs; // XMRB Inputs
XOSCInputs oscInputs; // XOSC Inputs
XVLMInputs vlmInputs; // XVLM Inputs
XMATDInputs matdInputs; // XMATD Inputs
XASCTInputs asctInputs; // XASCT Inputs
XSSLCInputs sslcInputs; // XSSLC Inputs
XHULLInputs hullInputs; // XHULL Inputs
@@ -241,6 +241,7 @@ struct X121SetupInputs
bool Init(
string _symbol, // Symbol
ENUM_TIMEFRAMES _period, // Time Frame
XMCInputs &_mcInputs, // XMC Inputs
XPVInputs &_pvInputs, // XPV Inputs
XTDInputs &_tdInputs, // XTD Inputs
XHKInputs &_hkInputs, // XHK Inputs
@@ -250,7 +251,6 @@ struct X121SetupInputs
XMRBInputs &_mrbInputs, // XMRB Inputs
XOSCInputs &_oscInputs, // XOSC Inputs
XVLMInputs &_vlmInputs, // XVLM Inputs
XMATDInputs &_matdInputs, // XMATD Inputs
XASCTInputs &_asctInputs, // XASCT Inputs
XSSLCInputs &_sslcInputs, // XSSLC Inputs
XHULLInputs &_hullInputs, // XHULL Inputs
@@ -263,6 +263,7 @@ struct X121SetupInputs
//
// Helpers Inputs ...
this.mcInputs = _mcInputs;
this.pvInputs = _pvInputs;
this.tdInputs = _tdInputs;
this.hkInputs = _hkInputs;
@@ -272,7 +273,6 @@ struct X121SetupInputs
this.mrbInputs = _mrbInputs;
this.oscInputs = _oscInputs;
this.vlmInputs = _vlmInputs;
this.matdInputs = _matdInputs;
this.asctInputs = _asctInputs;
this.sslcInputs = _sslcInputs;
this.hullInputs = _hullInputs;
@@ -297,6 +297,7 @@ struct X121SetupInputs
period = NULL;
//
mcInputs.Clean();
pvInputs.Clean();
tdInputs.Clean();
hkInputs.Clean();
@@ -306,7 +307,6 @@ struct X121SetupInputs
mrbInputs.Clean();
oscInputs.Clean();
vlmInputs.Clean();
matdInputs.Clean();
asctInputs.Clean();
sslcInputs.Clean();
hullInputs.Clean();
@@ -318,6 +318,7 @@ struct X121SetupInputs
void Default()
{
//
mcInputs.Default();
pvInputs.Default();
tdInputs.Default();
hkInputs.Default();
@@ -327,7 +328,6 @@ struct X121SetupInputs
mrbInputs.Default();
oscInputs.Default();
vlmInputs.Default();
matdInputs.Default();
asctInputs.Default();
sslcInputs.Default();
hullInputs.Default();
@@ -417,7 +417,7 @@ struct X121SetupInputs
}
//
result = matdInputs.IsValid();
result = mcInputs.IsValid();
if (!result)
{
return result;
@@ -468,6 +468,7 @@ struct X121SetupConditions
//
// Conditions ...
XMCConditions mcConditions;
XPVConditions pvConditions;
XTDConditions tdConditions;
XHKConditions hkConditions;
@@ -476,7 +477,6 @@ struct X121SetupConditions
XSTRConditions strConditions;
XMRBConditions mrbConditions;
XVLMConditions vlmConditions;
XMATDConditions matdConditions;
XASCTConditions asctConditions;
XSSLCConditions sslcConditions;
XHULLConditions hullConditions;
@@ -508,6 +508,7 @@ struct X121SetupConditions
Clean(macdSignal);
//
mcConditions.Clean();
tdConditions.Clean();
hkConditions.Clean();
cheConditions.Clean();
@@ -515,7 +516,6 @@ struct X121SetupConditions
strConditions.Clean();
mrbConditions.Clean();
vlmConditions.Clean();
matdConditions.Clean();
asctConditions.Clean();
sslcConditions.Clean();
hullConditions.Clean();
@@ -537,7 +537,7 @@ struct X121SetupConditions
double tempBearishScore = 0;
//
matdConditions.GenerateScore(
mcConditions.GenerateScore(
tempBullishScore,
tempBearishScore //
);
@@ -681,6 +681,7 @@ struct X121SetupConditions
//
string pvSummary = pvConditions.GenerateSummary(false, true, false, ignoreFalseConditions);
string mcSummary = mcConditions.GenerateSummary(false, true, false, ignoreFalseConditions);
string tdSummary = tdConditions.GenerateSummary(false, true, false, ignoreFalseConditions);
string hkSummary = hkConditions.GenerateSummary(false, true, false, ignoreFalseConditions);
string strSummary = strConditions.GenerateSummary(false, true, false, ignoreFalseConditions);
@@ -688,7 +689,6 @@ struct X121SetupConditions
string ichSummary = ichConditions.GenerateSummary(false, true, false, ignoreFalseConditions);
string mrbSummary = mrbConditions.GenerateSummary(false, true, false, ignoreFalseConditions);
string vlmSummary = vlmConditions.GenerateSummary(false, true, false, ignoreFalseConditions);
string matdSummary = matdConditions.GenerateSummary(false, true, false, ignoreFalseConditions);
string asctSummary = asctConditions.GenerateSummary(false, true, false, ignoreFalseConditions);
string sslcSummary = sslcConditions.GenerateSummary(false, true, false, ignoreFalseConditions);
string hullSummary = hullConditions.GenerateSummary(false, true, false, ignoreFalseConditions);
@@ -698,6 +698,7 @@ struct X121SetupConditions
string conditionsStr =
//
pvSummary + separator +
mcSummary + separator +
tdSummary + separator +
hkSummary + separator +
ichSummary + separator +
@@ -708,7 +709,6 @@ struct X121SetupConditions
asctSummary + separator +
sslcSummary + separator +
hullSummary + separator +
matdSummary + separator +
adxtdSummary + separator +
""
//
@@ -888,10 +888,10 @@ struct X121SignalGenerator
bool long1 =
//
// Starting Conditions ...
conditions.matdConditions.isSwitchedToBullish &&
conditions.mcConditions.isSwitchedToBullish &&
//
// Verifications ...
conditions.matdConditions.isSARBullish &&
conditions.mcConditions.isSARBullish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBullish &&
conditions.strConditions.isTrendBullish &&
@@ -917,10 +917,10 @@ struct X121SignalGenerator
bool long2 =
//
// Starting Conditions ...
conditions.matdConditions.isSARSwitchedToBullish &&
conditions.mcConditions.isSARSwitchedToBullish &&
//
// Verifications ...
conditions.matdConditions.isBullish &&
conditions.mcConditions.isBullish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBullish &&
conditions.strConditions.isTrendBullish &&
@@ -949,7 +949,7 @@ struct X121SignalGenerator
conditions.adxtdConditions.isStrongSwitchedToBullish &&
//
// Verifications ...
conditions.matdConditions.isBullish &&
conditions.mcConditions.isBullish &&
conditions.strConditions.isTrendBullish &&
conditions.cheConditions.isStrongBullish &&
conditions.tdConditions.isBullish &&
@@ -976,7 +976,7 @@ struct X121SignalGenerator
conditions.strConditions.isTrendSwitchedToBullish &&
//
// Verifications ...
conditions.matdConditions.isBullish &&
conditions.mcConditions.isBullish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBullish &&
conditions.cheConditions.isStrongBullish &&
@@ -1004,7 +1004,7 @@ struct X121SignalGenerator
conditions.cheConditions.isStrongSwitchedToBullish &&
//
// Verifications ...
conditions.matdConditions.isBullish &&
conditions.mcConditions.isBullish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBullish &&
conditions.strConditions.isTrendBullish &&
@@ -1032,7 +1032,7 @@ struct X121SignalGenerator
conditions.tdConditions.isSwitchedToBullish &&
//
// Verifications ...
conditions.matdConditions.isBullish &&
conditions.mcConditions.isBullish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBullish &&
conditions.strConditions.isTrendBullish &&
@@ -1062,7 +1062,7 @@ struct X121SignalGenerator
//
// Verifications ...
conditions.tdConditions.isBullish &&
conditions.matdConditions.isBullish &&
conditions.mcConditions.isBullish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBullish &&
conditions.strConditions.isTrendBullish &&
@@ -1092,7 +1092,7 @@ struct X121SignalGenerator
//
// Verifications ...
conditions.tdConditions.isBullish &&
conditions.matdConditions.isBullish &&
conditions.mcConditions.isBullish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBullish &&
conditions.strConditions.isTrendBullish &&
@@ -1122,7 +1122,7 @@ struct X121SignalGenerator
//
// Verifications ...
conditions.tdConditions.isBullish &&
conditions.matdConditions.isBullish &&
conditions.mcConditions.isBullish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBullish &&
conditions.strConditions.isTrendBullish &&
@@ -1151,7 +1151,7 @@ struct X121SignalGenerator
//
// Verifications ...
conditions.tdConditions.isBullish &&
conditions.matdConditions.isBullish &&
conditions.mcConditions.isBullish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBullish &&
conditions.strConditions.isTrendBullish &&
@@ -1180,7 +1180,7 @@ struct X121SignalGenerator
//
// Verifications ...
conditions.tdConditions.isBullish &&
conditions.matdConditions.isBullish &&
conditions.mcConditions.isBullish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBullish &&
conditions.strConditions.isTrendBullish &&
@@ -1208,7 +1208,7 @@ struct X121SignalGenerator
//
// Verifications ...
conditions.tdConditions.isBullish &&
conditions.matdConditions.isBullish &&
conditions.mcConditions.isBullish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBullish &&
conditions.strConditions.isTrendBullish &&
@@ -1236,7 +1236,7 @@ struct X121SignalGenerator
//
// Verifications ...
conditions.tdConditions.isBullish &&
conditions.matdConditions.isBullish &&
conditions.mcConditions.isBullish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBullish &&
conditions.strConditions.isTrendBullish &&
@@ -1264,7 +1264,7 @@ struct X121SignalGenerator
//
// Verifications ...
conditions.tdConditions.isBullish &&
conditions.matdConditions.isBullish &&
conditions.mcConditions.isBullish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBullish &&
conditions.strConditions.isTrendBullish &&
@@ -1292,7 +1292,7 @@ struct X121SignalGenerator
//
// Verifications ...
conditions.tdConditions.isBullish &&
conditions.matdConditions.isBullish &&
conditions.mcConditions.isBullish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBullish &&
conditions.strConditions.isTrendBullish &&
@@ -1320,7 +1320,7 @@ struct X121SignalGenerator
//
// Verifications ...
conditions.tdConditions.isBullish &&
conditions.matdConditions.isBullish &&
conditions.mcConditions.isBullish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBullish &&
conditions.strConditions.isTrendBullish &&
@@ -1349,7 +1349,7 @@ struct X121SignalGenerator
//
// Verifications ...
conditions.tdConditions.isBullish &&
conditions.matdConditions.isBullish &&
conditions.mcConditions.isBullish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBullish &&
conditions.strConditions.isTrendBullish &&
@@ -1485,10 +1485,10 @@ struct X121SignalGenerator
bool short1 =
//
// Starting Conditions ...
conditions.matdConditions.isSwitchedToBearish &&
conditions.mcConditions.isSwitchedToBearish &&
//
// Verifications ...
conditions.matdConditions.isSARBearish &&
conditions.mcConditions.isSARBearish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBearish &&
conditions.strConditions.isTrendBearish &&
@@ -1514,10 +1514,10 @@ struct X121SignalGenerator
bool short2 =
//
// Starting Conditions ...
conditions.matdConditions.isSARSwitchedToBearish &&
conditions.mcConditions.isSARSwitchedToBearish &&
//
// Verifications ...
conditions.matdConditions.isBearish &&
conditions.mcConditions.isBearish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBearish &&
conditions.strConditions.isTrendBearish &&
@@ -1546,7 +1546,7 @@ struct X121SignalGenerator
conditions.adxtdConditions.isStrongSwitchedToBearish &&
//
// Verifications ...
conditions.matdConditions.isBearish &&
conditions.mcConditions.isBearish &&
conditions.strConditions.isTrendBearish &&
conditions.cheConditions.isStrongBearish &&
conditions.tdConditions.isBearish &&
@@ -1573,7 +1573,7 @@ struct X121SignalGenerator
conditions.strConditions.isTrendSwitchedToBearish &&
//
// Verifications ...
conditions.matdConditions.isBearish &&
conditions.mcConditions.isBearish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBearish &&
conditions.cheConditions.isStrongBearish &&
@@ -1601,7 +1601,7 @@ struct X121SignalGenerator
conditions.cheConditions.isStrongSwitchedToBearish &&
//
// Verifications ...
conditions.matdConditions.isBearish &&
conditions.mcConditions.isBearish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBearish &&
conditions.strConditions.isTrendBearish &&
@@ -1629,7 +1629,7 @@ struct X121SignalGenerator
conditions.tdConditions.isSwitchedToBearish &&
//
// Verifications ...
conditions.matdConditions.isBearish &&
conditions.mcConditions.isBearish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBearish &&
conditions.strConditions.isTrendBearish &&
@@ -1659,7 +1659,7 @@ struct X121SignalGenerator
//
// Verifications ...
conditions.tdConditions.isBearish &&
conditions.matdConditions.isBearish &&
conditions.mcConditions.isBearish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBearish &&
conditions.strConditions.isTrendBearish &&
@@ -1689,7 +1689,7 @@ struct X121SignalGenerator
//
// Verifications ...
conditions.tdConditions.isBearish &&
conditions.matdConditions.isBearish &&
conditions.mcConditions.isBearish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBearish &&
conditions.strConditions.isTrendBearish &&
@@ -1719,7 +1719,7 @@ struct X121SignalGenerator
//
// Verifications ...
conditions.tdConditions.isBearish &&
conditions.matdConditions.isBearish &&
conditions.mcConditions.isBearish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBearish &&
conditions.strConditions.isTrendBearish &&
@@ -1748,7 +1748,7 @@ struct X121SignalGenerator
//
// Verifications ...
conditions.tdConditions.isBearish &&
conditions.matdConditions.isBearish &&
conditions.mcConditions.isBearish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBearish &&
conditions.strConditions.isTrendBearish &&
@@ -1777,7 +1777,7 @@ struct X121SignalGenerator
//
// Verifications ...
conditions.tdConditions.isBearish &&
conditions.matdConditions.isBearish &&
conditions.mcConditions.isBearish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBearish &&
conditions.strConditions.isTrendBearish &&
@@ -1805,7 +1805,7 @@ struct X121SignalGenerator
//
// Verifications ...
conditions.tdConditions.isBearish &&
conditions.matdConditions.isBearish &&
conditions.mcConditions.isBearish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBearish &&
conditions.strConditions.isTrendBearish &&
@@ -1833,7 +1833,7 @@ struct X121SignalGenerator
//
// Verifications ...
conditions.tdConditions.isBearish &&
conditions.matdConditions.isBearish &&
conditions.mcConditions.isBearish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBearish &&
conditions.strConditions.isTrendBearish &&
@@ -1861,7 +1861,7 @@ struct X121SignalGenerator
//
// Verifications ...
conditions.tdConditions.isBearish &&
conditions.matdConditions.isBearish &&
conditions.mcConditions.isBearish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBearish &&
conditions.strConditions.isTrendBearish &&
@@ -1889,7 +1889,7 @@ struct X121SignalGenerator
//
// Verifications ...
conditions.tdConditions.isBearish &&
conditions.matdConditions.isBearish &&
conditions.mcConditions.isBearish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBearish &&
conditions.strConditions.isTrendBearish &&
@@ -1917,7 +1917,7 @@ struct X121SignalGenerator
//
// Verifications ...
conditions.tdConditions.isBearish &&
conditions.matdConditions.isBearish &&
conditions.mcConditions.isBearish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBearish &&
conditions.strConditions.isTrendBearish &&
@@ -1946,7 +1946,7 @@ struct X121SignalGenerator
//
// Verifications ...
conditions.tdConditions.isBearish &&
conditions.matdConditions.isBearish &&
conditions.mcConditions.isBearish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBearish &&
conditions.strConditions.isTrendBearish &&
@@ -2251,23 +2251,23 @@ struct X121SignalGenerator
// XMATD ...
bool isMATDPassed =
//
((conditions.matdConditions.isBullish ||
conditions.matdConditions.isSwitchedToBullish)
((conditions.mcConditions.isBullish ||
conditions.mcConditions.isSwitchedToBullish)
//
||
//
((conditions.matdConditions.isFastOverSlow ||
conditions.matdConditions.isFastCrossedOverSlow)
((conditions.mcConditions.isFastOverVerifier ||
conditions.mcConditions.isFastCrossedOverVerifier)
//
&&
//
(conditions.matdConditions.isMidOverSlow ||
conditions.matdConditions.isMidCrossedOverSlow)))
(conditions.mcConditions.isSlowOverVerifier ||
conditions.mcConditions.isSlowCrossedOverVerifier)))
//
||
//
(conditions.matdConditions.isSARBullish ||
conditions.matdConditions.isSARSwitchedToBullish)
(conditions.mcConditions.isSARBullish ||
conditions.mcConditions.isSARSwitchedToBullish)
//
;
if (isMATDPassed)
@@ -2507,23 +2507,23 @@ struct X121SignalGenerator
// XMATD ...
bool isMATDPassed =
//
((conditions.matdConditions.isBearish ||
conditions.matdConditions.isSwitchedToBearish)
((conditions.mcConditions.isBearish ||
conditions.mcConditions.isSwitchedToBearish)
//
||
//
((conditions.matdConditions.isFastUnderSlow ||
conditions.matdConditions.isFastCrossedUnderSlow)
((conditions.mcConditions.isFastUnderVerifier ||
conditions.mcConditions.isFastCrossedUnderVerifier)
//
&&
//
(conditions.matdConditions.isMidUnderSlow ||
conditions.matdConditions.isMidCrossedUnderSlow)))
(conditions.mcConditions.isSlowUnderVerifier ||
conditions.mcConditions.isSlowCrossedUnderVerifier)))
//
||
//
(conditions.matdConditions.isSARBearish ||
conditions.matdConditions.isSARSwitchedToBearish)
(conditions.mcConditions.isSARBearish ||
conditions.mcConditions.isSARSwitchedToBearish)
//
;
if (isMATDPassed)
@@ -3311,6 +3311,7 @@ class XSCX121Setup : public XSCBaseAlert
public:
//
// Props ...
XSCXMCHelper *mcHelper;
XSCXPVHelper *pvHelper;
XSCXTDHelper *tdHelper;
XSCXHKHelper *hkHelper;
@@ -3320,7 +3321,6 @@ public:
XSCXMRBHelper *mrbHelper;
XSCXOSCHelper *oscHelper;
XSCXVLMHelper *vlmHelper;
XSCXMATDHelper *matdHelper;
XSCXASCTHelper *asctHelper;
XSCXSSLCHelper *sslcHelper;
XSCXHULLHelper *hullHelper;
@@ -3335,6 +3335,7 @@ public:
void ~XSCX121Setup()
{
//
delete mcHelper;
delete pvHelper;
delete tdHelper;
delete hkHelper;
@@ -3344,7 +3345,6 @@ public:
delete mrbHelper;
delete oscHelper;
delete vlmHelper;
delete matdHelper;
delete asctHelper;
delete sslcHelper;
delete hullHelper;
@@ -3508,13 +3508,12 @@ public:
}
//
// XMATD ...
matdHelper = new XSCXMATDHelper(
// XMC ...
mcHelper = new XSCXMCHelper();
result = mcHelper.Init(
inputs.symbol,
inputs.period //
);
result = matdHelper.Init(
inputs.matdInputs //
inputs.period,
inputs.mcInputs //
);
if (!result)
{
@@ -3565,7 +3564,7 @@ public:
adxtdHelper = new XSCXADXTDHelper();
result = adxtdHelper.Init(
inputs.symbol,
inputs.period,
inputs.period,
inputs.adxtdInputs //
);
if (!result)
@@ -3687,8 +3686,8 @@ public:
}
//
result = matdHelper.GetConditions(
conditions.matdConditions,
result = mcHelper.GetConditions(
conditions.mcConditions,
barIndex,
loopback //
);
+615 -9
View File
@@ -29,9 +29,10 @@
//
enum ENUM_XMC_BUFFERS
{
X_MC_FAST_LINE = 0,
X_MC_SLOW_LINE = 1,
X_MC_VERIFIER_LINE = 2,
XMC_FAST_LINE = 0,
XMC_SLOW_LINE = 1,
XMC_VERIFIER_LINE = 2,
XMC_SAR_LINE = 3,
};
//
@@ -65,11 +66,16 @@ struct XMCInputs
ENUM_MA_METHOD verifierMethod; // Method
ENUM_APPLIED_PRICE verifierAppliedTo; // Applied To
//
double step; // Sar Step
double maximum; // Sar Maximum
//
// Presentation ...
bool showFastMa; // Show Fast
bool showSlowMa; // Show Slow
bool showVerifierMa; // Show Verifier
bool showSar; // Show Sar
//
// Constructor(s) ...
@@ -105,6 +111,11 @@ struct XMCInputs
verifierAppliedTo = PRICE_CLOSE;
//
step = 0;
maximum = 0;
//
showSar = false;
showFastMa = false;
showSlowMa = false;
showVerifierMa = false;
@@ -115,13 +126,13 @@ struct XMCInputs
void Default()
{
//
fastLength = 9;
fastLength = 21;
fastShift = 0;
fastMethod = MODE_EMA;
fastAppliedTo = PRICE_CLOSE;
//
slowLength = 18;
slowLength = 50;
slowShift = 0;
slowMethod = MODE_EMA;
slowAppliedTo = PRICE_CLOSE;
@@ -133,6 +144,11 @@ struct XMCInputs
verifierAppliedTo = PRICE_CLOSE;
//
step = 0.02;
maximum = 0.2;
//
showSar = true;
showFastMa = true;
showSlowMa = true;
showVerifierMa = true;
@@ -150,7 +166,10 @@ struct XMCInputs
//
fastLength > 1 &&
slowLength > fastLength &&
verifierLength > slowLength
verifierLength > slowLength &&
//
step > 0 &&
maximum > step
//
;
@@ -174,6 +193,337 @@ struct XMCInputs
}
};
//
// Define Conditions ...
struct XMCConditions
{
//
// Common ...
string symbol;
ENUM_TIMEFRAMES period;
datetime time;
//
// Buffers ...
double fast[];
double slow[];
double verifier[];
//
double psar[];
//
// Conditions ...
//
// Trend ...
bool isBullish;
bool isBearish;
bool isSwitchedToBullish;
bool isSwitchedToBearish;
//
// Fast Slow ...
bool isFastOverSlow;
bool isFastUnderSlow;
bool isFastCrossedOverSlow;
bool isFastCrossedUnderSlow;
//
// Fast Verifier ...
bool isFastOverVerifier;
bool isFastUnderVerifier;
bool isFastCrossedOverVerifier;
bool isFastCrossedUnderVerifier;
//
// Slow Verifier ...
bool isSlowOverVerifier;
bool isSlowUnderVerifier;
bool isSlowCrossedOverVerifier;
bool isSlowCrossedUnderVerifier;
//
bool isSARBullish;
bool isSARBearish;
bool isSARSwitchedToBullish;
bool isSARSwitchedToBearish;
//
void Clean()
{
//
Clean(fast);
Clean(slow);
Clean(verifier);
//
ArraySetAsSeries(fast, true);
ArraySetAsSeries(slow, true);
ArraySetAsSeries(verifier, true);
//
// Trend ...
isBullish = false;
isBearish = false;
isSwitchedToBullish = false;
isSwitchedToBearish = false;
//
// Fast Slow ...
isFastOverSlow = false;
isFastUnderSlow = false;
isFastCrossedOverSlow = false;
isFastCrossedUnderSlow = false;
//
// Fast Verifier ...
isFastOverVerifier = false;
isFastUnderVerifier = false;
isFastCrossedOverVerifier = false;
isFastCrossedUnderVerifier = false;
//
// Slow Verifier ...
isSlowOverVerifier = false;
isSlowUnderVerifier = false;
isSlowCrossedOverVerifier = false;
isSlowCrossedUnderVerifier = false;
//
isSARBullish = false;
isSARBearish = false;
isSARSwitchedToBullish = false;
isSARSwitchedToBearish = false;
}
//
void GenerateScore(
double &bullishScore,
double &bearishScore //
)
{
//
bullishScore = 0;
bearishScore = 0;
//
// Trend ...
//
if (isBullish)
{
bullishScore++;
}
if (isSwitchedToBullish)
{
bullishScore++;
}
//
if (isBearish)
{
bearishScore++;
}
if (isSwitchedToBearish)
{
bearishScore++;
}
//
// Fast Slow ...
//
if (isFastOverSlow)
{
bullishScore++;
}
if (isFastCrossedOverSlow)
{
bullishScore++;
}
//
if (isFastUnderSlow)
{
bearishScore++;
}
if (isFastCrossedUnderSlow)
{
bearishScore++;
}
//
// Fast Verifier ...
//
if (isFastOverVerifier)
{
bullishScore++;
}
if (isFastCrossedOverVerifier)
{
bullishScore++;
}
//
if (isFastUnderVerifier)
{
bearishScore++;
}
if (isFastCrossedUnderVerifier)
{
bearishScore++;
}
//
// Slow Verifier ...
//
if (isSlowOverVerifier)
{
bullishScore++;
}
if (isSlowCrossedOverVerifier)
{
bullishScore++;
}
//
if (isSlowUnderVerifier)
{
bearishScore++;
}
if (isSlowCrossedUnderVerifier)
{
bearishScore++;
}
//
if (isSARBullish)
{
bullishScore++;
}
if (isSARSwitchedToBullish)
{
bullishScore++;
}
//
if (isSARBearish)
{
bearishScore++;
}
if (isSARSwitchedToBearish)
{
bearishScore++;
}
}
//
string GenerateSummary(
bool onlyCommons = false,
bool onlyConditions = false,
bool includeScores = true,
bool ignoreFalseConditions = true,
string separator = "\n" //
)
{
//
string result = NULL;
//
double bullishScore = 0;
double bearishScore = 0;
GenerateScore(
bullishScore,
bearishScore //
);
//
string scoresStr =
//
"Scores: " + separator +
"---------------" + separator +
"Bullish: " + ToString(bullishScore) + separator +
"Bearish: " + ToString(bearishScore) + separator +
""
//
;
//
string commonStr = GenerateSpecifiedCommonSummary(
this,
separator,
includeScores //
);
//
string conditionsStr =
//
// Trend ...
ToString("isBullish", isBullish, ignoreFalseConditions, separator) +
ToString("isBearish", isBearish, ignoreFalseConditions, separator) +
ToString("isSwitchedToBullish", isSwitchedToBullish, ignoreFalseConditions, separator) +
ToString("isSwitchedToBearish", isSwitchedToBearish, ignoreFalseConditions, separator) +
//
// Fast Slow ...
ToString("isFastOverSlow", isFastOverSlow, ignoreFalseConditions, separator) +
ToString("isFastUnderSlow", isFastUnderSlow, ignoreFalseConditions, separator) +
ToString("isFastCrossedOverSlow", isFastCrossedOverSlow, ignoreFalseConditions, separator) +
ToString("isFastCrossedUnderSlow", isFastCrossedUnderSlow, ignoreFalseConditions, separator) +
//
// Fast Verifier ...
ToString("isFastOverVerifier", isFastOverVerifier, ignoreFalseConditions, separator) +
ToString("isFastUnderVerifier", isFastUnderVerifier, ignoreFalseConditions, separator) +
ToString("isFastCrossedOverVerifier", isFastCrossedOverVerifier, ignoreFalseConditions, separator) +
ToString("isFastCrossedUnderVerifier", isFastCrossedUnderVerifier, ignoreFalseConditions, separator) +
//
// Slow Verifier ...
ToString("isSlowOverVerifier", isSlowOverVerifier, ignoreFalseConditions, separator) +
ToString("isSlowUnderVerifier", isSlowUnderVerifier, ignoreFalseConditions, separator) +
ToString("isSlowCrossedOverVerifier", isSlowCrossedOverVerifier, ignoreFalseConditions, separator) +
ToString("isSlowCrossedUnderVerifier", isSlowCrossedUnderVerifier, ignoreFalseConditions, separator) +
//
// Psar ...
ToString("isSARBullish", isSARBullish, ignoreFalseConditions, separator) +
ToString("isSARBearish", isSARBearish, ignoreFalseConditions, separator) +
ToString("isSARSwitchedToBullish", isSARSwitchedToBullish, ignoreFalseConditions, separator) +
ToString("isSARSwitchedToBearish", isSARSwitchedToBearish, ignoreFalseConditions, separator) +
//
""
//
;
//
result =
//
"[" + GetTag() + "]" + separator +
(onlyConditions
? ""
: commonStr) +
(!includeScores
? ""
: scoresStr) +
" " + separator +
(onlyCommons
? ""
: conditionsStr) +
""
//
;
//
return result;
}
//
string GetTag()
{
return "XMATD";
}
};
//
// Class ...
class XSCXMCHelper : public XSCBaseHelper
@@ -430,6 +780,250 @@ public:
);
}
//
// Sar ...
//
double GetSar(
int barIndex // Bar Index
)
{
//
if (barIndex < 0)
{
barIndex = 0;
}
//
Calculate();
//
return sarBuffer[barIndex];
}
//
// Copy Required Buffer ...
int CopySar(
int start, // Start
int count, // Number of Items for read
double &buffer[], // Dest Buffer
bool forceClean = true // Force To Clean buffer
)
{
//
// Update Calculations ...
Calculate();
//
// Copy Items ...
return Copy(
start,
count,
sarBuffer,
buffer,
forceClean
//
);
}
//
bool GetConditions(
XMCConditions &conditions, //
int barIndex = 0, //
int loopback = 3 //
)
{
//
bool result = true;
//
if (loopback < 3)
{
loopback = 3;
}
//
conditions.Clean();
//
conditions.symbol = mSymbol;
conditions.period = mPeriod;
conditions.time = TimeCurrent();
//
int zIndex = barIndex;
int cIndex = zIndex + 1;
int pIndex = cIndex + 1;
int ppIndex = pIndex + 1;
//
CopyFast(
zIndex,
loopback,
conditions.fast //
);
//
CopySlow(
zIndex,
loopback,
conditions.slow //
);
//
CopyVerifier(
zIndex,
loopback,
conditions.verifier //
);
//
CopySar(
zIndex,
loopback,
conditions.psar //
);
//
// Calculate Conditions ...
//
// Trend ...
//
bool isBullish = conditions.fast[cIndex] > conditions.slow[cIndex] &&
conditions.slow[cIndex] > conditions.verifier[cIndex];
bool isBearish = conditions.fast[cIndex] < conditions.slow[cIndex] &&
conditions.slow[cIndex] < conditions.verifier[cIndex];
//
bool isBullishPrev = conditions.fast[pIndex] > conditions.slow[pIndex] &&
conditions.slow[pIndex] > conditions.verifier[pIndex];
bool isBearishPrev = conditions.fast[pIndex] < conditions.slow[pIndex] &&
conditions.slow[pIndex] < conditions.verifier[pIndex];
//
bool isSwitchedToBullish = isBullish &&
!isBullishPrev;
bool isSwitchedToBearish = isBearish &&
!isBearishPrev;
//
// Set Conditions to Structure ...
conditions.isBullish = isBullish;
conditions.isBearish = isBearish;
conditions.isSwitchedToBullish = isSwitchedToBullish;
conditions.isSwitchedToBearish = isSwitchedToBearish;
//
// Fast Slow ...
//
bool isFastOverSlow = conditions.fast[cIndex] > conditions.slow[cIndex];
bool isFastUnderSlow = conditions.fast[cIndex] < conditions.slow[cIndex];
//
bool isFastOverSlowPrev = conditions.fast[pIndex] > conditions.slow[pIndex];
bool isFastUnderSlowPrev = conditions.fast[pIndex] < conditions.slow[pIndex];
//
bool isFastCrossedOverSlow = isFastOverSlow &&
!isFastOverSlowPrev;
bool isFastCrossedUnderSlow = isFastUnderSlow &&
!isFastUnderSlowPrev;
//
conditions.isFastOverSlow = isFastOverSlow;
conditions.isFastUnderSlow = isFastUnderSlow;
conditions.isFastCrossedOverSlow = isFastCrossedOverSlow;
conditions.isFastCrossedUnderSlow = isFastCrossedUnderSlow;
//
// Fast Verifier ...
//
bool isFastOverVerifier = conditions.fast[cIndex] > conditions.verifier[cIndex];
bool isFastUnderVerifier = conditions.fast[cIndex] < conditions.verifier[cIndex];
//
bool isFastOverVerifierPrev = conditions.fast[pIndex] > conditions.verifier[pIndex];
bool isFastUnderVerifierPrev = conditions.fast[pIndex] < conditions.verifier[pIndex];
//
bool isFastCrossedOverVerifier = isFastOverVerifier &&
!isFastOverVerifierPrev;
bool isFastCrossedUnderVerifier = isFastUnderVerifier &&
!isFastUnderVerifierPrev;
//
conditions.isFastOverVerifier = isFastOverVerifier;
conditions.isFastUnderVerifier = isFastUnderVerifier;
conditions.isFastCrossedOverVerifier = isFastCrossedOverVerifier;
conditions.isFastCrossedUnderVerifier = isFastCrossedUnderVerifier;
//
// Slow Verifier ...
//
bool isSlowOverVerifier = conditions.slow[cIndex] > conditions.verifier[cIndex];
bool isSlowUnderVerifier = conditions.slow[cIndex] < conditions.verifier[cIndex];
//
bool isSlowOverVerifierPrev = conditions.slow[pIndex] > conditions.verifier[pIndex];
bool isSlowUnderVerifierPrev = conditions.slow[pIndex] < conditions.verifier[pIndex];
//
bool isSlowCrossedOverVerifier = isSlowOverVerifier &&
!isSlowOverVerifierPrev;
bool isSlowCrossedUnderVerifier = isSlowUnderVerifier &&
!isSlowUnderVerifierPrev;
//
conditions.isSlowOverVerifier = isSlowOverVerifier;
conditions.isSlowUnderVerifier = isSlowUnderVerifier;
conditions.isSlowCrossedOverVerifier = isSlowCrossedOverVerifier;
conditions.isSlowCrossedUnderVerifier = isSlowCrossedUnderVerifier;
//
XOHCL cBar;
cBar.Init(
mSymbol,
mPeriod,
cIndex //
);
//
XOHCL pBar;
pBar.Init(
mSymbol,
mPeriod,
pIndex //
);
//
bool isSARBullish = conditions.psar[cIndex] < cBar.low;
bool isSARBearish = conditions.psar[cIndex] > cBar.high;
//
bool isSARBullishPrev = conditions.psar[pIndex] < pBar.low;
bool isSARBearishPrev = conditions.psar[pIndex] > pBar.high;
//
bool isSARSwitchedToBullish = isSARBullish &&
!isSARBullishPrev;
bool isSARSwitchedToBearish = isSARBearish &&
!isSARBearishPrev;
//
conditions.isSARBullish = isSARBullish;
conditions.isSARBearish = isSARBearish;
conditions.isSARSwitchedToBullish = isSARSwitchedToBullish;
conditions.isSARSwitchedToBearish = isSARSwitchedToBearish;
//
return result;
}
//
// Protected ...
protected:
@@ -443,6 +1037,7 @@ private:
//
// Buffers ...
//
double sarBuffer[];
double fastBuffer[];
double slowBuffer[];
double verifierBuffer[];
@@ -457,11 +1052,22 @@ private:
//
int totalBars = CountBars();
//
// Sar ...
CopyBuffer(
mHandler,
XMC_SAR_LINE,
0,
totalBars,
sarBuffer
//
);
//
// Fast ...
CopyBuffer(
mHandler,
X_MC_FAST_LINE,
XMC_FAST_LINE,
0,
totalBars,
fastBuffer
@@ -472,7 +1078,7 @@ private:
// Slow ...
CopyBuffer(
mHandler,
X_MC_SLOW_LINE,
XMC_SLOW_LINE,
0,
totalBars,
slowBuffer
@@ -483,7 +1089,7 @@ private:
// Verifier ...
CopyBuffer(
mHandler,
X_MC_VERIFIER_LINE,
XMC_VERIFIER_LINE,
0,
totalBars,
verifierBuffer
+77 -40
View File
@@ -38,27 +38,33 @@
//
input group "Fast";
input int fastMaLength = 9; // Length
input int fastMaLength = 21; // Length
input int fastMaShift = 0; // Shift
input ENUM_MA_METHOD fastMaMethod = MODE_EMA; // Method
input ENUM_APPLIED_PRICE fastMaAppliedTo = PRICE_CLOSE; // Applied To
//
input group "Slow";
input int slowMaLength = 18; // Length
input int slowMaLength = 50; // Length
input int slowMaShift = 0; // Shift
input ENUM_MA_METHOD slowMaMethod = MODE_EMA; // Method
input ENUM_APPLIED_PRICE slowMaAppliedTo = PRICE_CLOSE; // Applied To
//
input group "Verifier";
input int verifierMaLength = 50; // Length
input int verifierMaLength = 200; // Length
input int verifierMaShift = 0; // Shift
input ENUM_MA_METHOD verifierMaMethod = MODE_EMA; // Method
input ENUM_APPLIED_PRICE verifierMaAppliedTo = PRICE_CLOSE; // Applied To
//
input group "PSar";
input double sarStep = 0.02; // Step
input double sarMaximum = 0.2; // Maximum
//
input group "Presentation";
input bool showSar = true; // Show Sar
input bool showFastMa = true; // Show Fast
input bool showSlowMa = true; // Show Slow
input bool showVerifierMa = true; // Show Verifier
@@ -85,8 +91,8 @@ input bool showVerifierMa = true; // Show Verifier
#property indicator_chart_window
//
#property indicator_buffers 3
#property indicator_plots 3
#property indicator_buffers 4
#property indicator_plots 4
//
// PLOTTED Buffers ...
@@ -130,6 +136,17 @@ double verifierMaBuffer[];
#property indicator_style3 STYLE_SOLID
#property indicator_width3 2
//
// SAR ...
#define sarBufferIndex 3
double sarBuffer[];
//
#property indicator_label4 "XMC SAR"
#property indicator_type4 DRAW_ARROW
#property indicator_color4 clrDarkGreen
#property indicator_width4 2
//
// END Buffers ...
//
@@ -142,6 +159,7 @@ double verifierMaBuffer[];
int maxLength;
//
int sarHandler = INVALID_HANDLE;
int fastMaHandler = INVALID_HANDLE;
int slowMaHandler = INVALID_HANDLE;
int verifierMaHandler = INVALID_HANDLE;
@@ -180,6 +198,19 @@ int OnInit()
// Set Indicator ShortName ...
SetIndicatorName();
//
// SAR Initializer ...
sarHandler = iSAR(
_Symbol,
_Period,
sarStep,
sarMaximum //
);
if (sarHandler == INVALID_HANDLE)
{
return INIT_FAILED;
}
//
// MA Initialization ...
@@ -248,6 +279,7 @@ void OnDeinit(const int reason)
//
// Here we can handle De Initialization Reasons ...
IndicatorRelease(sarHandler);
IndicatorRelease(fastMaHandler);
IndicatorRelease(slowMaHandler);
IndicatorRelease(verifierMaHandler);
@@ -258,36 +290,17 @@ void OnDeinit(const int reason)
//
// Calculating what we want ...
int OnCalculate(
//
// total Candles on chart ...
const int rates_total,
//
// total calculated Candles on charts ...
const int prev_calculated,
//
// history of Candles Open Time ...
const datetime &time[],
//
// history of Candles Open Price ...
const double &open[],
//
// history of Candles High Price ...
const double &high[],
//
// history of Candles Low Price ...
const double &low[],
//
// history of Candles Close Price ...
const double &close[],
//
// history of Tick Volumes on Candle ...
const long &tick_volume[],
//
// history of Trade Volumes ...
const long &volume[],
//
// history of Candles Spread Price ...
const int &spread[])
const int rates_total, // Total Bars on Chart ...
const int prev_calculated, // Total Calculated Bars on Charts ...
const datetime &time[], // History of Open Time ...
const double &open[], // History of Open Price ...
const double &high[], // History of High Price ...
const double &low[], // History of Low Price ...
const double &close[], // History of Close Price ...
const long &tick_volume[], // History of Tick Volumes on Bar ...
const long &volume[], // History of Trade Volumes ...
const int &spread[] // History of Spread Price ...
)
{
//
// Prepare Buffers ...
@@ -306,10 +319,12 @@ int OnCalculate(
//
// Check Calculated Bars ...
int sarCalculatedBars = BarsCalculated(sarHandler);
int fastMaCalculatedBars = BarsCalculated(fastMaHandler);
int slowMaCalculatedBars = BarsCalculated(slowMaHandler);
int verifierMaCalculatedBars = BarsCalculated(verifierMaHandler);
if (fastMaCalculatedBars < maxLength ||
if (sarCalculatedBars < maxLength ||
fastMaCalculatedBars < maxLength ||
slowMaCalculatedBars < maxLength ||
verifierMaCalculatedBars < maxLength)
{
@@ -321,10 +336,12 @@ int OnCalculate(
//
// Buffers Copy ...
int copiedSars = CopyBuffer(sarHandler, 0, 0, limit, sarBuffer);
int copiedFastMas = CopyBuffer(fastMaHandler, 0, 0, limit, fastMaBuffer);
int copiedSlowMas = CopyBuffer(slowMaHandler, 0, 0, limit, slowMaBuffer);
int copiedVerifierMas = CopyBuffer(verifierMaHandler, 0, 0, limit, verifierMaBuffer);
if (copiedFastMas <= 0 ||
if (copiedSars <= 0 ||
copiedFastMas <= 0 ||
copiedSlowMas <= 0 ||
copiedVerifierMas <= 0)
{
@@ -362,6 +379,11 @@ bool ValidateInputs()
slowMaLength > fastMaLength &&
verifierMaLength > slowMaLength)
//
&&
//
(sarStep > 0 &&
sarMaximum > sarStep)
//
;
//
@@ -390,6 +412,21 @@ int ExtractMaxLengthOfInputs()
// Define Indexes and Styles ...
void DefineBuffers()
{
//
// SAR ...
ENUM_DRAW_TYPE sarDrawType = showSar ? DRAW_ARROW : DRAW_NONE;
//
// PEAKS ...
ArraySetAsSeries(sarBuffer, true);
SetIndexBuffer(sarBufferIndex, sarBuffer, INDICATOR_DATA);
PlotIndexSetInteger(sarBufferIndex, PLOT_ARROW, 225);
PlotIndexSetDouble(sarBufferIndex, PLOT_EMPTY_VALUE, 0);
//
PlotIndexSetInteger(sarBufferIndex, PLOT_SHOW_DATA, showSar);
PlotIndexSetInteger(sarBufferIndex, PLOT_DRAW_TYPE, sarDrawType);
//
// MA ...
@@ -399,7 +436,7 @@ void DefineBuffers()
ArraySetAsSeries(fastMaBuffer, true);
SetIndexBuffer(fastMaBufferIndex, fastMaBuffer, INDICATOR_DATA);
PlotIndexSetInteger(fastMaBufferIndex, PLOT_DRAW_BEGIN, maxLength);
PlotIndexSetInteger(fastMaBufferIndex, PLOT_SHOW_DATA, false);
PlotIndexSetInteger(fastMaBufferIndex, PLOT_SHOW_DATA, showFastMa);
PlotIndexSetInteger(fastMaBufferIndex, PLOT_DRAW_TYPE, fastMaDrawType);
//
@@ -408,7 +445,7 @@ void DefineBuffers()
ArraySetAsSeries(slowMaBuffer, true);
SetIndexBuffer(slowMaBufferIndex, slowMaBuffer, INDICATOR_DATA);
PlotIndexSetInteger(slowMaBufferIndex, PLOT_DRAW_BEGIN, maxLength);
PlotIndexSetInteger(slowMaBufferIndex, PLOT_SHOW_DATA, false);
PlotIndexSetInteger(slowMaBufferIndex, PLOT_SHOW_DATA, showSlowMa);
PlotIndexSetInteger(slowMaBufferIndex, PLOT_DRAW_TYPE, slowMaDrawType);
//
@@ -417,7 +454,7 @@ void DefineBuffers()
ArraySetAsSeries(verifierMaBuffer, true);
SetIndexBuffer(verifierMaBufferIndex, verifierMaBuffer, INDICATOR_DATA);
PlotIndexSetInteger(verifierMaBufferIndex, PLOT_DRAW_BEGIN, maxLength);
PlotIndexSetInteger(verifierMaBufferIndex, PLOT_SHOW_DATA, false);
PlotIndexSetInteger(verifierMaBufferIndex, PLOT_SHOW_DATA, showVerifierMa);
PlotIndexSetInteger(verifierMaBufferIndex, PLOT_DRAW_TYPE, verifierMaDrawType);
}