/////////////////////////////////////////////////////// // // SaherElm IT Center MQL5 Helper Class Library // ---------------------------------------------- // Name: XSCXCHICHHelper // Description: provides all Indicator // Helper requirements ... // // // 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 // // Imports ... #include "../Classes/x-saherelm.xhelper.class.mq5" // // Ichimoku Lines Calculator Mode ... enum ENUM_X_ICHIMOKU_CALCULATION_MODE { // X_XICH_HH_LL_MODE = 1, // Highest High and Lowest Low X_XICH_HO_LC_MODE = 2, // Highest Open and Lowest Close }; // enum ENUM_XCHICH_BUFFERS { // // Current ... XCHICH_C_TK_LINE = 0, XCHICH_C_KJ_LINE = 1, XCHICH_C_CH_LINE = 2, XCHICH_C_SSA_LINE = 3, XCHICH_C_SSB_LINE = 4, // // Short ... XCHICH_S_TK_LINE = 5, XCHICH_S_KJ_LINE = 6, XCHICH_S_CH_LINE = 7, XCHICH_S_SSA_LINE = 8, XCHICH_S_SSB_LINE = 9, // // Medium ... XCHICH_M_TK_LINE = 10, XCHICH_M_KJ_LINE = 11, XCHICH_M_CH_LINE = 12, XCHICH_M_SSA_LINE = 13, XCHICH_M_SSB_LINE = 14, // // Long ... XCHICH_L_TK_LINE = 15, XCHICH_L_KJ_LINE = 16, XCHICH_L_CH_LINE = 17, XCHICH_L_SSA_LINE = 18, XCHICH_L_SSB_LINE = 19, // // Hind ... XCHICH_H_TK_LINE = 20, XCHICH_H_KJ_LINE = 21, XCHICH_H_CH_LINE = 22, XCHICH_H_SSA_LINE = 23, XCHICH_H_SSB_LINE = 24, }; // // Input Models ... struct XCHICHInputs { // // Props ... // // Market ... // // TENKANSEN ... // // Tenkan Sen ... int tenkanSenLength; // Length ENUM_X_ICHIMOKU_CALCULATION_MODE tenkanSenMode; // Calculation Mode // // KIJUNSEN ... // // Kijun Sen ... int kijunSenLength; // Length ENUM_X_ICHIMOKU_CALCULATION_MODE kijunSenMode; // Calculation Mode // // SENKOUSPANB ... // // Senkou Span B ... int senkouSpanBLength; // Length ENUM_X_ICHIMOKU_CALCULATION_MODE senkouSpanBMode; // Calculation Mode // // CHIKOUSPAN ... // // Chikou Span ... ENUM_APPLIED_PRICE chikuoSpanAppliedTo; // Price Type // // Cycles ... // // Short ... ENUM_X_PERIOD_METHOD scMethod; // How to Find Period ENUM_TIMEFRAMES scPeriod; // Time Period // // Medium ... ENUM_X_PERIOD_METHOD mcMethod; // How to Find Period ENUM_TIMEFRAMES mcPeriod; // Time Period // // Long ... ENUM_X_PERIOD_METHOD lcMethod; // How to Find Period ENUM_TIMEFRAMES lcPeriod; // Time Period // // Hind ... ENUM_X_PERIOD_METHOD hcMethod; // How to Find Period ENUM_TIMEFRAMES hcPeriod; // Time Period // // Presentation ... // // All Cycles ... bool showTenkanSen; // Show Tenkan Sen bool showKijunSen; // Show Kijun Sen bool showChikouSpan; // Show Chikou Span bool showSenkouSpanA; // Show Senkou Span A bool showSenkouSpanB; // Show Senkou Span B bool showKumo; // Show Kumo // // Current ... bool showCTenkanSen; // Show Tenkan Sen bool showCKijunSen; // Show Kijun Sen bool showCChikouSpan; // Show Chikou Span bool showCSenkouSpanA; // Show Senkou Span A bool showCSenkouSpanB; // Show Senkou Span B bool showCKumo; // Show Kumo bool shiftCKumo; // Shift Kumo to Future // // Short ... bool showSTenkanSen; // Show Tenkan Sen bool showSKijunSen; // Show Kijun Sen bool showSChikouSpan; // Show Chikou Span bool showSSenkouSpanA; // Show Senkou Span A bool showSSenkouSpanB; // Show Senkou Span B bool showSKumo; // Show Kumo bool shiftSKumo; // Shift Kumo to Future // // Medium ... bool showMTenkanSen; // Show Tenkan Sen bool showMKijunSen; // Show Kijun Sen bool showMChikouSpan; // Show Chikou Span bool showMSenkouSpanA; // Show Senkou Span A bool showMSenkouSpanB; // Show Senkou Span B bool showMKumo; // Show Kumo bool shiftMKumo; // Shift Kumo to Future // // Long ... bool showLTenkanSen; // Show Tenkan Sen bool showLKijunSen; // Show Kijun Sen bool showLChikouSpan; // Show Chikou Span bool showLSenkouSpanA; // Show Senkou Span A bool showLSenkouSpanB; // Show Senkou Span B bool showLKumo; // Show Kumo bool shiftLKumo; // Shift Kumo to Future // // Hind ... bool showHTenkanSen; // Show Tenkan Sen bool showHKijunSen; // Show Kijun Sen bool showHChikouSpan; // Show Chikou Span bool showHSenkouSpanA; // Show Senkou Span A bool showHSenkouSpanB; // Show Senkou Span B bool showHKumo; // Show Kumo bool shiftHKumo; // Shift Kumo to Future // // Constructor(s) ... XCHICHInputs() { // Clean(); } // // Tools ... // // Clean ... void Clean() { // kijunSenLength = 0; tenkanSenLength = 0; senkouSpanBLength = 0; kijunSenMode = X_XICH_HH_LL_MODE; tenkanSenMode = X_XICH_HH_LL_MODE; chikuoSpanAppliedTo = PRICE_CLOSE; senkouSpanBMode = X_XICH_HH_LL_MODE; // scMethod = X_PERIOD_AUTO; scPeriod = NULL; mcMethod = X_PERIOD_AUTO; mcPeriod = NULL; lcMethod = X_PERIOD_AUTO; lcPeriod = NULL; hcMethod = X_PERIOD_AUTO; hcPeriod = NULL; // showTenkanSen = false; showKijunSen = false; showChikouSpan = false; showSenkouSpanA = false; showSenkouSpanB = false; showKumo = false; // showCTenkanSen = false; showCKijunSen = false; showCChikouSpan = false; showCSenkouSpanA = false; showCSenkouSpanB = false; showCKumo = false; shiftCKumo = true; // showSTenkanSen = false; showSKijunSen = false; showSChikouSpan = false; showSSenkouSpanA = false; showSSenkouSpanB = false; showSKumo = false; shiftSKumo = true; // showMTenkanSen = false; showMKijunSen = false; showMChikouSpan = false; showMSenkouSpanA = false; showMSenkouSpanB = false; showMKumo = false; shiftMKumo = true; // showLTenkanSen = false; showLKijunSen = false; showLChikouSpan = false; showLSenkouSpanA = false; showLSenkouSpanB = false; showLKumo = false; shiftLKumo = true; // showHTenkanSen = false; showHKijunSen = false; showHChikouSpan = false; showHSenkouSpanA = false; showHSenkouSpanB = false; showHKumo = false; shiftHKumo = true; } // // Default ... void Default() { // kijunSenLength = 26; tenkanSenLength = 9; senkouSpanBLength = 52; kijunSenMode = X_XICH_HH_LL_MODE; tenkanSenMode = X_XICH_HH_LL_MODE; chikuoSpanAppliedTo = PRICE_CLOSE; senkouSpanBMode = X_XICH_HH_LL_MODE; // scMethod = X_PERIOD_AUTO; scPeriod = NULL; mcMethod = X_PERIOD_AUTO; mcPeriod = NULL; lcMethod = X_PERIOD_AUTO; lcPeriod = NULL; hcMethod = X_PERIOD_AUTO; hcPeriod = NULL; // showTenkanSen = true; showKijunSen = true; showChikouSpan = true; showSenkouSpanA = true; showSenkouSpanB = true; showKumo = true; // showCTenkanSen = true; showCKijunSen = true; showCChikouSpan = true; showCSenkouSpanA = true; showCSenkouSpanB = true; showCKumo = true; shiftCKumo = true; // showSTenkanSen = true; showSKijunSen = true; showSChikouSpan = true; showSSenkouSpanA = true; showSSenkouSpanB = true; showSKumo = true; shiftSKumo = true; // showMTenkanSen = true; showMKijunSen = true; showMChikouSpan = true; showMSenkouSpanA = true; showMSenkouSpanB = true; showMKumo = true; shiftMKumo = true; // showLTenkanSen = true; showLKijunSen = true; showLChikouSpan = true; showLSenkouSpanA = true; showLSenkouSpanB = true; showLKumo = true; shiftLKumo = true; // showHTenkanSen = true; showHKijunSen = true; showHChikouSpan = true; showHSenkouSpanA = true; showHSenkouSpanB = true; showHKumo = true; shiftHKumo = true; } // // Validate ... bool IsValid() { // bool result = false; // result = // (tenkanSenLength > 2 && kijunSenLength > tenkanSenLength && senkouSpanBLength > kijunSenLength) // && // (IsValid(scMethod, scPeriod) && IsValid(mcMethod, mcPeriod) && IsValid(lcMethod, lcPeriod) && IsValid(hcMethod, hcPeriod)) // ; // return result; } // // Retrieve MAx Length ... int Max() { // int result = 0; // result = MathMax(tenkanSenLength, kijunSenLength); result = MathMax(result, senkouSpanBLength); // return result; } }; // // Define Conditions ... struct XCHICHConditions { // // Common ... string symbol; ENUM_TIMEFRAMES period; datetime time; // // Buffers ... // // Current ... double cTK[]; double cKJ[]; double cChik[]; double cSSA[]; double cSSB[]; // // Short ... double sTK[]; double sKJ[]; double sChik[]; double sSSA[]; double sSSB[]; // // Medium ... double mTK[]; double mKJ[]; double mChik[]; double mSSA[]; double mSSB[]; // // Long ... double lTK[]; double lKJ[]; double lChik[]; double lSSA[]; double lSSB[]; // // Hind ... double hTK[]; double hKJ[]; double hChik[]; double hSSA[]; double hSSB[]; // void Clean() { // // Buffers ... Clean(cTK); Clean(cKJ); Clean(cChik); Clean(cSSA); Clean(cSSB); Clean(sTK); Clean(sKJ); Clean(sChik); Clean(sSSA); Clean(sSSB); Clean(mTK); Clean(mKJ); Clean(mChik); Clean(mSSA); Clean(mSSB); Clean(lTK); Clean(lKJ); Clean(lChik); Clean(lSSA); Clean(lSSB); Clean(hTK); Clean(hKJ); Clean(hChik); Clean(hSSA); Clean(hSSB); // ArraySetAsSeries(cTK, true); ArraySetAsSeries(cKJ, true); ArraySetAsSeries(cChik, true); ArraySetAsSeries(cSSA, true); ArraySetAsSeries(cSSB, true); ArraySetAsSeries(sTK, true); ArraySetAsSeries(sKJ, true); ArraySetAsSeries(sChik, true); ArraySetAsSeries(sSSA, true); ArraySetAsSeries(sSSB, true); ArraySetAsSeries(mTK, true); ArraySetAsSeries(mKJ, true); ArraySetAsSeries(mChik, true); ArraySetAsSeries(mSSA, true); ArraySetAsSeries(mSSB, true); ArraySetAsSeries(lTK, true); ArraySetAsSeries(lKJ, true); ArraySetAsSeries(lChik, true); ArraySetAsSeries(lSSA, true); ArraySetAsSeries(lSSB, true); ArraySetAsSeries(hTK, true); ArraySetAsSeries(hKJ, true); ArraySetAsSeries(hChik, true); ArraySetAsSeries(hSSA, true); ArraySetAsSeries(hSSB, true); } // void GenerateScore( double &bullishScore, double &bearishScore // ) { // bullishScore = 0; bearishScore = 0; } // string GenerateSummary( bool onlyCommons = false, bool onlyConditions = false, bool includeScores = true, bool ignoreFalseConditions = true, string separator = "\n" // ) { // string result = NULL; // double bullishScore = 0; double bearishScore = 0; GenerateScore( bullishScore, bearishScore // ); // string scoresStr = // "Scores: " + separator + "---------------" + separator + "Bullish: " + ToString(bullishScore) + separator + "Bearish: " + ToString(bearishScore) + separator + "" // ; // string commonStr = GenerateSpecifiedCommonSummary( this, separator, includeScores // ); // string conditionsStr = // // Current ... // // Short ... // // Medium ... // // Long ... // // Hind ... // "" // ; // result = // "[" + GetTag() + "]" + separator + (onlyConditions ? "" : commonStr) + (!includeScores ? "" : scoresStr) + " " + separator + (onlyCommons ? "" : conditionsStr) + "" // ; // return result; } // string GetTag() { return "XCHICH"; } }; // // Class ... class XSCXCHICHHelper : public XSCBaseHelper { // // Public ... public: // // Props ... // // Constructors ... XSCXCHICHHelper() : XSCBaseHelper(_Symbol, _Period) { } // // Deconstructor ... ~XSCXCHICHHelper() { // Clean(cTKBuffer); Clean(cKJBuffer); Clean(cChikBuffer); Clean(cSSABuffer); Clean(cSSBBuffer); Clean(sTKBuffer); Clean(sKJBuffer); Clean(sChikBuffer); Clean(sSSABuffer); Clean(sSSBBuffer); Clean(mTKBuffer); Clean(mKJBuffer); Clean(mChikBuffer); Clean(mSSABuffer); Clean(mSSBBuffer); Clean(lTKBuffer); Clean(lKJBuffer); Clean(lChikBuffer); Clean(lSSABuffer); Clean(lSSBBuffer); Clean(hTKBuffer); Clean(hKJBuffer); Clean(hChikBuffer); Clean(hSSABuffer); Clean(hSSBBuffer); } // // Tools ... bool Init( string symbol, // Trading Symbol ENUM_TIMEFRAMES period, // Trading Period XCHICHInputs &inputs // Inputs ) { // bool result = false; // mSymbol = symbol; mPeriod = period; // result = inputs.IsValid(); if (!result) { return result; } // mInputs = inputs; // ArraySetAsSeries(cTKBuffer, true); ArraySetAsSeries(cKJBuffer, true); ArraySetAsSeries(cChikBuffer, true); ArraySetAsSeries(cSSABuffer, true); ArraySetAsSeries(cSSBBuffer, true); ArraySetAsSeries(sTKBuffer, true); ArraySetAsSeries(sKJBuffer, true); ArraySetAsSeries(sChikBuffer, true); ArraySetAsSeries(sSSABuffer, true); ArraySetAsSeries(sSSBBuffer, true); ArraySetAsSeries(mTKBuffer, true); ArraySetAsSeries(mKJBuffer, true); ArraySetAsSeries(mChikBuffer, true); ArraySetAsSeries(mSSABuffer, true); ArraySetAsSeries(mSSBBuffer, true); ArraySetAsSeries(lTKBuffer, true); ArraySetAsSeries(lKJBuffer, true); ArraySetAsSeries(lChikBuffer, true); ArraySetAsSeries(lSSABuffer, true); ArraySetAsSeries(lSSBBuffer, true); ArraySetAsSeries(hTKBuffer, true); ArraySetAsSeries(hKJBuffer, true); ArraySetAsSeries(hChikBuffer, true); ArraySetAsSeries(hSSABuffer, true); ArraySetAsSeries(hSSBBuffer, true); // mHandler = iCustom( mSymbol, mPeriod, "x-saherelm.xchich", // // Inputs ... // // Market ... "", // // TENKANSEN ... "", mInputs.tenkanSenLength, // Length mInputs.tenkanSenMode, // Calculation Mode // // KIJUNSEN ... "", mInputs.kijunSenLength, // Length mInputs.kijunSenMode, // Calculation Mode // // SENKOUSPANB ... "", mInputs.senkouSpanBLength, // Length mInputs.senkouSpanBMode, // Calculation Mode // // CHIKOUSPAN ... "", mInputs.chikuoSpanAppliedTo, // Price Type // // Cycles ... "", // // Short ... "", mInputs.scMethod, mInputs.scPeriod, // // Medium ... "", mInputs.mcMethod, mInputs.mcPeriod, // // Long ... "", mInputs.lcMethod, mInputs.lcPeriod, // // Hind ... "", mInputs.hcMethod, mInputs.hcPeriod, // // Presentation ... "", // // All Cycles ... "", mInputs.showTenkanSen, // Show Tenkan Sen mInputs.showKijunSen, // Show Kijun Sen mInputs.showChikouSpan, // Show Chikou Span mInputs.showSenkouSpanA, // Show Senkou Span A mInputs.showSenkouSpanB, // Show Senkou Span B mInputs.showKumo, // Show Kumo // // Current ... "", // ); result = mHandler != INVALID_HANDLE; if (!result) { return result; } // return result; } // // Protected ... protected: // // Private ... private: // // Props ... XCHICHInputs mInputs; // Inputs ... // // Buffers ... // // Current ... double cTKBuffer[]; double cKJBuffer[]; double cChikBuffer[]; double cSSABuffer[]; double cSSBBuffer[]; // // Short ... double sTKBuffer[]; double sKJBuffer[]; double sChikBuffer[]; double sSSABuffer[]; double sSSBBuffer[]; // // Medium ... double mTKBuffer[]; double mKJBuffer[]; double mChikBuffer[]; double mSSABuffer[]; double mSSBBuffer[]; // // Long ... double lTKBuffer[]; double lKJBuffer[]; double lChikBuffer[]; double lSSABuffer[]; double lSSBBuffer[]; // // Hind ... double hTKBuffer[]; double hKJBuffer[]; double hChikBuffer[]; double hSSABuffer[]; double hSSBBuffer[]; // // Tools ... // // Calculate Values Until Now ... void Calculate() { // int totalBars = CountBars(); if (totalBars > 1000) { totalBars = 1000; } // // Current ... CopyBuffer( mHandler, XCHICH_C_TK_LINE, 0, totalBars, cTKBuffer // ); CopyBuffer( mHandler, XCHICH_C_KJ_LINE, 0, totalBars, cKJBuffer // ); CopyBuffer( mHandler, XCHICH_C_CH_LINE, 0, totalBars, cChikBuffer // ); CopyBuffer( mHandler, XCHICH_C_SSA_LINE, 0, totalBars, cSSABuffer // ); CopyBuffer( mHandler, XCHICH_C_SSB_LINE, 0, totalBars, cSSBBuffer // ); // // Short ... CopyBuffer( mHandler, XCHICH_S_TK_LINE, 0, totalBars, sTKBuffer // ); CopyBuffer( mHandler, XCHICH_S_KJ_LINE, 0, totalBars, sKJBuffer // ); CopyBuffer( mHandler, XCHICH_S_CH_LINE, 0, totalBars, sChikBuffer // ); CopyBuffer( mHandler, XCHICH_S_SSA_LINE, 0, totalBars, sSSABuffer // ); CopyBuffer( mHandler, XCHICH_S_SSB_LINE, 0, totalBars, sSSBBuffer // ); // // Medium ... CopyBuffer( mHandler, XCHICH_M_TK_LINE, 0, totalBars, mTKBuffer // ); CopyBuffer( mHandler, XCHICH_M_KJ_LINE, 0, totalBars, mKJBuffer // ); CopyBuffer( mHandler, XCHICH_M_CH_LINE, 0, totalBars, mChikBuffer // ); CopyBuffer( mHandler, XCHICH_M_SSA_LINE, 0, totalBars, mSSABuffer // ); CopyBuffer( mHandler, XCHICH_M_SSB_LINE, 0, totalBars, mSSBBuffer // ); // // Long ... CopyBuffer( mHandler, XCHICH_L_TK_LINE, 0, totalBars, lTKBuffer // ); CopyBuffer( mHandler, XCHICH_L_KJ_LINE, 0, totalBars, lKJBuffer // ); CopyBuffer( mHandler, XCHICH_L_CH_LINE, 0, totalBars, lChikBuffer // ); CopyBuffer( mHandler, XCHICH_L_SSA_LINE, 0, totalBars, lSSABuffer // ); CopyBuffer( mHandler, XCHICH_L_SSB_LINE, 0, totalBars, lSSBBuffer // ); // // Hind ... CopyBuffer( mHandler, XCHICH_H_TK_LINE, 0, totalBars, hTKBuffer // ); CopyBuffer( mHandler, XCHICH_H_KJ_LINE, 0, totalBars, hKJBuffer // ); CopyBuffer( mHandler, XCHICH_H_CH_LINE, 0, totalBars, hChikBuffer // ); CopyBuffer( mHandler, XCHICH_H_SSA_LINE, 0, totalBars, hSSABuffer // ); CopyBuffer( mHandler, XCHICH_H_SSB_LINE, 0, totalBars, hSSBBuffer // ); }; }; //