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