diff --git a/Classes/x-saherelm.x121.setup.class.mq5 b/Classes/x-saherelm.x121.setup.class.mq5 index a5f35422..3c7b00a1 100644 --- a/Classes/x-saherelm.x121.setup.class.mq5 +++ b/Classes/x-saherelm.x121.setup.class.mq5 @@ -28,6 +28,7 @@ #include "../Classes/x-saherelm.xalert.class.mq5" // +#include "../Helpers/x-saherelm.xrl.helper.mq5" #include "../Helpers/x-saherelm.xmc.helper.mq5" #include "../Helpers/x-saherelm.xpv.helper.mq5" #include "../Helpers/x-saherelm.xtd.helper.mq5" @@ -230,6 +231,7 @@ struct X121SetupInputs // // Helpers Inputs ... + XRLInputs rlInputs; // XRL Inputs XMCInputs mcInputs; // XMC Inputs XPVInputs pvInputs; // XPV Inputs XTDInputs tdInputs; // XTD Inputs @@ -271,6 +273,7 @@ struct X121SetupInputs bool Init( string _symbol, // Symbol ENUM_TIMEFRAMES _period, // Time Frame + XRLInputs &_rlInputs, // XRL Inputs XMCInputs &_mcInputs, // XMC Inputs XPVInputs &_pvInputs, // XPV Inputs XTDInputs &_tdInputs, // XTD Inputs @@ -334,6 +337,7 @@ struct X121SetupInputs period = NULL; // + rlInputs.Clean(); mcInputs.Clean(); pvInputs.Clean(); tdInputs.Clean(); @@ -359,6 +363,7 @@ struct X121SetupInputs void Default() { // + rlInputs.Default(); mcInputs.Default(); pvInputs.Default(); tdInputs.Default(); @@ -398,6 +403,13 @@ struct X121SetupInputs return result; } + // + result = rlInputs.IsValid(); + if (!result) + { + return result; + } + // result = tdInputs.IsValid(); if (!result) @@ -541,6 +553,7 @@ struct X121SetupConditions // // Conditions ... + XRLConditions rlConditions; XMCConditions mcConditions; XPVConditions pvConditions; XTDConditions tdConditions; @@ -585,6 +598,7 @@ struct X121SetupConditions Clean(macdSignal); // + rlConditions.Clean(); mcConditions.Clean(); tdConditions.Clean(); hkConditions.Clean(); @@ -617,6 +631,14 @@ struct X121SetupConditions double tempBullishScore = 0; double tempBearishScore = 0; + // + rlConditions.GenerateScore( + tempBullishScore, + tempBearishScore // + ); + bullishScore += tempBullishScore; + bearishScore += tempBearishScore; + // mcConditions.GenerateScore( tempBullishScore, @@ -796,6 +818,7 @@ struct X121SetupConditions // string pvSummary = pvConditions.GenerateSummary(false, true, false, ignoreFalseConditions); + string rlSummary = rlConditions.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); @@ -817,6 +840,7 @@ struct X121SetupConditions string conditionsStr = // pvSummary + separator + + rlSummary + separator + mcSummary + separator + tdSummary + separator + hkSummary + separator + @@ -2131,7 +2155,7 @@ struct X121SignalGenerator // XICH ... conditions.ichConditions.isClosedOverKijunSen && (conditions.ichConditions.isTenkanSenOverKijunSen || - conditions.ichConditions.isTenkanSenCrossedOverKijunSen) + conditions.ichConditions.isTenkanSenCrossedOverKijunSen) // ) // @@ -3860,6 +3884,7 @@ class XSCX121Setup : public XSCBaseAlert public: // // Props ... + XSCXRLHelper *rlHelper; XSCXMCHelper *mcHelper; XSCXPVHelper *pvHelper; XSCXTDHelper *tdHelper; @@ -3888,6 +3913,7 @@ public: void ~XSCX121Setup() { // + delete rlHelper; delete mcHelper; delete pvHelper; delete tdHelper; @@ -3959,6 +3985,19 @@ public: return result; } + // + // XRL ... + rlHelper = new XSCXRLHelper(); + result = rlHelper.Init( + inputs.symbol, + inputs.period, + inputs.rlInputs // + ); + if (!result) + { + return result; + } + // // XSLN ... slnHelper = new XSCXSLNHelper(); @@ -4216,6 +4255,17 @@ public: conditions.period = GetPeriod(); conditions.time = TimeCurrent(); + // + result = rlHelper.GetConditions( + conditions.rlConditions, + barIndex, + loopback // + ); + if (!result) + { + return result; + } + // result = hdtHelper.GetConditions( conditions.htdConditions, diff --git a/Experts/x-saherelm.x121.ea.mq5 b/Experts/x-saherelm.x121.ea.mq5 index ea9a3949..4a19e827 100644 --- a/Experts/x-saherelm.x121.ea.mq5 +++ b/Experts/x-saherelm.x121.ea.mq5 @@ -63,8 +63,8 @@ input group "Risk Management"; input double x121EAVolume = 0.01; // Static Volume input double x121EATPPoint = 1000; // TP Point input double x121EASLPoint = 1000; // SL Point -input bool x121EAIgnoreSL = false; // Ignore Calculated SL -input bool x121EAIgnoreTP = false; // Ignore Calculated TP +input bool x121EAIgnoreSL = false; // Ignore Calculated SL +input bool x121EAIgnoreTP = false; // Ignore Calculated TP input bool x121EACloseOnOpposit = false; // Close all Positions on Opposit input int x121EAMaxAllowedTrades = 0; // Max Allowed Positions Per Symbol input bool x121EAUseMaxAllowedPerDirection = true; // Use Max Allowed Positions Per Direction @@ -434,6 +434,12 @@ bool InitialEA() // void X121PreConfigureStyles(X121SetupInputs &inputs) { + // + // XRL ... + inputs.rlInputs.showFast = false; + inputs.rlInputs.showSlow = false; + inputs.rlInputs.showVerifier = false; + // // XHTD ... inputs.htdInputs.show = false; diff --git a/Helpers/x-saherelm.xpv.helper.mq5 b/Helpers/x-saherelm.xpv.helper.mq5 index 9df5fdb3..d13dcc59 100644 --- a/Helpers/x-saherelm.xpv.helper.mq5 +++ b/Helpers/x-saherelm.xpv.helper.mq5 @@ -391,6 +391,37 @@ struct XPVConditions bool isHCHHSwitchedToBearish; bool isHCLLSwitchedToBeraish; + // + // Fibonachi Conditions ... + + // + bool isCloseOverFib1; + bool isCloseOverFib2; + bool isCloseOverFib3; + bool isCloseOverFib4; + bool isCloseOverFib5; + + // + bool isCloseUnderFib1; + bool isCloseUnderFib2; + bool isCloseUnderFib3; + bool isCloseUnderFib4; + bool isCloseUnderFib5; + + // + bool isCloseCrossedOverFib1; + bool isCloseCrossedOverFib2; + bool isCloseCrossedOverFib3; + bool isCloseCrossedOverFib4; + bool isCloseCrossedOverFib5; + + // + bool isCloseCrossedUnderFib1; + bool isCloseCrossedUnderFib2; + bool isCloseCrossedUnderFib3; + bool isCloseCrossedUnderFib4; + bool isCloseCrossedUnderFib5; + // void Clean() { @@ -442,6 +473,26 @@ struct XPVConditions isFiboIncreased = false; isFiboDecreased = false; isFiboSectionChanged = false; + isCloseOverFib1 = false; + isCloseOverFib2 = false; + isCloseOverFib3 = false; + isCloseOverFib4 = false; + isCloseOverFib5 = false; + isCloseUnderFib1 = false; + isCloseUnderFib2 = false; + isCloseUnderFib3 = false; + isCloseUnderFib4 = false; + isCloseUnderFib5 = false; + isCloseCrossedOverFib1 = false; + isCloseCrossedOverFib2 = false; + isCloseCrossedOverFib3 = false; + isCloseCrossedOverFib4 = false; + isCloseCrossedOverFib5 = false; + isCloseCrossedUnderFib1 = false; + isCloseCrossedUnderFib2 = false; + isCloseCrossedUnderFib3 = false; + isCloseCrossedUnderFib4 = false; + isCloseCrossedUnderFib5 = false; isSCBullish = false; isSCHHBullish = false; isSCLLBullish = false; @@ -793,6 +844,26 @@ struct XPVConditions ToString("isFiboIncreased", isFiboIncreased, ignoreFalseConditions, separator) + ToString("isFiboDecreased", isFiboDecreased, ignoreFalseConditions, separator) + ToString("isFiboSectionChanged", isFiboSectionChanged, ignoreFalseConditions, separator) + + ToString("isCloseOverFib1", isCloseOverFib1, ignoreFalseConditions, separator) + + ToString("isCloseOverFib2", isCloseOverFib2, ignoreFalseConditions, separator) + + ToString("isCloseOverFib3", isCloseOverFib3, ignoreFalseConditions, separator) + + ToString("isCloseOverFib4", isCloseOverFib4, ignoreFalseConditions, separator) + + ToString("isCloseOverFib5", isCloseOverFib5, ignoreFalseConditions, separator) + + ToString("isCloseUnderFib1", isCloseUnderFib1, ignoreFalseConditions, separator) + + ToString("isCloseUnderFib2", isCloseUnderFib2, ignoreFalseConditions, separator) + + ToString("isCloseUnderFib3", isCloseUnderFib3, ignoreFalseConditions, separator) + + ToString("isCloseUnderFib4", isCloseUnderFib4, ignoreFalseConditions, separator) + + ToString("isCloseUnderFib5", isCloseUnderFib5, ignoreFalseConditions, separator) + + ToString("isCloseCrossedOverFib1", isCloseCrossedOverFib1, ignoreFalseConditions, separator) + + ToString("isCloseCrossedOverFib2", isCloseCrossedOverFib2, ignoreFalseConditions, separator) + + ToString("isCloseCrossedOverFib3", isCloseCrossedOverFib3, ignoreFalseConditions, separator) + + ToString("isCloseCrossedOverFib4", isCloseCrossedOverFib4, ignoreFalseConditions, separator) + + ToString("isCloseCrossedOverFib5", isCloseCrossedOverFib5, ignoreFalseConditions, separator) + + ToString("isCloseCrossedUnderFib1", isCloseCrossedUnderFib1, ignoreFalseConditions, separator) + + ToString("isCloseCrossedUnderFib2", isCloseCrossedUnderFib2, ignoreFalseConditions, separator) + + ToString("isCloseCrossedUnderFib3", isCloseCrossedUnderFib3, ignoreFalseConditions, separator) + + ToString("isCloseCrossedUnderFib4", isCloseCrossedUnderFib4, ignoreFalseConditions, separator) + + ToString("isCloseCrossedUnderFib5", isCloseCrossedUnderFib5, ignoreFalseConditions, separator) + ToString("isSCBullish", isSCBullish, ignoreFalseConditions, separator) + ToString("isSCHHBullish", isSCHHBullish, ignoreFalseConditions, separator) + ToString("isSCLLBullish", isSCLLBullish, ignoreFalseConditions, separator) + @@ -841,6 +912,7 @@ struct XPVConditions ToString("isHCSwitchedToBearish", isHCSwitchedToBearish, ignoreFalseConditions, separator) + ToString("isHCHHSwitchedToBearish", isHCHHSwitchedToBearish, ignoreFalseConditions, separator) + ToString("isHCLLSwitchedToBeraish", isHCLLSwitchedToBeraish, ignoreFalseConditions, separator) + + // "" // ; @@ -2711,6 +2783,97 @@ public: // ; + // + // Define Bars For Calculations ... + + // + XOHCL cBar; + result = cBar.Init( + mSymbol, + mPeriod, + cIndex // + ); + if (!result) + { + return result; + } + + // + XOHCL pBar; + result = pBar.Init( + mSymbol, + mPeriod, + pIndex // + ); + if (!result) + { + return result; + } + + // + bool isCloseOverFib1 = cBar.close > conditions.fib1s[cIndex]; + bool isCloseOverFib1Prev = pBar.close > conditions.fib1s[pIndex]; + + // + bool isCloseOverFib2 = cBar.close > conditions.fib2s[cIndex]; + bool isCloseOverFib2Prev = pBar.close > conditions.fib2s[pIndex]; + + // + bool isCloseOverFib3 = cBar.close > conditions.fib3s[cIndex]; + bool isCloseOverFib3Prev = pBar.close > conditions.fib3s[pIndex]; + + // + bool isCloseOverFib4 = cBar.close > conditions.fib4s[cIndex]; + bool isCloseOverFib4Prev = pBar.close > conditions.fib4s[pIndex]; + + // + bool isCloseOverFib5 = cBar.close > conditions.fib5s[cIndex]; + bool isCloseOverFib5Prev = pBar.close > conditions.fib5s[pIndex]; + + // + bool isCloseUnderFib1 = cBar.close < conditions.fib1s[cIndex]; + bool isCloseUnderFib1Prev = pBar.close < conditions.fib1s[pIndex]; + + // + bool isCloseUnderFib2 = cBar.close < conditions.fib2s[cIndex]; + bool isCloseUnderFib2Prev = pBar.close < conditions.fib2s[pIndex]; + + // + bool isCloseUnderFib3 = cBar.close < conditions.fib3s[cIndex]; + bool isCloseUnderFib3Prev = pBar.close < conditions.fib3s[pIndex]; + + // + bool isCloseUnderFib4 = cBar.close < conditions.fib4s[cIndex]; + bool isCloseUnderFib4Prev = pBar.close < conditions.fib4s[pIndex]; + + // + bool isCloseUnderFib5 = cBar.close < conditions.fib5s[cIndex]; + bool isCloseUnderFib5Prev = pBar.close < conditions.fib5s[pIndex]; + + // + bool isCloseCrossedOverFib1 = isCloseOverFib1 && + !isCloseOverFib1Prev; + bool isCloseCrossedOverFib2 = isCloseOverFib2 && + !isCloseOverFib2Prev; + bool isCloseCrossedOverFib3 = isCloseOverFib3 && + !isCloseOverFib3Prev; + bool isCloseCrossedOverFib4 = isCloseOverFib4 && + !isCloseOverFib4Prev; + bool isCloseCrossedOverFib5 = isCloseOverFib5 && + !isCloseOverFib5Prev; + + // + bool isCloseCrossedUnderFib1 = isCloseUnderFib1 && + !isCloseUnderFib1Prev; + bool isCloseCrossedUnderFib2 = isCloseUnderFib2 && + !isCloseUnderFib2Prev; + bool isCloseCrossedUnderFib3 = isCloseUnderFib3 && + !isCloseUnderFib3Prev; + bool isCloseCrossedUnderFib4 = isCloseUnderFib4 && + !isCloseUnderFib4Prev; + bool isCloseCrossedUnderFib5 = isCloseUnderFib5 && + !isCloseUnderFib5Prev; + // conditions.isNewPeak = isNewPeak; conditions.isNewPeakOverLast = isNewPeakOverLast; @@ -2721,6 +2884,26 @@ public: conditions.isFiboIncreased = isFiboIncreased; conditions.isFiboDecreased = isFiboDecreased; conditions.isFiboSectionChanged = isFiboSectionChanged; + conditions.isCloseOverFib1 = isCloseOverFib1; + conditions.isCloseOverFib2 = isCloseOverFib2; + conditions.isCloseOverFib3 = isCloseOverFib3; + conditions.isCloseOverFib4 = isCloseOverFib4; + conditions.isCloseOverFib5 = isCloseOverFib5; + conditions.isCloseUnderFib1 = isCloseUnderFib1; + conditions.isCloseUnderFib2 = isCloseUnderFib2; + conditions.isCloseUnderFib3 = isCloseUnderFib3; + conditions.isCloseUnderFib4 = isCloseUnderFib4; + conditions.isCloseUnderFib5 = isCloseUnderFib5; + conditions.isCloseCrossedOverFib1 = isCloseCrossedOverFib1; + conditions.isCloseCrossedOverFib2 = isCloseCrossedOverFib2; + conditions.isCloseCrossedOverFib3 = isCloseCrossedOverFib3; + conditions.isCloseCrossedOverFib4 = isCloseCrossedOverFib4; + conditions.isCloseCrossedOverFib5 = isCloseCrossedOverFib5; + conditions.isCloseCrossedUnderFib1 = isCloseCrossedUnderFib1; + conditions.isCloseCrossedUnderFib2 = isCloseCrossedUnderFib2; + conditions.isCloseCrossedUnderFib3 = isCloseCrossedUnderFib3; + conditions.isCloseCrossedUnderFib4 = isCloseCrossedUnderFib4; + conditions.isCloseCrossedUnderFib5 = isCloseCrossedUnderFib5; conditions.isSCBullish = isSCBullish; conditions.isSCHHBullish = isSCHHBullish; conditions.isSCLLBullish = isSCLLBullish; @@ -2812,7 +2995,8 @@ private: { // int totalBars = CountBars(); - if (totalBars > 1000) { + if (totalBars > 1000) + { totalBars = 1000; }