/////////////////////////////////////////////////////// // // SaherElm IT Center MQL5 Class Library // -------------------------------------- // Name: XMC Indicator Provider // Description: Provides Features ... // // // Maintainer: // ------------ // Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) // ////////////////////////////////////////////////////// // // Global Properties ... #property library #property copyright "Copyright 2023, SaherElm IT Center" #property link "https://www.saherelm.ir" #property version "1.00" #property strict // // START Import and Inclused requirements ... // // // Includes ... #include "../Libraries/x-saherelm.alert.lib.mq5" #include "../Libraries/x-saherelm.models.lib.mq5" #include "../Libraries/x-saherelm.common.lib.mq5" // // END Import and Inclused requirements ... // // // START Definitions ... // // // XMC Exported Buffers ... enum ENUM_X_XMC_BUFFERS { // X_MC_FAST_LINE = 0, X_MC_SLOW_LINE = 1, X_MC_VERIFIER_LINE = 2, }; // // END Definitions ... // // // START Overrides ... // // // END Overrides ... // class XSCXMCHelper { // public: // // Properties ... double fastBuffer[]; double slowBuffer[]; double verifierBuffer[]; // // Constructor ... void XSCXMCHelper() { mSymbol = _Symbol; mPeriod = _Period; } void XSCXMCHelper( // // Symbol ... string symbol, // // Period ... ENUM_TIMEFRAMES period, // // Buffer Reading ... int numberOfItemsReadPerTick = 52, // // FAST ... int fastMaLength = 9, int fastMaShift = 0, ENUM_MA_METHOD fastMaMethod = MODE_EMA, ENUM_APPLIED_PRICE fastMaAppliedTo = PRICE_CLOSE, // // SLOW ... int slowMaLength = 18, int slowMaShift = 0, ENUM_MA_METHOD slowMaMethod = MODE_EMA, ENUM_APPLIED_PRICE slowMaAppliedTo = PRICE_CLOSE, // // VERIFIER ... int verifierMaLength = 50, int verifierMaShift = 0, ENUM_MA_METHOD verifierMaMethod = MODE_EMA, ENUM_APPLIED_PRICE verifierMaAppliedTo = PRICE_CLOSE // ) { // // Setting Requirements ... // // Symbol ... mSymbol = symbol; // // Period ... mPeriod = period; // // Number of Reading Buffer Items per Tick ... mNumberOfItemsReadPerTick = numberOfItemsReadPerTick; // // FAST ... mFastMaLength = fastMaLength; mFastMaShift = fastMaShift; mFastMaMethod = fastMaMethod; mFastMaAppliedTo = fastMaAppliedTo; // // SLOW ... mSlowMaLength = slowMaLength; mSlowMaShift = slowMaShift; mSlowMaMethod = slowMaMethod; mSlowMaAppliedTo = slowMaAppliedTo; // // VERIFIER ... mVerifierMaLength = verifierMaLength; mVerifierMaShift = verifierMaShift; mVerifierMaMethod = verifierMaMethod; mVerifierMaAppliedTo = verifierMaAppliedTo; // mTag = "XMC " + mSymbol + ", " + ToString(mPeriod); // // Initial Handler ... mHandler = iCustom( mSymbol, mPeriod, "x-saherelm.x121.xmc", // // Inputs ... // // FAST ... "", mFastMaLength, mFastMaShift, mFastMaMethod, mFastMaAppliedTo, // // SLOW ... "", mSlowMaLength, mSlowMaShift, mSlowMaMethod, mSlowMaAppliedTo, // // VERIFIER ... "", mVerifierMaLength, mVerifierMaShift, mVerifierMaMethod, mVerifierMaAppliedTo, // "", false, false, false // ); if (mHandler == INVALID_HANDLE) { LogMessage("failed to Initialize Indicator: " + (string)GetLastError()); } // ArraySetAsSeries(fastBuffer, true); ArraySetAsSeries(slowBuffer, true); ArraySetAsSeries(verifierBuffer, true); } // // DeConstructor ... void ~XSCXMCHelper() { // // Release Indicators ... IndicatorRelease(mHandler); } // // Reading Buffers ... void ReadBuffers() { // // FAST ... CopyBuffer( mHandler, X_MC_FAST_LINE, 0, mNumberOfItemsReadPerTick, fastBuffer); // // SLOW ... CopyBuffer( mHandler, X_MC_SLOW_LINE, 0, mNumberOfItemsReadPerTick, slowBuffer); // // VERIFIER ... CopyBuffer( mHandler, X_MC_VERIFIER_LINE, 0, mNumberOfItemsReadPerTick, verifierBuffer); } // // START Tools Functions ... // // // Check Fast Over Slow ... bool IsFastOverSlow( int bar_index // Bar Index ... ) { // bool result = false; // if (!IsValidArraySize(bar_index)) { return result; } // result = // IsOver( fastBuffer, slowBuffer, bar_index ) // ; // return result; } // // Check Fast Crossed Over Slow ... bool IsFastCrossedOverSlow( int bar_index // Bar Index ... ) { // bool result = false; // if (!IsValidArraySize(bar_index)) { return result; } // result = // IsCrossOver( fastBuffer, slowBuffer, bar_index ) // ; // return result; } // // Check Fast Under Slow ... bool IsFastUnderSlow( int bar_index // Bar Index ... ) { // bool result = false; // if (!IsValidArraySize(bar_index)) { return result; } // result = // IsUnder( fastBuffer, slowBuffer, bar_index ) // ; // return result; } // // Check Fast Crossed Under Slow ... bool IsFastCrossedUnderSlow( int bar_index // Bar Index ... ) { // bool result = false; // if (!IsValidArraySize(bar_index)) { return result; } // result = // IsCrossUnder( fastBuffer, slowBuffer, bar_index ) // ; // return result; } // // END Tools Functions ... // // protected: // private: // // Symbol ... string mSymbol; // // Period ... ENUM_TIMEFRAMES mPeriod; // // Buffer Reading ... int mNumberOfItemsReadPerTick; // // FAST ... int mFastMaLength; int mFastMaShift; ENUM_MA_METHOD mFastMaMethod; ENUM_APPLIED_PRICE mFastMaAppliedTo; // // SLOW ... int mSlowMaLength; int mSlowMaShift; ENUM_MA_METHOD mSlowMaMethod; ENUM_APPLIED_PRICE mSlowMaAppliedTo; // // VERIFIER ... int mVerifierMaLength; int mVerifierMaShift; ENUM_MA_METHOD mVerifierMaMethod; ENUM_APPLIED_PRICE mVerifierMaAppliedTo; // string mTag; // int mHandler; // bool IsValidArraySize(int bar_index) { // bool result = false; // if (bar_index < 0) { return result; } // int rCount = ArraySize(fastBuffer); result = rCount > bar_index + 1; // return result; } };