diff --git a/Classes/z-saherelm.x-bar.analyser.class.mq5 b/Classes/z-saherelm.x-bar.analyser.class.mq5 index 0ca2bf23..b11cb8ee 100644 --- a/Classes/z-saherelm.x-bar.analyser.class.mq5 +++ b/Classes/z-saherelm.x-bar.analyser.class.mq5 @@ -55,6 +55,174 @@ class XCBarAnalyser : public XSCBase // // Actions ... + /** + * Calculate Loopback Data for Specific Bar ... + * + * @param index: Integer, Bar Current Index ... + * @param start: Integer, Start of Loopback ... + * @param end: Integer, End of Loopback ... + * @param count: Integer, Number of Calculating Bars ... + * @param bar: XOHCL instance, Specified Bar ... + * @param loopback: Integer, Loopback Length ... + * @return ( bool ) + */ + bool CalculateLoopBackData( + int &index, + int &start, + int &end, + int &count, + XOHCL &bar, + int loopback = 1 // + ) + { + // + bool result = false; + + // + if (loopback < 1) + { + loopback = 1; + } + + // + index = -1; + start = -1; + end = -1; + count = -1; + + // + result = bar.IsValid(); + if (!result) + { + return result; + } + + // + index = bar.Index(); + start = index + 1; + end = start + loopback; + count = end - start; + result = count >= 1; + if (!result) + { + return result; + } + + // + return result; + } + + /** + * Retrieve Loopback HH & LL Data ... + * + * @param hhIDX: Integer, HH Index ... + * @param hh: Double, HH Value ... + * @param llIDX: Integer, LL Index ... + * @param ll: Double, LL Value ... + * @param bar: XOHCL instance ... + * @param loopback: Integer, Loopback Length ... + * + * @return ( bool ) + */ + bool CalculateLoopbackHLData( + int &hhIDX, + double &hh, + int &llIDX, + double &ll, + XOHCL &bar, + int loopback // + ) + { + // + bool result = false; + + // + if (loopback < 1) + { + loopback = 1; + } + + // + int index = -1; + int start = -1; + int end = -1; + int count = -1; + result = CalculateLoopBackData( + index, + start, + end, + count, + bar, + loopback // + ); + if (!result) + { + return result; + } + + // + hhIDX = iHighest( + bar.symbol, + bar.period, + MODE_HIGH, + count, + start // + ); + result = IsValidIndex(hhIDX); + if (!result) + { + return result; + } + + // + llIDX = iLowest( + bar.symbol, + bar.period, + MODE_LOW, + count, + start // + ); + result = IsValidIndex(llIDX); + if (!result) + { + return result; + } + + // + hh = iHigh( + bar.symbol, + bar.period, + hhIDX // + ); + ll = iLow( + bar.symbol, + bar.period, + llIDX // + ); + + // + return result; + } + + /** + * Calculate Bar Range ... + * + * @param bar: XOHCL instance ... + * + * @return ( double ) + */ + double GetBarRangePercent(XOHCL &bar) + { + // + double result = 0; + + // + result = bar.GetRange() / 100; + + // + return result; + } + // // Commons ... @@ -1176,177 +1344,6 @@ class XCBarAnalyser : public XSCBase protected: // - // - // Actions ... - - /** - * Calculate Loopback Data for Specific Bar ... - * - * @param index: Integer, Bar Current Index ... - * @param start: Integer, Start of Loopback ... - * @param end: Integer, End of Loopback ... - * @param count: Integer, Number of Calculating Bars ... - * @param bar: XOHCL instance, Specified Bar ... - * @param loopback: Integer, Loopback Length ... - * @return ( bool ) - */ - bool CalculateLoopBackData( - int &index, - int &start, - int &end, - int &count, - XOHCL &bar, - int loopback = 1 // - ) - { - // - bool result = false; - - // - if (loopback < 1) - { - loopback = 1; - } - - // - index = -1; - start = -1; - end = -1; - count = -1; - - // - result = bar.IsValid(); - if (!result) - { - return result; - } - - // - index = bar.Index(); - start = index + 1; - end = start + loopback; - count = end - start; - result = count >= 1; - if (!result) - { - return result; - } - - // - return result; - } - - /** - * Retrieve Loopback HH & LL Data ... - * - * @param hhIDX: Integer, HH Index ... - * @param hh: Double, HH Value ... - * @param llIDX: Integer, LL Index ... - * @param ll: Double, LL Value ... - * @param bar: XOHCL instance ... - * @param loopback: Integer, Loopback Length ... - * - * @return ( bool ) - */ - bool CalculateLoopbackHLData( - int &hhIDX, - double &hh, - int &llIDX, - double &ll, - XOHCL &bar, - int loopback // - ) - { - // - bool result = false; - - // - if (loopback < 1) - { - loopback = 1; - } - - // - int index = -1; - int start = -1; - int end = -1; - int count = -1; - result = CalculateLoopBackData( - index, - start, - end, - count, - bar, - loopback // - ); - if (!result) - { - return result; - } - - // - hhIDX = iHighest( - bar.symbol, - bar.period, - MODE_HIGH, - count, - start // - ); - result = IsValidIndex(hhIDX); - if (!result) - { - return result; - } - - // - llIDX = iLowest( - bar.symbol, - bar.period, - MODE_LOW, - count, - start // - ); - result = IsValidIndex(llIDX); - if (!result) - { - return result; - } - - // - hh = iHigh( - bar.symbol, - bar.period, - hhIDX // - ); - ll = iLow( - bar.symbol, - bar.period, - llIDX // - ); - - // - return result; - } - - /** - * Calculate Bar Range ... - * - * @param bar: XOHCL instance ... - * - * @return ( double ) - */ - double GetBarRangePercent(XOHCL &bar) - { - // - double result = 0; - - // - result = bar.GetRange() / 100; - - // - return result; - } - // private: // diff --git a/X121SMCEA/Strategy/x-121.smc.test.strategy.class.mq5 b/X121SMCEA/Strategy/x-121.smc.test.strategy.class.mq5 index 950c3ce6..aee4184a 100644 Binary files a/X121SMCEA/Strategy/x-121.smc.test.strategy.class.mq5 and b/X121SMCEA/Strategy/x-121.smc.test.strategy.class.mq5 differ