From 70f2435c4409f1b67f881ed8fc34bcf297dc5c50 Mon Sep 17 00:00:00 2001 From: Hadi Khazaee Asl Date: Thu, 18 Jul 2024 17:14:31 +0330 Subject: [PATCH] last ... --- Experts/x-test-strategies.ea.mq5 | 202 +++++++------- Strategies/x-saherelm.xemrng.strategy.mq5 | 317 ++++++++++++++++++++-- 2 files changed, 399 insertions(+), 120 deletions(-) diff --git a/Experts/x-test-strategies.ea.mq5 b/Experts/x-test-strategies.ea.mq5 index 2a3d0d22..03051f17 100644 --- a/Experts/x-test-strategies.ea.mq5 +++ b/Experts/x-test-strategies.ea.mq5 @@ -33,14 +33,25 @@ // // Inputs ... -long mMagicNumber = 78692110; // Magic Number -int mSlippage = 10; // Slippgae +long eaMagicNumber = 78692110; // Magic Number +int eaSlippage = 10; // Slippgae // double eaVolume = 0.01; double eaAllowLong = true; double eaAllowShort = true; +// +int eaMaxAllowedLongs = 0; +int eaMaxAllowedShorts = 0; + +// +double eaTPPoint = 200; +double eaSLPoint = 100; + +// +double eaR2R = 1.5; + // // Variables ... XSCXCTHelper *mCTHelper; @@ -198,7 +209,7 @@ bool InitialEA() { // // MAGIC NUMBER ... - long magicNumber = mMagicNumber + 1; + long magicNumber = eaMagicNumber + 1; // // XSRBR ... @@ -212,13 +223,13 @@ bool InitialEA() PERIOD_M5, PERIOD_H1, eaVolume, - 1.5, // R2R ... - mSlippage, + eaR2R, // R2R ... + eaSlippage, magicNumber, - true, // Use TP SL Point - false, // Use Max - 200, // TP - 100, // SL + true, // Use TP SL Point + false, // Use Max + eaTPPoint, // TP + eaSLPoint, // SL eaAllowLong, eaAllowShort, 0, // Max Longs @@ -237,17 +248,17 @@ bool InitialEA() PERIOD_M15, PERIOD_M30, eaVolume, - 1.5, // R2R ... - mSlippage, + eaR2R, // R2R ... + eaSlippage, magicNumber, - true, // Use TP SL Point - false, // Use Max - 200, // TP - 100, // SL + true, // Use TP SL Point + false, // Use Max + eaTPPoint, // TP + eaSLPoint, // SL eaAllowLong, eaAllowShort, - 0, // Max Longs - 0, // Max Shorts + eaMaxAllowedLongs, // Max Longs + eaMaxAllowedShorts, // Max Shorts X_SIGNALLING_BOTH_DIRECTIONS // X_SIGNALIING_TREND_REVERSAL_DIRECTION // X_SIGNALLING_BOTH_DIRECTIONS // ); eurusdM15SRBRStrategy.SetAlertLogAlerts(true); @@ -265,18 +276,17 @@ bool InitialEA() eurusdSymbol, PERIOD_M5, eaVolume, - 1.5, // R2R ... - mSlippage, + eaR2R, // R2R ... + eaSlippage, magicNumber, - true, // Use TP SL Point - false, // Use Max - 200, // TP - 100, // SL + true, // Use TP SL Point + false, // Use Max + eaTPPoint, // TP + eaSLPoint, // SL eaAllowLong, eaAllowShort, - 0, // Max Longs - 0, // Max Shorts - X_SIGNALLING_BOTH_DIRECTIONS // X_SIGNALIING_TREND_REVERSAL_DIRECTION // X_SIGNALLING_BOTH_DIRECTIONS // + eaMaxAllowedLongs, // Max Longs + eaMaxAllowedShorts // Max Shorts ); eurusdM5EMRNGStrategy.SetAlertLogAlerts(true); eurusdM5EMRNGStrategy.SetAlertEnableAlerts(true); @@ -291,7 +301,7 @@ bool InitialEA() { // // MAGIC NUMBER ... - long magicNumber = mMagicNumber + 2; + long magicNumber = eaMagicNumber + 2; // // XSRBR ... @@ -305,17 +315,17 @@ bool InitialEA() PERIOD_M5, PERIOD_H1, eaVolume, - 1.5, // R2R ... - mSlippage, + eaR2R, // R2R ... + eaSlippage, magicNumber, - true, // Use TP SL Point - false, // Use Max - 200, // TP - 100, // SL + true, // Use TP SL Point + false, // Use Max + eaTPPoint, // TP + eaSLPoint, // SL eaAllowLong, eaAllowShort, - 0, // Max Longs - 0, // Max Shorts + eaMaxAllowedLongs, // Max Longs + eaMaxAllowedShorts, // Max Shorts X_SIGNALLING_BOTH_DIRECTIONS // X_SIGNALIING_TREND_REVERSAL_DIRECTION // X_SIGNALLING_BOTH_DIRECTIONS // ); usdchfM5SRBRStrategy.SetAlertLogAlerts(true); @@ -333,18 +343,17 @@ bool InitialEA() usdchfSymbol, PERIOD_M5, eaVolume, - 1.5, // R2R ... - mSlippage, + eaR2R, // R2R ... + eaSlippage, magicNumber, - true, // Use TP SL Point - false, // Use Max - 200, // TP - 100, // SL + true, // Use TP SL Point + false, // Use Max + eaTPPoint, // TP + eaSLPoint, // SL eaAllowLong, eaAllowShort, - 0, // Max Longs - 0, // Max Shorts - X_SIGNALLING_BOTH_DIRECTIONS // X_SIGNALIING_TREND_REVERSAL_DIRECTION // X_SIGNALLING_BOTH_DIRECTIONS // + eaMaxAllowedLongs, // Max Longs + eaMaxAllowedShorts // Max Shorts ); usdchfM5EMRNGStrategy.SetAlertLogAlerts(true); usdchfM5EMRNGStrategy.SetAlertEnableAlerts(true); @@ -359,7 +368,7 @@ bool InitialEA() { // // MAGIC NUMBER ... - long magicNumber = mMagicNumber + 3; + long magicNumber = eaMagicNumber + 3; // // XSRBR ... @@ -373,17 +382,17 @@ bool InitialEA() PERIOD_M5, PERIOD_M30, eaVolume, - 1.5, // R2R ... - mSlippage, + eaR2R, // R2R ... + eaSlippage, magicNumber, - true, // Use TP SL Point - false, // Use Max - 200, // TP - 100, // SL + true, // Use TP SL Point + false, // Use Max + eaTPPoint, // TP + eaSLPoint, // SL eaAllowLong, eaAllowShort, - 0, // Max Longs - 0, // Max Shorts + eaMaxAllowedLongs, // Max Longs + eaMaxAllowedShorts, // Max Shorts X_SIGNALLING_BOTH_DIRECTIONS // X_SIGNALIING_TREND_REVERSAL_DIRECTION // X_SIGNALLING_BOTH_DIRECTIONS // ); usdjpyM5SRBRStrategy.SetAlertLogAlerts(true); @@ -401,18 +410,17 @@ bool InitialEA() usdjpySymbol, PERIOD_M5, eaVolume, - 1.5, // R2R ... - mSlippage, + eaR2R, // R2R ... + eaSlippage, magicNumber, - true, // Use TP SL Point - false, // Use Max - 200, // TP - 100, // SL + true, // Use TP SL Point + false, // Use Max + eaTPPoint, // TP + eaSLPoint, // SL eaAllowLong, eaAllowShort, - 0, // Max Longs - 0, // Max Shorts - X_SIGNALLING_BOTH_DIRECTIONS // X_SIGNALIING_TREND_REVERSAL_DIRECTION // X_SIGNALLING_BOTH_DIRECTIONS // + eaMaxAllowedLongs, // Max Longs + eaMaxAllowedShorts // Max Shorts ); usdjpyM5EMRNGStrategy.SetAlertLogAlerts(true); usdjpyM5EMRNGStrategy.SetAlertEnableAlerts(true); @@ -427,7 +435,7 @@ bool InitialEA() { // // MAGIC NUMBER ... - long magicNumber = mMagicNumber + 4; + long magicNumber = eaMagicNumber + 4; // // XSRBR ... @@ -441,17 +449,17 @@ bool InitialEA() PERIOD_M5, PERIOD_H1, eaVolume, - 1.5, // R2R ... - mSlippage, + eaR2R, // R2R ... + eaSlippage, magicNumber, - true, // Use TP SL Point - false, // Use Max - 200, // TP - 100, // SL + true, // Use TP SL Point + false, // Use Max + eaTPPoint, // TP + eaSLPoint, // SL eaAllowLong, eaAllowShort, - 0, // Max Longs - 0, // Max Shorts + eaMaxAllowedLongs, // Max Longs + eaMaxAllowedShorts, // Max Shorts X_SIGNALLING_BOTH_DIRECTIONS // X_SIGNALIING_TREND_REVERSAL_DIRECTION // X_SIGNALLING_BOTH_DIRECTIONS // ); gbpusdM5SRBRStrategy.SetAlertLogAlerts(true); @@ -469,18 +477,17 @@ bool InitialEA() gbpusdSymbol, PERIOD_M5, eaVolume, - 1.5, // R2R ... - mSlippage, + eaR2R, // R2R ... + eaSlippage, magicNumber, - true, // Use TP SL Point - false, // Use Max - 200, // TP - 100, // SL + true, // Use TP SL Point + false, // Use Max + eaTPPoint, // TP + eaSLPoint, // SL eaAllowLong, eaAllowShort, - 0, // Max Longs - 0, // Max Shorts - X_SIGNALLING_BOTH_DIRECTIONS // X_SIGNALIING_TREND_REVERSAL_DIRECTION // X_SIGNALLING_BOTH_DIRECTIONS // + eaMaxAllowedLongs, // Max Longs + eaMaxAllowedShorts // Max Shorts ); gbpusdM5EMRNGStrategy.SetAlertLogAlerts(true); gbpusdM5EMRNGStrategy.SetAlertEnableAlerts(true); @@ -495,7 +502,7 @@ bool InitialEA() { // // MAGIC NUMBER ... - long magicNumber = mMagicNumber + 5; + long magicNumber = eaMagicNumber + 5; // // XSRBR ... @@ -509,17 +516,17 @@ bool InitialEA() PERIOD_M15, PERIOD_M30, eaVolume, - 1.5, // R2R ... - mSlippage, + eaR2R, // R2R ... + eaSlippage, magicNumber, - true, // Use TP SL Point - false, // Use Max - 200, // TP - 100, // SL + true, // Use TP SL Point + false, // Use Max + eaTPPoint, // TP + eaSLPoint, // SL eaAllowLong, eaAllowShort, - 0, // Max Longs - 0, // Max Shorts + eaMaxAllowedLongs, // Max Longs + eaMaxAllowedShorts, // Max Shorts X_SIGNALLING_BOTH_DIRECTIONS // X_SIGNALIING_TREND_REVERSAL_DIRECTION // X_SIGNALLING_BOTH_DIRECTIONS // ); xauusdM5SRBRStrategy.SetAlertLogAlerts(true); @@ -537,18 +544,17 @@ bool InitialEA() xauusdSymbol, PERIOD_M5, eaVolume, - 1.5, // R2R ... - mSlippage, + eaR2R, // R2R ... + eaSlippage, magicNumber, - true, // Use TP SL Point - false, // Use Max - 200, // TP - 100, // SL + true, // Use TP SL Point + false, // Use Max + eaTPPoint, // TP + eaSLPoint, // SL eaAllowLong, eaAllowShort, - 0, // Max Longs - 0, // Max Shorts - X_SIGNALLING_BOTH_DIRECTIONS // X_SIGNALIING_TREND_REVERSAL_DIRECTION // X_SIGNALLING_BOTH_DIRECTIONS // + eaMaxAllowedLongs, // Max Longs + eaMaxAllowedShorts // Max Shorts ); xauusdM5EMRNGStrategy.SetAlertLogAlerts(true); xauusdM5EMRNGStrategy.SetAlertEnableAlerts(true); diff --git a/Strategies/x-saherelm.xemrng.strategy.mq5 b/Strategies/x-saherelm.xemrng.strategy.mq5 index 3515b3e6..781bba2d 100644 --- a/Strategies/x-saherelm.xemrng.strategy.mq5 +++ b/Strategies/x-saherelm.xemrng.strategy.mq5 @@ -22,6 +22,7 @@ // /// Imports ... #include "../Helpers/x-saherelm.xtm.helper.mq5" +#include "../Helpers/x-saherelm.xstr.helper.mq5" #include "../Classes/x-saherelm.xstrategy.class.mq5" // @@ -51,8 +52,7 @@ public: bool _allowLong = true, bool _allowShort = true, int _maxAllowedLongs = 0, - int _maxAllowedShorts = 0, - ENUM_X_SIGNALLING_DIRECTION _signallingDirection = X_SIGNALLING_TREND_DIRECTION // Signalling in Which Direction + int _maxAllowedShorts = 0 // ) : XSCBaseStrategy(_symbol, _period, _volume, @@ -70,10 +70,7 @@ public: ) { // - mSignallingDirection = _signallingDirection; - - // - ConfigureTMInputs(); + ConfigureRequirements(); // SetAlertPrefix(GetTag()); @@ -89,18 +86,6 @@ public: // // Getter / Setter (s) ... - // - ENUM_X_SIGNALLING_DIRECTION SignallingDirection() - { - return mSignallingDirection; - } - - // - void SignallingDirection(ENUM_X_SIGNALLING_DIRECTION value) - { - mSignallingDirection = value; - } - // // Overrides ... @@ -120,6 +105,276 @@ public: // bool result = false; + // + signal.Clean(); + + // + double sl = 0; + double tp = 0; + double risk = 0; + double entry = 0; + double reward = 0; + double r2r = R2R(); + ENUM_POSITION_TYPE type = POSITION_TYPE_BUY; + ENUM_X_ORDER_MODES mode = X_ORDER_MODE_MARKET; + + // + int start = 0; + int count = 5; + + // + double tms[]; + ArraySetAsSeries(tms, true); + mTMHelper.CopyMain( + start, + count, + tms // + ); + + // + XSTRConditions strConditions; + result = mSTRHelper.GetConditions( + strConditions, + start, + count // + ); + if (!result) + { + return result; + } + + // + XOHCL cBar; + result = cBar.Init( + mSymbol, + mPeriod, + 1 // + ); + if (!result) + { + return result; + } + + // + double hh5 = cBar.FindHighest( + 5, + MODE_HIGH // + ); + double ll5 = cBar.FindLowest( + 5, + MODE_LOW // + ); + + // + XOHCL pBar; + result = cBar.GetPreviousBar(pBar); + if (!result) + { + return result; + } + + // + bool hasLong = false; + bool hasShort = false; + + // + XOHCL tmpHSW[]; + XOHCL tmpLSW[]; + + // + bool useHammer = true; + bool useMorningStar = false; + bool useBullishEngulfing = true; + bool useBullishMaurubozu = true; + + // + bool useShootingStar = true; + bool useEveningStar = false; + bool useBearishEngulfing = true; + bool useBearishMaurubozu = true; + + // + // Long ... + + // + bool isHammer = !useHammer + ? false + : cBar.IsHammer(); + bool isMorningStar = !useMorningStar + ? false + : cBar.IsMorningStar(); + bool isBullishMarubozu = !useBullishEngulfing + ? false + : cBar.IsBullishMarubozu(); + bool isBullishEngulfing = !useBullishMaurubozu + ? false + : cBar.IsBullishEngulfing(); + + // + bool isBullishTrend = cBar.HasBullishTrend( + tmpHSW, + tmpLSW, + true // + ); + + // + // Find Swing Low Above of EMA ... + // Find Swing High Above of EMA ... + // Fins Swing Low Below of EMA ... + // Detect Bullish Pattern ... + hasLong = + // + cBar.IsBullish() + // + && + // + isBullishTrend + // + && + // + cBar.close > tms[1] + // + && + // + ll5 < tms[1] + // + && + // + strConditions.isTrendSwitchedToBullish + // + && + // + ( + // + isHammer + // + || + // + isMorningStar + // + || + // + isBullishMarubozu + // + || + // + isBullishEngulfing + // + ) + // + ; + if (hasLong) + { + // + type = POSITION_TYPE_BUY; + + // + sl = tmpLSW[ArraySize(tmpLSW) - 1].low; + } + + // + // Short ... + bool isShootingStar = !useShootingStar + ? false + : cBar.IsShootingStar(); + bool isEveningStar = !useEveningStar + ? false + : cBar.IsEveningStar(); + bool isBearishEngulfing = !useBearishEngulfing + ? false + : cBar.IsBearishEngulfing(); + bool isBearishMaurubozu = !useBearishMaurubozu + ? false + : cBar.IsBearishMarubozu(); + + // + bool isBearishTrend = cBar.HasBearishTrend( + tmpHSW, + tmpLSW, + true // + ); + + // + hasShort = + // + cBar.IsBearish() + // + && + // + isBearishTrend + // + && + // + cBar.close < tms[1] + // + && + // + hh5 > tms[1] + // + && + // + strConditions.isTrendSwitchedToBearish + // + && + // + ( + // + isShootingStar + // + || + // + isEveningStar + // + || + // + isBearishEngulfing + // + || + // + isBearishMaurubozu + // + ) + // + ; + if (hasShort) + { + // + type = POSITION_TYPE_SELL; + + // + sl = tmpHSW[ArraySize(tmpHSW) - 1].high; + } + + // + result = hasLong || hasShort; + if (!result) + { + return result; + } + + // + entry = GetEntry(mSymbol, type); + CalculateTPSLByPrice( + sl, + tp, + type, + entry, + r2r // + ); + + // + result = signal.Prepare( + mSymbol, + GetTag(), + mPeriod, + type, + mode, + entry, + mVolume, + sl, + tp // + ); + // return result; } @@ -130,13 +385,14 @@ protected: // // Props ... - // - ENUM_X_SIGNALLING_DIRECTION mSignallingDirection; // Signalling Direction - // XTMInputs mTMInputs; // Tren Magic Inputs ... XSCXTMHelper *mTMHelper; // Trend Magic Helper Class ... + // + XSTRInputs mSTRInputs; // Super Trend Inputs ... + XSCXSTRHelper *mSTRHelper; // Super Trend Helper Class ... + // // Private ... private: @@ -144,7 +400,7 @@ private: // // Set Default TM Inputs ... - void ConfigureTMInputs() + void ConfigureRequirements() { // mTMInputs.maShift = 0; @@ -164,6 +420,23 @@ private: mPeriod, mTMInputs // ); + + // + mSTRInputs.length = 14; + mSTRInputs.multiplier = 3.5; + mSTRInputs.appliedTo = PRICE_CLOSE; + + // + mSTRInputs.showTrends = true; + mSTRInputs.fillTrends = false; + + // + mSTRHelper = new XSCXSTRHelper(); + mSTRHelper.Init( + mSymbol, + mPeriod, + mSTRInputs // + ); } };