///////////////////////////////////////////////////////////////////////////// // // SaherElm IT Center MQL5 XTS Indicator Helper for Signal Providers // -------------------------------------------------------------------------- // // 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 // // Includes ... #include "..\Libraries\x-saherelm.log.lib.mq5" #include "..\Libraries\x-saherelm.common.lib.mq5" // // START Enum Definitions ... // enum ENUM_X_PERIOD_METHOD { // X_PERIOD_NOTHING, // X_PERIOD_AUTO, // X_PERIOD_MANUALLY }; enum ENUM_X_XTS_BUFFER_LINES { X_XTS_CURRENT_LINE = 0, X_XTS_NEAREST_LINE = 1, X_XTS_MEDIEST_LINE = 2, X_XTS_FAREST_LINE = 3, }; // // END Enum Definitions ... // // // START Inputs ... // // input group "XTS Indicator"; // input group "XTS Current Period"; input ENUM_APPLIED_PRICE xTSCurrentAppliedTo = PRICE_CLOSE; // Current Applied To // input group "XTS Nearest Period"; input ENUM_X_PERIOD_METHOD xTSNearestMethod = X_PERIOD_AUTO; // How to Find Nearest Period input ENUM_TIMEFRAMES xTSNearestPeriod = NULL; // Nearest Time Frame input ENUM_APPLIED_PRICE xTSNearestAppliedTo = PRICE_CLOSE; // Nearest Applied To // input group "XTS Mediest Period"; input ENUM_X_PERIOD_METHOD xTSMediestMethod = X_PERIOD_AUTO; // How to Find Mediest Period input ENUM_TIMEFRAMES xTSMediestPeriod = NULL; // Mediest Time Frame input ENUM_APPLIED_PRICE xTSMediestAppliedTo = PRICE_CLOSE; // Mediest Applied To // input group "XTS Farest Period"; input ENUM_X_PERIOD_METHOD xTSFarestMethod = X_PERIOD_AUTO; // How to Find Farest Period input ENUM_TIMEFRAMES xTSFarestPeriod = NULL; // Farest Time Frame input ENUM_APPLIED_PRICE xTSFarestAppliedTo = PRICE_CLOSE; // Farest Applied To // // // END Inputs ... // // // START Definitions ... // int xTSHandler = INVALID_HANDLE; double xTSCurrentBuffer[]; double xTSNearestBuffer[]; double xTSMediestBuffer[]; double xTSFarestBuffer[]; // // END Definitions ... // // // START Handler Functions ... // // // Validate Inputs ... bool XTSValidateInputs() { // bool result = false; // result = true; // if (!result) { // LogMessage("XTS Indicator Inputs Validation Failed ..."); } // return result; } // // Init Indicators ... bool XTSInitHandlers() { // bool result = false; // // Initialize Indicator/Indicator Handlers ... ResetLastError(); // // XTS Handler ... ArraySetAsSeries(xTSCurrentBuffer, true); ArraySetAsSeries(xTSNearestBuffer, true); ArraySetAsSeries(xTSMediestBuffer, true); ArraySetAsSeries(xTSFarestBuffer, true); xTSHandler = iCustom( _Symbol, _Period, "x-saherelm.xts.oscillator", // // Inputs ... "", xTSCurrentAppliedTo, "", xTSNearestMethod, xTSNearestPeriod, xTSNearestAppliedTo, "", xTSMediestMethod, xTSMediestPeriod, xTSMediestAppliedTo, "", xTSFarestMethod, xTSFarestPeriod, xTSFarestAppliedTo // ); if (xTSHandler == INVALID_HANDLE) { // LogMessage("failed to Initialize XTS Indicator: " + (string)GetLastError()); return result; } // result = true; // return result; } // // Release Indicators ... void XTSReleaseHandlers() { IndicatorRelease(xTSHandler); } // // Handle Reading Buffers ... void XTSReadBuffers( int xTSItemsPerTick // Number Of Reading Buffer Items Per Tick ) { // // XTS Current ... CopyBuffer( xTSHandler, X_XTS_CURRENT_LINE, 0, xTSItemsPerTick, xTSCurrentBuffer); // // XTS Nearest ... CopyBuffer( xTSHandler, X_XTS_NEAREST_LINE, 0, xTSItemsPerTick, xTSNearestBuffer); // // XTS Mediest ... CopyBuffer( xTSHandler, X_XTS_MEDIEST_LINE, 0, xTSItemsPerTick, xTSMediestBuffer); // // XTS Farest ... CopyBuffer( xTSHandler, X_XTS_FAREST_LINE, 0, xTSItemsPerTick, xTSFarestBuffer); } // // END Handler Funcions ... // // // START XTS Custom Functions ... // // // Check all Buffers has valid Size ... bool XTSIsValidBuffersSize( int size // the size of buffers which min size for requirements ) { // bool result = false; // if ( size <= 0 || // ArraySize(xTSCurrentBuffer) < size // ) { result = false; } else { result = true; } // return result; } // // END XTS Custom Functions ... //