/////////////////////////////////////////////////////// // // SaherElm IT Center MQL4 Indicator Global Library // --------------------------------------------------- // saherelm useful tools and definitions ... // // // Maintainer: // ------------ // Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) // ////////////////////////////////////////////////////// #property library #property copyright "Copyright 2023, SaherElm IT Center" #property link "https://www.saherelm.ir" #property version "1.00" #property strict // // Includes library ... #include "../Libraries/x-saherelm.lib.mq4" // // Includes Models library ... #include "../Libraries/x-saherelm.models.lib.mq4" // // START Global Requirement Functions ... // // double ReadXMABuffer( const int bar_index, const int buffer_index, // const int marketLen, // const double stp, const double mxm, // const int shortCycleMult, const int mediumCycleMult, const int longCycleMult ) { // string xmaIndicatorName = "x-saherelm.x.xma"; // double result = iCustom( _Symbol, _Period, xmaIndicatorName, // // Inputs ... marketLen, stp, mxm, shortCycleMult, mediumCycleMult, longCycleMult, MODE_SMA, // buffer_index, bar_index ); // return result; } // double ReadXHLBuffer( const int bar_index, const int buffer_index, // const int marketLen, // const int shortCycleMult, const int mediumCycleMult, const int longCycleMult ) { // string xhlIndicatorName = "x-saherelm.x.hl"; // double result = iCustom( _Symbol, _Period, xhlIndicatorName, // // Inputs ... marketLen, shortCycleMult, mediumCycleMult, longCycleMult, MODE_SMA, // buffer_index, bar_index ); // return result; } // double ReadADX( const int bar_index, const int marketLen, const int mult ) { // double result; // int period = marketLen * mult; // result = iADX( _Symbol, _Period, period, PRICE_CLOSE, MODE_MAIN, bar_index ); // return result; } // static XRState lastXRState; XRState GetXRange( const int bar_index, const int rangeMarketLength ) { // XRState result = {}; // datetime barTime = iTime( _Symbol, _Period, bar_index ); // int marketBarIndex = bar_index + rangeMarketLength; // // Highest High ... // int hhIdx = iHighest( _Symbol, _Period, MODE_HIGH, marketBarIndex, bar_index ); // double hh = iHigh( _Symbol, _Period, hhIdx ); // // Lowest Low ... // int llIdx = iLowest( _Symbol, _Period, MODE_LOW, marketBarIndex, bar_index ); // double ll = iLow( _Symbol, _Period, llIdx ); // if (lastXRState.start == 0) { // lastXRState.start = barTime; lastXRState.length = rangeMarketLength; // lastXRState.hh = hh; lastXRState.ll = ll; // // Middle ... double mid = (hh + ll) / 2; lastXRState.mid = mid; } else { // int startBarIndex = iBarShift( _Symbol, _Period, lastXRState.start ); // if (startBarIndex - bar_index >= rangeMarketLength) { // lastXRState.start = barTime; lastXRState.length = rangeMarketLength; // lastXRState.hh = hh; lastXRState.ll = ll; // // Middle ... double mid = (hh + ll) / 2; lastXRState.mid = mid; } } // result = lastXRState; // return result; } // XTPOWStatee GetXTPowState( const int bar_index, const int marketLen ) { // XTPOWStatee result = {}; // // double powerUp = 0; double powerDown = 0; double signal = 0; // // // int dailyCount = GetDailyCandleCount(); // double dailyHH = GetMarketHighestHigh( // bar_index, // dailyCount // ); // double dailyLL = GetMarketLowestLow( // bar_index, // dailyCount // ); // double dailyDiff = dailyHH - dailyLL; // double rate = dailyDiff / 100; // // // for (int i = bar_index; i < bar_index + marketLen; i++) { // // // XOHCL c = GetCandleModel(i); // // // double cRange = // MathAbs(c.open - c.close) // // MathAbs(c.high - c.low) // ; // bool isBullish = c.open < c.close; // // // if (isBullish) { // powerUp += cRange; // } else { // powerDown += cRange; // } // } // // // powerUp = powerUp / rate; // powerDown = powerDown / rate; // // // double ema = GetMA( // bar_index, // marketLen, // 0, // MODE_EMA, // PRICE_WEIGHTED // ); // // // double signalAddition = MathMin(powerUp, powerDown); // signal = (ema / 100) * rate + signalAddition; // string indicatorName = "x-saherelm.xtpow"; // int pUpIndex = 0; int pDownIndex = 1; int signalIndex = 2; // powerUp = iCustom( _Symbol, _Period, indicatorName, // marketLen, // pUpIndex, bar_index ); // powerDown = iCustom( _Symbol, _Period, indicatorName, // marketLen, // pDownIndex, bar_index ); // signal = iCustom( _Symbol, _Period, indicatorName, // marketLen, // signalIndex, bar_index ); // result.signal = signal; result.powerUp = powerUp; result.powerDown = powerDown; // return result; } // // END Indicator Reading Data ... //