diff --git a/Classes/x-saherelm.x121.provider.class.mq5 b/Classes/x-saherelm.x121.provider.class.mq5 index 795427cb..10fe5d90 100644 --- a/Classes/x-saherelm.x121.provider.class.mq5 +++ b/Classes/x-saherelm.x121.provider.class.mq5 @@ -523,6 +523,42 @@ public: ENUM_TIMEFRAMES period; // Period datetime time; // Time + // + // XZG ... + double zigzags[]; + double zigzagPVs[]; + + // + // XDON ... + double donUpperOs[]; + double donLowerOs[]; + double donUpperCs[]; + double donLowerCs[]; + double donUpperHs[]; + double donLowerHs[]; + double donUpperLs[]; + double donLowerLs[]; + + // + // XPV ... + double pvPeaks[]; + double pvVales[]; + double pvResistances[]; + double pvSupports[]; + double pvFib1s[]; + double pvFib2s[]; + double pvFib3s[]; + double pvFib4s[]; + double pvFib5s[]; + double pvSCHHs[]; + double pvSCLLs[]; + double pvMCHHs[]; + double pvMCLLs[]; + double pvLCHHs[]; + double pvLCLLs[]; + double pvHCHHs[]; + double pvHCLLs[]; + // X121MCycleConditions cMarketConditions; // Current Market Conditions X121MCycleConditions sMarketConditions; // Short Market Conditions @@ -705,6 +741,29 @@ public: // return result; } + + // + // For Data Collector ... + string GetToken() + { + return GetSpecificToken(this); + } + bool IsModelValid() + { + return false; + } + string ToModelString() + { + return NULL; + } + bool ParseModel(string content) + { + return false; + } + int FindIndex(X121MarketConditions &items[]) + { + return -1; + } }; // @@ -1099,8 +1158,8 @@ public: // // Reading Market Conditions ... GetMarketConditions(mConditions, barIndex); - // string mConditionsStr = mConditions.GenerateSummary(); - // Print(mConditionsStr); + string mConditionsStr = mConditions.GenerateSummary(); + Print(mConditionsStr); // int signalPusher = 0; @@ -1695,13 +1754,51 @@ private: void CalculateConditions( X121MarketConditions &mConditions, // Market Conditions Result int barIndex = 0 // Specified Bar Index - ) { + ) + { // -// cMarket -// sMarket -// mMarket -// lMarket -// hMarket + mConditions.symbol = GetSymbol(); + mConditions.period = GetPeriod(); + mConditions.time = iTime( + mConditions.symbol, + mConditions.period, + barIndex // + ); + + // + cMarket.GetMarketConditions( + mConditions.cMarketConditions, + 0, + mNumberOfItems // + ); + + // + sMarket.GetMarketConditions( + mConditions.sMarketConditions, + 0, + mNumberOfItems // + ); + + // + mMarket.GetMarketConditions( + mConditions.mMarketConditions, + 0, + mNumberOfItems // + ); + + // + lMarket.GetMarketConditions( + mConditions.lMarketConditions, + 0, + mNumberOfItems // + ); + + // + hMarket.GetMarketConditions( + mConditions.hMarketConditions, + 0, + mNumberOfItems // + ); } // diff --git a/Classes/x-saherelm.x121.xmcycle.class.mq5 b/Classes/x-saherelm.x121.xmcycle.class.mq5 index b229a443..4f96595f 100644 --- a/Classes/x-saherelm.x121.xmcycle.class.mq5 +++ b/Classes/x-saherelm.x121.xmcycle.class.mq5 @@ -458,6 +458,8 @@ public: // Tenkan-sen < Kijun-sen --> bearish signal bool isTenkanSenOverKijunSen; bool isTenkanSenUnderKijunSen; + bool isTenkanSenCrossedOverKijunSen; + bool isTenkanSenCrossedUnderKijunSen; // // XMC ... @@ -1074,6 +1076,12 @@ public: { bullScore++; } + if (isTenkanSenCrossedOverKijunSen) + { + // + bullScore++; + bearScore--; + } // // BEARISH ... @@ -1101,6 +1109,12 @@ public: { bearScore++; } + if (isTenkanSenCrossedUnderKijunSen) + { + // + bullScore--; + bearScore++; + } // // XMC ... @@ -2173,7 +2187,102 @@ public: conditions.isCloseUnderVerifier = isCloseUnderVerifier; // - // TODO: XICH ... + // XICH ... + + // + ich.CopyTenkanSen( + barIndex, + mNumberOfItems, + conditions.ichTenkanSens // + ); + ich.CopyKijunSen( + barIndex, + mNumberOfItems, + conditions.ichKijunSens // + ); + ich.CopyChikouSpan( + barIndex, + mNumberOfItems, + conditions.ichChikouSpans // + ); + ich.CopySenkouSpanA( + barIndex, + mNumberOfItems, + conditions.ichSenkouSpanBs // + ); + ich.CopySenkouSpanB( + barIndex, + mNumberOfItems, + conditions.ichSenkouSpanAs // + ); + + // + double tenkanSen = ich.GetTenkanSen(barIndex); + double tenkanSenPrev = ich.GetTenkanSen(barIndex + 1); + + // + double kijunSen = ich.GetKijunSen(barIndex); + double kijunSenPrev = ich.GetKijunSen(barIndex + 1); + + // + double senkouSpanA = ich.GetSenkouSpanA(barIndex); + double senkouSpanAPrev = ich.GetSenkouSpanA(barIndex + 1); + + // + double senkouSpanB = ich.GetSenkouSpanB(barIndex); + double senkouSpanBPrev = ich.GetSenkouSpanB(barIndex + 1); + + // + double futureSenkouSpanA = ich.GetFutureSenkouSpanA(barIndex); + double futureSenkouSpanAPrev = ich.GetFutureSenkouSpanA(barIndex + 1); + + // + double futureSenkouSpanB = ich.GetFutureSenkouSpanB(barIndex); + double futureSenkouSpanBPrev = ich.GetFutureSenkouSpanB(barIndex + 1); + + // + bool isSenkouSpanAOverB = senkouSpanA > senkouSpanB; + bool isSenkouSpanAUnderB = senkouSpanA < senkouSpanB; + bool isSenkouSpanAOverLast = senkouSpanA > senkouSpanAPrev; + bool isSenkouSpanAUnderLast = senkouSpanA < senkouSpanAPrev; + bool isFutureSenkouSpanAOverB = futureSenkouSpanA > futureSenkouSpanB; + bool isFutureSenkouSpanAUnderB = futureSenkouSpanA < futureSenkouSpanB; + bool isFutureSenkouSpanAOverLast = futureSenkouSpanA > futureSenkouSpanAPrev; + bool isFutureSenkouSpanAUnderLast = futureSenkouSpanA < futureSenkouSpanAPrev; + bool isCloseOverKijunSen = pBar.close > kijunSenPrev; + bool isCloseUnderKijunSen = pBar.close < kijunSenPrev; + bool isTenkanSenOverKijunSen = tenkanSen > kijunSen; + bool isTenkanSenUnderKijunSen = tenkanSen < kijunSen; + bool isTenkanSenPrevOverKijunSen = tenkanSenPrev > kijunSenPrev; + bool isTenkanSenPrevUnderKijunSen = tenkanSenPrev < kijunSenPrev; + bool isTenkanSenCrossedOverKijunSen = + // + isTenkanSenOverKijunSen && + !isTenkanSenPrevOverKijunSen + // + ; + bool isTenkanSenCrossedUnderKijunSen = + // + isTenkanSenUnderKijunSen && + !isTenkanSenPrevUnderKijunSen + // + ; + + // + conditions.isSenkouSpanAOverB = isSenkouSpanAOverB; + conditions.isSenkouSpanAUnderB = isSenkouSpanAUnderB; + conditions.isSenkouSpanAOverLast = isSenkouSpanAOverLast; + conditions.isSenkouSpanAUnderLast = isSenkouSpanAUnderLast; + conditions.isFutureSenkouSpanAOverB = isFutureSenkouSpanAOverB; + conditions.isFutureSenkouSpanAUnderB = isFutureSenkouSpanAUnderB; + conditions.isFutureSenkouSpanAOverLast = isFutureSenkouSpanAOverLast; + conditions.isFutureSenkouSpanAUnderLast = isFutureSenkouSpanAUnderLast; + conditions.isCloseOverKijunSen = isCloseOverKijunSen; + conditions.isCloseUnderKijunSen = isCloseUnderKijunSen; + conditions.isTenkanSenOverKijunSen = isTenkanSenOverKijunSen; + conditions.isTenkanSenUnderKijunSen = isTenkanSenUnderKijunSen; + conditions.isTenkanSenCrossedOverKijunSen = isTenkanSenCrossedOverKijunSen; + conditions.isTenkanSenCrossedUnderKijunSen = isTenkanSenCrossedUnderKijunSen; // // XOSC ...