/////////////////////////////////////////////////////// // // SaherElm IT Center MQL5 Class Library // -------------------------------------- // Name: XPPSR 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 ... // // // XPERIOD Calculation Method ... // USED For Multiple Time Frames ... enum ENUM_X_PERIOD_METHOD { // X_PERIOD_NOTHING, // X_PERIOD_AUTO, // X_PERIOD_MANUALLY }; // // XPPSR Exported Buffers ... enum ENUM_X_XPPSR_BUFFERS { // // LEVEL 1 ... X_PPSR_L1_R_LINE = 0, X_PPSR_L1_R1_LINE = 1, X_PPSR_L1_R2_LINE = 2, X_PPSR_L1_S_LINE = 3, X_PPSR_L1_S1_LINE = 4, X_PPSR_L1_S2_LINE = 5, // // LEVEL 2 ... X_PPSR_L2_R_LINE = 6, X_PPSR_L2_R1_LINE = 7, X_PPSR_L2_R2_LINE = 8, X_PPSR_L2_S_LINE = 9, X_PPSR_L2_S1_LINE = 10, X_PPSR_L2_S2_LINE = 11, // // LEVEL 3 ... X_PPSR_L3_R_LINE = 12, X_PPSR_L3_R1_LINE = 13, X_PPSR_L3_R2_LINE = 14, X_PPSR_L3_S_LINE = 15, X_PPSR_L3_S1_LINE = 16, X_PPSR_L3_S2_LINE = 17, // // LEVEL 4 ... X_PPSR_L4_R_LINE = 18, X_PPSR_L4_R1_LINE = 19, X_PPSR_L4_R2_LINE = 20, X_PPSR_L4_S_LINE = 21, X_PPSR_L4_S1_LINE = 22, X_PPSR_L4_S2_LINE = 23, }; // // END Definitions ... // // // START Overrides ... // // // END Overrides ... // class XSCXPPSRHelper { // public: // // Properties ... // // LEVEL 1 ... double l1RBuffer[]; double l1R1Buffer[]; double l1R2Buffer[]; double l1SBuffer[]; double l1S1Buffer[]; double l1S2Buffer[]; // // LEVEL 2 ... double l2RBuffer[]; double l2R1Buffer[]; double l2R2Buffer[]; double l2SBuffer[]; double l2S1Buffer[]; double l2S2Buffer[]; // // LEVEL 3 ... double l3RBuffer[]; double l3R1Buffer[]; double l3R2Buffer[]; double l3SBuffer[]; double l3S1Buffer[]; double l3S2Buffer[]; // // LEVEL 4 ... double l4RBuffer[]; double l4R1Buffer[]; double l4R2Buffer[]; double l4SBuffer[]; double l4S1Buffer[]; double l4S2Buffer[]; // // Constructor ... void XSCXPPSRHelper() { mSymbol = _Symbol; mPeriod = _Period; } void XSCXPPSRHelper( // // Symbol ... string symbol, // // Period ... ENUM_TIMEFRAMES period, // // Buffer Reading ... int numberOfItemsReadPerTick = 52, // // LEVEL 1 ... ENUM_X_PERIOD_METHOD l1Method = X_PERIOD_AUTO, ENUM_TIMEFRAMES l1Period = NULL, ENUM_SERIESMODE l1HHMode = MODE_HIGH, ENUM_SERIESMODE l1LLMode = MODE_LOW, // // LEVEL 2 ... ENUM_X_PERIOD_METHOD l2Method = X_PERIOD_AUTO, ENUM_TIMEFRAMES l2Period = NULL, ENUM_SERIESMODE l2HHMode = MODE_HIGH, ENUM_SERIESMODE l2LLMode = MODE_LOW, // // LEVEL 3 ... ENUM_X_PERIOD_METHOD l3Method = X_PERIOD_AUTO, ENUM_TIMEFRAMES l3Period = NULL, ENUM_SERIESMODE l3HHMode = MODE_HIGH, ENUM_SERIESMODE l3LLMode = MODE_LOW, // // LEVEL 4 ... ENUM_X_PERIOD_METHOD l4Method = X_PERIOD_AUTO, ENUM_TIMEFRAMES l4Period = NULL, ENUM_SERIESMODE l4HHMode = MODE_HIGH, ENUM_SERIESMODE l4LLMode = MODE_LOW // ) { // // Setting Requirements ... // // Symbol ... mSymbol = symbol; // // Period ... mPeriod = period; // // Number of Reading Buffer Items per Tick ... mNumberOfItemsReadPerTick = numberOfItemsReadPerTick; // // LEVEL 1 ... mL1Method = l1Method; mL1Period = l1Period; mL1HHMode = l1HHMode; mL1LLMode = l1LLMode; // // LEVEL 2 ... mL2Method = l2Method; mL2Period = l2Period; mL2HHMode = l2HHMode; mL2LLMode = l2LLMode; // // LEVEL 3 ... mL3Method = l3Method; mL3Period = l3Period; mL3HHMode = l3HHMode; mL3LLMode = l3LLMode; // // LEVEL 4 ... mL4Method = l4Method; mL4Period = l4Period; mL4HHMode = l4HHMode; mL4LLMode = l4LLMode; // mTag = "XPPSR " + mSymbol + ", " + ToString(mPeriod); // // Initial Handler ... mHandler = iCustom( mSymbol, mPeriod, "x-saherelm.x121.xppsr", // // Inputs ... // // LEVEL 1 ... "", mL1Method, mL1Period, mL1HHMode, mL1LLMode, // // LEVEL 2 ... "", mL2Method, mL2Period, mL2HHMode, mL2LLMode, // // LEVEL 3 ... "", mL3Method, mL3Period, mL3HHMode, mL3LLMode, // // LEVEL 4 ... "", mL4Method, mL4Period, mL4HHMode, mL4LLMode, // "", "", false, false, false, false, "", false, false, false, false // ); if (mHandler == INVALID_HANDLE) { LogMessage("failed to Initialize Indicator: " + (string)GetLastError()); } // // LEVEL 1 ... ArraySetAsSeries(l1RBuffer, true); ArraySetAsSeries(l1R1Buffer, true); ArraySetAsSeries(l1R2Buffer, true); ArraySetAsSeries(l1SBuffer, true); ArraySetAsSeries(l1S1Buffer, true); ArraySetAsSeries(l1S2Buffer, true); // // LEVEL 2 ... ArraySetAsSeries(l2RBuffer, true); ArraySetAsSeries(l2R1Buffer, true); ArraySetAsSeries(l2R2Buffer, true); ArraySetAsSeries(l2SBuffer, true); ArraySetAsSeries(l2S1Buffer, true); ArraySetAsSeries(l2S2Buffer, true); // // LEVEL 3 ... ArraySetAsSeries(l3RBuffer, true); ArraySetAsSeries(l3R1Buffer, true); ArraySetAsSeries(l3R2Buffer, true); ArraySetAsSeries(l3SBuffer, true); ArraySetAsSeries(l3S1Buffer, true); ArraySetAsSeries(l3S2Buffer, true); // // LEVEL 4 ... ArraySetAsSeries(l4RBuffer, true); ArraySetAsSeries(l4R1Buffer, true); ArraySetAsSeries(l4R2Buffer, true); ArraySetAsSeries(l4SBuffer, true); ArraySetAsSeries(l4S1Buffer, true); ArraySetAsSeries(l4S2Buffer, true); } // // DeConstructor ... void ~XSCXPPSRHelper() { // // Release Indicators ... IndicatorRelease(mHandler); } // // Reading Buffers ... void ReadBuffers() { // // LEVEL 1 ... CopyBuffer( mHandler, X_PPSR_L1_R_LINE, 0, mNumberOfItemsReadPerTick, l1RBuffer); CopyBuffer( mHandler, X_PPSR_L1_R1_LINE, 0, mNumberOfItemsReadPerTick, l1R1Buffer); CopyBuffer( mHandler, X_PPSR_L1_R2_LINE, 0, mNumberOfItemsReadPerTick, l1R2Buffer); CopyBuffer( mHandler, X_PPSR_L1_S_LINE, 0, mNumberOfItemsReadPerTick, l1SBuffer); CopyBuffer( mHandler, X_PPSR_L1_S1_LINE, 0, mNumberOfItemsReadPerTick, l1S1Buffer); CopyBuffer( mHandler, X_PPSR_L1_S2_LINE, 0, mNumberOfItemsReadPerTick, l1S2Buffer); // // LEVEL 2 ... CopyBuffer( mHandler, X_PPSR_L2_R_LINE, 0, mNumberOfItemsReadPerTick, l2RBuffer); CopyBuffer( mHandler, X_PPSR_L2_R1_LINE, 0, mNumberOfItemsReadPerTick, l2R1Buffer); CopyBuffer( mHandler, X_PPSR_L2_R2_LINE, 0, mNumberOfItemsReadPerTick, l2R2Buffer); CopyBuffer( mHandler, X_PPSR_L2_S_LINE, 0, mNumberOfItemsReadPerTick, l2SBuffer); CopyBuffer( mHandler, X_PPSR_L2_S1_LINE, 0, mNumberOfItemsReadPerTick, l2S1Buffer); CopyBuffer( mHandler, X_PPSR_L2_S2_LINE, 0, mNumberOfItemsReadPerTick, l2S2Buffer); // // LEVEL 3 ... CopyBuffer( mHandler, X_PPSR_L3_R_LINE, 0, mNumberOfItemsReadPerTick, l3RBuffer); CopyBuffer( mHandler, X_PPSR_L3_R1_LINE, 0, mNumberOfItemsReadPerTick, l3R1Buffer); CopyBuffer( mHandler, X_PPSR_L3_R2_LINE, 0, mNumberOfItemsReadPerTick, l3R2Buffer); CopyBuffer( mHandler, X_PPSR_L3_S_LINE, 0, mNumberOfItemsReadPerTick, l3SBuffer); CopyBuffer( mHandler, X_PPSR_L3_S1_LINE, 0, mNumberOfItemsReadPerTick, l3S1Buffer); CopyBuffer( mHandler, X_PPSR_L3_S2_LINE, 0, mNumberOfItemsReadPerTick, l3S2Buffer); // // LEVEL 4 ... CopyBuffer( mHandler, X_PPSR_L4_R_LINE, 0, mNumberOfItemsReadPerTick, l4RBuffer); CopyBuffer( mHandler, X_PPSR_L4_R1_LINE, 0, mNumberOfItemsReadPerTick, l4R1Buffer); CopyBuffer( mHandler, X_PPSR_L4_R2_LINE, 0, mNumberOfItemsReadPerTick, l4R2Buffer); CopyBuffer( mHandler, X_PPSR_L4_S_LINE, 0, mNumberOfItemsReadPerTick, l4SBuffer); CopyBuffer( mHandler, X_PPSR_L4_S1_LINE, 0, mNumberOfItemsReadPerTick, l4S1Buffer); CopyBuffer( mHandler, X_PPSR_L4_S2_LINE, 0, mNumberOfItemsReadPerTick, l4S2Buffer); } // // START Tools Functions ... // // // END Tools Functions ... // // protected: // private: // // Symbol ... string mSymbol; // // Period ... ENUM_TIMEFRAMES mPeriod; // // Buffer Reading ... int mNumberOfItemsReadPerTick; // // LEVEL 1 ... ENUM_X_PERIOD_METHOD mL1Method; ENUM_TIMEFRAMES mL1Period; ENUM_SERIESMODE mL1HHMode; ENUM_SERIESMODE mL1LLMode; // // LEVEL 2 ... ENUM_X_PERIOD_METHOD mL2Method; ENUM_TIMEFRAMES mL2Period; ENUM_SERIESMODE mL2HHMode; ENUM_SERIESMODE mL2LLMode; // // LEVEL 3 ... ENUM_X_PERIOD_METHOD mL3Method; ENUM_TIMEFRAMES mL3Period; ENUM_SERIESMODE mL3HHMode; ENUM_SERIESMODE mL3LLMode; // // LEVEL 4 ... ENUM_X_PERIOD_METHOD mL4Method; ENUM_TIMEFRAMES mL4Period; ENUM_SERIESMODE mL4HHMode; ENUM_SERIESMODE mL4LLMode; // string mTag; // int mHandler; // bool IsValidArraySize(int bar_index) { // bool result = false; // if (bar_index < 0) { return result; } // int rCount = ArraySize(l1RBuffer); result = rCount > bar_index + 1; // return result; } };