From bb384252c0c303bd1a4493362455c756c4e1b30a Mon Sep 17 00:00:00 2001 From: Hadi Khazaee Asl Date: Sun, 26 May 2024 05:59:12 +0330 Subject: [PATCH] last ... --- MQLTestWorkspace/BKPS/eqm.mq5 | 531 ++++++++++++++++++++++++++++++++++ 1 file changed, 531 insertions(+) create mode 100644 MQLTestWorkspace/BKPS/eqm.mq5 diff --git a/MQLTestWorkspace/BKPS/eqm.mq5 b/MQLTestWorkspace/BKPS/eqm.mq5 new file mode 100644 index 0000000..38180f0 --- /dev/null +++ b/MQLTestWorkspace/BKPS/eqm.mq5 @@ -0,0 +1,531 @@ + + // + // Find Max InDD Position ... + XPosition positions[]; + int positionsCount = mTrader.GetInDrawdownPositions( + positions, + NULL, + NULL, + NULL, + NULL, + X_POSITION_SELECT_MAX // + ); + if (positionsCount <= 0) + { + return; + } + + // + XPosition maxInDP = positions[0]; + string symbol = maxInDP.symbol; + ENUM_TIMEFRAMES period = maxInDP.period; + + // + X121ProviderDescriptor maxInDPDescriptor; + int descriptorsCount = CountDescriptors(); + if (descriptorsCount <= 0) + { + return; + } + + // + // Find Provider ... + for (int i = 0; i < descriptorsCount; i++) + { + // + X121ProviderDescriptor iDescriptor = mDescriptors[i]; + + // + if (iDescriptor.symbol == symbol && + iDescriptor.period == period) + { + // + maxInDPDescriptor = iDescriptor; + break; + } + } + + // + double longEntry = GetEntry(symbol, POSITION_TYPE_BUY); + double shortEntry = GetEntry(symbol, POSITION_TYPE_SELL); + + // + XOHCLSupRes longSupRes; + maxInDPDescriptor + .provider + .GenerateLongSupRes( + longSupRes // + ); + + // + XOHCLSupRes shortSupRes; + maxInDPDescriptor + .provider + .GenerateShortSupRes( + shortSupRes // + ); + + // + XProfitTrack track; + GetProfitTrack( + track // + ); + + // + bool isLongIncreasing = IsProfitTrackFieldIncreasing( + X_PROFIT_TRACK_LONGS_PROFIT, + 0, + 30 // + ); + + // + bool isLongDecresing = IsProfitTrackFieldDecreasing( + X_PROFIT_TRACK_LONGS_PROFIT, + 0, + 30 // + ); + + // + bool isShortIncreasing = IsProfitTrackFieldIncreasing( + X_PROFIT_TRACK_SHORTS_PROFIT, + 0, + 30 // + ); + + // + bool isShortDecresing = IsProfitTrackFieldDecreasing( + X_PROFIT_TRACK_SHORTS_PROFIT, + 0, + 30 // + ); + + // + XSignal sSignal; + bool isValidSignal = false; + if (track.shortsProfit < track.longsProfit) + { + // + // Find Long ... + isValidSignal = sSignal.PrepareMarketLong( + symbol, + "EQM", + period, + longEntry, + track.shortsVolume, + X_SIGNAL_USE_NOTHING, + 0, //; longSupRes.sup[0], + 0 //; longSupRes.res[0] // + ); + } + else if (track.longsProfit < track.shortsProfit) + { + // + // Find Short ... + isValidSignal = sSignal.PrepareMarketShort( + symbol, + "EQM", + period, + shortEntry, + track.shortsVolume, + X_SIGNAL_USE_NOTHING, + 0, // shortSupRes.res[0], + 0 // shortSupRes.sup[0] // + ); + } + + // + if (isValidSignal) + { + // + ENUM_X_SIGNAL_EXECUTION_RESULT sState; + bool isExecuted = mTrader.ExecuteSignal( + sSignal, + sState, + ORDER_TIME_GTC, + NULL, + false // Ignore Policy Checking ... + ); + + // + if (isExecuted) + { + // + string message = "EQM Executed Support Signal for: " + symbol + ", On: " + ToString(period); + + // + mAlert.Alert(message); + } + } + + + +//////////////////////////////////////////////// + + + // else + // { + // // + // // not First Signal ... + + // // + // // Calculate Provider Specified Open Positions Profit ... + // double profits = CalculatePositionsProfit(positions); + // if (profits > 0) + // { + + // // + // AddRef( + // iSignal, + // signals // + // ); + + // // // + // // // Find Max In Profit of Same Position ... + // // Clean(positions); + // // positionsCount = mTrader.GetInProfitPositions( + // // positions, + // // iSignal.symbol, + // // iSignal.provider, + // // NULL, // All Periods ... + // // iSignal.type, + // // X_POSITION_SELECT_MAX // Max In Profit ... + // // ); + // // if (positionsCount <= 0) + // // { + // // continue; + // // } + + // // // + // // string comment = "EQM Close Max Profit ..."; + // // bool isClosed = mTrader.Close( + // // positions[0].ticket, + // // comment // + // // ); + // // if (isClosed) + // // { + // // // + // // RemoveTrail(positions[0].ticket); + + // // // + // // string message = "EQM Close Max In Profit (" + ToString(positions[0].ticket) + ") for new Signal ..."; + + // // // + // // mAlert.Alert(message); + + // // // + // // AddRef( + // // iSignal, + // // signals // + // // ); + + // // // + // // continue; + // // } + // } + // else + // { + // // // + // // // Find Max In Profit of Same Position ... + // // Clean(positions); + // // positionsCount = mTrader.GetInProfitPositions( + // // positions, + // // iSignal.symbol, + // // iSignal.provider, + // // NULL, // All Periods ... + // // iSignal.type, + // // X_POSITION_SELECT_MAX // Max In Profit ... + // // ); + // // if (positionsCount <= 0) + // // { + // // continue; + // // } + + // // // + // // string comment = "EQM Close Max Profit ..."; + // // bool isClosed = mTrader.Close( + // // positions[0].ticket, + // // comment // + // // ); + // // if (isClosed) + // // { + // // // + // // RemoveTrail(positions[0].ticket); + + // // // + // // string message = "EQM Close Max In Profit (" + ToString(positions[0].ticket) + ") for new Signal ..."; + + // // // + // // mAlert.Alert(message); + + // // // + // // AddRef( + // // iSignal, + // // signals // + // // ); + + // // // + // // continue; + // // } + // } + // } + + +//////////////////////////////////////////////////////////// + + // + double bullishScore = mBullishScore[0]; + double bullishMin100 = GetBullishScoreMin(0, 100); + double bullishMax100 = GetBullishScoreMax(0, 100); + double bullish9AVG = GetBullishScoreAverage(0, 9); + double bullish17AVG = GetBullishScoreAverage(0, 17); + double bullish26AVG = GetBullishScoreAverage(0, 26); + + // + double bearishScore = mBearishScore[0]; + + // + bool isScorePassed = IsScorePassedForLong(); + + // + bool isRSIinOverSell = + // + mConditions.cMarketConditions.isRSIUnder30 && + mConditions.cMarketConditions.isRVILongStart && + mConditions.cMarketConditions.isCCIUnderNegativeHundred + // + ; + + // + bool isBullishOverAVGs = + // + ArraySize(mBullishScore) > 100 && + bullishScore > mBullishScore[1] && + bullishScore > bearishScore && + bullishScore > bullish9AVG && + bullishScore > bullish17AVG && + bullishScore > bullish26AVG + // + ; + + // + result = + // + isRSIinOverSell + // && + // isBullishOverAVGs + // + ; + + // + // result = result && isScorePassed; + + // + if (result) + { + sl = GetMinVales(); + } + + // + double bearishScore = mBearishScore[0]; + double bearishMin100 = GetBearishScoreMin(0, 100); + double bearishMax100 = GetBearishScoreMax(0, 100); + double bearish9AVG = GetBearishScoreAverage(0, 9); + double bearish17AVG = GetBearishScoreAverage(0, 17); + double bearish26AVG = GetBearishScoreAverage(0, 26); + + // + double bullishScore = mBullishScore[0]; + + // + bool isBearishOverAVGs = + // + ArraySize(mBearishScore) > 100 && + bearishScore > mBearishScore[1] && + bearishScore > bullishScore && + bearishScore > bearish9AVG && + bearishScore > bearish17AVG && + bearishScore > bearish26AVG + // + ; + + // + bool isScorePassed = IsScorePassedForShort(); + + // + bool isRSIOverBaought = + mConditions.cMarketConditions.isRSIOver70 && + mConditions.cMarketConditions.isRVIShortStart && + mConditions.cMarketConditions.isCCIOverPositiveHundred; + + // + result = + // + isRSIOverBaought + // && + // isBearishOverAVGs + // + ; + + // + // result = result && isScorePassed; + + // + if (result) + { + sl = GetMaxPeaks(); + } + + + +////////////////////////////////////////////////////////// + + // + bool isCICHLong = + // + (mConditions.cMarketConditions.isSenkouSpanAOverB && + mConditions.cMarketConditions.isCloseOverKijunSen && + mConditions.cMarketConditions.isSenkouSpanAOverLast && + mConditions.cMarketConditions.isTenkanSenCrossedOverKijunSen) + // + ; + + // + bool isSICHLong = + // + (mConditions.sMarketConditions.isSenkouSpanAOverB && + mConditions.sMarketConditions.isCloseOverKijunSen && + mConditions.sMarketConditions.isSenkouSpanAOverLast && + mConditions.sMarketConditions.isTenkanSenCrossedOverKijunSen) + // + ; + + // + bool isMICHLong = + // + (mConditions.mMarketConditions.isSenkouSpanAOverB && + mConditions.mMarketConditions.isCloseOverKijunSen && + mConditions.mMarketConditions.isSenkouSpanAOverLast && + mConditions.mMarketConditions.isTenkanSenCrossedOverKijunSen) + // + ; + + // + bool isLICHLong = + // + (mConditions.lMarketConditions.isSenkouSpanAOverB && + mConditions.lMarketConditions.isCloseOverKijunSen && + mConditions.lMarketConditions.isSenkouSpanAOverLast && + mConditions.lMarketConditions.isTenkanSenCrossedOverKijunSen) + // + ; + + // + bool isHICHLong = + // + (mConditions.hMarketConditions.isSenkouSpanAOverB && + mConditions.hMarketConditions.isCloseOverKijunSen && + mConditions.hMarketConditions.isSenkouSpanAOverLast && + mConditions.hMarketConditions.isTenkanSenCrossedOverKijunSen) + // + ; + + // + result = + // // + // isCICHLong + // // + // || + // + isSICHLong + // + || + // + isMICHLong + // + || + // + isLICHLong + // + || + // + isHICHLong + // + ; + + +/////////////////////////////////////////////////////////////////////////////// + + + // + bool isCICHShort = + // + (mConditions.cMarketConditions.isSenkouSpanAUnderB && + mConditions.cMarketConditions.isCloseUnderKijunSen && + mConditions.cMarketConditions.isSenkouSpanAUnderLast && + mConditions.cMarketConditions.isTenkanSenCrossedUnderKijunSen) + // + ; + + // + bool isSICHShort = + // + (mConditions.sMarketConditions.isSenkouSpanAUnderB && + mConditions.sMarketConditions.isCloseUnderKijunSen && + mConditions.sMarketConditions.isSenkouSpanAUnderLast && + mConditions.sMarketConditions.isTenkanSenCrossedUnderKijunSen) + // + ; + + // + bool isMICHShort = + // + (mConditions.mMarketConditions.isSenkouSpanAUnderB && + mConditions.mMarketConditions.isCloseUnderKijunSen && + mConditions.mMarketConditions.isSenkouSpanAUnderLast && + mConditions.mMarketConditions.isTenkanSenCrossedUnderKijunSen) + // + ; + + // + bool isLICHShort = + // + (mConditions.lMarketConditions.isSenkouSpanAUnderB && + mConditions.lMarketConditions.isCloseUnderKijunSen && + mConditions.lMarketConditions.isSenkouSpanAUnderLast && + mConditions.lMarketConditions.isTenkanSenCrossedUnderKijunSen) + // + ; + + // + bool isHICHShort = + // + (mConditions.hMarketConditions.isSenkouSpanAUnderB && + mConditions.hMarketConditions.isCloseUnderKijunSen && + mConditions.hMarketConditions.isSenkouSpanAUnderLast && + mConditions.hMarketConditions.isTenkanSenCrossedUnderKijunSen) + // + ; + + // + result = + // // + // isCICHShort + // // + // || + // + isSICHShort + // + || + // + isMICHShort + // + || + // + isLICHShort + // + || + // + isHICHShort + // + ; +