diff --git a/Classes/x-saherelm.x121.provider.class.mq5 b/Classes/x-saherelm.x121.provider.class.mq5 index 68c3edbb..49b8c5c0 100644 --- a/Classes/x-saherelm.x121.provider.class.mq5 +++ b/Classes/x-saherelm.x121.provider.class.mq5 @@ -1204,7 +1204,7 @@ struct X121ProviderDescriptor XSCX121Provider *provider; // - XSignal signal; + XSignal signals[]; X121MarketConditions conditions; // @@ -1273,7 +1273,7 @@ struct X121ProviderDescriptor void Clean() { // - signal.Clean(); + Clean(signals); conditions.Clear(); } @@ -1302,22 +1302,20 @@ struct X121ProviderDescriptor // // Check Signal ... - bool HasSignal(int barIndex = 0) + int HasSignal(int barIndex = 0) { // - bool result = false; + int result = 0; // - result = inputs.IsValid(); - if (!result) + if (!inputs.IsValid()) { return result; } // int signallersCount = ArraySize(this.signallers); - result = IsValidSize(signallersCount); - if (!result) + if (!IsValidSize(signallersCount)) { return result; } @@ -1328,8 +1326,7 @@ struct X121ProviderDescriptor // // Check Waits Until New Bar ... - result = !this.provider.CanIgnoreProcess(); - if (!result) + if (!this.provider.CanIgnoreProcess()) { return result; } @@ -1662,392 +1659,433 @@ struct X121ProviderDescriptor mProvider = this.signallers[i].GetName(); mVolume = this.signallers[i].staticVolumeShort; } - } - - // - bool hasLong = - // - cHasLong - // - || - // - sHasLong - // - || - // - mHasLong - // - || - // - lHasLong - // - || - // - hHasLong - // - ; - - // - bool hasShort = - // - cHasShort - // - || - // - sHasShort - // - || - // - mHasShort - // - || - // - lHasShort - // - || - // - hHasShort - // - ; - - // - result = hasLong || hasShort; - if (!result) - { - return result; - } - - // - bool isScorePassed = hasLong - ? bullishScore > bearishScore * 2 - : bearishScore > bullishScore * 2; - - // - result = - // - isScorePassed && - (hasLong - ? longVerifiers > 1 - : shortVerifiers > 1) - // - ; - if (!result) - { - return result; - } - - // - // Try to Normalize SL and TP ... - - // - // For Longs ... - if (hasLong) { - // - // Collect all Verifications SLs ... // - double sls[]; - double tps[]; - - // - // Current Market ... - - // - if (cLNSL > 0) { + bool hasLong = // - Add( - cLNSL, - sls // - ); - } - - // - if (cLNTP > 0) { + cHasLong // - Add( - cLNTP, - tps // - ); - } - - // - // Short Market ... - - // - if (sLNSL > 0) { + || // - Add( - sLNSL, - sls // - ); - } - - // - if (sLNTP > 0) { + sHasLong // - Add( - sLNTP, - tps // - ); - } - - // - // Medium Market ... - - // - if (mLNSL > 0) { + || // - Add( - mLNSL, - sls // - ); - } - - // - if (mLNTP > 0) { + mHasLong // - Add( - mLNTP, - tps // - ); - } - - // - // Long Market ... - - // - if (lLNSL > 0) { + || // - Add( - lLNSL, - sls // - ); - } - - // - if (lLNTP > 0) { + lHasLong // - Add( - lLNTP, - tps // - ); - } - - // - // Hind Market ... - - // - if (hLNSL > 0) { + || // - Add( - hLNSL, - sls // - ); - } - - // - if (hLNTP > 0) { + hHasLong // - Add( - hLNTP, - tps // + ; + + // + bool hasShort = + // + cHasShort + // + || + // + sHasShort + // + || + // + mHasShort + // + || + // + lHasShort + // + || + // + hHasShort + // + ; + + // + if (!(hasLong || hasShort)) + { + continue; + } + + // + bool isScorePassed = hasLong + ? bullishScore > bearishScore * 2 + : bearishScore > bullishScore * 2; + + // + bool hasSignal = + // + isScorePassed && + (hasLong + ? longVerifiers > 1 + : shortVerifiers > 1) + // + ; + if (!hasSignal) + { + continue; + } + + // + // Try to Normalize SL and TP ... + + // + // For Longs ... + if (hasLong) + { + // + // Collect all Verifications SLs ... + + // + double sls[]; + double tps[]; + + // + // Current Market ... + + // + if (cLNSL > 0) + { + // + Add( + cLNSL, + sls // + ); + } + + // + if (cLNTP > 0) + { + // + Add( + cLNTP, + tps // + ); + } + + // + // Short Market ... + + // + if (sLNSL > 0) + { + // + Add( + sLNSL, + sls // + ); + } + + // + if (sLNTP > 0) + { + // + Add( + sLNTP, + tps // + ); + } + + // + // Medium Market ... + + // + if (mLNSL > 0) + { + // + Add( + mLNSL, + sls // + ); + } + + // + if (mLNTP > 0) + { + // + Add( + mLNTP, + tps // + ); + } + + // + // Long Market ... + + // + if (lLNSL > 0) + { + // + Add( + lLNSL, + sls // + ); + } + + // + if (lLNTP > 0) + { + // + Add( + lLNTP, + tps // + ); + } + + // + // Hind Market ... + + // + if (hLNSL > 0) + { + // + Add( + hLNSL, + sls // + ); + } + + // + if (hLNTP > 0) + { + // + Add( + hLNTP, + tps // + ); + } + + // + // Now Select Minimum SL ... + if (IsValidSize(ArraySize(sls))) + { + slPrice = GetMin(sls); + } + + // + // Average TP ... + if (IsValidSize(ArraySize(tps))) + { + tpPrice = GetAverage(tps); + } + } + + // + // For Shorts ... + if (hasShort) + { + // + // Collect all Verifications SLs ... + + // + double sls[]; + double tps[]; + + // + // Current Market ... + + // + if (cSHSL > 0) + { + // + Add( + cSHSL, + sls // + ); + } + + // + if (cSHTP > 0) + { + // + Add( + cSHTP, + tps // + ); + } + + // + // Short Market ... + + // + if (sSHSL > 0) + { + // + Add( + sSHSL, + sls // + ); + } + + // + if (sSHTP > 0) + { + // + Add( + sSHTP, + tps // + ); + } + + // + // Medium Market ... + + // + if (mSHSL > 0) + { + // + Add( + mSHSL, + sls // + ); + } + + // + if (mSHTP > 0) + { + // + Add( + mSHTP, + tps // + ); + } + + // + // Long Market ... + + // + if (lSHSL > 0) + { + // + Add( + lSHSL, + sls // + ); + } + + // + if (lSHTP > 0) + { + // + Add( + lSHTP, + tps // + ); + } + + // + // Hind Market ... + + // + if (hSHSL > 0) + { + // + Add( + hSHSL, + sls // + ); + } + + // + if (hSHTP > 0) + { + // + Add( + hSHTP, + tps // + ); + } + + // + // Now Select Minimum SL ... + if (IsValidSize(ArraySize(sls))) + { + slPrice = GetMin(sls); + } + + // + // Average TP ... + if (IsValidSize(ArraySize(tps))) + { + tpPrice = GetAverage(tps); + } + } + + // + // Generate Signal ... + XSignal iSignal; + + // + ENUM_POSITION_TYPE mType = + hasLong + ? POSITION_TYPE_BUY + : POSITION_TYPE_SELL; + + // + double mEntry = GetEntry( + this.symbol, + mType // + ); + + // + double mTP = 0; + double mSL = 0; + CalculateTPSL( + mSL, + mTP, + mType, + mEntry, + mR2R, + slPrice, + tpPrice // + ); + if (mSL == 0 && mTP == 0) + { + Print("Zero TP/SL ..."); + } + + // + bool isPrepared = iSignal.Prepare( + this.symbol, + mProvider, + this.period, + mType, + X_ORDER_MODE_MARKET, + mEntry, + mVolume, + mSL, + mTP // + ); + if (!isPrepared) + { + iSignal.Clean(); + } + + // + if (iSignal.IsValid() && isPrepared && hasSignal) + { + // + AddRef( + iSignal, + this.signals // ); } - - // - // Now Select Minimum SL ... - if (IsValidSize(ArraySize(sls))) { - slPrice = GetMin(sls); - } - - // - // Average TP ... - if (IsValidSize(ArraySize(tps))) { - tpPrice = GetAverage(tps); - } } // - // For Shorts ... - if (hasShort) { - // - // Collect all Verifications SLs ... - - // - double sls[]; - double tps[]; - - // - // Current Market ... - - // - if (cSHSL > 0) { - // - Add( - cSHSL, - sls // - ); - } - - // - if (cSHTP > 0) { - // - Add( - cSHTP, - tps // - ); - } - - // - // Short Market ... - - // - if (sSHSL > 0) { - // - Add( - sSHSL, - sls // - ); - } - - // - if (sSHTP > 0) { - // - Add( - sSHTP, - tps // - ); - } - - // - // Medium Market ... - - // - if (mSHSL > 0) { - // - Add( - mSHSL, - sls // - ); - } - - // - if (mSHTP > 0) { - // - Add( - mSHTP, - tps // - ); - } - - // - // Long Market ... - - // - if (lSHSL > 0) { - // - Add( - lSHSL, - sls // - ); - } - - // - if (lSHTP > 0) { - // - Add( - lSHTP, - tps // - ); - } - - // - // Hind Market ... - - // - if (hSHSL > 0) { - // - Add( - hSHSL, - sls // - ); - } - - // - if (hSHTP > 0) { - // - Add( - hSHTP, - tps // - ); - } - - // - // Now Select Minimum SL ... - if (IsValidSize(ArraySize(sls))) { - slPrice = GetMin(sls); - } - - // - // Average TP ... - if (IsValidSize(ArraySize(tps))) { - tpPrice = GetAverage(tps); - } - } - - // - // Generate Signal ... - this.signal.Clean(); - - // - ENUM_POSITION_TYPE mType = - hasLong - ? POSITION_TYPE_BUY - : POSITION_TYPE_SELL; - - // - double mEntry = GetEntry( - this.symbol, - mType // - ); - - // - double mTP = 0; - double mSL = 0; - CalculateTPSL( - mSL, - mTP, - mType, - mEntry, - mR2R, - slPrice, - tpPrice // - ); - if (mSL == 0 && mTP == 0) - { - Print("Zero TP/SL ..."); - } - - // - result = this.signal.Prepare( - this.symbol, - mProvider, - this.period, - mType, - X_ORDER_MODE_MARKET, - mEntry, - mVolume, - mSL, - mTP // - ); - if (!result) - { - this.signal.Clean(); - } + result = ArraySize(this.signals); // // Set Wait Until New Bar ... - this.provider.SetWaitsUntilNewBar(true); + if (IsValidSize(result)) + { + this.provider.SetWaitsUntilNewBar(true); + } // return result; diff --git a/Classes/x-saherelm.x121.xea.class.mq5 b/Classes/x-saherelm.x121.xea.class.mq5 index 2a3e0b91..a9ef8e5b 100644 --- a/Classes/x-saherelm.x121.xea.class.mq5 +++ b/Classes/x-saherelm.x121.xea.class.mq5 @@ -231,17 +231,19 @@ public: X121ProviderDescriptor iDescriptor = mDescriptors[i]; // - bool iHasSignal = iDescriptor.HasSignal(); - if (iHasSignal) + int iSignalsCount = iDescriptor.HasSignal(); + if (IsValidSize(iSignalsCount)) { // // Here we Can double check Signals by Conditions // for Score Base Filtering ... + iDescriptor.provider.SetWaitsUntilNewBar(true); // - AddRef( - iDescriptor.signal, - signals + Copy( + iDescriptor.signals, + signals, + false // ); diff --git a/Experts/x-test.x121ea.mq5 b/Experts/x-test.x121ea.mq5 index d91f824c..046e92ca 100644 --- a/Experts/x-test.x121ea.mq5 +++ b/Experts/x-test.x121ea.mq5 @@ -1050,9 +1050,9 @@ void ApplyPreDefineConfigurations(X121ProviderDescriptor &iDescriptor) } // - iDescriptor.inputs.ichInputs.showKumo = true; // isX110; - iDescriptor.inputs.ichInputs.showKijunSen = true; // isX110; - iDescriptor.inputs.ichInputs.showTenkanSen = true; // isX110; + iDescriptor.inputs.ichInputs.showKumo = false; // isX110; + iDescriptor.inputs.ichInputs.showKijunSen = false; // isX110; + iDescriptor.inputs.ichInputs.showTenkanSen = false; // isX110; } // \ No newline at end of file