From 8c81f649dc698a62eb1fc78ea1582a987623af8c Mon Sep 17 00:00:00 2001 From: Hadi Khazaee Asl Date: Sat, 18 May 2024 06:12:14 +0330 Subject: [PATCH] complete all indicator/oscillator(s) helper classes ... --- Helpers/x-saherelm.xchlh.helper.mq5 | 397 +++++++++++-- Helpers/x-saherelm.xchma.helper.mq5 | 831 +++++++++++++++++++++++++--- Helpers/x-saherelm.xfi.helper.mq5 | 139 ++--- Helpers/x-saherelm.xlh.helper.mq5 | 291 +++++++--- Helpers/x-saherelm.xobd.helper.mq5 | 171 +++--- Helpers/x-saherelm.xrsi.helper.mq5 | 257 ++++++--- Helpers/x-saherelm.xtd.helper.mq5 | 327 ++++++++--- Helpers/x-saherelm.xtm.helper.mq5 | 165 +++--- Helpers/x-saherelm.xts.helper.mq5 | 419 +++++++++++--- 9 files changed, 2367 insertions(+), 630 deletions(-) diff --git a/Helpers/x-saherelm.xchlh.helper.mq5 b/Helpers/x-saherelm.xchlh.helper.mq5 index 75192090..3425be8f 100644 --- a/Helpers/x-saherelm.xchlh.helper.mq5 +++ b/Helpers/x-saherelm.xchlh.helper.mq5 @@ -486,55 +486,364 @@ public: // // Buffers ... - // // - // double GetMain( - // int barIndex // Bar Index - // ) - // { - // // - // if (barIndex < 0) - // { - // barIndex = 0; - // } + // + // Short ... - // // - // Calculate(); + // + double GetSCHH( + int barIndex // Bar Index + ) + { + // + if (barIndex < 0) + { + barIndex = 0; + } - // // - // int count = ArraySize(mainBuffer); - // if (barIndex >= count) - // { - // barIndex = count - 1; - // } + // + Calculate(); - // // - // return mainBuffer[barIndex]; - // } + // + int count = ArraySize(scHHBuffer); + if (barIndex >= count) + { + barIndex = count - 1; + } - // // - // // Copy Required Long Exits 2 ... - // int CopyLongExit2( - // int start, // Start - // int count, // Number of Items for read - // double &buffer[], // Dest Buffer - // bool forceClean = true // Force To Clean buffer - // ) - // { - // // - // // Update Calculations ... - // Calculate(); + // + return scHHBuffer[barIndex]; + } - // // - // // Copy Items ... - // return Copy( - // start, - // count, - // longExit2Buffer, - // buffer, - // forceClean - // // - // ); - // } + // + // 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 ... diff --git a/Helpers/x-saherelm.xchma.helper.mq5 b/Helpers/x-saherelm.xchma.helper.mq5 index 3c0f503f..20a329c8 100644 --- a/Helpers/x-saherelm.xchma.helper.mq5 +++ b/Helpers/x-saherelm.xchma.helper.mq5 @@ -30,7 +30,20 @@ // enum ENUM_XCHMA_BUFFERS { - XCHMA_MAIN_LINE = 0 + // + // LC ... + XCHMA_LC_FAST_LINE = 0, + XCHMA_LC_SLOW_LINE = 1, + // + // MC ... + XCHMA_MC_FAST_LINE = 2, + XCHMA_MC_SLOW_LINE = 3, + // + // SC ... + XCHMA_SC_FAST_LINE = 4, + XCHMA_SC_SLOW_LINE = 5, + // + XCHMA_HOT_STATE_LINE = 6, }; // @@ -39,7 +52,67 @@ struct XXCHMAInputs { // // Props ... - string tmp; + // + // Hot Areas ... + bool drawHotAreas; // Draw Hot Areas Symbol + uchar hotBullishArrowCode; // Hot Bullish Arrow Code + color hotBullishArrowColor; // Hot Bullish Arrow Color + uchar hotBearishArrowCode; // Hot Bearish Arrow Code + color hotBearishArrowColor; // Hot Bearish Arrow Color + + // + // Long Cycle ... + // LC Market ... + int lcFastLength; // Fast Length + int lcSlowLength; // Slow Length + ENUM_MA_METHOD lcMethod; // Calculation Method + ENUM_APPLIED_PRICE lcAppliedTo; // Applied To + // LC Style ... + int lcDrawWidth; // Draw Width + ENUM_DRAW_TYPE lcDrawType; // Draw Type + ENUM_LINE_STYLE lcDrawStyle; // Draw Style + color lcFastColor; // Fast Color + color lcSlowColor; // Slow Color + // LC Drawings ... + bool lcDrawFast; // Draw Fast + bool lcDrawSlow; // Draw Slow + bool lcDrawCrosses; // Draw Cross Lines + + // + // Medium Cycle ... + // MC Market ... + int mcFastLength; // Fast Length + int mcSlowLength; // Slow Length + ENUM_MA_METHOD mcMethod; // Calculation Method + ENUM_APPLIED_PRICE mcAppliedTo; // Applied To + // MC Style ... + int mcDrawWidth; // Draw Width + ENUM_DRAW_TYPE mcDrawType; // Draw Type + ENUM_LINE_STYLE mcDrawStyle; // Draw Style + color mcFastColor; // Fast Color + color mcSlowColor; // Slow Color + // MC Drawings ... + bool mcDrawFast; // Draw Fast + bool mcDrawSlow; // Draw Slow + bool mcDrawCrosses; // Draw Cross Lines + + // + // Short Cycle ... + // SC Market ... + int scFastLength; // Fast Length + int scSlowLength; // Slow Length + ENUM_MA_METHOD scMethod; // Calculation Method + ENUM_APPLIED_PRICE scAppliedTo; // Applied To + // SC Style ... + int scDrawWidth; // Draw Width + ENUM_DRAW_TYPE scDrawType; // Draw Type + ENUM_LINE_STYLE scDrawStyle; // Draw Style + color scFastColor; // Fast Color + color scSlowColor; // Slow Color + // SC Drawings ... + bool scDrawFast; // Draw Fast + bool scDrawSlow; // Draw Slow + bool scDrawCrosses; // Draw Cross Lines // // Constructor(s) ... @@ -57,6 +130,66 @@ struct XXCHMAInputs void Clean() { // + // Hot Areas ... + drawHotAreas = false; + hotBullishArrowCode = 228; + hotBullishArrowColor = CLR_NONE; + hotBearishArrowCode = 230; + hotBearishArrowColor = CLR_NONE; + + // + // Long Cycle ... + // LC Market ... + lcFastLength = 20; + lcSlowLength = 50; + lcMethod = MODE_EMA; + lcAppliedTo = PRICE_CLOSE; + // LC Style ... + lcDrawWidth = 1; + lcDrawType = DRAW_NONE; + lcDrawStyle = STYLE_DOT; + lcFastColor = CLR_NONE; + lcSlowColor = CLR_NONE; + // LC Drawings ... + lcDrawFast = false; + lcDrawSlow = false; + lcDrawCrosses = false; + + // + // Medium Cycle ... + // MC Market ... + mcFastLength = 10; + mcSlowLength = 30; + mcMethod = MODE_EMA; + mcAppliedTo = PRICE_CLOSE; + // MC Style ... + mcDrawWidth = 1; + mcDrawType = DRAW_NONE; + mcDrawStyle = STYLE_DOT; + mcFastColor = CLR_NONE; + mcSlowColor = CLR_NONE; + // MC Drawings ... + mcDrawFast = false; + mcDrawSlow = false; + mcDrawCrosses = false; + + // + // Short Cycle ... + // SC Market ... + scFastLength = 7; + scSlowLength = 14; + scMethod = MODE_EMA; + scAppliedTo = PRICE_CLOSE; + // SC Style ... + scDrawWidth = 1; + scDrawType = DRAW_NONE; + scDrawStyle = STYLE_SOLID; + scFastColor = CLR_NONE; + scSlowColor = CLR_NONE; + // SC Drawings ... + scDrawFast = false; + scDrawSlow = false; + scDrawCrosses = false; } // @@ -64,6 +197,66 @@ struct XXCHMAInputs void Default() { // + // Hot Areas ... + drawHotAreas = false; + hotBullishArrowCode = 228; + hotBullishArrowColor = CLR_NONE; + hotBearishArrowCode = 230; + hotBearishArrowColor = CLR_NONE; + + // + // Long Cycle ... + // LC Market ... + lcFastLength = 20; + lcSlowLength = 50; + lcMethod = MODE_EMA; + lcAppliedTo = PRICE_CLOSE; + // LC Style ... + lcDrawWidth = 1; + lcDrawType = DRAW_LINE; + lcDrawStyle = STYLE_DOT; + lcFastColor = clrAqua; + lcSlowColor = clrFuchsia; + // LC Drawings ... + lcDrawFast = true; + lcDrawSlow = true; + lcDrawCrosses = false; + + // + // Medium Cycle ... + // MC Market ... + mcFastLength = 10; + mcSlowLength = 30; + mcMethod = MODE_EMA; + mcAppliedTo = PRICE_CLOSE; + // MC Style ... + mcDrawWidth = 1; + mcDrawType = DRAW_LINE; + mcDrawStyle = STYLE_DOT; + mcFastColor = clrLime; + mcSlowColor = clrRed; + // MC Drawings ... + mcDrawFast = true; + mcDrawSlow = true; + mcDrawCrosses = false; + + // + // Short Cycle ... + // SC Market ... + scFastLength = 7; + scSlowLength = 14; + scMethod = MODE_EMA; + scAppliedTo = PRICE_CLOSE; + // SC Style ... + scDrawWidth = 1; + scDrawType = DRAW_LINE; + scDrawStyle = STYLE_SOLID; + scFastColor = clrLightBlue; + scSlowColor = clrLightSalmon; + // SC Drawings ... + scDrawFast = true; + scDrawSlow = true; + scDrawCrosses = false; } // @@ -76,7 +269,11 @@ struct XXCHMAInputs // result = // - false + (lcFastLength >= 4 && lcSlowLength > lcFastLength) && + (mcFastLength >= 4 && mcSlowLength > mcFastLength) && + (scFastLength >= 4 && scSlowLength > scFastLength) && + (lcFastLength > mcFastLength && + mcFastLength > scFastLength) // ; @@ -92,7 +289,11 @@ struct XXCHMAInputs int result = 0; // - result = MathMax(0, 0); + result = MathMax(scFastLength, scSlowLength); + result = MathMax(result, lcFastLength); + result = MathMax(result, lcSlowLength); + result = MathMax(result, mcFastLength); + result = MathMax(result, mcSlowLength); // return result; @@ -124,7 +325,7 @@ public: bool Init( string symbol, // Trading Symbol ENUM_TIMEFRAMES period, // Trading Period - XXCHMAInputs &inputs // Inputs + XXCHMAInputs &inputs // Inputs ) { // @@ -144,21 +345,109 @@ public: // mInputs = inputs; - // // - // // ArraySetAsSeries(shortExit2Buffer, true); - // mHandler = iCustom( - // mSymbol, - // mPeriod, - // "x-saherelm.x", - // // - // // Inputs ... - // // - // ); - // result = mHandler != INVALID_HANDLE; - // if (!result) - // { - // return result; - // } + // + ArraySetAsSeries(scFastBuffer, true); + ArraySetAsSeries(scSlowBuffer, true); + ArraySetAsSeries(mcFastBuffer, true); + ArraySetAsSeries(mcSlowBuffer, true); + ArraySetAsSeries(lcFastBuffer, true); + ArraySetAsSeries(lcSlowBuffer, true); + ArraySetAsSeries(hotStateBuffer, true); + + // + mHandler = iCustom( + mSymbol, + mPeriod, + "x-saherelm.xchma", + // + // Inputs ... + // + // Hot Areas ... + "", + mInputs.drawHotAreas, // Draw Hot Areas Symbol + mInputs.hotBullishArrowCode, // Hot Bullish Arrow Code + mInputs.hotBullishArrowColor, // Hot Bullish Arrow Color + mInputs.hotBearishArrowCode, // Hot Bearish Arrow Code + mInputs.hotBearishArrowColor, // Hot Bearish Arrow Color + // + // Long Cycle ... + "", + // + // LC Market ... + "", + mInputs.lcFastLength, // Fast Length + mInputs.lcSlowLength, // Slow Length + mInputs.lcMethod, // Calculation Method + mInputs.lcAppliedTo, // Applied To + // + // LC Style ... + "", + mInputs.lcDrawWidth, // Draw Width + mInputs.lcDrawType, // Draw Type + mInputs.lcDrawStyle, // Draw Style + mInputs.lcFastColor, // Fast Color + mInputs.lcSlowColor, // Slow Color + // + // LC Drawings ... + "", + mInputs.lcDrawFast, // Draw Fast + mInputs.lcDrawSlow, // Draw Slow + mInputs.lcDrawCrosses, // Draw Cross Lines + // + // Medium Cycle ... + "", + // + // MC Market ... + "", + mInputs.mcFastLength, // Fast Length + mInputs.mcSlowLength, // Slow Length + mInputs.mcMethod, // Calculation Method + mInputs.mcAppliedTo, // Applied To + // + // MC Style ... + "", + mInputs.mcDrawWidth, // Draw Width + mInputs.mcDrawType, // Draw Type + mInputs.mcDrawStyle, // Draw Style + mInputs.mcFastColor, // Fast Color + mInputs.mcSlowColor, // Slow Color + // + // MC Drawings ... + "", + mInputs.mcDrawFast, // Draw Fast + mInputs.mcDrawSlow, // Draw Slow + mInputs.mcDrawCrosses, // Draw Cross Lines + // + // Short Cycle ... + "", + // + // SC Market ... + "", + mInputs.scFastLength, // Fast Length + mInputs.scSlowLength, // Slow Length + mInputs.scMethod, // Calculation Method + mInputs.scAppliedTo, // Applied To + // + // SC Style ... + "", + mInputs.scDrawWidth, // Draw Width + mInputs.scDrawType, // Draw Type + mInputs.scDrawStyle, // Draw Style + mInputs.scFastColor, // Fast Color + mInputs.scSlowColor, // Slow Color + // + // SC Drawings ... + "", + mInputs.scDrawFast, // Draw Fast + mInputs.scDrawSlow, // Draw Slow + mInputs.scDrawCrosses // Draw Cross Lines + // + ); + result = mHandler != INVALID_HANDLE; + if (!result) + { + return result; + } // return result; @@ -189,56 +478,365 @@ public: // // Buffers ... - - // // - // double GetMain( - // int barIndex // Bar Index - // ) - // { - // // - // if (barIndex < 0) - // { - // barIndex = 0; - // } - // // - // Calculate(); + // + // Short ... - // // - // int count = ArraySize(mainBuffer); - // if (barIndex >= count) - // { - // barIndex = count - 1; - // } + // + double GetSCFast( + int barIndex // Bar Index + ) + { + // + if (barIndex < 0) + { + barIndex = 0; + } - // // - // return mainBuffer[barIndex]; - // } + // + Calculate(); - // // - // // Copy Required Long Exits 2 ... - // int CopyLongExit2( - // int start, // Start - // int count, // Number of Items for read - // double &buffer[], // Dest Buffer - // bool forceClean = true // Force To Clean buffer - // ) - // { - // // - // // Update Calculations ... - // Calculate(); + // + int count = ArraySize(scFastBuffer); + if (barIndex >= count) + { + barIndex = count - 1; + } - // // - // // Copy Items ... - // return Copy( - // start, - // count, - // longExit2Buffer, - // buffer, - // forceClean - // // - // ); - // } + // + return scFastBuffer[barIndex]; + } + + // + // Copy Required Items ... + int CopySCFast( + 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, + scFastBuffer, + buffer, + forceClean + // + ); + } + + // + double GetSCSlow( + int barIndex // Bar Index + ) + { + // + if (barIndex < 0) + { + barIndex = 0; + } + + // + Calculate(); + + // + int count = ArraySize(scSlowBuffer); + if (barIndex >= count) + { + barIndex = count - 1; + } + + // + return scSlowBuffer[barIndex]; + } + + // + // Copy Required Items ... + int CopySCSlow( + 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, + scSlowBuffer, + buffer, + forceClean + // + ); + } + + // + // Medium ... + + // + double GetMCFast( + int barIndex // Bar Index + ) + { + // + if (barIndex < 0) + { + barIndex = 0; + } + + // + Calculate(); + + // + int count = ArraySize(mcFastBuffer); + if (barIndex >= count) + { + barIndex = count - 1; + } + + // + return mcFastBuffer[barIndex]; + } + + // + // Copy Required Items ... + int CopyMCFast( + 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, + mcFastBuffer, + buffer, + forceClean + // + ); + } + + // + double GetMCSlow( + int barIndex // Bar Index + ) + { + // + if (barIndex < 0) + { + barIndex = 0; + } + + // + Calculate(); + + // + int count = ArraySize(mcSlowBuffer); + if (barIndex >= count) + { + barIndex = count - 1; + } + + // + return mcSlowBuffer[barIndex]; + } + + // + // Copy Required Items ... + int CopyMCSlow( + 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, + mcSlowBuffer, + buffer, + forceClean + // + ); + } + + // + // Long ... + + // + double GetLCFast( + int barIndex // Bar Index + ) + { + // + if (barIndex < 0) + { + barIndex = 0; + } + + // + Calculate(); + + // + int count = ArraySize(lcFastBuffer); + if (barIndex >= count) + { + barIndex = count - 1; + } + + // + return lcFastBuffer[barIndex]; + } + + // + // Copy Required Items ... + int CopyLCFast( + 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, + lcFastBuffer, + buffer, + forceClean + // + ); + } + + // + double GetLCSlow( + int barIndex // Bar Index + ) + { + // + if (barIndex < 0) + { + barIndex = 0; + } + + // + Calculate(); + + // + int count = ArraySize(lcSlowBuffer); + if (barIndex >= count) + { + barIndex = count - 1; + } + + // + return lcSlowBuffer[barIndex]; + } + + // + // Copy Required Items ... + int CopyLCSlow( + 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, + lcSlowBuffer, + 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 ... @@ -252,7 +850,13 @@ private: // // Buffers ... - // double longExit1Buffer[]; + double scFastBuffer[]; + double scSlowBuffer[]; + double mcFastBuffer[]; + double mcSlowBuffer[]; + double lcFastBuffer[]; + double lcSlowBuffer[]; + double hotStateBuffer[]; // // Tools ... @@ -264,16 +868,91 @@ private: // int totalBars = CountBars(); - // // - // // Short Exit 2 ... - // CopyBuffer( - // mHandler, - // X_CHE_SHORT_EXIT_2_LINE, - // 0, - // totalBars, - // shortExit2Buffer - // // - // ); + // + // Short Cycle ... + + // + // Fast ... + CopyBuffer( + mHandler, + XCHMA_SC_FAST_LINE, + 0, + totalBars, + scFastBuffer + // + ); + + // + // Slow ... + CopyBuffer( + mHandler, + XCHMA_SC_SLOW_LINE, + 0, + totalBars, + scSlowBuffer + // + ); + + // + // Medium Cycle ... + + // + // Fast ... + CopyBuffer( + mHandler, + XCHMA_MC_FAST_LINE, + 0, + totalBars, + mcFastBuffer + // + ); + + // + // Slow ... + CopyBuffer( + mHandler, + XCHMA_MC_SLOW_LINE, + 0, + totalBars, + mcSlowBuffer + // + ); + + // + // Long Cycle ... + + // + // Fast ... + CopyBuffer( + mHandler, + XCHMA_LC_FAST_LINE, + 0, + totalBars, + lcFastBuffer + // + ); + + // + // Slow ... + CopyBuffer( + mHandler, + XCHMA_LC_SLOW_LINE, + 0, + totalBars, + lcSlowBuffer + // + ); + + // + // Hot State ... + CopyBuffer( + mHandler, + XCHMA_HOT_STATE_LINE, + 0, + totalBars, + hotStateBuffer + // + ); } } diff --git a/Helpers/x-saherelm.xfi.helper.mq5 b/Helpers/x-saherelm.xfi.helper.mq5 index a011c6ae..7701ec41 100644 --- a/Helpers/x-saherelm.xfi.helper.mq5 +++ b/Helpers/x-saherelm.xfi.helper.mq5 @@ -39,7 +39,9 @@ struct XXFIInputs { // // Props ... - string tmp; + int length; // Length + ENUM_MA_METHOD method; // MA Method + ENUM_APPLIED_VOLUME appliedTo; // Applied To // // Constructor(s) ... @@ -57,6 +59,9 @@ struct XXFIInputs void Clean() { // + length = 0; + method = MODE_SMA; + appliedTo = VOLUME_TICK; } // @@ -64,6 +69,9 @@ struct XXFIInputs void Default() { // + length = 18; + method = MODE_SMA; + appliedTo = VOLUME_TICK; } // @@ -76,7 +84,7 @@ struct XXFIInputs // result = // - false + length >= 2 // ; @@ -92,7 +100,7 @@ struct XXFIInputs int result = 0; // - result = MathMax(0, 0); + result = MathMax(result, length); // return result; @@ -124,7 +132,7 @@ public: bool Init( string symbol, // Trading Symbol ENUM_TIMEFRAMES period, // Trading Period - XXFIInputs &inputs // Inputs + XXFIInputs &inputs // Inputs ) { // @@ -144,21 +152,24 @@ public: // mInputs = inputs; - // // - // // ArraySetAsSeries(shortExit2Buffer, true); - // mHandler = iCustom( - // mSymbol, - // mPeriod, - // "x-saherelm.x", - // // - // // Inputs ... - // // - // ); - // result = mHandler != INVALID_HANDLE; - // if (!result) - // { - // return result; - // } + // + ArraySetAsSeries(mainBuffer, true); + mHandler = iCustom( + mSymbol, + mPeriod, + "x-saherelm.xfi", + // + // Inputs ... + mInputs.length, // Length + mInputs.method, // MA Method + mInputs.appliedTo // Applied To + // + ); + result = mHandler != INVALID_HANDLE; + if (!result) + { + return result; + } // return result; @@ -190,55 +201,55 @@ public: // // Buffers ... - // // - // double GetMain( - // int barIndex // Bar Index - // ) - // { - // // - // if (barIndex < 0) - // { - // barIndex = 0; - // } + // + double GetMain( + int barIndex // Bar Index + ) + { + // + if (barIndex < 0) + { + barIndex = 0; + } - // // - // Calculate(); + // + Calculate(); - // // - // int count = ArraySize(mainBuffer); - // if (barIndex >= count) - // { - // barIndex = count - 1; - // } + // + int count = ArraySize(mainBuffer); + if (barIndex >= count) + { + barIndex = count - 1; + } - // // - // return mainBuffer[barIndex]; - // } + // + return mainBuffer[barIndex]; + } - // // - // // Copy Required Long Exits 2 ... - // int CopyLongExit2( - // 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 Required Items ... + int CopyMain( + 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, - // longExit2Buffer, - // buffer, - // forceClean - // // - // ); - // } + // + // Copy Items ... + return Copy( + start, + count, + mainBuffer, + buffer, + forceClean + // + ); + } // // Protected ... @@ -252,7 +263,7 @@ private: // // Buffers ... - // double longExit1Buffer[]; + double mainBuffer[]; // // Tools ... diff --git a/Helpers/x-saherelm.xlh.helper.mq5 b/Helpers/x-saherelm.xlh.helper.mq5 index 0024904c..a4c57a08 100644 --- a/Helpers/x-saherelm.xlh.helper.mq5 +++ b/Helpers/x-saherelm.xlh.helper.mq5 @@ -30,7 +30,9 @@ // enum ENUM_XLH_BUFFERS { - XLH_MAIN_LINE = 0 + XLH_HH_LINE = 0, + XLH_LL_LINE = 1, + XLH_SIGNAL_LINE = 2, }; // @@ -39,7 +41,9 @@ struct XXLHInputs { // // Props ... - string tmp; + int length; // Length + ENUM_SERIESMODE hhMode; // Highest High Calculation Method + ENUM_SERIESMODE llMode; // Lowest Low Calculation Method // // Constructor(s) ... @@ -57,6 +61,9 @@ struct XXLHInputs void Clean() { // + length = 0; + hhMode = MODE_HIGH; + llMode = MODE_LOW; } // @@ -64,6 +71,9 @@ struct XXLHInputs void Default() { // + length = 14; + hhMode = MODE_HIGH; + llMode = MODE_LOW; } // @@ -76,7 +86,7 @@ struct XXLHInputs // result = // - false + length >= 2 // ; @@ -92,7 +102,7 @@ struct XXLHInputs int result = 0; // - result = MathMax(0, 0); + result = MathMax(result, length); // return result; @@ -124,7 +134,7 @@ public: bool Init( string symbol, // Trading Symbol ENUM_TIMEFRAMES period, // Trading Period - XXLHInputs &inputs // Inputs + XXLHInputs &inputs // Inputs ) { // @@ -144,21 +154,28 @@ public: // mInputs = inputs; - // // - // // ArraySetAsSeries(shortExit2Buffer, true); - // mHandler = iCustom( - // mSymbol, - // mPeriod, - // "x-saherelm.x", - // // - // // Inputs ... - // // - // ); - // result = mHandler != INVALID_HANDLE; - // if (!result) - // { - // return result; - // } + // + ArraySetAsSeries(hhBuffer, true); + ArraySetAsSeries(llBuffer, true); + ArraySetAsSeries(signalBuffer, true); + + // + mHandler = iCustom( + mSymbol, + mPeriod, + "x-saherelm.xlh", + // + // Inputs ... + mInputs.length, // Length + mInputs.hhMode, // Highest High Calculation Method + mInputs.llMode // Lowest Low Calculation Method + // + ); + result = mHandler != INVALID_HANDLE; + if (!result) + { + return result; + } // return result; @@ -190,55 +207,155 @@ public: // // Buffers ... - // // - // double GetMain( - // int barIndex // Bar Index - // ) - // { - // // - // if (barIndex < 0) - // { - // barIndex = 0; - // } + // + double GetHH( + int barIndex // Bar Index + ) + { + // + if (barIndex < 0) + { + barIndex = 0; + } - // // - // Calculate(); + // + Calculate(); - // // - // int count = ArraySize(mainBuffer); - // if (barIndex >= count) - // { - // barIndex = count - 1; - // } + // + int count = ArraySize(hhBuffer); + if (barIndex >= count) + { + barIndex = count - 1; + } - // // - // return mainBuffer[barIndex]; - // } + // + return hhBuffer[barIndex]; + } - // // - // // Copy Required Long Exits 2 ... - // int CopyLongExit2( - // 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 Required Items ... + int CopyHH( + 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, - // longExit2Buffer, - // buffer, - // forceClean - // // - // ); - // } + // + // Copy Items ... + return Copy( + start, + count, + hhBuffer, + buffer, + forceClean + // + ); + } + + // + double GetLL( + int barIndex // Bar Index + ) + { + // + if (barIndex < 0) + { + barIndex = 0; + } + + // + Calculate(); + + // + int count = ArraySize(llBuffer); + if (barIndex >= count) + { + barIndex = count - 1; + } + + // + return llBuffer[barIndex]; + } + + // + // Copy Required Items ... + int CopyLL( + 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, + llBuffer, + buffer, + forceClean + // + ); + } + + // + double GetSignal( + int barIndex // Bar Index + ) + { + // + if (barIndex < 0) + { + barIndex = 0; + } + + // + Calculate(); + + // + int count = ArraySize(signalBuffer); + if (barIndex >= count) + { + barIndex = count - 1; + } + + // + return signalBuffer[barIndex]; + } + + // + // Copy Required Items ... + int CopySignal( + 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, + signalBuffer, + buffer, + forceClean + // + ); + } // // Protected ... @@ -252,7 +369,9 @@ private: // // Buffers ... - // double longExit1Buffer[]; + double hhBuffer[]; + double llBuffer[]; + double signalBuffer[]; // // Tools ... @@ -264,16 +383,38 @@ private: // int totalBars = CountBars(); - // // - // // Short Exit 2 ... - // CopyBuffer( - // mHandler, - // X_CHE_SHORT_EXIT_2_LINE, - // 0, - // totalBars, - // shortExit2Buffer - // // - // ); + // + // HH ... + CopyBuffer( + mHandler, + XLH_HH_LINE, + 0, + totalBars, + hhBuffer + // + ); + + // + // LL ... + CopyBuffer( + mHandler, + XLH_LL_LINE, + 0, + totalBars, + llBuffer + // + ); + + // + // Signal ... + CopyBuffer( + mHandler, + XLH_SIGNAL_LINE, + 0, + totalBars, + signalBuffer + // + ); } } diff --git a/Helpers/x-saherelm.xobd.helper.mq5 b/Helpers/x-saherelm.xobd.helper.mq5 index 517a207e..ba39b9d9 100644 --- a/Helpers/x-saherelm.xobd.helper.mq5 +++ b/Helpers/x-saherelm.xobd.helper.mq5 @@ -39,7 +39,17 @@ struct XXOBDInputs { // // Props ... - string tmp; + + // + int length; // Swing Length + + // + uchar swingHighArrowCode; // Swing High Arrow Code + color swingHighArrowColor; // Swing High Arrow Color + + // + uchar swingLowArrowCode; // Swing Low Arrow Code + color swingLowArrowColor; // Swing Low Arrow Color // // Constructor(s) ... @@ -57,6 +67,11 @@ struct XXOBDInputs void Clean() { // + length = 0; + swingHighArrowCode = 108; + swingHighArrowColor = CLR_NONE; + swingLowArrowCode = 108; + swingLowArrowColor = CLR_NONE; } // @@ -64,6 +79,11 @@ struct XXOBDInputs void Default() { // + length = 5; + swingHighArrowCode = 108; + swingHighArrowColor = CLR_NONE; + swingLowArrowCode = 108; + swingLowArrowColor = CLR_NONE; } // @@ -76,7 +96,7 @@ struct XXOBDInputs // result = // - false + length >= 3 // ; @@ -92,7 +112,7 @@ struct XXOBDInputs int result = 0; // - result = MathMax(0, 0); + result = MathMax(result, length); // return result; @@ -144,21 +164,26 @@ public: // mInputs = inputs; - // // - // // ArraySetAsSeries(shortExit2Buffer, true); - // mHandler = iCustom( - // mSymbol, - // mPeriod, - // "x-saherelm.x", - // // - // // Inputs ... - // // - // ); - // result = mHandler != INVALID_HANDLE; - // if (!result) - // { - // return result; - // } + // + ArraySetAsSeries(mainBuffer, true); + mHandler = iCustom( + mSymbol, + mPeriod, + "x-saherelm.xobd", + // + // Inputs ... + mInputs.length, // Swing Length + mInputs.swingHighArrowCode, // Swing High Arrow Code + mInputs.swingHighArrowColor, // Swing High Arrow Color + mInputs.swingLowArrowCode, // Swing Low Arrow Code + mInputs.swingLowArrowColor // Swing Low Arrow Color + // + ); + result = mHandler != INVALID_HANDLE; + if (!result) + { + return result; + } // return result; @@ -190,55 +215,55 @@ public: // // Buffers ... - // // - // double GetMain( - // int barIndex // Bar Index - // ) - // { - // // - // if (barIndex < 0) - // { - // barIndex = 0; - // } + // + double GetMain( + int barIndex // Bar Index + ) + { + // + if (barIndex < 0) + { + barIndex = 0; + } - // // - // Calculate(); + // + Calculate(); - // // - // int count = ArraySize(mainBuffer); - // if (barIndex >= count) - // { - // barIndex = count - 1; - // } + // + int count = ArraySize(mainBuffer); + if (barIndex >= count) + { + barIndex = count - 1; + } - // // - // return mainBuffer[barIndex]; - // } + // + return mainBuffer[barIndex]; + } - // // - // // Copy Required Long Exits 2 ... - // int CopyLongExit2( - // 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 Required Items ... + int CopyMain( + 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, - // longExit2Buffer, - // buffer, - // forceClean - // // - // ); - // } + // + // Copy Items ... + return Copy( + start, + count, + mainBuffer, + buffer, + forceClean + // + ); + } // // Protected ... @@ -252,7 +277,7 @@ private: // // Buffers ... - // double longExit1Buffer[]; + double mainBuffer[]; // // Tools ... @@ -264,16 +289,16 @@ private: // int totalBars = CountBars(); - // // - // // Short Exit 2 ... - // CopyBuffer( - // mHandler, - // X_CHE_SHORT_EXIT_2_LINE, - // 0, - // totalBars, - // shortExit2Buffer - // // - // ); + // + // Main ... + CopyBuffer( + mHandler, + XOBD_MAIN_LINE, + 0, + totalBars, + mainBuffer + // + ); } } diff --git a/Helpers/x-saherelm.xrsi.helper.mq5 b/Helpers/x-saherelm.xrsi.helper.mq5 index 8eb62e0e..09fc124f 100644 --- a/Helpers/x-saherelm.xrsi.helper.mq5 +++ b/Helpers/x-saherelm.xrsi.helper.mq5 @@ -39,7 +39,35 @@ struct XXRSIInputs { // // Props ... - string tmp; + + // + // Market ... + int length; // Market Length + ENUM_APPLIED_PRICE appliedTo; // Applied To + + // + // Short Entry ... + double shortEntryValue; // Short Entry Level + color shortEntryColor; // Short Entry Level Color + ENUM_LINE_STYLE shortEntryLineStyle; // Short Entry Style + + // + // Short Exit ... + double shortExitValue; // Short Exit Level + color shortExitColor; // Short Exit Level Color + ENUM_LINE_STYLE shortExitLineStyle; // Short Exit Style + + // + // Long Entry ... + double longEntryValue; // Long Entry Level + color longEntryColor; // Long Entry Level Color + ENUM_LINE_STYLE longEntryLineStyle; // Long Entry Style + + // + // Long Exit ... + double longExitValue; // Long Exit Level + color longExitColor; // Long Exit Level Color + ENUM_LINE_STYLE longExitLineStyle; // Long Exit Style // // Constructor(s) ... @@ -57,6 +85,33 @@ struct XXRSIInputs void Clean() { // + // Market ... + length = 0; + appliedTo = PRICE_CLOSE; + + // + // Short Entry ... + shortEntryValue = 0; + shortEntryColor = CLR_NONE; + shortEntryLineStyle = STYLE_DOT; + + // + // Short Exit ... + shortExitValue = 0; + shortExitColor = CLR_NONE; + shortExitLineStyle = STYLE_DOT; + + // + // Long Entry ... + longEntryValue = 0; + longEntryColor = CLR_NONE; + longEntryLineStyle = STYLE_DOT; + + // + // Long Exit ... + longExitValue = 0; + longExitColor = CLR_NONE; + longExitLineStyle = STYLE_DOT; } // @@ -64,6 +119,33 @@ struct XXRSIInputs void Default() { // + // Market ... + length = 14; + appliedTo = PRICE_CLOSE; + + // + // Short Entry ... + shortEntryValue = 70; + shortEntryColor = CLR_NONE; + shortEntryLineStyle = STYLE_DOT; + + // + // Short Exit ... + shortExitValue = 40; + shortExitColor = CLR_NONE; + shortExitLineStyle = STYLE_DOT; + + // + // Long Entry ... + longEntryValue = 30; + longEntryColor = CLR_NONE; + longEntryLineStyle = STYLE_DOT; + + // + // Long Exit ... + longExitValue = 60; + longExitColor = CLR_NONE; + longExitLineStyle = STYLE_DOT; } // @@ -76,7 +158,7 @@ struct XXRSIInputs // result = // - false + length >= 2 // ; @@ -92,7 +174,7 @@ struct XXRSIInputs int result = 0; // - result = MathMax(0, 0); + result = MathMax(result, length); // return result; @@ -144,21 +226,50 @@ public: // mInputs = inputs; - // // - // // ArraySetAsSeries(shortExit2Buffer, true); - // mHandler = iCustom( - // mSymbol, - // mPeriod, - // "x-saherelm.x", - // // - // // Inputs ... - // // - // ); - // result = mHandler != INVALID_HANDLE; - // if (!result) - // { - // return result; - // } + // + ArraySetAsSeries(mainBuffer, true); + mHandler = iCustom( + mSymbol, + mPeriod, + "x-saherelm.xrsi", + // + // Inputs ... + // + // Market ... + "", + mInputs.length, // Market Length + mInputs.appliedTo, // Applied To + // + // Short Entry ... + "", + mInputs.shortEntryValue, // Short Entry Level + mInputs.shortEntryColor, // Short Entry Level Color + mInputs.shortEntryLineStyle, // Short Entry Style + // + // Short Exit ... + "", + mInputs.shortExitValue, // Short Exit Level + mInputs.shortExitColor, // Short Exit Level Color + mInputs.shortExitLineStyle, // Short Exit Style + // + // Long Entry ... + "", + mInputs.longEntryValue, // Long Entry Level + mInputs.longEntryColor, // Long Entry Level Color + mInputs.longEntryLineStyle, // Long Entry Style + // + // Long Exit ... + "", + mInputs.longExitValue, // Long Exit Level + mInputs.longExitColor, // Long Exit Level Color + mInputs.longExitLineStyle // Long Exit Style + // + ); + result = mHandler != INVALID_HANDLE; + if (!result) + { + return result; + } // return result; @@ -190,55 +301,55 @@ public: // // Buffers ... - // // - // double GetMain( - // int barIndex // Bar Index - // ) - // { - // // - // if (barIndex < 0) - // { - // barIndex = 0; - // } + // + double GetMain( + int barIndex // Bar Index + ) + { + // + if (barIndex < 0) + { + barIndex = 0; + } - // // - // Calculate(); + // + Calculate(); - // // - // int count = ArraySize(mainBuffer); - // if (barIndex >= count) - // { - // barIndex = count - 1; - // } + // + int count = ArraySize(mainBuffer); + if (barIndex >= count) + { + barIndex = count - 1; + } - // // - // return mainBuffer[barIndex]; - // } + // + return mainBuffer[barIndex]; + } - // // - // // Copy Required Long Exits 2 ... - // int CopyLongExit2( - // 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 Required Items ... + int CopyMain( + 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, - // longExit2Buffer, - // buffer, - // forceClean - // // - // ); - // } + // + // Copy Items ... + return Copy( + start, + count, + mainBuffer, + buffer, + forceClean + // + ); + } // // Protected ... @@ -252,7 +363,7 @@ private: // // Buffers ... - // double longExit1Buffer[]; + double mainBuffer[]; // // Tools ... @@ -264,16 +375,16 @@ private: // int totalBars = CountBars(); - // // - // // Short Exit 2 ... - // CopyBuffer( - // mHandler, - // X_CHE_SHORT_EXIT_2_LINE, - // 0, - // totalBars, - // shortExit2Buffer - // // - // ); + // + // Main ... + CopyBuffer( + mHandler, + XRSI_MAIN_LINE, + 0, + totalBars, + mainBuffer + // + ); } } diff --git a/Helpers/x-saherelm.xtd.helper.mq5 b/Helpers/x-saherelm.xtd.helper.mq5 index 9dd44dc3..6de4d148 100644 --- a/Helpers/x-saherelm.xtd.helper.mq5 +++ b/Helpers/x-saherelm.xtd.helper.mq5 @@ -30,7 +30,9 @@ // enum ENUM_XTD_BUFFERS { - XTD_MAIN_LINE = 0 + XTD_BULLISH_LINE = 0, + XTD_BEARISH_LINE = 1, + XTD_SIGNAL_LINE = 2, }; // @@ -39,7 +41,19 @@ struct XXTDInputs { // // Props ... - string tmp; + // + int length; // Market Length + bool drawCrosses; // Draw Cross Arrows + + // + // Bullish ... + uchar bullishArrowCode; // Cross Over Arrow Code + color bullishArrowColor; // Cross Over Arrow Color + + // + // Bearish ... + uchar bearishArrowCode; // Cross Under Arrow Code + color bearishArrowColor; // Cross Under Arrow Color // // Constructor(s) ... @@ -57,6 +71,18 @@ struct XXTDInputs void Clean() { // + length = 0; + drawCrosses = true; + + // + // Bullish ... + bullishArrowCode = 228; + bullishArrowColor = CLR_NONE; + + // + // Bearish ... + bearishArrowCode = 230; + bearishArrowColor = CLR_NONE; } // @@ -64,6 +90,18 @@ struct XXTDInputs void Default() { // + length = 14; + drawCrosses = true; + + // + // Bullish ... + bullishArrowCode = 228; + bullishArrowColor = CLR_NONE; + + // + // Bearish ... + bearishArrowCode = 230; + bearishArrowColor = CLR_NONE; } // @@ -76,7 +114,7 @@ struct XXTDInputs // result = // - false + length >= 2 // ; @@ -92,7 +130,7 @@ struct XXTDInputs int result = 0; // - result = MathMax(0, 0); + result = MathMax(result, length); // return result; @@ -124,7 +162,7 @@ public: bool Init( string symbol, // Trading Symbol ENUM_TIMEFRAMES period, // Trading Period - XXTDInputs &inputs // Inputs + XXTDInputs &inputs // Inputs ) { // @@ -144,21 +182,36 @@ public: // mInputs = inputs; - // // - // // ArraySetAsSeries(shortExit2Buffer, true); - // mHandler = iCustom( - // mSymbol, - // mPeriod, - // "x-saherelm.x", - // // - // // Inputs ... - // // - // ); - // result = mHandler != INVALID_HANDLE; - // if (!result) - // { - // return result; - // } + // + ArraySetAsSeries(bullishBuffer, true); + ArraySetAsSeries(bearishBuffer, true); + ArraySetAsSeries(signalBuffer, true); + + // + mHandler = iCustom( + mSymbol, + mPeriod, + "x-saherelm.xtd", + // + // Inputs ... + // + mInputs.length, // Market Length + mInputs.drawCrosses, // Draw Cross Arrows + // + // Bullish ... + mInputs.bullishArrowCode, // Cross Over Arrow Code + mInputs.bullishArrowColor, // Cross Over Arrow Color + // + // Bearish ... + mInputs.bearishArrowCode, // Cross Under Arrow Code + mInputs.bearishArrowColor // Cross Under Arrow Color + // + ); + result = mHandler != INVALID_HANDLE; + if (!result) + { + return result; + } // return result; @@ -190,55 +243,155 @@ public: // // Buffers ... - // // - // double GetMain( - // int barIndex // Bar Index - // ) - // { - // // - // if (barIndex < 0) - // { - // barIndex = 0; - // } + // + double GetBullish( + int barIndex // Bar Index + ) + { + // + if (barIndex < 0) + { + barIndex = 0; + } - // // - // Calculate(); + // + Calculate(); - // // - // int count = ArraySize(mainBuffer); - // if (barIndex >= count) - // { - // barIndex = count - 1; - // } + // + int count = ArraySize(bullishBuffer); + if (barIndex >= count) + { + barIndex = count - 1; + } - // // - // return mainBuffer[barIndex]; - // } + // + return bullishBuffer[barIndex]; + } - // // - // // Copy Required Long Exits 2 ... - // int CopyLongExit2( - // 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 Required Items ... + int CopyBullish( + 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, - // longExit2Buffer, - // buffer, - // forceClean - // // - // ); - // } + // + // Copy Items ... + return Copy( + start, + count, + bullishBuffer, + buffer, + forceClean + // + ); + } + + // + double GetBearish( + int barIndex // Bar Index + ) + { + // + if (barIndex < 0) + { + barIndex = 0; + } + + // + Calculate(); + + // + int count = ArraySize(bearishBuffer); + if (barIndex >= count) + { + barIndex = count - 1; + } + + // + return bearishBuffer[barIndex]; + } + + // + // Copy Required Items ... + int CopyBearish( + 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, + bearishBuffer, + buffer, + forceClean + // + ); + } + + // + double GetSignal( + int barIndex // Bar Index + ) + { + // + if (barIndex < 0) + { + barIndex = 0; + } + + // + Calculate(); + + // + int count = ArraySize(signalBuffer); + if (barIndex >= count) + { + barIndex = count - 1; + } + + // + return signalBuffer[barIndex]; + } + + // + // Copy Required Items ... + int CopySignal( + 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, + signalBuffer, + buffer, + forceClean + // + ); + } // // Protected ... @@ -252,7 +405,9 @@ private: // // Buffers ... - // double longExit1Buffer[]; + double bullishBuffer[]; + double bearishBuffer[]; + double signalBuffer[]; // // Tools ... @@ -264,16 +419,38 @@ private: // int totalBars = CountBars(); - // // - // // Short Exit 2 ... - // CopyBuffer( - // mHandler, - // X_CHE_SHORT_EXIT_2_LINE, - // 0, - // totalBars, - // shortExit2Buffer - // // - // ); + // + // Bullish ... + CopyBuffer( + mHandler, + XTD_BULLISH_LINE, + 0, + totalBars, + bullishBuffer + // + ); + + // + // Bearish ... + CopyBuffer( + mHandler, + XTD_BEARISH_LINE, + 0, + totalBars, + bearishBuffer + // + ); + + // + // Signal ... + CopyBuffer( + mHandler, + XTD_SIGNAL_LINE, + 0, + totalBars, + signalBuffer + // + ); } } diff --git a/Helpers/x-saherelm.xtm.helper.mq5 b/Helpers/x-saherelm.xtm.helper.mq5 index 8d9b2d51..4f69093c 100644 --- a/Helpers/x-saherelm.xtm.helper.mq5 +++ b/Helpers/x-saherelm.xtm.helper.mq5 @@ -39,7 +39,10 @@ struct XXTMInputs { // // Props ... - string tmp; + int maPeriod; // Period + int maShift; // Shift + ENUM_MA_METHOD maMethod; // Method + ENUM_APPLIED_PRICE maAppliedTo; // Applied To // // Constructor(s) ... @@ -57,6 +60,10 @@ struct XXTMInputs void Clean() { // + maShift = 0; + maPeriod = 0; + maMethod = MODE_SMA; + maAppliedTo = PRICE_CLOSE; } // @@ -64,6 +71,10 @@ struct XXTMInputs void Default() { // + maShift = 0; + maPeriod = 14; + maMethod = MODE_SMA; + maAppliedTo = PRICE_CLOSE; } // @@ -76,7 +87,7 @@ struct XXTMInputs // result = // - false + maPeriod >= 2 // ; @@ -92,7 +103,7 @@ struct XXTMInputs int result = 0; // - result = MathMax(0, 0); + result = MathMax(result, maPeriod); // return result; @@ -124,7 +135,7 @@ public: bool Init( string symbol, // Trading Symbol ENUM_TIMEFRAMES period, // Trading Period - XXTMInputs &inputs // Inputs + XXTMInputs &inputs // Inputs ) { // @@ -144,21 +155,25 @@ public: // mInputs = inputs; - // // - // // ArraySetAsSeries(shortExit2Buffer, true); - // mHandler = iCustom( - // mSymbol, - // mPeriod, - // "x-saherelm.x", - // // - // // Inputs ... - // // - // ); - // result = mHandler != INVALID_HANDLE; - // if (!result) - // { - // return result; - // } + // + ArraySetAsSeries(mainBuffer, true); + mHandler = iCustom( + mSymbol, + mPeriod, + "x-saherelm.xtm", + // + // Inputs ... + mInputs.maPeriod, // Period + mInputs.maShift, // Shift + mInputs.maMethod, // Method + mInputs.maAppliedTo // Applied To + // + ); + result = mHandler != INVALID_HANDLE; + if (!result) + { + return result; + } // return result; @@ -189,56 +204,56 @@ public: // // Buffers ... - - // // - // double GetMain( - // int barIndex // Bar Index - // ) - // { - // // - // if (barIndex < 0) - // { - // barIndex = 0; - // } - // // - // Calculate(); + // + double GetMain( + int barIndex // Bar Index + ) + { + // + if (barIndex < 0) + { + barIndex = 0; + } - // // - // int count = ArraySize(mainBuffer); - // if (barIndex >= count) - // { - // barIndex = count - 1; - // } + // + Calculate(); - // // - // return mainBuffer[barIndex]; - // } + // + int count = ArraySize(mainBuffer); + if (barIndex >= count) + { + barIndex = count - 1; + } - // // - // // Copy Required Long Exits 2 ... - // int CopyLongExit2( - // int start, // Start - // int count, // Number of Items for read - // double &buffer[], // Dest Buffer - // bool forceClean = true // Force To Clean buffer - // ) - // { - // // - // // Update Calculations ... - // Calculate(); + // + return mainBuffer[barIndex]; + } - // // - // // Copy Items ... - // return Copy( - // start, - // count, - // longExit2Buffer, - // buffer, - // forceClean - // // - // ); - // } + // + // Copy Required Main Buffer ... + int CopyMainBuffer( + 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, + mainBuffer, + buffer, + forceClean + // + ); + } // // Protected ... @@ -252,7 +267,7 @@ private: // // Buffers ... - // double longExit1Buffer[]; + double mainBuffer[]; // // Tools ... @@ -264,16 +279,16 @@ private: // int totalBars = CountBars(); - // // - // // Short Exit 2 ... - // CopyBuffer( - // mHandler, - // X_CHE_SHORT_EXIT_2_LINE, - // 0, - // totalBars, - // shortExit2Buffer - // // - // ); + // + // Main Buffer ... + CopyBuffer( + mHandler, + XTM_MAIN_LINE, + 0, + totalBars, + mainBuffer + // + ); } } diff --git a/Helpers/x-saherelm.xts.helper.mq5 b/Helpers/x-saherelm.xts.helper.mq5 index 32ac2cef..5ec27c29 100644 --- a/Helpers/x-saherelm.xts.helper.mq5 +++ b/Helpers/x-saherelm.xts.helper.mq5 @@ -30,7 +30,10 @@ // enum ENUM_XTS_BUFFERS { - XTS_MAIN_LINE = 0 + XTS_CURRENT_LINE = 0, + XTS_NEAREST_LINE = 1, + XTS_MEDIEST_LINE = 2, + XTS_FAREST_LINE = 3, }; // @@ -39,7 +42,24 @@ struct XXTSInputs { // // Props ... - string tmp; + // + // Current Period ... + ENUM_APPLIED_PRICE currentAppliedTo; // Current Applied To + // + // Nearest Period ... + ENUM_X_PERIOD_METHOD nearestMethod; // How to Find Nearest Period + ENUM_TIMEFRAMES nearestPeriod; // Nearest Time Frame + ENUM_APPLIED_PRICE nearestAppliedTo; // Nearest Applied To + // + // Mediest Period ... + ENUM_X_PERIOD_METHOD mediestMethod; // How to Find Mediest Period + ENUM_TIMEFRAMES mediestPeriod; // Mediest Time Frame + ENUM_APPLIED_PRICE mediestAppliedTo; // Mediest Applied To + // + // Farest Period ... + ENUM_X_PERIOD_METHOD farestMethod; // How to Find Farest Period + ENUM_TIMEFRAMES farestPeriod; // Farest Time Frame + ENUM_APPLIED_PRICE farestAppliedTo; // Farest Applied To // // Constructor(s) ... @@ -57,6 +77,23 @@ struct XXTSInputs void Clean() { // + // Current Period ... + currentAppliedTo = PRICE_CLOSE; + // + // Nearest Period ... + nearestMethod = X_PERIOD_NOTHING; + nearestPeriod = NULL; + nearestAppliedTo = PRICE_CLOSE; + // + // Mediest Period ... + mediestMethod = X_PERIOD_NOTHING; + mediestPeriod = NULL; + mediestAppliedTo = PRICE_CLOSE; + // + // Farest Period ... + farestMethod = X_PERIOD_NOTHING; + farestPeriod = NULL; + farestAppliedTo = PRICE_CLOSE; } // @@ -64,6 +101,23 @@ struct XXTSInputs void Default() { // + // Current Period ... + currentAppliedTo = PRICE_CLOSE; + // + // Nearest Period ... + nearestMethod = X_PERIOD_AUTO; + nearestPeriod = NULL; + nearestAppliedTo = PRICE_CLOSE; + // + // Mediest Period ... + mediestMethod = X_PERIOD_AUTO; + mediestPeriod = NULL; + mediestAppliedTo = PRICE_CLOSE; + // + // Farest Period ... + farestMethod = X_PERIOD_AUTO; + farestPeriod = NULL; + farestAppliedTo = PRICE_CLOSE; } // @@ -76,7 +130,9 @@ struct XXTSInputs // result = // - false + IsValid(nearestMethod, nearestPeriod) && + IsValid(mediestMethod, mediestPeriod) && + IsValid(farestMethod, farestPeriod) // ; @@ -92,7 +148,7 @@ struct XXTSInputs int result = 0; // - result = MathMax(0, 0); + result = MathMax(result, 0); // return result; @@ -124,7 +180,7 @@ public: bool Init( string symbol, // Trading Symbol ENUM_TIMEFRAMES period, // Trading Period - XXTSInputs &inputs // Inputs + XXTSInputs &inputs // Inputs ) { // @@ -144,21 +200,48 @@ public: // mInputs = inputs; - // // - // // ArraySetAsSeries(shortExit2Buffer, true); - // mHandler = iCustom( - // mSymbol, - // mPeriod, - // "x-saherelm.x", - // // - // // Inputs ... - // // - // ); - // result = mHandler != INVALID_HANDLE; - // if (!result) - // { - // return result; - // } + // + ArraySetAsSeries(currentBuffer, true); + ArraySetAsSeries(nearestBuffer, true); + ArraySetAsSeries(mediestBuffer, true); + ArraySetAsSeries(farestBuffer, true); + + // + mHandler = iCustom( + mSymbol, + mPeriod, + "x-saherelm.xts", + // + // Inputs ... + // + // Current Period ... + "", + mInputs.currentAppliedTo, // Current Applied To + // + // Nearest Period ... + "", + mInputs.nearestMethod, // How to Find Nearest Period + mInputs.nearestPeriod, // Nearest Time Frame + mInputs.nearestAppliedTo, // Nearest Applied To + // + // Mediest Period ... + "", + mInputs.mediestMethod, // How to Find Mediest Period + mInputs.mediestPeriod, // Mediest Time Frame + mInputs.mediestAppliedTo, // Mediest Applied To + // + // Farest Period ... + "", + mInputs.farestMethod, // How to Find Farest Period + mInputs.farestPeriod, // Farest Time Frame + mInputs.farestAppliedTo // Farest Applied To + // + ); + result = mHandler != INVALID_HANDLE; + if (!result) + { + return result; + } // return result; @@ -190,55 +273,205 @@ public: // // Buffers ... - // // - // double GetMain( - // int barIndex // Bar Index - // ) - // { - // // - // if (barIndex < 0) - // { - // barIndex = 0; - // } + // + double GetCurrent( + int barIndex // Bar Index + ) + { + // + if (barIndex < 0) + { + barIndex = 0; + } - // // - // Calculate(); + // + Calculate(); - // // - // int count = ArraySize(mainBuffer); - // if (barIndex >= count) - // { - // barIndex = count - 1; - // } + // + int count = ArraySize(currentBuffer); + if (barIndex >= count) + { + barIndex = count - 1; + } - // // - // return mainBuffer[barIndex]; - // } + // + return currentBuffer[barIndex]; + } - // // - // // Copy Required Long Exits 2 ... - // int CopyLongExit2( - // 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 Required Items ... + int CopyCurrent( + 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, - // longExit2Buffer, - // buffer, - // forceClean - // // - // ); - // } + // + // Copy Items ... + return Copy( + start, + count, + currentBuffer, + buffer, + forceClean + // + ); + } + + // + double GetNearest( + int barIndex // Bar Index + ) + { + // + if (barIndex < 0) + { + barIndex = 0; + } + + // + Calculate(); + + // + int count = ArraySize(nearestBuffer); + if (barIndex >= count) + { + barIndex = count - 1; + } + + // + return nearestBuffer[barIndex]; + } + + // + // Copy Required Items ... + int CopyNearest( + 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, + nearestBuffer, + buffer, + forceClean + // + ); + } + + // + double GetMediest( + int barIndex // Bar Index + ) + { + // + if (barIndex < 0) + { + barIndex = 0; + } + + // + Calculate(); + + // + int count = ArraySize(mediestBuffer); + if (barIndex >= count) + { + barIndex = count - 1; + } + + // + return mediestBuffer[barIndex]; + } + + // + // Copy Required Items ... + int CopyMediest( + 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, + mediestBuffer, + buffer, + forceClean + // + ); + } + + // + double GetFarest( + int barIndex // Bar Index + ) + { + // + if (barIndex < 0) + { + barIndex = 0; + } + + // + Calculate(); + + // + int count = ArraySize(farestBuffer); + if (barIndex >= count) + { + barIndex = count - 1; + } + + // + return farestBuffer[barIndex]; + } + + // + // Copy Required Items ... + int CopyFarest( + 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, + farestBuffer, + buffer, + forceClean + // + ); + } // // Protected ... @@ -252,7 +485,10 @@ private: // // Buffers ... - // double longExit1Buffer[]; + double currentBuffer[]; + double nearestBuffer[]; + double mediestBuffer[]; + double farestBuffer[]; // // Tools ... @@ -264,16 +500,49 @@ private: // int totalBars = CountBars(); - // // - // // Short Exit 2 ... - // CopyBuffer( - // mHandler, - // X_CHE_SHORT_EXIT_2_LINE, - // 0, - // totalBars, - // shortExit2Buffer - // // - // ); + // + // Current ... + CopyBuffer( + mHandler, + XTS_CURRENT_LINE, + 0, + totalBars, + currentBuffer + // + ); + + // + // Nearest ... + CopyBuffer( + mHandler, + XTS_NEAREST_LINE, + 0, + totalBars, + nearestBuffer + // + ); + + // + // Mediest ... + CopyBuffer( + mHandler, + XTS_MEDIEST_LINE, + 0, + totalBars, + mediestBuffer + // + ); + + // + // Farest ... + CopyBuffer( + mHandler, + XTS_FAREST_LINE, + 0, + totalBars, + farestBuffer + // + ); } }