/////////////////////////////////////////////////////// // // SaherElm IT Center MQL5 Helper Class Library // ---------------------------------------------- // Name: XSCXCHLHHelper // 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" // // Definitions ... // enum ENUM_XCHLH_BUFFERS { // // LC ... XCHLH_LC_HH_LINE = 0, XCHLH_LC_LL_LINE = 1, // // MC ... XCHLH_MC_HH_LINE = 2, XCHLH_MC_LL_LINE = 3, // // SC ... XCHLH_SC_HH_LINE = 4, XCHLH_SC_LL_LINE = 5, // // Hot State ... XCHLH_HOT_STATE_LINE = 6 }; // // Input Models ... struct XCHLHInputs { // // Props ... // // Hot Areas ... bool drawHotAreas; // Draw Hot Areas Symbol uchar hotHHArrowCode; // Hot HH Arrow Code color hotHHArrowColor; // Hot HH Arrow Color uchar hotLLArrowCode; // Hot LL Arrow Code color hotLLArrowColor; // Hot LL Arrow Color // // Long Cycle ... // LC Market ... int lcLength; // Length double lcThresholdInPips; // Threshold In Pips ENUM_SERIESMODE lcHHMode; // Highest High Calculation Method ENUM_SERIESMODE lcLLMode; // Lowest Low Calculation Method // // LC Style ... int lcDrawWidth; // Draw Width ENUM_DRAW_TYPE lcDrawType; // Draw Type ENUM_LINE_STYLE lcDrawStyle; // Draw Style color lcHHColor; // Highest High Color color lcLLColor; // Lowest Low Color // LC Drawings ... bool lcDrawHH; // Draw Highest High bool lcDrawLL; // Draw Lowest Low // // Medium Cycle ... // MC Market ... int mcLength; // Length double mcThresholdInPips; // Threshold In Pips ENUM_SERIESMODE mcHHMode; // Highest High Calculation Method ENUM_SERIESMODE mcLLMode; // Lowest Low Calculation Method // MC Style ... int mcDrawWidth; // Draw Width ENUM_DRAW_TYPE mcDrawType; // Draw Type ENUM_LINE_STYLE mcDrawStyle; // Draw Style color mcHHColor; // Highest High Color color mcLLColor; // Lowest Low Color // MC Drawings ... bool mcDrawHH; // Draw Highest High bool mcDrawLL; // Draw Lowest Low // // Short Cycle ... // SC Market ... int scLength; // Length double scThresholdInPips; // Threshold In Pips ENUM_SERIESMODE scHHMode; // Highest High Calculation Method ENUM_SERIESMODE scLLMode; // Lowest Low Calculation Method // SC Style ... int scDrawWidth; // Draw Width ENUM_DRAW_TYPE scDrawType; // Draw Type ENUM_LINE_STYLE scDrawStyle; // Draw Style color scHHColor; // Highest High Color color scLLColor; // Lowest Low Color // SC Drawings ... bool scDrawHH; // Draw Highest High bool scDrawLL; // Draw Lowest Low // // Constructor(s) ... XCHLHInputs() { // Clean(); } // // Tools ... // // Clean ... void Clean() { // // Hot Areas ... drawHotAreas = false; hotHHArrowCode = 234; hotHHArrowColor = CLR_NONE; hotLLArrowCode = 233; hotLLArrowColor = CLR_NONE; // // Long Cycle ... // LC Market ... lcLength = 0; lcThresholdInPips = 0; lcHHMode = MODE_HIGH; lcLLMode = MODE_LOW; // // LC Style ... lcDrawWidth = 1; lcDrawType = DRAW_NONE; lcDrawStyle = STYLE_DOT; lcHHColor = CLR_NONE; lcLLColor = CLR_NONE; // LC Drawings ... lcDrawHH = false; lcDrawLL = false; // // Medium Cycle ... // MC Market ... mcLength = 0; mcThresholdInPips = 0; mcHHMode = MODE_HIGH; mcLLMode = MODE_LOW; // MC Style ... mcDrawWidth = 1; mcDrawType = DRAW_NONE; mcDrawStyle = STYLE_DOT; mcHHColor = CLR_NONE; mcLLColor = CLR_NONE; // MC Drawings ... mcDrawHH = false; mcDrawLL = false; // // Short Cycle ... // SC Market ... scLength = 0; scThresholdInPips = 0; scHHMode = MODE_HIGH; scLLMode = MODE_LOW; // SC Style ... scDrawWidth = 1; scDrawType = DRAW_NONE; scDrawStyle = STYLE_DOT; scHHColor = CLR_NONE; scLLColor = CLR_NONE; // SC Drawings ... scDrawHH = false; scDrawLL = false; } // // Default ... void Default() { // // Hot Areas ... drawHotAreas = false; hotHHArrowCode = 234; hotHHArrowColor = CLR_NONE; hotLLArrowCode = 233; hotLLArrowColor = CLR_NONE; // // Long Cycle ... // LC Market ... lcLength = 28; lcThresholdInPips = 0.3; lcHHMode = MODE_HIGH; lcLLMode = MODE_LOW; // // LC Style ... lcDrawWidth = 1; lcDrawType = DRAW_LINE; lcDrawStyle = STYLE_DOT; lcHHColor = clrAqua; lcLLColor = clrFuchsia; // LC Drawings ... lcDrawHH = false; lcDrawLL = false; // // Medium Cycle ... // MC Market ... mcLength = 14; mcThresholdInPips = 0.3; mcHHMode = MODE_HIGH; mcLLMode = MODE_LOW; // MC Style ... mcDrawWidth = 1; mcDrawType = DRAW_LINE; mcDrawStyle = STYLE_DOT; mcHHColor = clrLime; mcLLColor = clrRed; // MC Drawings ... mcDrawHH = false; mcDrawLL = false; // // Short Cycle ... // SC Market ... scLength = 7; scThresholdInPips = 0.3; scHHMode = MODE_HIGH; scLLMode = MODE_LOW; // SC Style ... scDrawWidth = 1; scDrawType = DRAW_LINE; scDrawStyle = STYLE_DOT; scHHColor = clrLightBlue; scLLColor = clrLightSalmon; // SC Drawings ... scDrawHH = false; scDrawLL = false; } // // Validate ... bool IsValid() { // bool result = false; // result = // // LC ... (lcLength >= 4 && lcLength > mcLength && lcLength > scLength) // && // // MC ... (mcLength >= 4 && mcLength > scLength && mcLength < lcLength) // && // // SC ... (scLength >= 4 && scLength < mcLength && scLength < lcLength) // ; // return result; } // // Retrieve MAx Length ... int Max() { // int result = 0; // result = MathMax(lcLength, mcLength); result = MathMax(result, scLength); // return result; } }; // // Class ... class XSCXCHLHHelper : public XSCBaseHelper { // // Public ... public: // // Props ... // // Constructors ... XSCXCHLHHelper() : XSCBaseHelper(_Symbol, _Period) { } // // Deconstructor ... ~XSCXCHLHHelper() {} // // Tools ... bool Init( string symbol, // Trading Symbol ENUM_TIMEFRAMES period, // Trading Period XCHLHInputs &inputs // Inputs ) { // bool result = false; // mSymbol = symbol; mPeriod = period; // result = inputs.IsValid(); if (!result) { return result; } // mInputs = inputs; // ArraySetAsSeries(scHHBuffer, true); ArraySetAsSeries(scLLBuffer, true); ArraySetAsSeries(mcHHBuffer, true); ArraySetAsSeries(mcLLBuffer, true); ArraySetAsSeries(lcHHBuffer, true); ArraySetAsSeries(lcLLBuffer, true); ArraySetAsSeries(hotStateBuffer, true); // mHandler = iCustom( mSymbol, mPeriod, "x-saherelm.xchlh", // // Inputs ... // // Hot Areas ... "", // mInputs.drawHotAreas, // Draw Hot Areas Symbol mInputs.hotHHArrowCode, // Hot HH Arrow Code mInputs.hotHHArrowColor, // Hot HH Arrow Color mInputs.hotLLArrowCode, // Hot LL Arrow Code mInputs.hotLLArrowColor, // Hot LL Arrow Color // // Long Cycle ... "", // LC Market ... "", // mInputs.lcLength, // Length mInputs.lcThresholdInPips, // Threshold In Pips mInputs.lcHHMode, // Highest High Calculation Method mInputs.lcLLMode, // Lowest Low Calculation Method // // LC Style ... "", // mInputs.lcDrawWidth, // Draw Width mInputs.lcDrawType, // Draw Type mInputs.lcDrawStyle, // Draw Style mInputs.lcHHColor, // Highest High Color mInputs.lcLLColor, // Lowest Low Color // // LC Drawings ... "", mInputs.lcDrawHH, // Draw Highest High mInputs.lcDrawLL, // Draw Lowest Low // // Medium Cycle ... "", // MC Market ... "", // mInputs.mcLength, // Length mInputs.mcThresholdInPips, // Threshold In Pips mInputs.mcHHMode, // Highest High Calculation Method mInputs.mcLLMode, // Lowest Low Calculation Method // // MC Style ... "", // mInputs.mcDrawWidth, // Draw Width mInputs.mcDrawType, // Draw Type mInputs.mcDrawStyle, // Draw Style mInputs.mcHHColor, // Highest High Color mInputs.mcLLColor, // Lowest Low Color // // MC Drawings ... "", mInputs.mcDrawHH, // Draw Highest High mInputs.mcDrawLL, // Draw Lowest Low // // Short Cycle ... "", // SC Market ... "", // mInputs.scLength, // Length mInputs.scThresholdInPips, // Threshold In Pips mInputs.scHHMode, // Highest High Calculation Method mInputs.scLLMode, // Lowest Low Calculation Method // // SC Style ... "", // mInputs.scDrawWidth, // Draw Width mInputs.scDrawType, // Draw Type mInputs.scDrawStyle, // Draw Style mInputs.scHHColor, // Highest High Color mInputs.scLLColor, // Lowest Low Color // // SC Drawings ... "", mInputs.scDrawHH, // Draw Highest High mInputs.scDrawLL // Draw Lowest Low // ); result = mHandler != INVALID_HANDLE; if (!result) { return result; } // return result; } // // Inputs ... // XCHLHInputs GetInputs() { return mInputs; } // bool SetInputs( XCHLHInputs &inputs // Configs ) { // return Init( mSymbol, mPeriod, inputs // ); } // // Buffers ... // // Short ... // double GetSCHH( int barIndex // Bar Index ) { // if (barIndex < 0) { barIndex = 0; } // Calculate(); // int count = ArraySize(scHHBuffer); if (barIndex >= count) { barIndex = count - 1; } // return scHHBuffer[barIndex]; } // // Copy Required Items ... int CopySCHH( int start, // Start int count, // Number of Items for read double &buffer[], // Dest Buffer bool forceClean = true // Force To Clean buffer ) { // // Update Calculations ... Calculate(); // // Copy Items ... return Copy( start, count, scHHBuffer, buffer, forceClean // ); } // double GetSCLL( int barIndex // Bar Index ) { // if (barIndex < 0) { barIndex = 0; } // Calculate(); // int count = ArraySize(scLLBuffer); if (barIndex >= count) { barIndex = count - 1; } // return scLLBuffer[barIndex]; } // // Copy Required Items ... int CopySCLL( int start, // Start int count, // Number of Items for read double &buffer[], // Dest Buffer bool forceClean = true // Force To Clean buffer ) { // // Update Calculations ... Calculate(); // // Copy Items ... return Copy( start, count, scLLBuffer, buffer, forceClean // ); } // // Medium ... // double GetMCHH( int barIndex // Bar Index ) { // if (barIndex < 0) { barIndex = 0; } // Calculate(); // int count = ArraySize(mcHHBuffer); if (barIndex >= count) { barIndex = count - 1; } // return mcHHBuffer[barIndex]; } // // Copy Required Items ... int CopyMCHH( int start, // Start int count, // Number of Items for read double &buffer[], // Dest Buffer bool forceClean = true // Force To Clean buffer ) { // // Update Calculations ... Calculate(); // // Copy Items ... return Copy( start, count, mcHHBuffer, buffer, forceClean // ); } // double GetMCLL( int barIndex // Bar Index ) { // if (barIndex < 0) { barIndex = 0; } // Calculate(); // int count = ArraySize(mcLLBuffer); if (barIndex >= count) { barIndex = count - 1; } // return mcLLBuffer[barIndex]; } // // Copy Required Items ... int CopyMCLL( int start, // Start int count, // Number of Items for read double &buffer[], // Dest Buffer bool forceClean = true // Force To Clean buffer ) { // // Update Calculations ... Calculate(); // // Copy Items ... return Copy( start, count, mcLLBuffer, buffer, forceClean // ); } // // Long ... // double GetLCHH( int barIndex // Bar Index ) { // if (barIndex < 0) { barIndex = 0; } // Calculate(); // int count = ArraySize(lcHHBuffer); if (barIndex >= count) { barIndex = count - 1; } // return lcHHBuffer[barIndex]; } // // Copy Required Items ... int CopyLCHH( int start, // Start int count, // Number of Items for read double &buffer[], // Dest Buffer bool forceClean = true // Force To Clean buffer ) { // // Update Calculations ... Calculate(); // // Copy Items ... return Copy( start, count, lcHHBuffer, buffer, forceClean // ); } // double GetLCLL( int barIndex // Bar Index ) { // if (barIndex < 0) { barIndex = 0; } // Calculate(); // int count = ArraySize(lcLLBuffer); if (barIndex >= count) { barIndex = count - 1; } // return lcLLBuffer[barIndex]; } // // Copy Required Items ... int CopyLCLL( int start, // Start int count, // Number of Items for read double &buffer[], // Dest Buffer bool forceClean = true // Force To Clean buffer ) { // // Update Calculations ... Calculate(); // // Copy Items ... return Copy( start, count, lcLLBuffer, buffer, forceClean // ); } // double GetHotState( int barIndex // Bar Index ) { // if (barIndex < 0) { barIndex = 0; } // Calculate(); // int count = ArraySize(hotStateBuffer); if (barIndex >= count) { barIndex = count - 1; } // return hotStateBuffer[barIndex]; } // // Copy Required Items ... int CopyHotState( int start, // Start int count, // Number of Items for read double &buffer[], // Dest Buffer bool forceClean = true // Force To Clean buffer ) { // // Update Calculations ... Calculate(); // // Copy Items ... return Copy( start, count, hotStateBuffer, buffer, forceClean // ); } // // Protected ... protected: // // Private ... private: // // Props ... XCHLHInputs mInputs; // Inputs ... // // Buffers ... double scHHBuffer[]; double scLLBuffer[]; double mcHHBuffer[]; double mcLLBuffer[]; double lcHHBuffer[]; double lcLLBuffer[]; double hotStateBuffer[]; // // Tools ... // // Calculate Values Until Now ... void Calculate() { // int totalBars = CountBars(); // // Short Cycle ... // // HH ... CopyBuffer( mHandler, XCHLH_SC_HH_LINE, 0, totalBars, scHHBuffer // ); // // LL ... CopyBuffer( mHandler, XCHLH_SC_LL_LINE, 0, totalBars, scLLBuffer // ); // // Medium Cycle ... // // HH ... CopyBuffer( mHandler, XCHLH_MC_HH_LINE, 0, totalBars, mcHHBuffer // ); // // LL ... CopyBuffer( mHandler, XCHLH_MC_LL_LINE, 0, totalBars, mcLLBuffer // ); // // Long Cycle ... // // HH ... CopyBuffer( mHandler, XCHLH_LC_HH_LINE, 0, totalBars, lcHHBuffer // ); // // LL ... CopyBuffer( mHandler, XCHLH_LC_LL_LINE, 0, totalBars, lcLLBuffer // ); // // Hot State ... CopyBuffer( mHandler, XCHLH_HOT_STATE_LINE, 0, totalBars, hotStateBuffer // ); } }; // // Tools ...