From 3800004035715d7979b9d08207d89478c0fa4ffb Mon Sep 17 00:00:00 2001 From: Hadi Khazaee Asl Date: Wed, 7 Aug 2024 13:29:03 +0330 Subject: [PATCH] backup Indicators ... --- BKPS/Indicators 14030517/x-saherelm.xcc.ex5 | Bin 0 -> 11504 bytes BKPS/Indicators 14030517/x-saherelm.xcc.mq5 | 437 ++++ .../Indicators 14030517/x-saherelm.xchche.ex5 | Bin 0 -> 44962 bytes .../Indicators 14030517/x-saherelm.xchche.mq5 | 1192 +++++++++++ .../Indicators 14030517/x-saherelm.xchdon.ex5 | Bin 0 -> 45518 bytes .../Indicators 14030517/x-saherelm.xchdon.mq5 | 1603 +++++++++++++++ BKPS/Indicators 14030517/x-saherelm.xchhk.ex5 | Bin 0 -> 38556 bytes BKPS/Indicators 14030517/x-saherelm.xchhk.mq5 | 1070 ++++++++++ .../Indicators 14030517/x-saherelm.xchich.ex5 | Bin 0 -> 50888 bytes .../Indicators 14030517/x-saherelm.xchich.mq5 | 1826 +++++++++++++++++ BKPS/Indicators 14030517/x-saherelm.xchm.ex5 | Bin 0 -> 38216 bytes BKPS/Indicators 14030517/x-saherelm.xchm.mq5 | 1086 ++++++++++ .../Indicators 14030517/x-saherelm.xchstr.ex5 | Bin 0 -> 36208 bytes .../Indicators 14030517/x-saherelm.xchstr.mq5 | 1246 +++++++++++ .../x-saherelm.xchswings.ex5 | Bin 0 -> 33510 bytes .../x-saherelm.xchswings.mq5 | 993 +++++++++ BKPS/Indicators 14030517/x-saherelm.xchtd.ex5 | Bin 0 -> 29690 bytes BKPS/Indicators 14030517/x-saherelm.xchtd.mq5 | 900 ++++++++ .../x-saherelm.xchtd.osc.ex5 | Bin 0 -> 33402 bytes .../x-saherelm.xchtd.osc.mq5 | 898 ++++++++ .../Indicators 14030517/x-saherelm.xchvlm.ex5 | Bin 0 -> 29408 bytes .../Indicators 14030517/x-saherelm.xchvlm.mq5 | 814 ++++++++ .../x-saherelm.xchvlm.osc.ex5 | Bin 0 -> 32206 bytes .../x-saherelm.xchvlm.osc.mq5 | 810 ++++++++ .../x-saherelm.xchvwap.ex5 | Bin 0 -> 32634 bytes .../x-saherelm.xchvwap.mq5 | 830 ++++++++ BKPS/Indicators 14030517/x-saherelm.xct.ex5 | Bin 0 -> 17220 bytes BKPS/Indicators 14030517/x-saherelm.xct.mq5 | 261 +++ BKPS/Indicators 14030517/x-saherelm.xpv.ex5 | Bin 0 -> 48496 bytes BKPS/Indicators 14030517/x-saherelm.xpv.mq5 | 1289 ++++++++++++ 30 files changed, 15255 insertions(+) create mode 100644 BKPS/Indicators 14030517/x-saherelm.xcc.ex5 create mode 100644 BKPS/Indicators 14030517/x-saherelm.xcc.mq5 create mode 100644 BKPS/Indicators 14030517/x-saherelm.xchche.ex5 create mode 100644 BKPS/Indicators 14030517/x-saherelm.xchche.mq5 create mode 100644 BKPS/Indicators 14030517/x-saherelm.xchdon.ex5 create mode 100644 BKPS/Indicators 14030517/x-saherelm.xchdon.mq5 create mode 100644 BKPS/Indicators 14030517/x-saherelm.xchhk.ex5 create mode 100644 BKPS/Indicators 14030517/x-saherelm.xchhk.mq5 create mode 100644 BKPS/Indicators 14030517/x-saherelm.xchich.ex5 create mode 100644 BKPS/Indicators 14030517/x-saherelm.xchich.mq5 create mode 100644 BKPS/Indicators 14030517/x-saherelm.xchm.ex5 create mode 100644 BKPS/Indicators 14030517/x-saherelm.xchm.mq5 create mode 100644 BKPS/Indicators 14030517/x-saherelm.xchstr.ex5 create mode 100644 BKPS/Indicators 14030517/x-saherelm.xchstr.mq5 create mode 100644 BKPS/Indicators 14030517/x-saherelm.xchswings.ex5 create mode 100644 BKPS/Indicators 14030517/x-saherelm.xchswings.mq5 create mode 100644 BKPS/Indicators 14030517/x-saherelm.xchtd.ex5 create mode 100644 BKPS/Indicators 14030517/x-saherelm.xchtd.mq5 create mode 100644 BKPS/Indicators 14030517/x-saherelm.xchtd.osc.ex5 create mode 100644 BKPS/Indicators 14030517/x-saherelm.xchtd.osc.mq5 create mode 100644 BKPS/Indicators 14030517/x-saherelm.xchvlm.ex5 create mode 100644 BKPS/Indicators 14030517/x-saherelm.xchvlm.mq5 create mode 100644 BKPS/Indicators 14030517/x-saherelm.xchvlm.osc.ex5 create mode 100644 BKPS/Indicators 14030517/x-saherelm.xchvlm.osc.mq5 create mode 100644 BKPS/Indicators 14030517/x-saherelm.xchvwap.ex5 create mode 100644 BKPS/Indicators 14030517/x-saherelm.xchvwap.mq5 create mode 100644 BKPS/Indicators 14030517/x-saherelm.xct.ex5 create mode 100644 BKPS/Indicators 14030517/x-saherelm.xct.mq5 create mode 100644 BKPS/Indicators 14030517/x-saherelm.xpv.ex5 create mode 100644 BKPS/Indicators 14030517/x-saherelm.xpv.mq5 diff --git a/BKPS/Indicators 14030517/x-saherelm.xcc.ex5 b/BKPS/Indicators 14030517/x-saherelm.xcc.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..2f0d46cd0774dd48eac352d115555998599157ef GIT binary patch literal 11504 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 literal 0 HcmV?d00001 diff --git a/BKPS/Indicators 14030517/x-saherelm.xcc.mq5 b/BKPS/Indicators 14030517/x-saherelm.xcc.mq5 new file mode 100644 index 0000000..ebc4517 --- /dev/null +++ b/BKPS/Indicators 14030517/x-saherelm.xcc.mq5 @@ -0,0 +1,437 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL5 Candle Styles +// --------------------------------------------------- +// Name: XCC +// Description: Candle Styles ... +// +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://saherelm.ir" +#property version "1.00" +#property description "SaherElm XCC Indicator" +#property strict + +// +// START Constants ... +// + +// +// Indicator Short Name ... +#define ShortName "XCC" + +// +// Holds an SnapShot of Charts Configuration ... +struct XChartStyle +{ + // + // chart's ID ... + long chartId; + // + // chart's mode ... + ENUM_CHART_MODE mode; + // + // show bid line ... + bool showBidLine; + // + // show ask line ... + bool showAskLine; + // + // show grids on chart ... + bool showGrid; + // + // show volumes ... + bool showVolumes; + // + // Displaying trade levels in the chart (levels of open positions, Stop Loss, Take Profit and pending orders) ... + bool showTradeLevels; + // + // chart autoscroll ... + bool autoScroll; + // + // chart quick navigation state ... + bool quickNavigation; + // + // chart's foreground color ... + color foreGroundColor; + // + // chart's background color ... + color backGroundColor; + // + // Up Color ... + color upColor; + // + // Down Color ... + color downColor; + // + // Bullish color ... + color bullishColor; + // + // Bearish color ... + color bearishColor; + // + // grid color ... + color gridColor; + // + // bid line color ... + color bidLineColor; + // + // ask line color ... + color askLineColor; + // + // line mode and doji candlestick color ... + color lineColor; + // + // Color of stop order levels (Stop Loss and Take Profit) ... + color stopColor; + // + // volumes color ... + color volumesColor; +}; + +// +// END Constants ... +// + +// +// START Inputs ... +// + +// +input group "Chart Style"; +input ENUM_CHART_MODE mode = CHART_CANDLES; // Mode +input color upColor = clrLime; // Up Color +input color downColor = clrRed; // Down Color +input color lineColor = clrLime; // Line mode and Doji candlestick Color +input color bearishColor = clrRed; // Bullish Color +input color bullishColor = clrLime; // Bearish Color +input color volumesColor = clrGreen; // Volumes Color + +// +input group "Presentation"; +input bool showCandles = true; // Show Candles + +// +// END Inputs ... +// + +// +// START Includes and Imports ... +// + +// +// Includes Draw Library ... +#include "../Libraries/x-saherelm.draw.lib.mq5" + +// +// Includes Common Library ... +#include "../Libraries/x-saherelm.common.lib.mq5" + +// +// END Includes and Imports ... +// + +// +// START Buffers ... +// + +// +#property indicator_chart_window + +// +#property indicator_buffers 0 +#property indicator_plots 0 + +// +// END Buffers ... +// + +// +// START Global Definitions: Variables, Properties and etc ... +// + +// +int maxLength; + +// +XChartStyle chartStyle; +XChartStyle clearStyle; + +// +// END Global Definitions: Variables, Properties and etc ... +// + +// +// START Event Handlers ... +// + +// +// Initialization ... +int OnInit() +{ + // + // Validate Inputs ... + if (!ValidateInputs()) + { + return INIT_PARAMETERS_INCORRECT; + } + + // + drawPrefix = ShortName; + + // + // because in some cases we may have more than one input for + // calculation and we must prevent any calculation + // untill we pass the biggest input length, here we get max Input length + // and then wait until pass it ... + maxLength = ExtractMaxLengthOfInputs(); + + // + // Define Index Buffers ... + DefineBuffers(); + + // + // Set Indicator ShortName ... + SetIndicatorName(); + + // + // Apply Chart Style ... + ApplyCustomChartStyle(); + + // + // Init Succeed ... + return INIT_SUCCEEDED; +} + +// +// DeInitialization ... +void OnDeinit(const int reason) +{ + // + // REASON_PROGRAM 0 The EA has stopped working calling the ExpertRemove() function + // REASON_REMOVE 1 Program removed from a chart + // REASON_RECOMPILE 2 Program recompiled + // REASON_CHARTCHANGE 3 A symbol or a chart period is changed + // REASON_CHARTCLOSE 4 Chart closed + // REASON_PARAMETERS 5 Inputs changed by a user + // REASON_ACCOUNT 6 Another account has been activated or reconnection to the trade server has occurred due to changes in the account settings + // REASON_TEMPLATE 7 Another chart template applied + // REASON_INITFAILED 8 The OnInit() handler returned a non-zero value + // REASON_CLOSE 9 Terminal closed +} + +// +// Calculating what we want ... +int OnCalculate( + const int rates_total, // Total Bars on Chart ... + const int prev_calculated, // Total Calculated Bars on Charts ... + const datetime &time[], // History of Open Time ... + const double &open[], // History of Open Price ... + const double &high[], // History of High Price ... + const double &low[], // History of Low Price ... + const double &close[], // History of Close Price ... + const long &tick_volume[], // History of Tick Volumes on Bar ... + const long &volume[], // History of Trade Volumes ... + const int &spread[] // History of Spread Price ... +) +{ + // + // Prepare Buffers ... + ArraySetAsSeries(time, true); + ArraySetAsSeries(open, true); + ArraySetAsSeries(high, true); + ArraySetAsSeries(low, true); + ArraySetAsSeries(close, true); + ArraySetAsSeries(tick_volume, true); + ArraySetAsSeries(volume, true); + ArraySetAsSeries(spread, true); + + // + // this counts Available Bars ... + int limit; + + // + limit = (prev_calculated > rates_total || prev_calculated <= 0) ? rates_total : (rates_total - prev_calculated) + 1; + + // + // Main Loop ... + for (int i = limit - 1; i >= 0 && !IsStopped(); i--) + { + CalculateBuffers(i); + } + + // + return rates_total; +} + +// +// END Event Handlers ... +// + +// +// START Functions ... +// + +// +// Validate Input Args for Initialization ... +bool ValidateInputs() +{ + // + bool result = true; + + // + return result; +} + +// +// Retrieve all Exists Input Max Length ... +// use for Start Of Drawing ... +int ExtractMaxLengthOfInputs() +{ + // + int result = 0; + + // + return result; +} + +// +// Define Indexes and Styles ... +void DefineBuffers() +{ +} + +// +// Set Indicator Short Name and also we can define Buffers Labels ... +void SetIndicatorName() +{ + IndicatorSetString(INDICATOR_SHORTNAME, ShortName); +} + +// +// Calculate Buffers ... +void CalculateBuffers( + int bar_index // Selected Bar Index +) +{ +} + +// +// Apply Custom Chart Style ... +void ApplyCustomChartStyle() +{ + // + // Read Current Chart Config and Store it ... + ReadChartStyle(); + + // + // After Reading Current Chart Style ... + // we have to Save Configs and Change Styles ... + clearStyle = chartStyle; + + // + clearStyle.upColor = CLR_NONE; + clearStyle.downColor = CLR_NONE; + clearStyle.lineColor = CLR_NONE; + clearStyle.bullishColor = CLR_NONE; + clearStyle.bearishColor = CLR_NONE; + + // + // Decide to Show or not Candles based on User Input ... + if (showCandles) + { + SetChartStyle(chartStyle); + } + else + { + SetChartStyle(clearStyle); + } +} + +// +// Read Previous Chart Style ... +void ReadChartStyle() +{ + // + // Retrieve Current Chart ID ... + long chartId = ChartID(); + chartStyle.chartId = chartId; + + // + // Retrieve Chart Mode ... + chartStyle.mode = (ENUM_CHART_MODE)ChartGetInteger(chartId, CHART_MODE); + + // + chartStyle.showBidLine = (bool)ChartGetInteger(chartId, CHART_SHOW_BID_LINE); + chartStyle.showAskLine = (bool)ChartGetInteger(chartId, CHART_SHOW_ASK_LINE); + chartStyle.showGrid = (bool)ChartGetInteger(chartId, CHART_SHOW_GRID); + chartStyle.showVolumes = (bool)ChartGetInteger(chartId, CHART_SHOW_VOLUMES); + chartStyle.showTradeLevels = (bool)ChartGetInteger(chartId, CHART_SHOW_TRADE_LEVELS); + chartStyle.autoScroll = (bool)ChartGetInteger(chartId, CHART_AUTOSCROLL); + chartStyle.quickNavigation = (bool)ChartGetInteger(chartId, CHART_QUICK_NAVIGATION); + + // + chartStyle.foreGroundColor = (color)ChartGetInteger(chartId, CHART_COLOR_FOREGROUND); + chartStyle.backGroundColor = (color)ChartGetInteger(chartId, CHART_COLOR_BACKGROUND); + chartStyle.upColor = (color)ChartGetInteger(chartId, CHART_COLOR_CHART_UP); + chartStyle.downColor = (color)ChartGetInteger(chartId, CHART_COLOR_CHART_DOWN); + chartStyle.bullishColor = (color)ChartGetInteger(chartId, CHART_COLOR_CANDLE_BULL); + chartStyle.bearishColor = (color)ChartGetInteger(chartId, CHART_COLOR_CANDLE_BEAR); + chartStyle.gridColor = (color)ChartGetInteger(chartId, CHART_COLOR_GRID); + chartStyle.bidLineColor = (color)ChartGetInteger(chartId, CHART_COLOR_BID); + chartStyle.askLineColor = (color)ChartGetInteger(chartId, CHART_COLOR_ASK); + chartStyle.stopColor = (color)ChartGetInteger(chartId, CHART_COLOR_STOP_LEVEL); + chartStyle.lineColor = (color)ChartGetInteger(chartId, CHART_COLOR_CHART_LINE); + chartStyle.volumesColor = (color)ChartGetInteger(chartId, CHART_COLOR_VOLUME); + + // + chartStyle.mode = mode; + chartStyle.upColor = upColor; + chartStyle.downColor = downColor; + chartStyle.lineColor = lineColor; + chartStyle.bearishColor = bearishColor; + chartStyle.bullishColor = bullishColor; + chartStyle.volumesColor = volumesColor; +} + +// +// Set Chart Style ... +void SetChartStyle( + XChartStyle &mChartStyle // Chart Style to Apply +) +{ + // + ApplyChartStyle( + mChartStyle.chartId, + mChartStyle.mode, + mChartStyle.showBidLine, + mChartStyle.showAskLine, + mChartStyle.showGrid, + mChartStyle.showVolumes, + mChartStyle.showTradeLevels, + mChartStyle.autoScroll, + mChartStyle.quickNavigation, + mChartStyle.foreGroundColor, + mChartStyle.backGroundColor, + mChartStyle.upColor, + mChartStyle.downColor, + mChartStyle.bullishColor, + mChartStyle.bearishColor, + mChartStyle.gridColor, + mChartStyle.bidLineColor, + mChartStyle.askLineColor, + mChartStyle.lineColor, + mChartStyle.stopColor, + mChartStyle.volumesColor); +} + +// +// END Functions ... +// diff --git a/BKPS/Indicators 14030517/x-saherelm.xchche.ex5 b/BKPS/Indicators 14030517/x-saherelm.xchche.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..dfa7ca85e8ed041be4f128f9c8b10be03fb05e9f GIT binary patch literal 44962 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 +#include "../Libraries/x-saherelm.common.lib.mq5" + +// +// Inputs ... + +// +input group "Market"; +input int length = 35; // Length +input int loopback = 26; // Loopback +input double multiplier1 = 3.0; // 1st Multiplier +input double multiplier2 = 3.5; // 2nd Multiplier + +// +input group "Calculation"; +input ENUM_APPLIED_PRICE upAppliedTo = PRICE_HIGH; // Up Zone Applied to +input ENUM_APPLIED_PRICE downAppliedTo = PRICE_LOW; // Down Zone Applied to + +// +input group "Cycles"; + +// +input group "Short"; +input ENUM_X_PERIOD_METHOD scMethod = X_PERIOD_AUTO; // How to Find Period +input ENUM_TIMEFRAMES scPeriod = NULL; // Time Period + +// +input group "Medium"; +input ENUM_X_PERIOD_METHOD mcMethod = X_PERIOD_AUTO; // How to Find Period +input ENUM_TIMEFRAMES mcPeriod = NULL; // Time Period + +// +input group "Long"; +input ENUM_X_PERIOD_METHOD lcMethod = X_PERIOD_AUTO; // How to Find Period +input ENUM_TIMEFRAMES lcPeriod = NULL; // Time Period + +// +input group "Hind"; +input ENUM_X_PERIOD_METHOD hcMethod = X_PERIOD_AUTO; // How to Find Period +input ENUM_TIMEFRAMES hcPeriod = NULL; // Time Period + +// +// Presentation ... +input group "Presentation"; + +// +// Current ... +input bool showCurrentLE1 = true; // Show Current Cycle Long Exit 1 +input bool showCurrentLE2 = true; // Show Current Cycle Long Exit 2 +input bool showCurrentSE1 = true; // Show Current Cycle Short Exit 1 +input bool showCurrentSE2 = true; // Show Current Cycle Short Exit 2 + +// +// Short ... +input bool showShortLE1 = true; // Show Short Cycle Long Exit 1 +input bool showShortLE2 = true; // Show Short Cycle Long Exit 2 +input bool showShortSE1 = true; // Show Short Cycle Short Exit 1 +input bool showShortSE2 = true; // Show Short Cycle Short Exit 2 + +// +// Medium ... +input bool showMediumLE1 = true; // Show Medium Cycle Long Exit 1 +input bool showMediumLE2 = true; // Show Medium Cycle Long Exit 2 +input bool showMediumSE1 = true; // Show Medium Cycle Short Exit 1 +input bool showMediumSE2 = true; // Show Medium Cycle Short Exit 2 + +// +// Long ... +input bool showLongLE1 = true; // Show Long Cycle Long Exit 1 +input bool showLongLE2 = true; // Show Long Cycle Long Exit 2 +input bool showLongSE1 = true; // Show Long Cycle Short Exit 1 +input bool showLongSE2 = true; // Show Long Cycle Short Exit 2 + +// +// Hind ... +input bool showHindLE1 = true; // Show Hind Cycle Long Exit 1 +input bool showHindLE2 = true; // Show Hind Cycle Long Exit 2 +input bool showHindSE1 = true; // Show Hind Cycle Short Exit 1 +input bool showHindSE2 = true; // Show Hind Cycle Short Exit 2 + +// +// Buffers ... + +// +#define hideColorIDX 0 +#define bullishColorIDX 1 +#define bearishColorIDX 2 + +// +#property indicator_chart_window + +// +#property indicator_buffers 20 +#property indicator_plots 20 + +// +// Current ... + +// +// Long Exit 1 ... +#define cLE1BufferIndex 0 +double cLE1Buffer[]; + +// +#property indicator_label1 "XCHCHE C LE 1" +#property indicator_type1 DRAW_LINE +#property indicator_color1 clrLime +#property indicator_style1 STYLE_DOT + +// +// Short Exit 1 ... +#define cSE1BufferIndex 1 +double cSE1Buffer[]; + +// +#property indicator_label2 "XCHCHE C SE 1" +#property indicator_type2 DRAW_LINE +#property indicator_style2 STYLE_DOT +#property indicator_color2 clrRed + +// +// Long Exit 2 ... +#define cLE2BufferIndex 2 +double cLE2Buffer[]; + +// +#property indicator_label3 "XCHCHE C LE 2" +#property indicator_type3 DRAW_LINE +#property indicator_style3 STYLE_DOT +#property indicator_color3 clrAqua + +// +// Short Exit 2 ... +#define cSE2BufferIndex 3 +double cSE2Buffer[]; + +// +#property indicator_label4 "XCHCHE C SE 2" +#property indicator_type4 DRAW_LINE +#property indicator_style4 STYLE_DOT +#property indicator_color4 clrMagenta + +// +// Short ... + +// +// Long Exit 1 ... +#define sLE1BufferIndex 4 +double sLE1Buffer[]; + +// +#property indicator_label5 "XCHCHE S LE 1" +#property indicator_type5 DRAW_LINE +#property indicator_color5 clrLime +#property indicator_style5 STYLE_DOT + +// +// Short Exit 1 ... +#define sSE1BufferIndex 5 +double sSE1Buffer[]; + +// +#property indicator_label6 "XCHCHE S SE 1" +#property indicator_type6 DRAW_LINE +#property indicator_style6 STYLE_DOT +#property indicator_color6 clrRed + +// +// Long Exit 2 ... +#define sLE2BufferIndex 6 +double sLE2Buffer[]; + +// +#property indicator_label7 "XCHCHE S LE 2" +#property indicator_type7 DRAW_LINE +#property indicator_style7 STYLE_DOT +#property indicator_color7 clrAqua + +// +// Short Exit 2 ... +#define sSE2BufferIndex 7 +double sSE2Buffer[]; + +// +#property indicator_label8 "XCHCHE S SE 2" +#property indicator_type8 DRAW_LINE +#property indicator_style8 STYLE_DOT +#property indicator_color8 clrMagenta + +// +// Medium ... + +// +// Long Exit 1 ... +#define mLE1BufferIndex 8 +double mLE1Buffer[]; + +// +#property indicator_label9 "XCHCHE M LE 1" +#property indicator_type9 DRAW_LINE +#property indicator_color9 clrLime +#property indicator_style9 STYLE_DOT + +// +// Short Exit 1 ... +#define mSE1BufferIndex 9 +double mSE1Buffer[]; + +// +#property indicator_label10 "XCHCHE M SE 1" +#property indicator_type10 DRAW_LINE +#property indicator_style10 STYLE_DOT +#property indicator_color10 clrRed + +// +// Long Exit 2 ... +#define mLE2BufferIndex 10 +double mLE2Buffer[]; + +// +#property indicator_label11 "XCHCHE M LE 2" +#property indicator_type11 DRAW_LINE +#property indicator_style11 STYLE_DOT +#property indicator_color11 clrAqua + +// +// Short Exit 2 ... +#define mSE2BufferIndex 11 +double mSE2Buffer[]; + +// +#property indicator_label12 "XCHCHE M SE 2" +#property indicator_type12 DRAW_LINE +#property indicator_style12 STYLE_DOT +#property indicator_color12 clrMagenta + +// +// Long ... + +// +// Long Exit 1 ... +#define lLE1BufferIndex 12 +double lLE1Buffer[]; + +// +#property indicator_label13 "XCHCHE L LE 1" +#property indicator_type13 DRAW_LINE +#property indicator_color13 clrLime +#property indicator_style13 STYLE_DOT + +// +// Short Exit 1 ... +#define lSE1BufferIndex 13 +double lSE1Buffer[]; + +// +#property indicator_label14 "XCHCHE L SE 1" +#property indicator_type14 DRAW_LINE +#property indicator_style14 STYLE_DOT +#property indicator_color14 clrRed + +// +// Long Exit 2 ... +#define lLE2BufferIndex 14 +double lLE2Buffer[]; + +// +#property indicator_label15 "XCHCHE L LE 2" +#property indicator_type15 DRAW_LINE +#property indicator_style15 STYLE_DOT +#property indicator_color15 clrAqua + +// +// Short Exit 2 ... +#define lSE2BufferIndex 15 +double lSE2Buffer[]; + +// +#property indicator_label16 "XCHCHE L SE 2" +#property indicator_type16 DRAW_LINE +#property indicator_style16 STYLE_DOT +#property indicator_color16 clrMagenta + +// +// Hind ... + +// +// Long Exit 1 ... +#define hLE1BufferIndex 16 +double hLE1Buffer[]; + +// +#property indicator_label17 "XCHCHE H LE 1" +#property indicator_type17 DRAW_LINE +#property indicator_color17 clrLime +#property indicator_style17 STYLE_DOT + +// +// Short Exit 1 ... +#define hSE1BufferIndex 17 +double hSE1Buffer[]; + +// +#property indicator_label18 "XCHCHE H SE 1" +#property indicator_type18 DRAW_LINE +#property indicator_style18 STYLE_DOT +#property indicator_color18 clrRed + +// +// Long Exit 2 ... +#define hLE2BufferIndex 18 +double hLE2Buffer[]; + +// +#property indicator_label19 "XCHCHE H LE 2" +#property indicator_type19 DRAW_LINE +#property indicator_style19 STYLE_DOT +#property indicator_color19 clrAqua + +// +// Short Exit 2 ... +#define hSE2BufferIndex 19 +double hSE2Buffer[]; + +// +#property indicator_label20 "XCHCHE H SE 2" +#property indicator_type20 DRAW_LINE +#property indicator_style20 STYLE_DOT +#property indicator_color20 clrMagenta + +// +// Variables, Properties and etc ... + +// +int maxLength; + +// +#define hi1Idx 0 +#define lo1Idx 1 +#define hi2Idx 2 +#define lo2Idx 3 +#define trend1Idx 4 +#define trend2Idx 5 + +// +// Current ... +int mCSMLength = length; +double cWork[][6]; + +// +// Short ... +int mSCLength = 0; +int mSSMLength = 0; +ENUM_TIMEFRAMES mSCPeriod = NULL; +double sWork[][6]; + +// +// Medium ... +int mMCLength = 0; +int mMSMLength = 0; +ENUM_TIMEFRAMES mMCPeriod = NULL; +double mWork[][6]; + +// +// Long ... +int mLCLength = 0; +int mLSMLength = 0; +ENUM_TIMEFRAMES mLCPeriod = NULL; +double lWork[][6]; + +// +// Hind ... +int mHCLength = 0; +int mHSMLength = 0; +ENUM_TIMEFRAMES mHCPeriod = NULL; +double hWork[][6]; + +// +// Event Handlers ... + +// +// Initialization ... +int OnInit() +{ + // + // Validate Inputs ... + if (!ValidateInputs()) + { + return INIT_PARAMETERS_INCORRECT; + } + + // + if (!InitMarketCycles()) + { + return INIT_PARAMETERS_INCORRECT; + } + + // + // because in some cases we may have more than one input for + // calculation and we must prevent any calculation + // untill we pass the biggest input length, here we get max Input length + // and then wait until pass it ... + maxLength = ExtractMaxLengthOfInputs(); + + // + // Define Index Buffers ... + DefineBuffers(); + + // + // Set Indicator ShortName ... + SetIndicatorName(); + + // + // Init Succeed ... + return INIT_SUCCEEDED; +} + +// +// DeInitialization ... +void OnDeinit(const int reason) +{ + // + // REASON_PROGRAM 0 The EA has stopped working calling the ExpertRemove() function + // REASON_REMOVE 1 Program removed from a chart + // REASON_RECOMPILE 2 Program recompiled + // REASON_CHARTCHANGE 3 A symbol or a chart period is changed + // REASON_CHARTCLOSE 4 Chart closed + // REASON_PARAMETERS 5 Inputs changed by a user + // REASON_ACCOUNT 6 Another account has been activated or reconnection to the trade server has occurred due to changes in the account settings + // REASON_TEMPLATE 7 Another chart template applied + // REASON_INITFAILED 8 The OnInit() handler returned a non-zero value + // REASON_CLOSE 9 Terminal closed +} + +// +// Calculating what we want ... +int OnCalculate( + const int rates_total, // Total Bars on Chart ... + const int prev_calculated, // Total Calculated Bars on Charts ... + const datetime &time[], // History of Open Time ... + const double &open[], // History of Open Price ... + const double &high[], // History of High Price ... + const double &low[], // History of Low Price ... + const double &close[], // History of Close Price ... + const long &tick_volume[], // History of Tick Volumes on Bar ... + const long &volume[], // History of Trade Volumes ... + const int &spread[] // History of Spread Price ... +) +{ + // + if (Bars(_Symbol, _Period) < rates_total) + { + return (prev_calculated); + } + + // + if (ArrayRange(cWork, 0) != rates_total) + { + // + ArrayResize(cWork, rates_total); + ArrayResize(sWork, rates_total); + ArrayResize(mWork, rates_total); + ArrayResize(lWork, rates_total); + ArrayResize(hWork, rates_total); + } + + // + // this counts Available Bars ... + int limit; + + // + limit = prev_calculated - 1; + if (limit < 0) + { + limit = 0; + } + + // + // Main Loop ... + for (int i = limit; i < rates_total && !IsStopped(); i++) + { + // + CalculateBuffers( + // + i, + prev_calculated, + rates_total, + // + open, + high, + low, + close // + ); + } + + // + return rates_total; +} + +// +// Functions ... + +// +// Validate Input Args for Initialization ... +bool ValidateInputs() +{ + // + bool result = false; + + // + result = + // + length >= 2 && + loopback >= 0 && + // + (IsValid(scMethod, scPeriod) && + IsValid(mcMethod, mcPeriod) && + IsValid(lcMethod, lcPeriod) && + IsValid(hcMethod, hcPeriod)) + // + ; + + // + return result; +} + +// +// Initialize Market Cycles ... +bool InitMarketCycles() +{ + // + bool result = false; + + // + // Current Cycle Initialization ... + + // + int cPeriodSeconds = PeriodSeconds(_Period); + + // + // Short Cycle Initialization ... + + // + // Find Cycle Period ... + if (scMethod == X_PERIOD_AUTO) + { + // + // Select Period ... + mSCPeriod = GetCyclePeriod( + X_MARKET_CYCLE_SHORT, + _Period // + ); + } + else + { + mSCPeriod = scPeriod; + } + + // + result = IsValid(mSCPeriod); + if (!result) + { + return result; + } + + // + mSCLength = PeriodSeconds(mSCPeriod) / cPeriodSeconds; + mSSMLength = mSCLength * mCSMLength; + result = mSCLength > 0; + if (!result) + { + return result; + } + + // + // Medium Cycle Initialization ... + + // + // Find Cycle Period ... + if (mcMethod == X_PERIOD_AUTO) + { + // + // Select Period ... + mMCPeriod = GetCyclePeriod( + X_MARKET_CYCLE_MEDIUM, + _Period // + ); + } + else + { + mMCPeriod = mcPeriod; + } + + // + result = IsValid(mMCPeriod); + if (!result) + { + return result; + } + + // + mMCLength = PeriodSeconds(mMCPeriod) / cPeriodSeconds; + mMSMLength = mMCLength * mCSMLength; + result = mMCLength > 0; + if (!result) + { + return result; + } + + // + // Long Cycle Initialization ... + + // + // Find Cycle Period ... + if (lcMethod == X_PERIOD_AUTO) + { + // + // Select Period ... + mLCPeriod = GetCyclePeriod( + X_MARKET_CYCLE_LONG, + _Period // + ); + } + else + { + mLCPeriod = lcPeriod; + } + + // + result = IsValid(mLCPeriod); + if (!result) + { + return result; + } + + // + mLCLength = PeriodSeconds(mLCPeriod) / cPeriodSeconds; + mLSMLength = mLCLength * mCSMLength; + result = mLCLength > 0; + if (!result) + { + return result; + } + + // + // Hind Cycle Initialization ... + + // + // Find Cycle Period ... + if (hcMethod == X_PERIOD_AUTO) + { + // + // Select Period ... + mHCPeriod = GetCyclePeriod( + X_MARKET_CYCLE_HIND, + _Period // + ); + } + else + { + mHCPeriod = hcPeriod; + } + + // + result = IsValid(mHCPeriod); + if (!result) + { + return result; + } + + // + mHCLength = PeriodSeconds(mHCPeriod) / cPeriodSeconds; + mHSMLength = mHCLength * mCSMLength; + result = mHCLength > 0; + if (!result) + { + return result; + } + + // + return result; +} + +// +// Retrieve all Exists Input Max Length ... +// use for Start Of Drawing ... +int ExtractMaxLengthOfInputs() +{ + // + int result = 0; + + // + result = MathMax(mCSMLength, mSSMLength); + result = MathMax(result, mMSMLength); + result = MathMax(result, mLSMLength); + result = MathMax(result, mHSMLength); + + // + return result; +} + +// +// Define Indexes and Styles ... +void DefineBuffers() +{ + // + // Current ... + + // + // Long Exit 1 ... + ENUM_DRAW_TYPE cLE1DrawType = showCurrentLE1 ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(cLE1BufferIndex, cLE1Buffer, INDICATOR_DATA); + PlotIndexSetInteger(cLE1BufferIndex, PLOT_SHOW_DATA, showCurrentLE1); + PlotIndexSetInteger(cLE1BufferIndex, PLOT_DRAW_TYPE, cLE1DrawType); + + // + // Long Exit 2 ... + ENUM_DRAW_TYPE cLE2DrawType = showCurrentLE2 ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(cLE2BufferIndex, cLE2Buffer, INDICATOR_DATA); + PlotIndexSetInteger(cLE2BufferIndex, PLOT_SHOW_DATA, showCurrentLE2); + PlotIndexSetInteger(cLE2BufferIndex, PLOT_DRAW_TYPE, cLE2DrawType); + + // + // Short Exit 1 ... + ENUM_DRAW_TYPE cSE1DrawType = showCurrentSE1 ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(cSE1BufferIndex, cSE1Buffer, INDICATOR_DATA); + PlotIndexSetInteger(cSE1BufferIndex, PLOT_SHOW_DATA, showCurrentSE1); + PlotIndexSetInteger(cSE1BufferIndex, PLOT_DRAW_TYPE, cSE1DrawType); + + // + // Short Exit 2 ... + ENUM_DRAW_TYPE cSE2DrawType = showCurrentSE2 ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(cSE2BufferIndex, cSE2Buffer, INDICATOR_DATA); + PlotIndexSetInteger(cSE2BufferIndex, PLOT_SHOW_DATA, showCurrentSE2); + PlotIndexSetInteger(cSE2BufferIndex, PLOT_DRAW_TYPE, cSE2DrawType); + + // + // Short ... + + // + // Long Exit 1 ... + ENUM_DRAW_TYPE sLE1DrawType = showCurrentLE1 ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(sLE1BufferIndex, sLE1Buffer, INDICATOR_DATA); + PlotIndexSetInteger(sLE1BufferIndex, PLOT_SHOW_DATA, showCurrentLE1); + PlotIndexSetInteger(sLE1BufferIndex, PLOT_DRAW_TYPE, sLE1DrawType); + + // + // Long Exit 2 ... + ENUM_DRAW_TYPE sLE2DrawType = showCurrentLE2 ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(sLE2BufferIndex, sLE2Buffer, INDICATOR_DATA); + PlotIndexSetInteger(sLE2BufferIndex, PLOT_SHOW_DATA, showCurrentLE2); + PlotIndexSetInteger(sLE2BufferIndex, PLOT_DRAW_TYPE, sLE2DrawType); + + // + // Short Exit 1 ... + ENUM_DRAW_TYPE sSE1DrawType = showCurrentSE1 ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(sSE1BufferIndex, sSE1Buffer, INDICATOR_DATA); + PlotIndexSetInteger(sSE1BufferIndex, PLOT_SHOW_DATA, showCurrentSE1); + PlotIndexSetInteger(sSE1BufferIndex, PLOT_DRAW_TYPE, sSE1DrawType); + + // + // Short Exit 2 ... + ENUM_DRAW_TYPE sSE2DrawType = showCurrentSE2 ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(sSE2BufferIndex, sSE2Buffer, INDICATOR_DATA); + PlotIndexSetInteger(sSE2BufferIndex, PLOT_SHOW_DATA, showCurrentSE2); + PlotIndexSetInteger(sSE2BufferIndex, PLOT_DRAW_TYPE, sSE2DrawType); + + // + // Medium ... + + // + // Long Exit 1 ... + ENUM_DRAW_TYPE mLE1DrawType = showCurrentLE1 ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(mLE1BufferIndex, mLE1Buffer, INDICATOR_DATA); + PlotIndexSetInteger(mLE1BufferIndex, PLOT_SHOW_DATA, showCurrentLE1); + PlotIndexSetInteger(mLE1BufferIndex, PLOT_DRAW_TYPE, mLE1DrawType); + + // + // Long Exit 2 ... + ENUM_DRAW_TYPE mLE2DrawType = showCurrentLE2 ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(mLE2BufferIndex, mLE2Buffer, INDICATOR_DATA); + PlotIndexSetInteger(mLE2BufferIndex, PLOT_SHOW_DATA, showCurrentLE2); + PlotIndexSetInteger(mLE2BufferIndex, PLOT_DRAW_TYPE, mLE2DrawType); + + // + // Short Exit 1 ... + ENUM_DRAW_TYPE mSE1DrawType = showCurrentSE1 ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(mSE1BufferIndex, mSE1Buffer, INDICATOR_DATA); + PlotIndexSetInteger(mSE1BufferIndex, PLOT_SHOW_DATA, showCurrentSE1); + PlotIndexSetInteger(mSE1BufferIndex, PLOT_DRAW_TYPE, mSE1DrawType); + + // + // Short Exit 2 ... + ENUM_DRAW_TYPE mSE2DrawType = showCurrentSE2 ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(mSE2BufferIndex, mSE2Buffer, INDICATOR_DATA); + PlotIndexSetInteger(mSE2BufferIndex, PLOT_SHOW_DATA, showCurrentSE2); + PlotIndexSetInteger(mSE2BufferIndex, PLOT_DRAW_TYPE, mSE2DrawType); + + // + // Long ... + + // + // Long Exit 1 ... + ENUM_DRAW_TYPE lLE1DrawType = showCurrentLE1 ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(lLE1BufferIndex, lLE1Buffer, INDICATOR_DATA); + PlotIndexSetInteger(lLE1BufferIndex, PLOT_SHOW_DATA, showCurrentLE1); + PlotIndexSetInteger(lLE1BufferIndex, PLOT_DRAW_TYPE, lLE1DrawType); + + // + // Long Exit 2 ... + ENUM_DRAW_TYPE lLE2DrawType = showCurrentLE2 ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(lLE2BufferIndex, lLE2Buffer, INDICATOR_DATA); + PlotIndexSetInteger(lLE2BufferIndex, PLOT_SHOW_DATA, showCurrentLE2); + PlotIndexSetInteger(lLE2BufferIndex, PLOT_DRAW_TYPE, lLE2DrawType); + + // + // Short Exit 1 ... + ENUM_DRAW_TYPE lSE1DrawType = showCurrentSE1 ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(lSE1BufferIndex, lSE1Buffer, INDICATOR_DATA); + PlotIndexSetInteger(lSE1BufferIndex, PLOT_SHOW_DATA, showCurrentSE1); + PlotIndexSetInteger(lSE1BufferIndex, PLOT_DRAW_TYPE, lSE1DrawType); + + // + // Short Exit 2 ... + ENUM_DRAW_TYPE lSE2DrawType = showCurrentSE2 ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(lSE2BufferIndex, lSE2Buffer, INDICATOR_DATA); + PlotIndexSetInteger(lSE2BufferIndex, PLOT_SHOW_DATA, showCurrentSE2); + PlotIndexSetInteger(lSE2BufferIndex, PLOT_DRAW_TYPE, lSE2DrawType); + + // + // Hind ... + + // + // Long Exit 1 ... + ENUM_DRAW_TYPE hLE1DrawType = showCurrentLE1 ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(hLE1BufferIndex, hLE1Buffer, INDICATOR_DATA); + PlotIndexSetInteger(hLE1BufferIndex, PLOT_SHOW_DATA, showCurrentLE1); + PlotIndexSetInteger(hLE1BufferIndex, PLOT_DRAW_TYPE, hLE1DrawType); + + // + // Long Exit 2 ... + ENUM_DRAW_TYPE hLE2DrawType = showCurrentLE2 ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(hLE2BufferIndex, hLE2Buffer, INDICATOR_DATA); + PlotIndexSetInteger(hLE2BufferIndex, PLOT_SHOW_DATA, showCurrentLE2); + PlotIndexSetInteger(hLE2BufferIndex, PLOT_DRAW_TYPE, hLE2DrawType); + + // + // Short Exit 1 ... + ENUM_DRAW_TYPE hSE1DrawType = showCurrentSE1 ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(hSE1BufferIndex, hSE1Buffer, INDICATOR_DATA); + PlotIndexSetInteger(hSE1BufferIndex, PLOT_SHOW_DATA, showCurrentSE1); + PlotIndexSetInteger(hSE1BufferIndex, PLOT_DRAW_TYPE, hSE1DrawType); + + // + // Short Exit 2 ... + ENUM_DRAW_TYPE hSE2DrawType = showCurrentSE2 ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(hSE2BufferIndex, hSE2Buffer, INDICATOR_DATA); + PlotIndexSetInteger(hSE2BufferIndex, PLOT_SHOW_DATA, showCurrentSE2); + PlotIndexSetInteger(hSE2BufferIndex, PLOT_DRAW_TYPE, hSE2DrawType); +} + +// +// Set Indicator Short Name and also we can define Buffers Labels ... +void SetIndicatorName() +{ + IndicatorSetString(INDICATOR_SHORTNAME, ShortName); +} + +// +// Calculations ... + +// +// Calculate Buffers ... +void CalculateBuffers( + int bar_index, // Selected Bar Index + const int prevCalculated, + const int ratesTotal, + const double &open[], + const double &high[], + const double &close[], + const double &low[] // +) +{ + // + CalculateCycles( + bar_index, + prevCalculated, + ratesTotal, + open, + high, + close, + low // + ); +} + +// +void CalculateCycles( + int bar_index, // Selected Bar Index + const int prevCalculated, + const int ratesTotal, + const double &open[], + const double &high[], + const double &close[], + const double &low[] // +) +{ + // + // CURRENT ... + CalculateCycle( + bar_index, + prevCalculated, + ratesTotal, + open, + high, + close, + low, + mCSMLength, + cWork, + cLE1Buffer, + cLE2Buffer, + cSE1Buffer, + cSE2Buffer // + ); + + // + // SHORT ... + CalculateCycle( + bar_index, + prevCalculated, + ratesTotal, + open, + high, + close, + low, + mSSMLength, + sWork, + sLE1Buffer, + sLE2Buffer, + sSE1Buffer, + sSE2Buffer // + ); + + // + // MEDIUM ... + CalculateCycle( + bar_index, + prevCalculated, + ratesTotal, + open, + high, + close, + low, + mMSMLength, + mWork, + mLE1Buffer, + mLE2Buffer, + mSE1Buffer, + mSE2Buffer // + ); + + // + // LONG ... + CalculateCycle( + bar_index, + prevCalculated, + ratesTotal, + open, + high, + close, + low, + mLSMLength, + lWork, + lLE1Buffer, + lLE2Buffer, + lSE1Buffer, + lSE2Buffer // + ); + + // + // HIND ... + CalculateCycle( + bar_index, + prevCalculated, + ratesTotal, + open, + high, + close, + low, + mHSMLength, + hWork, + hLE1Buffer, + hLE2Buffer, + hSE1Buffer, + hSE2Buffer // + ); +} + +// +void CalculateCycle( + int bar_index, // Selected Bar Index + const int prevCalculated, + const int ratesTotal, + const double &open[], + const double &high[], + const double &close[], + const double &low[], + // + int _length, // Calculation Length + double &work[][], // Working Array + // + double &le1[], + double &le2[], + double &se1[], + double &se2[] // +) +{ + // + // Cleanup Buffers ... + le1[bar_index] = se1[bar_index] = EMPTY_VALUE; + le2[bar_index] = se2[bar_index] = EMPTY_VALUE; + + // + int start = MathMax(bar_index - loopback, 0); + + // + // Calculate ATR Value ... + double atrValue = 0; + for (int k = 1; k <= _length && (bar_index - k - 1) >= 0; k++) + { + // + atrValue += MathMax(high[bar_index - k], close[MathMax(bar_index - k - 1, 0)]) - + MathMin(low[bar_index - k], close[MathMax(bar_index - k - 1, 0)]); + } + atrValue /= (double)_length; + + // + // Retrieve Highest High and Lowest Lows ... + double loopbackMax = high[ArrayMaximum(high, start, loopback)]; + double loopbackMin = low[ArrayMinimum(low, start, loopback)]; + + // + // Fill Multi Dimesional Working Array ... + work[bar_index][hi1Idx] = loopbackMax - multiplier1 * atrValue; + work[bar_index][lo1Idx] = loopbackMin + multiplier1 * atrValue; + work[bar_index][hi2Idx] = loopbackMax - multiplier2 * atrValue; + work[bar_index][lo2Idx] = loopbackMin + multiplier2 * atrValue; + work[bar_index][trend1Idx] = (bar_index > 0) ? work[bar_index - 1][trend1Idx] : 0; + work[bar_index][trend2Idx] = (bar_index > 0) ? work[bar_index - 1][trend2Idx] : 0; + + // + if (bar_index > 0) + { + // + // Calculate Trends ... + if (close[bar_index] > work[bar_index - 1][lo1Idx]) + { + work[bar_index][trend1Idx] = 1; + } + + // + if (close[bar_index] < work[bar_index - 1][hi1Idx]) + { + work[bar_index][trend1Idx] = -1; + } + + // + if (close[bar_index] > work[bar_index - 1][lo2Idx]) + { + work[bar_index][trend2Idx] = 1; + } + + // + if (close[bar_index] < work[bar_index - 1][hi2Idx]) + { + work[bar_index][trend2Idx] = -1; + } + + // + // Calculate Exit Values ... + + // + // Exit 1 ... + + // + // Long ... + if (multiplier1 > 0 && work[bar_index][trend1Idx] == 1) + { + // + if (work[bar_index][hi1Idx] < work[bar_index - 1][hi1Idx]) + { + work[bar_index][hi1Idx] = work[bar_index - 1][hi1Idx]; + } + + // + le1[bar_index] = work[bar_index][hi1Idx]; + + // // + // if (le1[bar_index - 1] == EMPTY_VALUE) + // { + // longExit1StartBuffer[bar_index] = le1[bar_index]; + // } + } + + // + // Short ... + if (multiplier1 > 0 && work[bar_index][trend1Idx] == -1) + { + // + if (work[bar_index][lo1Idx] > work[bar_index - 1][lo1Idx]) + { + work[bar_index][lo1Idx] = work[bar_index - 1][lo1Idx]; + } + + // + se1[bar_index] = work[bar_index][lo1Idx]; + + // // + // if (se1[bar_index - 1] == EMPTY_VALUE) + // { + // shortExit1StartBuffer[bar_index] = se1[bar_index]; + // } + } + + // + // Exit 2 ... + + // + // Long ... + if (multiplier2 > 0 && work[bar_index][trend2Idx] == 1) + { + if (work[bar_index][hi2Idx] < work[bar_index - 1][hi2Idx]) + { + work[bar_index][hi2Idx] = work[bar_index - 1][hi2Idx]; + } + + // + le2[bar_index] = work[bar_index][hi2Idx]; + + // // + // if (le2[bar_index - 1] == EMPTY_VALUE) + // { + // longExit2StartBuffer[bar_index] = le2[bar_index]; + // } + } + + // + // Short ... + if (multiplier2 > 0 && work[bar_index][trend2Idx] == -1) + { + // + if (work[bar_index][lo2Idx] > work[bar_index - 1][lo2Idx]) + { + work[bar_index][lo2Idx] = work[bar_index - 1][lo2Idx]; + } + + // + se2[bar_index] = work[bar_index][lo2Idx]; + + // // + // if (se2[bar_index - 1] == EMPTY_VALUE) + // { + // shortExit2StartBuffer[bar_index] = se2[bar_index]; + // } + } + } +} + +// \ No newline at end of file diff --git a/BKPS/Indicators 14030517/x-saherelm.xchdon.ex5 b/BKPS/Indicators 14030517/x-saherelm.xchdon.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..3ccd09908032598e9fe1eb8849dde1bf57f8edeb GIT binary patch literal 45518 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 z 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 literal 0 HcmV?d00001 diff --git a/BKPS/Indicators 14030517/x-saherelm.xchdon.mq5 b/BKPS/Indicators 14030517/x-saherelm.xchdon.mq5 new file mode 100644 index 0000000..64f53ec --- /dev/null +++ b/BKPS/Indicators 14030517/x-saherelm.xchdon.mq5 @@ -0,0 +1,1603 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL5 Indicator +// ------------------------------------------------- +// Name: XCHDON +// Description: Donchain on Cycles ... +// +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://saherelm.ir" +#property version "1.00" +#property description "SaherElm XCHDON Indicator" +#property strict + +// +#define ShortName "XCHDON" + +// +// Includes Common Library ... +#include "../Libraries/x-saherelm.common.lib.mq5" + +// +// Inputs ... + +// +input group "Market"; +input int length = 52; // Market Length + +// +input group "Cycles"; + +// +input group "Short"; +input ENUM_X_PERIOD_METHOD scMethod = X_PERIOD_AUTO; // How to Find Period +input ENUM_TIMEFRAMES scPeriod = NULL; // Time Period + +// +input group "Medium"; +input ENUM_X_PERIOD_METHOD mcMethod = X_PERIOD_AUTO; // How to Find Period +input ENUM_TIMEFRAMES mcPeriod = NULL; // Time Period + +// +input group "Long"; +input ENUM_X_PERIOD_METHOD lcMethod = X_PERIOD_AUTO; // How to Find Period +input ENUM_TIMEFRAMES lcPeriod = NULL; // Time Period + +// +input group "Hind"; +input ENUM_X_PERIOD_METHOD hcMethod = X_PERIOD_AUTO; // How to Find Period +input ENUM_TIMEFRAMES hcPeriod = NULL; // Time Period + +// +input group "Presentation"; + +// +input bool showUpper = true; // Show Upper Band +input bool showLower = true; // Show Lower Band + +// +input bool showOpen = true; // Show Open +input bool showHigh = true; // Show High +input bool showClose = true; // Show Close +input bool showLow = true; // Show Low + +// +input bool showCurrent = true; // Show Current Cycle +input bool showShort = true; // Show Short Cycle +input bool showMedium = true; // Show Medium Cycle +input bool showLong = true; // Show Long Cycle +input bool showHind = true; // Show Hind Cycle + +// +// Buffers ... + +// +#property indicator_chart_window + +// +#property indicator_buffers 40 +#property indicator_plots 40 + +// +// Current ... + +// +// Open ... + +// +#define cOpenUpperBufferIndex 0 +double cOpenUpperBuffer[]; + +// +#property indicator_label1 "XCHDON C O U" +#property indicator_type1 DRAW_LINE +#property indicator_color1 clrCornflowerBlue +#property indicator_width1 1 + +// +#define cOpenLowerBufferIndex 1 +double cOpenLowerBuffer[]; + +// +#property indicator_label2 "XCHDON C O L" +#property indicator_type2 DRAW_LINE +#property indicator_color2 clrCornflowerBlue +#property indicator_width2 1 + +// +// High ... + +// +#define cHighUpperBufferIndex 2 +double cHighUpperBuffer[]; + +// +#property indicator_label3 "XCHDON C H U" +#property indicator_type3 DRAW_LINE +#property indicator_color3 clrAquamarine +#property indicator_width3 1 + +// +#define cHighLowerBufferIndex 3 +double cHighLowerBuffer[]; + +// +#property indicator_label4 "XCHDON C H L" +#property indicator_type4 DRAW_LINE +#property indicator_color4 clrAquamarine +#property indicator_width4 1 + +// +// Low ... + +// +#define cLowUpperBufferIndex 4 +double cLowUpperBuffer[]; + +// +#property indicator_label5 "XCHDON C L U" +#property indicator_type5 DRAW_LINE +#property indicator_color5 clrDarkOrchid +#property indicator_width5 1 + +// +#define cLowLowerBufferIndex 5 +double cLowLowerBuffer[]; + +// +#property indicator_label6 "XCHDON C L L" +#property indicator_type6 DRAW_LINE +#property indicator_color6 clrDarkOrchid +#property indicator_width6 1 + +// +// Close ... + +// +#define cCloseUpperBufferIndex 6 +double cCloseUpperBuffer[]; + +// +#property indicator_label7 "XCHDON C C U" +#property indicator_type7 DRAW_LINE +#property indicator_color7 clrCoral +#property indicator_width7 1 + +// +#define cCloseLowerBufferIndex 7 +double cCloseLowerBuffer[]; + +// +#property indicator_label8 "XCHDON C C L" +#property indicator_type8 DRAW_LINE +#property indicator_color8 clrCoral +#property indicator_width8 1 + +// +// Short ... + +// +// Open ... + +// +#define sOpenUpperBufferIndex 8 +double sOpenUpperBuffer[]; + +// +#property indicator_label9 "XCHDON S O U" +#property indicator_type9 DRAW_LINE +#property indicator_color9 clrCornflowerBlue +#property indicator_width9 1 + +// +#define sOpenLowerBufferIndex 9 +double sOpenLowerBuffer[]; + +// +#property indicator_label10 "XCHDON S O L" +#property indicator_type10 DRAW_LINE +#property indicator_color10 clrCornflowerBlue +#property indicator_width10 1 + +// +// High ... + +// +#define sHighUpperBufferIndex 10 +double sHighUpperBuffer[]; + +// +#property indicator_label11 "XCHDON S H U" +#property indicator_type11 DRAW_LINE +#property indicator_color11 clrAquamarine +#property indicator_width11 1 + +// +#define sHighLowerBufferIndex 11 +double sHighLowerBuffer[]; + +// +#property indicator_label12 "XCHDON S H L" +#property indicator_type12 DRAW_LINE +#property indicator_color12 clrAquamarine +#property indicator_width12 1 + +// +// Low ... + +// +#define sLowUpperBufferIndex 12 +double sLowUpperBuffer[]; + +// +#property indicator_label13 "XCHDON S L U" +#property indicator_type13 DRAW_LINE +#property indicator_color13 clrDarkOrchid +#property indicator_width13 1 + +// +#define sLowLowerBufferIndex 13 +double sLowLowerBuffer[]; + +// +#property indicator_label14 "XCHDON S L L" +#property indicator_type14 DRAW_LINE +#property indicator_color14 clrDarkOrchid +#property indicator_width14 1 + +// +// Close ... + +// +#define sCloseUpperBufferIndex 14 +double sCloseUpperBuffer[]; + +// +#property indicator_label15 "XCHDON S C U" +#property indicator_type15 DRAW_LINE +#property indicator_color15 clrCoral +#property indicator_width15 1 + +// +#define sCloseLowerBufferIndex 15 +double sCloseLowerBuffer[]; + +// +#property indicator_label16 "XCHDON S C L" +#property indicator_type16 DRAW_LINE +#property indicator_color16 clrCoral +#property indicator_width16 1 + +// +// Medium ... + +// +// Open ... + +// +#define mOpenUpperBufferIndex 16 +double mOpenUpperBuffer[]; + +// +#property indicator_label17 "XCHDON M O U" +#property indicator_type17 DRAW_LINE +#property indicator_color17 clrCornflowerBlue +#property indicator_width17 1 + +// +#define mOpenLowerBufferIndex 17 +double mOpenLowerBuffer[]; + +// +#property indicator_label18 "XCHDON M O L" +#property indicator_type18 DRAW_LINE +#property indicator_color18 clrCornflowerBlue +#property indicator_width18 1 + +// +// High ... + +// +#define mHighUpperBufferIndex 18 +double mHighUpperBuffer[]; + +// +#property indicator_label19 "XCHDON M H U" +#property indicator_type19 DRAW_LINE +#property indicator_color19 clrAquamarine +#property indicator_width19 1 + +// +#define mHighLowerBufferIndex 19 +double mHighLowerBuffer[]; + +// +#property indicator_label20 "XCHDON M H L" +#property indicator_type20 DRAW_LINE +#property indicator_color20 clrAquamarine +#property indicator_width20 1 + +// +// Low ... + +// +#define mLowUpperBufferIndex 20 +double mLowUpperBuffer[]; + +// +#property indicator_label21 "XCHDON M L U" +#property indicator_type21 DRAW_LINE +#property indicator_color21 clrDarkOrchid +#property indicator_width21 1 + +// +#define mLowLowerBufferIndex 21 +double mLowLowerBuffer[]; + +// +#property indicator_label22 "XCHDON M L L" +#property indicator_type22 DRAW_LINE +#property indicator_color22 clrDarkOrchid +#property indicator_width22 1 + +// +// Close ... + +// +#define mCloseUpperBufferIndex 22 +double mCloseUpperBuffer[]; + +// +#property indicator_label23 "XCHDON M C U" +#property indicator_type23 DRAW_LINE +#property indicator_color23 clrCoral +#property indicator_width23 1 + +// +#define mCloseLowerBufferIndex 23 +double mCloseLowerBuffer[]; + +// +#property indicator_label24 "XCHDON M C L" +#property indicator_type24 DRAW_LINE +#property indicator_color24 clrCoral +#property indicator_width24 1 + +// +// Long ... + +// +// Open ... + +// +#define lOpenUpperBufferIndex 24 +double lOpenUpperBuffer[]; + +// +#property indicator_label25 "XCHDON L O U" +#property indicator_type25 DRAW_LINE +#property indicator_color25 clrCornflowerBlue +#property indicator_width25 1 + +// +#define lOpenLowerBufferIndex 25 +double lOpenLowerBuffer[]; + +// +#property indicator_label26 "XCHDON L O L" +#property indicator_type26 DRAW_LINE +#property indicator_color26 clrCornflowerBlue +#property indicator_width26 1 + +// +// High ... + +// +#define lHighUpperBufferIndex 26 +double lHighUpperBuffer[]; + +// +#property indicator_label27 "XCHDON L H U" +#property indicator_type27 DRAW_LINE +#property indicator_color27 clrAquamarine +#property indicator_width27 1 + +// +#define lHighLowerBufferIndex 27 +double lHighLowerBuffer[]; + +// +#property indicator_label28 "XCHDON L H L" +#property indicator_type28 DRAW_LINE +#property indicator_color28 clrAquamarine +#property indicator_width28 1 + +// +// Low ... + +// +#define lLowUpperBufferIndex 28 +double lLowUpperBuffer[]; + +// +#property indicator_label29 "XCHDON L L U" +#property indicator_type29 DRAW_LINE +#property indicator_color29 clrDarkOrchid +#property indicator_width29 1 + +// +#define lLowLowerBufferIndex 29 +double lLowLowerBuffer[]; + +// +#property indicator_label30 "XCHDON L L L" +#property indicator_type30 DRAW_LINE +#property indicator_color30 clrDarkOrchid +#property indicator_width30 1 + +// +// Close ... + +// +#define lCloseUpperBufferIndex 30 +double lCloseUpperBuffer[]; + +// +#property indicator_label31 "XCHDON L C U" +#property indicator_type31 DRAW_LINE +#property indicator_color31 clrCoral +#property indicator_width31 1 + +// +#define lCloseLowerBufferIndex 31 +double lCloseLowerBuffer[]; + +// +#property indicator_label32 "XCHDON L C L" +#property indicator_type32 DRAW_LINE +#property indicator_color32 clrCoral +#property indicator_width32 1 + +// +// Hind ... + +// +// Open ... + +// +#define hOpenUpperBufferIndex 32 +double hOpenUpperBuffer[]; + +// +#property indicator_label33 "XCHDON H O U" +#property indicator_type33 DRAW_LINE +#property indicator_color33 clrCornflowerBlue +#property indicator_width33 1 + +// +#define hOpenLowerBufferIndex 33 +double hOpenLowerBuffer[]; + +// +#property indicator_label34 "XCHDON H O L" +#property indicator_type34 DRAW_LINE +#property indicator_color34 clrCornflowerBlue +#property indicator_width34 1 + +// +// High ... + +// +#define hHighUpperBufferIndex 34 +double hHighUpperBuffer[]; + +// +#property indicator_label35 "XCHDON H H U" +#property indicator_type35 DRAW_LINE +#property indicator_color35 clrAquamarine +#property indicator_width35 1 + +// +#define hHighLowerBufferIndex 35 +double hHighLowerBuffer[]; + +// +#property indicator_label36 "XCHDON H H L" +#property indicator_type36 DRAW_LINE +#property indicator_color36 clrAquamarine +#property indicator_width36 1 + +// +// Low ... + +// +#define hLowUpperBufferIndex 36 +double hLowUpperBuffer[]; + +// +#property indicator_label37 "XCHDON H L U" +#property indicator_type37 DRAW_LINE +#property indicator_color37 clrDarkOrchid +#property indicator_width37 1 + +// +#define hLowLowerBufferIndex 37 +double hLowLowerBuffer[]; + +// +#property indicator_label38 "XCHDON H L L" +#property indicator_type38 DRAW_LINE +#property indicator_color38 clrDarkOrchid +#property indicator_width38 1 + +// +// Close ... + +// +#define hCloseUpperBufferIndex 38 +double hCloseUpperBuffer[]; + +// +#property indicator_label39 "XCHDON H C U" +#property indicator_type39 DRAW_LINE +#property indicator_color39 clrCoral +#property indicator_width39 1 + +// +#define hCloseLowerBufferIndex 39 +double hCloseLowerBuffer[]; + +// +#property indicator_label40 "XCHDON H C L" +#property indicator_type40 DRAW_LINE +#property indicator_color40 clrCoral +#property indicator_width40 1 + +// +// Variables, Properties and etc ... + +// +int maxLength; + +// +// Current ... +int mCMarketLength = length; + +// +// Short ... +int mSCycleLength = 0; +int mSMarketLength = 0; +ENUM_TIMEFRAMES mSCPeriod = NULL; + +// +// Medium ... +int mMCycleLength = 0; +int mMMarketLength = 0; +ENUM_TIMEFRAMES mMCPeriod = NULL; + +// +// Long ... +int mLCycleLength = 0; +int mLMarketLength = 0; +ENUM_TIMEFRAMES mLCPeriod = NULL; + +// +// Hind ... +int mHCycleLength = 0; +int mHMarketLength = 0; +ENUM_TIMEFRAMES mHCPeriod = NULL; + +// +// Event Handlers ... + +// +// Initialization ... +int OnInit() +{ + // + // Validate Inputs ... + if (!ValidateInputs()) + { + return INIT_PARAMETERS_INCORRECT; + } + + // + if (!InitMarketCycles()) + { + return INIT_PARAMETERS_INCORRECT; + } + + // + // because in some cases we may have more than one input for + // calculation and we must prevent any calculation + // untill we pass the biggest input length, here we get max Input length + // and then wait until pass it ... + maxLength = ExtractMaxLengthOfInputs(); + + // + // Define Index Buffers ... + DefineBuffers(); + + // + // Set Indicator ShortName ... + SetIndicatorName(); + + // + // Init Succeed ... + return INIT_SUCCEEDED; +} + +// +// DeInitialization ... +void OnDeinit(const int reason) +{ + // + // REASON_PROGRAM 0 The EA has stopped working calling the ExpertRemove() function + // REASON_REMOVE 1 Program removed from a chart + // REASON_RECOMPILE 2 Program recompiled + // REASON_CHARTCHANGE 3 A symbol or a chart period is changed + // REASON_CHARTCLOSE 4 Chart closed + // REASON_PARAMETERS 5 Inputs changed by a user + // REASON_ACCOUNT 6 Another account has been activated or reconnection to the trade server has occurred due to changes in the account settings + // REASON_TEMPLATE 7 Another chart template applied + // REASON_INITFAILED 8 The OnInit() handler returned a non-zero value + // REASON_CLOSE 9 Terminal closed +} + +// +// Calculating what we want ... +int OnCalculate( + const int rates_total, // Total Bars on Chart ... + const int prev_calculated, // Total Calculated Bars on Charts ... + const datetime &time[], // History of Open Time ... + const double &open[], // History of Open Price ... + const double &high[], // History of High Price ... + const double &low[], // History of Low Price ... + const double &close[], // History of Close Price ... + const long &tick_volume[], // History of Tick Volumes on Bar ... + const long &volume[], // History of Trade Volumes ... + const int &spread[] // History of Spread Price ... +) +{ + // + if (rates_total < maxLength - 1) + { + return prev_calculated; + } + + // + int start = prev_calculated == 0 + ? maxLength + : prev_calculated - 1; + + // + // Main Loop ... + for (int i = start; i < rates_total; i++) + { + // + CalculateBuffers( + // + i, + prev_calculated, + rates_total, + // + open, + high, + close, + low, + tick_volume + // + ); + } + + // + return rates_total; +} + +// +// Functions ... + +// +// Validate Input Args for Initialization ... +bool ValidateInputs() +{ + // + bool result = false; + + // + result = + // + length > 2 + // + && + // + (IsValid(scMethod, scPeriod) && + IsValid(mcMethod, mcPeriod) && + IsValid(lcMethod, lcPeriod) && + IsValid(hcMethod, hcPeriod)) + // + ; + + // + return result; +} + +// +// Initialize Market Cycles ... +bool InitMarketCycles() +{ + // + bool result = false; + + // + // Current Cycle Initialization ... + + // + int cPeriodSeconds = PeriodSeconds(_Period); + + // + // Short Cycle Initialization ... + + // + // Find Cycle Period ... + if (scMethod == X_PERIOD_AUTO) + { + // + // Select Period ... + mSCPeriod = GetCyclePeriod( + X_MARKET_CYCLE_SHORT, + _Period // + ); + } + else + { + mSCPeriod = scPeriod; + } + + // + result = IsValid(mSCPeriod); + if (!result) + { + return result; + } + + // + mSCycleLength = PeriodSeconds(mSCPeriod) / cPeriodSeconds; + mSMarketLength = mSCycleLength * mCMarketLength; + result = mSCycleLength > 0; + if (!result) + { + return result; + } + + // + // Medium Cycle Initialization ... + + // + // Find Cycle Period ... + if (mcMethod == X_PERIOD_AUTO) + { + // + // Select Period ... + mMCPeriod = GetCyclePeriod( + X_MARKET_CYCLE_MEDIUM, + _Period // + ); + } + else + { + mMCPeriod = mcPeriod; + } + + // + result = IsValid(mMCPeriod); + if (!result) + { + return result; + } + + // + mMCycleLength = PeriodSeconds(mMCPeriod) / cPeriodSeconds; + mMMarketLength = mMCycleLength * mCMarketLength; + result = mMCycleLength > 0; + if (!result) + { + return result; + } + + // + // Long Cycle Initialization ... + + // + // Find Cycle Period ... + if (lcMethod == X_PERIOD_AUTO) + { + // + // Select Period ... + mLCPeriod = GetCyclePeriod( + X_MARKET_CYCLE_LONG, + _Period // + ); + } + else + { + mLCPeriod = lcPeriod; + } + + // + result = IsValid(mLCPeriod); + if (!result) + { + return result; + } + + // + mLCycleLength = PeriodSeconds(mLCPeriod) / cPeriodSeconds; + mLMarketLength = mLCycleLength * mCMarketLength; + result = mLCycleLength > 0; + if (!result) + { + return result; + } + + // + // Hind Cycle Initialization ... + + // + // Find Cycle Period ... + if (hcMethod == X_PERIOD_AUTO) + { + // + // Select Period ... + mHCPeriod = GetCyclePeriod( + X_MARKET_CYCLE_HIND, + _Period // + ); + } + else + { + mHCPeriod = hcPeriod; + } + + // + result = IsValid(mHCPeriod); + if (!result) + { + return result; + } + + // + mHCycleLength = PeriodSeconds(mHCPeriod) / cPeriodSeconds; + mHMarketLength = mHCycleLength * mCMarketLength; + result = mHCycleLength > 0; + if (!result) + { + return result; + } + + // + return result; +} + +// +// Retrieve all Exists Input Max Length ... +// use for Start Of Drawing ... +int ExtractMaxLengthOfInputs() +{ + // + int result = 0; + + // + // Current ... + result = MathMax(mCMarketLength, mSMarketLength); + result = MathMax(result, mMMarketLength); + result = MathMax(result, mLMarketLength); + result = MathMax(result, mHMarketLength); + + // + return result; +} + +// +// Set Indicator Short Name and also we can define Buffers Labels ... +void SetIndicatorName() +{ + // + IndicatorSetString(INDICATOR_SHORTNAME, ShortName); + IndicatorSetInteger(INDICATOR_DIGITS, _Digits); +} + +// +// Define Indexes and Styles ... +void DefineBuffers() +{ + // + // CURRENT ... + + // + // Open ... + + // + // UPPER ... + bool canShowCOpenUpper = showUpper && showOpen && showCurrent; + ENUM_DRAW_TYPE cOpenUpperDrawType = canShowCOpenUpper ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(cOpenUpperBufferIndex, cOpenUpperBuffer, INDICATOR_DATA); + PlotIndexSetDouble(cOpenUpperBufferIndex, PLOT_EMPTY_VALUE, EMPTY_VALUE); + PlotIndexSetInteger(cOpenUpperBufferIndex, PLOT_SHOW_DATA, canShowCOpenUpper); + PlotIndexSetInteger(cOpenUpperBufferIndex, PLOT_DRAW_TYPE, cOpenUpperDrawType); + + // + // LOWER ... + bool canShowCOpenLower = showLower && showOpen && showCurrent; + ENUM_DRAW_TYPE cOpenLowerDrawType = canShowCOpenLower ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(cOpenLowerBufferIndex, cOpenLowerBuffer, INDICATOR_DATA); + PlotIndexSetDouble(cOpenLowerBufferIndex, PLOT_EMPTY_VALUE, EMPTY_VALUE); + PlotIndexSetInteger(cOpenLowerBufferIndex, PLOT_SHOW_DATA, canShowCOpenLower); + PlotIndexSetInteger(cOpenLowerBufferIndex, PLOT_DRAW_TYPE, cOpenLowerDrawType); + + // + // Close ... + + // + // UPPER ... + bool canShowCCloseUpper = showUpper && showClose && showCurrent; + ENUM_DRAW_TYPE cCloseUpperDrawType = canShowCCloseUpper ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(cCloseUpperBufferIndex, cCloseUpperBuffer, INDICATOR_DATA); + PlotIndexSetDouble(cCloseUpperBufferIndex, PLOT_EMPTY_VALUE, EMPTY_VALUE); + PlotIndexSetInteger(cCloseUpperBufferIndex, PLOT_SHOW_DATA, canShowCCloseUpper); + PlotIndexSetInteger(cCloseUpperBufferIndex, PLOT_DRAW_TYPE, cCloseUpperDrawType); + + // + // LOWER ... + bool canShowCCloseLower = showLower && showClose && showCurrent; + ENUM_DRAW_TYPE cCloseLowerDrawType = canShowCCloseLower ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(cCloseLowerBufferIndex, cCloseLowerBuffer, INDICATOR_DATA); + PlotIndexSetDouble(cCloseLowerBufferIndex, PLOT_EMPTY_VALUE, EMPTY_VALUE); + PlotIndexSetInteger(cCloseLowerBufferIndex, PLOT_SHOW_DATA, canShowCCloseLower); + PlotIndexSetInteger(cCloseLowerBufferIndex, PLOT_DRAW_TYPE, cCloseLowerDrawType); + + // + // High ... + + // + // UPPER ... + bool canShowCHighUpper = showUpper && showHigh && showCurrent; + ENUM_DRAW_TYPE cHighUpperDrawType = canShowCHighUpper ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(cHighUpperBufferIndex, cHighUpperBuffer, INDICATOR_DATA); + PlotIndexSetDouble(cHighUpperBufferIndex, PLOT_EMPTY_VALUE, EMPTY_VALUE); + PlotIndexSetInteger(cHighUpperBufferIndex, PLOT_SHOW_DATA, canShowCHighUpper); + PlotIndexSetInteger(cHighUpperBufferIndex, PLOT_DRAW_TYPE, cHighUpperDrawType); + + // + // LOWER ... + bool canShowCHighLower = showLower && showHigh && showCurrent; + ENUM_DRAW_TYPE cHighLowerDrawType = canShowCHighLower ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(cHighLowerBufferIndex, cHighLowerBuffer, INDICATOR_DATA); + PlotIndexSetDouble(cHighLowerBufferIndex, PLOT_EMPTY_VALUE, EMPTY_VALUE); + PlotIndexSetInteger(cHighLowerBufferIndex, PLOT_SHOW_DATA, canShowCHighLower); + PlotIndexSetInteger(cHighLowerBufferIndex, PLOT_DRAW_TYPE, cHighLowerDrawType); + + // + // Low ... + + // + // UPPER ... + bool canShowCLowUpper = showUpper && showLow && showCurrent; + ENUM_DRAW_TYPE cLowUpperDrawType = canShowCLowUpper ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(cLowUpperBufferIndex, cLowUpperBuffer, INDICATOR_DATA); + PlotIndexSetDouble(cLowUpperBufferIndex, PLOT_EMPTY_VALUE, EMPTY_VALUE); + PlotIndexSetInteger(cLowUpperBufferIndex, PLOT_SHOW_DATA, canShowCLowUpper); + PlotIndexSetInteger(cLowUpperBufferIndex, PLOT_DRAW_TYPE, cLowUpperDrawType); + + // + // LOWER ... + bool canShowCLowLower = showLower && showLow && showCurrent; + ENUM_DRAW_TYPE cLowLowerDrawType = canShowCLowLower ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(cLowLowerBufferIndex, cLowLowerBuffer, INDICATOR_DATA); + PlotIndexSetDouble(cLowLowerBufferIndex, PLOT_EMPTY_VALUE, EMPTY_VALUE); + PlotIndexSetInteger(cLowLowerBufferIndex, PLOT_SHOW_DATA, canShowCLowLower); + PlotIndexSetInteger(cLowLowerBufferIndex, PLOT_DRAW_TYPE, cLowLowerDrawType); + + // + // SHORT ... + + // + // Open ... + + // + // UPPER ... + bool canShowSOpenUpper = showUpper && showOpen && showShort; + ENUM_DRAW_TYPE sOpenUpperDrawType = canShowSOpenUpper ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(sOpenUpperBufferIndex, sOpenUpperBuffer, INDICATOR_DATA); + PlotIndexSetDouble(sOpenUpperBufferIndex, PLOT_EMPTY_VALUE, EMPTY_VALUE); + PlotIndexSetInteger(sOpenUpperBufferIndex, PLOT_SHOW_DATA, canShowSOpenUpper); + PlotIndexSetInteger(sOpenUpperBufferIndex, PLOT_DRAW_TYPE, sOpenUpperDrawType); + + // + // LOWER ... + bool canShowSOpenLower = showLower && showOpen && showShort; + ENUM_DRAW_TYPE sOpenLowerDrawType = canShowSOpenLower ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(sOpenLowerBufferIndex, sOpenLowerBuffer, INDICATOR_DATA); + PlotIndexSetDouble(sOpenLowerBufferIndex, PLOT_EMPTY_VALUE, EMPTY_VALUE); + PlotIndexSetInteger(sOpenLowerBufferIndex, PLOT_SHOW_DATA, canShowSOpenLower); + PlotIndexSetInteger(sOpenLowerBufferIndex, PLOT_DRAW_TYPE, sOpenLowerDrawType); + + // + // Close ... + + // + // UPPER ... + bool canShowSCloseUpper = showUpper && showClose && showShort; + ENUM_DRAW_TYPE sCloseUpperDrawType = canShowSCloseUpper ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(sCloseUpperBufferIndex, sCloseUpperBuffer, INDICATOR_DATA); + PlotIndexSetDouble(sCloseUpperBufferIndex, PLOT_EMPTY_VALUE, EMPTY_VALUE); + PlotIndexSetInteger(sCloseUpperBufferIndex, PLOT_SHOW_DATA, canShowSCloseUpper); + PlotIndexSetInteger(sCloseUpperBufferIndex, PLOT_DRAW_TYPE, sCloseUpperDrawType); + + // + // LOWER ... + bool canShowSCloseLower = showLower && showClose && showShort; + ENUM_DRAW_TYPE sCloseLowerDrawType = canShowSCloseLower ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(sCloseLowerBufferIndex, sCloseLowerBuffer, INDICATOR_DATA); + PlotIndexSetDouble(sCloseLowerBufferIndex, PLOT_EMPTY_VALUE, EMPTY_VALUE); + PlotIndexSetInteger(sCloseLowerBufferIndex, PLOT_SHOW_DATA, canShowSCloseLower); + PlotIndexSetInteger(sCloseLowerBufferIndex, PLOT_DRAW_TYPE, sCloseLowerDrawType); + + // + // High ... + + // + // UPPER ... + bool canShowSHighUpper = showUpper && showHigh && showShort; + ENUM_DRAW_TYPE sHighUpperDrawType = canShowSHighUpper ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(sHighUpperBufferIndex, sHighUpperBuffer, INDICATOR_DATA); + PlotIndexSetDouble(sHighUpperBufferIndex, PLOT_EMPTY_VALUE, EMPTY_VALUE); + PlotIndexSetInteger(sHighUpperBufferIndex, PLOT_SHOW_DATA, canShowSHighUpper); + PlotIndexSetInteger(sHighUpperBufferIndex, PLOT_DRAW_TYPE, sHighUpperDrawType); + + // + // LOWER ... + bool canShowSHighLower = showLower && showHigh && showShort; + ENUM_DRAW_TYPE sHighLowerDrawType = canShowSHighLower ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(sHighLowerBufferIndex, sHighLowerBuffer, INDICATOR_DATA); + PlotIndexSetDouble(sHighLowerBufferIndex, PLOT_EMPTY_VALUE, EMPTY_VALUE); + PlotIndexSetInteger(sHighLowerBufferIndex, PLOT_SHOW_DATA, canShowSHighLower); + PlotIndexSetInteger(sHighLowerBufferIndex, PLOT_DRAW_TYPE, sHighLowerDrawType); + + // + // Low ... + + // + // UPPER ... + bool canShowSLowUpper = showUpper && showLow && showShort; + ENUM_DRAW_TYPE sLowUpperDrawType = canShowSLowUpper ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(sLowUpperBufferIndex, sLowUpperBuffer, INDICATOR_DATA); + PlotIndexSetDouble(sLowUpperBufferIndex, PLOT_EMPTY_VALUE, EMPTY_VALUE); + PlotIndexSetInteger(sLowUpperBufferIndex, PLOT_SHOW_DATA, canShowSLowUpper); + PlotIndexSetInteger(sLowUpperBufferIndex, PLOT_DRAW_TYPE, sLowUpperDrawType); + + // + // LOWER ... + bool canShowSLowLower = showLower && showLow && showShort; + ENUM_DRAW_TYPE sLowLowerDrawType = canShowSLowLower ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(sLowLowerBufferIndex, sLowLowerBuffer, INDICATOR_DATA); + PlotIndexSetDouble(sLowLowerBufferIndex, PLOT_EMPTY_VALUE, EMPTY_VALUE); + PlotIndexSetInteger(sLowLowerBufferIndex, PLOT_SHOW_DATA, canShowSLowLower); + PlotIndexSetInteger(sLowLowerBufferIndex, PLOT_DRAW_TYPE, sLowLowerDrawType); + + // + // MEDIUM ... + + // + // Open ... + + // + // UPPER ... + bool canShowMOpenUpper = showUpper && showOpen && showMedium; + ENUM_DRAW_TYPE mOpenUpperDrawType = canShowMOpenUpper ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(mOpenUpperBufferIndex, mOpenUpperBuffer, INDICATOR_DATA); + PlotIndexSetDouble(mOpenUpperBufferIndex, PLOT_EMPTY_VALUE, EMPTY_VALUE); + PlotIndexSetInteger(mOpenUpperBufferIndex, PLOT_SHOW_DATA, canShowMOpenUpper); + PlotIndexSetInteger(mOpenUpperBufferIndex, PLOT_DRAW_TYPE, mOpenUpperDrawType); + + // + // LOWER ... + bool canShowMOpenLower = showLower && showOpen && showMedium; + ENUM_DRAW_TYPE mOpenLowerDrawType = canShowMOpenLower ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(mOpenLowerBufferIndex, mOpenLowerBuffer, INDICATOR_DATA); + PlotIndexSetDouble(mOpenLowerBufferIndex, PLOT_EMPTY_VALUE, EMPTY_VALUE); + PlotIndexSetInteger(mOpenLowerBufferIndex, PLOT_SHOW_DATA, canShowMOpenLower); + PlotIndexSetInteger(mOpenLowerBufferIndex, PLOT_DRAW_TYPE, mOpenLowerDrawType); + + // + // Close ... + + // + // UPPER ... + bool canShowMCloseUpper = showUpper && showClose && showMedium; + ENUM_DRAW_TYPE mCloseUpperDrawType = canShowMCloseUpper ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(mCloseUpperBufferIndex, mCloseUpperBuffer, INDICATOR_DATA); + PlotIndexSetDouble(mCloseUpperBufferIndex, PLOT_EMPTY_VALUE, EMPTY_VALUE); + PlotIndexSetInteger(mCloseUpperBufferIndex, PLOT_SHOW_DATA, canShowMCloseUpper); + PlotIndexSetInteger(mCloseUpperBufferIndex, PLOT_DRAW_TYPE, mCloseUpperDrawType); + + // + // LOWER ... + bool canShowMCloseLower = showLower && showClose && showMedium; + ENUM_DRAW_TYPE mCloseLowerDrawType = canShowMCloseLower ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(mCloseLowerBufferIndex, mCloseLowerBuffer, INDICATOR_DATA); + PlotIndexSetDouble(mCloseLowerBufferIndex, PLOT_EMPTY_VALUE, EMPTY_VALUE); + PlotIndexSetInteger(mCloseLowerBufferIndex, PLOT_SHOW_DATA, canShowMCloseLower); + PlotIndexSetInteger(mCloseLowerBufferIndex, PLOT_DRAW_TYPE, mCloseLowerDrawType); + + // + // High ... + + // + // UPPER ... + bool canShowMHighUpper = showUpper && showHigh && showMedium; + ENUM_DRAW_TYPE mHighUpperDrawType = canShowMHighUpper ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(mHighUpperBufferIndex, mHighUpperBuffer, INDICATOR_DATA); + PlotIndexSetDouble(mHighUpperBufferIndex, PLOT_EMPTY_VALUE, EMPTY_VALUE); + PlotIndexSetInteger(mHighUpperBufferIndex, PLOT_SHOW_DATA, canShowMHighUpper); + PlotIndexSetInteger(mHighUpperBufferIndex, PLOT_DRAW_TYPE, mHighUpperDrawType); + + // + // LOWER ... + bool canShowMHighLower = showLower && showHigh && showMedium; + ENUM_DRAW_TYPE mHighLowerDrawType = canShowMHighLower ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(mHighLowerBufferIndex, mHighLowerBuffer, INDICATOR_DATA); + PlotIndexSetDouble(mHighLowerBufferIndex, PLOT_EMPTY_VALUE, EMPTY_VALUE); + PlotIndexSetInteger(mHighLowerBufferIndex, PLOT_SHOW_DATA, canShowMHighLower); + PlotIndexSetInteger(mHighLowerBufferIndex, PLOT_DRAW_TYPE, mHighLowerDrawType); + + // + // Low ... + + // + // UPPER ... + bool canShowMLowUpper = showUpper && showLow && showMedium; + ENUM_DRAW_TYPE mLowUpperDrawType = canShowMLowUpper ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(mLowUpperBufferIndex, mLowUpperBuffer, INDICATOR_DATA); + PlotIndexSetDouble(mLowUpperBufferIndex, PLOT_EMPTY_VALUE, EMPTY_VALUE); + PlotIndexSetInteger(mLowUpperBufferIndex, PLOT_SHOW_DATA, canShowMLowUpper); + PlotIndexSetInteger(mLowUpperBufferIndex, PLOT_DRAW_TYPE, mLowUpperDrawType); + + // + // LOWER ... + bool canShowMLowLower = showLower && showLow && showMedium; + ENUM_DRAW_TYPE mLowLowerDrawType = canShowMLowLower ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(mLowLowerBufferIndex, mLowLowerBuffer, INDICATOR_DATA); + PlotIndexSetDouble(mLowLowerBufferIndex, PLOT_EMPTY_VALUE, EMPTY_VALUE); + PlotIndexSetInteger(mLowLowerBufferIndex, PLOT_SHOW_DATA, canShowMLowLower); + PlotIndexSetInteger(mLowLowerBufferIndex, PLOT_DRAW_TYPE, mLowLowerDrawType); + + // + // LONG ... + + // + // Open ... + + // + // UPPER ... + bool canShowLOpenUpper = showUpper && showOpen && showLong; + ENUM_DRAW_TYPE lOpenUpperDrawType = canShowLOpenUpper ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(lOpenUpperBufferIndex, lOpenUpperBuffer, INDICATOR_DATA); + PlotIndexSetDouble(lOpenUpperBufferIndex, PLOT_EMPTY_VALUE, EMPTY_VALUE); + PlotIndexSetInteger(lOpenUpperBufferIndex, PLOT_SHOW_DATA, canShowLOpenUpper); + PlotIndexSetInteger(lOpenUpperBufferIndex, PLOT_DRAW_TYPE, lOpenUpperDrawType); + + // + // LOWER ... + bool canShowLOpenLower = showLower && showOpen && showLong; + ENUM_DRAW_TYPE lOpenLowerDrawType = canShowLOpenLower ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(lOpenLowerBufferIndex, lOpenLowerBuffer, INDICATOR_DATA); + PlotIndexSetDouble(lOpenLowerBufferIndex, PLOT_EMPTY_VALUE, EMPTY_VALUE); + PlotIndexSetInteger(lOpenLowerBufferIndex, PLOT_SHOW_DATA, canShowLOpenLower); + PlotIndexSetInteger(lOpenLowerBufferIndex, PLOT_DRAW_TYPE, lOpenLowerDrawType); + + // + // Close ... + + // + // UPPER ... + bool canShowLCloseUpper = showUpper && showClose && showLong; + ENUM_DRAW_TYPE lCloseUpperDrawType = canShowLCloseUpper ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(lCloseUpperBufferIndex, lCloseUpperBuffer, INDICATOR_DATA); + PlotIndexSetDouble(lCloseUpperBufferIndex, PLOT_EMPTY_VALUE, EMPTY_VALUE); + PlotIndexSetInteger(lCloseUpperBufferIndex, PLOT_SHOW_DATA, canShowLCloseUpper); + PlotIndexSetInteger(lCloseUpperBufferIndex, PLOT_DRAW_TYPE, lCloseUpperDrawType); + + // + // LOWER ... + bool canShowLCloseLower = showLower && showClose && showLong; + ENUM_DRAW_TYPE lCloseLowerDrawType = canShowLCloseLower ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(lCloseLowerBufferIndex, lCloseLowerBuffer, INDICATOR_DATA); + PlotIndexSetDouble(lCloseLowerBufferIndex, PLOT_EMPTY_VALUE, EMPTY_VALUE); + PlotIndexSetInteger(lCloseLowerBufferIndex, PLOT_SHOW_DATA, canShowLCloseLower); + PlotIndexSetInteger(lCloseLowerBufferIndex, PLOT_DRAW_TYPE, lCloseLowerDrawType); + + // + // High ... + + // + // UPPER ... + bool canShowLHighUpper = showUpper && showHigh && showLong; + ENUM_DRAW_TYPE lHighUpperDrawType = canShowLHighUpper ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(lHighUpperBufferIndex, lHighUpperBuffer, INDICATOR_DATA); + PlotIndexSetDouble(lHighUpperBufferIndex, PLOT_EMPTY_VALUE, EMPTY_VALUE); + PlotIndexSetInteger(lHighUpperBufferIndex, PLOT_SHOW_DATA, canShowLHighUpper); + PlotIndexSetInteger(lHighUpperBufferIndex, PLOT_DRAW_TYPE, lHighUpperDrawType); + + // + // LOWER ... + bool canShowLHighLower = showLower && showHigh && showLong; + ENUM_DRAW_TYPE lHighLowerDrawType = canShowLHighLower ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(lHighLowerBufferIndex, lHighLowerBuffer, INDICATOR_DATA); + PlotIndexSetDouble(lHighLowerBufferIndex, PLOT_EMPTY_VALUE, EMPTY_VALUE); + PlotIndexSetInteger(lHighLowerBufferIndex, PLOT_SHOW_DATA, canShowLHighLower); + PlotIndexSetInteger(lHighLowerBufferIndex, PLOT_DRAW_TYPE, lHighLowerDrawType); + + // + // Low ... + + // + // UPPER ... + bool canShowLLowUpper = showUpper && showLow && showLong; + ENUM_DRAW_TYPE lLowUpperDrawType = canShowLLowUpper ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(lLowUpperBufferIndex, lLowUpperBuffer, INDICATOR_DATA); + PlotIndexSetDouble(lLowUpperBufferIndex, PLOT_EMPTY_VALUE, EMPTY_VALUE); + PlotIndexSetInteger(lLowUpperBufferIndex, PLOT_SHOW_DATA, canShowLLowUpper); + PlotIndexSetInteger(lLowUpperBufferIndex, PLOT_DRAW_TYPE, lLowUpperDrawType); + + // + // LOWER ... + bool canShowLLowLower = showLower && showLow && showLong; + ENUM_DRAW_TYPE lLowLowerDrawType = canShowLLowLower ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(lLowLowerBufferIndex, lLowLowerBuffer, INDICATOR_DATA); + PlotIndexSetDouble(lLowLowerBufferIndex, PLOT_EMPTY_VALUE, EMPTY_VALUE); + PlotIndexSetInteger(lLowLowerBufferIndex, PLOT_SHOW_DATA, canShowLLowLower); + PlotIndexSetInteger(lLowLowerBufferIndex, PLOT_DRAW_TYPE, lLowLowerDrawType); + + // + // HIND ... + + // + // Open ... + + // + // UPPER ... + bool canShowHOpenUpper = showUpper && showOpen && showHind; + ENUM_DRAW_TYPE hOpenUpperDrawType = canShowHOpenUpper ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(hOpenUpperBufferIndex, hOpenUpperBuffer, INDICATOR_DATA); + PlotIndexSetDouble(hOpenUpperBufferIndex, PLOT_EMPTY_VALUE, EMPTY_VALUE); + PlotIndexSetInteger(hOpenUpperBufferIndex, PLOT_SHOW_DATA, canShowHOpenUpper); + PlotIndexSetInteger(hOpenUpperBufferIndex, PLOT_DRAW_TYPE, hOpenUpperDrawType); + + // + // LOWER ... + bool canShowHOpenLower = showLower && showOpen && showHind; + ENUM_DRAW_TYPE hOpenLowerDrawType = canShowHOpenLower ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(hOpenLowerBufferIndex, hOpenLowerBuffer, INDICATOR_DATA); + PlotIndexSetDouble(hOpenLowerBufferIndex, PLOT_EMPTY_VALUE, EMPTY_VALUE); + PlotIndexSetInteger(hOpenLowerBufferIndex, PLOT_SHOW_DATA, canShowHOpenLower); + PlotIndexSetInteger(hOpenLowerBufferIndex, PLOT_DRAW_TYPE, hOpenLowerDrawType); + + // + // Close ... + + // + // UPPER ... + bool canShowHCloseUpper = showUpper && showClose && showHind; + ENUM_DRAW_TYPE hCloseUpperDrawType = canShowHCloseUpper ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(hCloseUpperBufferIndex, hCloseUpperBuffer, INDICATOR_DATA); + PlotIndexSetDouble(hCloseUpperBufferIndex, PLOT_EMPTY_VALUE, EMPTY_VALUE); + PlotIndexSetInteger(hCloseUpperBufferIndex, PLOT_SHOW_DATA, canShowHCloseUpper); + PlotIndexSetInteger(hCloseUpperBufferIndex, PLOT_DRAW_TYPE, hCloseUpperDrawType); + + // + // LOWER ... + bool canShowHCloseLower = showLower && showClose && showHind; + ENUM_DRAW_TYPE hCloseLowerDrawType = canShowHCloseLower ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(hCloseLowerBufferIndex, hCloseLowerBuffer, INDICATOR_DATA); + PlotIndexSetDouble(hCloseLowerBufferIndex, PLOT_EMPTY_VALUE, EMPTY_VALUE); + PlotIndexSetInteger(hCloseLowerBufferIndex, PLOT_SHOW_DATA, canShowHCloseLower); + PlotIndexSetInteger(hCloseLowerBufferIndex, PLOT_DRAW_TYPE, hCloseLowerDrawType); + + // + // High ... + + // + // UPPER ... + bool canShowHHighUpper = showUpper && showHigh && showHind; + ENUM_DRAW_TYPE hHighUpperDrawType = canShowHHighUpper ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(hHighUpperBufferIndex, hHighUpperBuffer, INDICATOR_DATA); + PlotIndexSetDouble(hHighUpperBufferIndex, PLOT_EMPTY_VALUE, EMPTY_VALUE); + PlotIndexSetInteger(hHighUpperBufferIndex, PLOT_SHOW_DATA, canShowHHighUpper); + PlotIndexSetInteger(hHighUpperBufferIndex, PLOT_DRAW_TYPE, hHighUpperDrawType); + + // + // LOWER ... + bool canShowHHighLower = showLower && showHigh && showHind; + ENUM_DRAW_TYPE hHighLowerDrawType = canShowHHighLower ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(hHighLowerBufferIndex, hHighLowerBuffer, INDICATOR_DATA); + PlotIndexSetDouble(hHighLowerBufferIndex, PLOT_EMPTY_VALUE, EMPTY_VALUE); + PlotIndexSetInteger(hHighLowerBufferIndex, PLOT_SHOW_DATA, canShowHHighLower); + PlotIndexSetInteger(hHighLowerBufferIndex, PLOT_DRAW_TYPE, hHighLowerDrawType); + + // + // Low ... + + // + // UPPER ... + bool canShowHLowUpper = showUpper && showLow && showHind; + ENUM_DRAW_TYPE hLowUpperDrawType = canShowHLowUpper ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(hLowUpperBufferIndex, hLowUpperBuffer, INDICATOR_DATA); + PlotIndexSetDouble(hLowUpperBufferIndex, PLOT_EMPTY_VALUE, EMPTY_VALUE); + PlotIndexSetInteger(hLowUpperBufferIndex, PLOT_SHOW_DATA, canShowHLowUpper); + PlotIndexSetInteger(hLowUpperBufferIndex, PLOT_DRAW_TYPE, hLowUpperDrawType); + + // + // LOWER ... + bool canShowHLowLower = showLower && showLow && showHind; + ENUM_DRAW_TYPE hLowLowerDrawType = canShowHLowLower ? DRAW_LINE : DRAW_NONE; + SetIndexBuffer(hLowLowerBufferIndex, hLowLowerBuffer, INDICATOR_DATA); + PlotIndexSetDouble(hLowLowerBufferIndex, PLOT_EMPTY_VALUE, EMPTY_VALUE); + PlotIndexSetInteger(hLowLowerBufferIndex, PLOT_SHOW_DATA, canShowHLowLower); + PlotIndexSetInteger(hLowLowerBufferIndex, PLOT_DRAW_TYPE, hLowLowerDrawType); +} + +// +// Calculations ... + +// +// Calculate Buffers ... +void CalculateBuffers( + int bar_index, // Selected Bar Index + const int prevCalculated, + const int ratesTotal, + const double &open[], + const double &high[], + const double &close[], + const double &low[], + const long &tickVolume[] // +) +{ + // + CalculateCycles( + bar_index, + prevCalculated, + ratesTotal, + open, + high, + close, + low, + tickVolume // + ); +} + +// +void CalculateCycles( + int bar_index, // Selected Bar Index + const int prevCalculated, + const int ratesTotal, + const double &open[], + const double &high[], + const double &close[], + const double &low[], + const long &tickVolume[] // +) +{ + // + // CURRENT ... + CalculateCycle( + // + bar_index, + prevCalculated, + ratesTotal, + // + open, + high, + close, + low, + tickVolume, + // + mCMarketLength, + // + cOpenUpperBuffer, + cOpenLowerBuffer, + cHighUpperBuffer, + cHighLowerBuffer, + cLowUpperBuffer, + cLowLowerBuffer, + cCloseUpperBuffer, + cCloseLowerBuffer // + ); + + // + // SHORT ... + CalculateCycle( + // + bar_index, + prevCalculated, + ratesTotal, + // + open, + high, + close, + low, + tickVolume, + // + mSMarketLength, + // + sOpenUpperBuffer, + sOpenLowerBuffer, + sHighUpperBuffer, + sHighLowerBuffer, + sLowUpperBuffer, + sLowLowerBuffer, + sCloseUpperBuffer, + sCloseLowerBuffer // + ); + + // + // MEDIUM ... + CalculateCycle( + // + bar_index, + prevCalculated, + ratesTotal, + // + open, + high, + close, + low, + tickVolume, + // + mMMarketLength, + // + mOpenUpperBuffer, + mOpenLowerBuffer, + mHighUpperBuffer, + mHighLowerBuffer, + mLowUpperBuffer, + mLowLowerBuffer, + mCloseUpperBuffer, + mCloseLowerBuffer // + ); + + // + // LONG ... + CalculateCycle( + // + bar_index, + prevCalculated, + ratesTotal, + // + open, + high, + close, + low, + tickVolume, + // + mLMarketLength, + // + lOpenUpperBuffer, + lOpenLowerBuffer, + lHighUpperBuffer, + lHighLowerBuffer, + lLowUpperBuffer, + lLowLowerBuffer, + lCloseUpperBuffer, + lCloseLowerBuffer // + ); + + // + // HIND ... + CalculateCycle( + // + bar_index, + prevCalculated, + ratesTotal, + // + open, + high, + close, + low, + tickVolume, + // + mHMarketLength, + // + hOpenUpperBuffer, + hOpenLowerBuffer, + hHighUpperBuffer, + hHighLowerBuffer, + hLowUpperBuffer, + hLowLowerBuffer, + hCloseUpperBuffer, + hCloseLowerBuffer // + ); +} + +// +void CalculateCycle( + int bar_index, // Selected Bar Index + const int prevCalculated, + const int ratesTotal, + // + const double &open[], + const double &high[], + const double &close[], + const double &low[], + const long &tickVolume[], + // + int _length, + // + double &_ouBuffer[], + double &_olBuffer[], + double &_huBuffer[], + double &_hlBuffer[], + double &_luBuffer[], + double &_llBuffer[], + double &_cuBuffer[], + double &_clBuffer[] // +) +{ + // + double iUpper = 0; + double iLower = 0; + + // + // OPEN ... + + // + iUpper = open[ArrayMaximum(open, bar_index - _length + 1, _length)]; + iLower = open[ArrayMinimum(open, bar_index - _length + 1, _length)]; + + // + _ouBuffer[bar_index] = iUpper; + _olBuffer[bar_index] = iLower; + + // + // HIGH ... + + // + iUpper = high[ArrayMaximum(high, bar_index - _length + 1, _length)]; + iLower = high[ArrayMinimum(high, bar_index - _length + 1, _length)]; + + // + _huBuffer[bar_index] = iUpper; + _hlBuffer[bar_index] = iLower; + + // + // LOW ... + + // + iUpper = low[ArrayMaximum(low, bar_index - _length + 1, _length)]; + iLower = low[ArrayMinimum(low, bar_index - _length + 1, _length)]; + + // + _luBuffer[bar_index] = iUpper; + _llBuffer[bar_index] = iLower; + + // + // CLOSE ... + + // + iUpper = close[ArrayMaximum(close, bar_index - _length + 1, _length)]; + iLower = close[ArrayMinimum(close, bar_index - _length + 1, _length)]; + + // + _cuBuffer[bar_index] = iUpper; + _clBuffer[bar_index] = iLower; +} + +// \ No newline at end of file diff --git a/BKPS/Indicators 14030517/x-saherelm.xchhk.ex5 b/BKPS/Indicators 14030517/x-saherelm.xchhk.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..7fb5d47f22a7c5cc951b1cb7640690570ea23d00 GIT binary patch literal 38556 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 Gj{OT=W~-3^ literal 0 HcmV?d00001 diff --git a/BKPS/Indicators 14030517/x-saherelm.xchhk.mq5 b/BKPS/Indicators 14030517/x-saherelm.xchhk.mq5 new file mode 100644 index 0000000..ff6fae8 --- /dev/null +++ b/BKPS/Indicators 14030517/x-saherelm.xchhk.mq5 @@ -0,0 +1,1070 @@ +/////////////////////////////////////////////////////// +// SaherElm IT Center MQL5 Indicator +// ------------------------------------------- +// Name: XCHHK +// Description: Smoothed HikenAshi Cycles ... +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://saherelm.ir" +#property version "1.00" +#property description "SaherElm XCHHK Indicator" +#property strict + +// +#define ShortName "XCHHK" + +// +// Includes Common Library ... +#include +#include "../Libraries/x-saherelm.common.lib.mq5" + +// +// Inputs ... + +// +input group "Market"; + +// +input int cSmoothingLength = 14; // Smoothing Length + +// +input group "Cycles"; + +// +input group "Short"; +input ENUM_X_PERIOD_METHOD scMethod = X_PERIOD_AUTO; // How to Find Period +input ENUM_TIMEFRAMES scPeriod = NULL; // Time Period + +// +input group "Medium"; +input ENUM_X_PERIOD_METHOD mcMethod = X_PERIOD_AUTO; // How to Find Period +input ENUM_TIMEFRAMES mcPeriod = NULL; // Time Period + +// +input group "Long"; +input ENUM_X_PERIOD_METHOD lcMethod = X_PERIOD_AUTO; // How to Find Period +input ENUM_TIMEFRAMES lcPeriod = NULL; // Time Period + +// +input group "Hind"; +input ENUM_X_PERIOD_METHOD hcMethod = X_PERIOD_AUTO; // How to Find Period +input ENUM_TIMEFRAMES hcPeriod = NULL; // Time Period + +// +// Presentation ... +input group "Presentation"; + +// +input bool ignoreShadows = false; // Ignore Bar Shadows + +// +input bool showCurrent = true; // Show Current Cycle +input bool showShort = true; // Show Short Cycle +input bool showMedium = true; // Show Medium Cycle +input bool showLong = true; // Show Long Cycle +input bool showHind = true; // Show Hind Cycle + +// +// Buffers ... + +// +#define hideColorIDX 0 +#define bullishColorIDX 1 +#define bearishColorIDX 2 + +// +#property indicator_chart_window + +// +#property indicator_buffers 29 +#property indicator_plots 25 + +// +// Current ... + +// +#define cOpenBufferIndex 0 +double cOpenBuffer[]; + +// +#define cHighBufferIndex 1 +double cHighBuffer[]; + +// +#define cLowBufferIndex 2 +double cLowBuffer[]; + +// +#define cCloseBufferIndex 3 +double cCloseBuffer[]; + +// +#define cColorBufferIndex 4 +double cColorBuffer[]; + +// +#define cBufferIndex 0 +#property indicator_label1 "C Open;C High;C Low;C Close" +#property indicator_type1 DRAW_COLOR_CANDLES +#property indicator_color1 CLR_NONE, clrAqua, clrMagenta + +// +// Short ... + +// +#define sOpenBufferIndex 5 +double sOpenBuffer[]; + +// +#define sHighBufferIndex 6 +double sHighBuffer[]; + +// +#define sLowBufferIndex 7 +double sLowBuffer[]; + +// +#define sCloseBufferIndex 8 +double sCloseBuffer[]; + +// +#define sColorBufferIndex 9 +double sColorBuffer[]; + +// +#define sBufferIndex 1 +#property indicator_label2 "S Open;S High;S Low;S Close" +#property indicator_type2 DRAW_COLOR_CANDLES +#property indicator_color2 CLR_NONE, clrAqua, clrMagenta + +// +// Medium ... + +// +#define mOpenBufferIndex 10 +double mOpenBuffer[]; + +// +#define mHighBufferIndex 11 +double mHighBuffer[]; + +// +#define mLowBufferIndex 12 +double mLowBuffer[]; + +// +#define mCloseBufferIndex 13 +double mCloseBuffer[]; + +// +#define mColorBufferIndex 14 +double mColorBuffer[]; + +// +#define mBufferIndex 2 +#property indicator_label3 "M Open;M High;M Low;M Close" +#property indicator_type3 DRAW_COLOR_CANDLES +#property indicator_color3 CLR_NONE, clrAqua, clrMagenta + +// +// Long ... + +// +#define lOpenBufferIndex 15 +double lOpenBuffer[]; + +// +#define lHighBufferIndex 16 +double lHighBuffer[]; + +// +#define lLowBufferIndex 17 +double lLowBuffer[]; + +// +#define lCloseBufferIndex 18 +double lCloseBuffer[]; + +// +#define lColorBufferIndex 19 +double lColorBuffer[]; + +// +#define lBufferIndex 3 +#property indicator_label4 "L Open;L High;L Low;L Close" +#property indicator_type4 DRAW_COLOR_CANDLES +#property indicator_color4 CLR_NONE, clrAqua, clrMagenta + +// +// Hind ... + +// +#define hOpenBufferIndex 20 +double hOpenBuffer[]; + +// +#define hHighBufferIndex 21 +double hHighBuffer[]; + +// +#define hLowBufferIndex 22 +double hLowBuffer[]; + +// +#define hCloseBufferIndex 23 +double hCloseBuffer[]; + +// +#define hColorBufferIndex 24 +double hColorBuffer[]; + +// +#define hBufferIndex 4 +#property indicator_label5 "H Open;H High;H Low;H Close" +#property indicator_type5 DRAW_COLOR_CANDLES +#property indicator_color5 CLR_NONE, clrAqua, clrMagenta + +// +// Data Buffers ... + +// +#define openBufferIndex 25 +double openBuffer[]; + +// +#define highBufferIndex 26 +double highBuffer[]; + +// +#define lowBufferIndex 27 +double lowBuffer[]; + +// +#define closeBufferIndex 28 +double closeBuffer[]; + +// +// Variables, Properties and etc ... + +// +int maxLength; + +// +// Current ... +int mCSMLength = cSmoothingLength; + +// +// Short ... +int mSCLength = 0; +int mSSMLength = 0; +ENUM_TIMEFRAMES mSCPeriod = NULL; + +// +// Medium ... +int mMCLength = 0; +int mMSMLength = 0; +ENUM_TIMEFRAMES mMCPeriod = NULL; + +// +// Long ... +int mLCLength = 0; +int mLSMLength = 0; +ENUM_TIMEFRAMES mLCPeriod = NULL; + +// +// Hind ... +int mHCLength = 0; +int mHSMLength = 0; +ENUM_TIMEFRAMES mHCPeriod = NULL; + +// +// Event Handlers ... + +// +// Initialization ... +int OnInit() +{ + // + // Validate Inputs ... + if (!ValidateInputs()) + { + return INIT_PARAMETERS_INCORRECT; + } + + // + if (!InitMarketCycles()) + { + return INIT_PARAMETERS_INCORRECT; + } + + // + // because in some cases we may have more than one input for + // calculation and we must prevent any calculation + // untill we pass the biggest input length, here we get max Input length + // and then wait until pass it ... + maxLength = ExtractMaxLengthOfInputs(); + + // + // Define Index Buffers ... + DefineBuffers(); + + // + // Set Indicator ShortName ... + SetIndicatorName(); + + // + // Init Succeed ... + return INIT_SUCCEEDED; +} + +// +// DeInitialization ... +void OnDeinit(const int reason) +{ + // + // REASON_PROGRAM 0 The EA has stopped working calling the ExpertRemove() function + // REASON_REMOVE 1 Program removed from a chart + // REASON_RECOMPILE 2 Program recompiled + // REASON_CHARTCHANGE 3 A symbol or a chart period is changed + // REASON_CHARTCLOSE 4 Chart closed + // REASON_PARAMETERS 5 Inputs changed by a user + // REASON_ACCOUNT 6 Another account has been activated or reconnection to the trade server has occurred due to changes in the account settings + // REASON_TEMPLATE 7 Another chart template applied + // REASON_INITFAILED 8 The OnInit() handler returned a non-zero value + // REASON_CLOSE 9 Terminal closed +} + +// +// Calculating what we want ... +int OnCalculate( + const int rates_total, // Total Bars on Chart ... + const int prev_calculated, // Total Calculated Bars on Charts ... + const datetime &time[], // History of Open Time ... + const double &open[], // History of Open Price ... + const double &high[], // History of High Price ... + const double &low[], // History of Low Price ... + const double &close[], // History of Close Price ... + const long &tick_volume[], // History of Tick Volumes on Bar ... + const long &volume[], // History of Trade Volumes ... + const int &spread[] // History of Spread Price ... +) +{ + // + // Prepare Buffers ... + ArraySetAsSeries(time, true); + ArraySetAsSeries(open, true); + ArraySetAsSeries(high, true); + ArraySetAsSeries(low, true); + ArraySetAsSeries(close, true); + ArraySetAsSeries(tick_volume, true); + ArraySetAsSeries(volume, true); + ArraySetAsSeries(spread, true); + + // + // this counts Available Bars ... + int limit; + + // + limit = (prev_calculated > rates_total || prev_calculated <= 0) ? rates_total : (rates_total - prev_calculated) + 1; + + // + // Main Loop ... + for (int i = limit - 1; i >= 0 && !IsStopped(); i--) + { + CalculateHK(i, prev_calculated, rates_total, open, high, close, low); + } + + // + CalculateCycles(rates_total, prev_calculated); + + // + return rates_total; +} + +// +// Functions ... + +// +// Validate Input Args for Initialization ... +bool ValidateInputs() +{ + // + bool result = false; + + // + result = + // + cSmoothingLength > 2 && + // + (IsValid(scMethod, scPeriod) && + IsValid(mcMethod, mcPeriod) && + IsValid(lcMethod, lcPeriod) && + IsValid(hcMethod, hcPeriod)) + // + ; + + // + return result; +} + +// +// Initialize Market Cycles ... +bool InitMarketCycles() +{ + // + bool result = false; + + // + // Current Cycle Initialization ... + + // + int cPeriodSeconds = PeriodSeconds(_Period); + + // + // Short Cycle Initialization ... + + // + // Find Cycle Period ... + if (scMethod == X_PERIOD_AUTO) + { + // + // Select Period ... + mSCPeriod = GetCyclePeriod( + X_MARKET_CYCLE_SHORT, + _Period // + ); + } + else + { + mSCPeriod = scPeriod; + } + + // + result = IsValid(mSCPeriod); + if (!result) + { + return result; + } + + // + mSCLength = PeriodSeconds(mSCPeriod) / cPeriodSeconds; + mSSMLength = mSCLength * mCSMLength; + result = mSCLength > 0; + if (!result) + { + return result; + } + + // + // Medium Cycle Initialization ... + + // + // Find Cycle Period ... + if (mcMethod == X_PERIOD_AUTO) + { + // + // Select Period ... + mMCPeriod = GetCyclePeriod( + X_MARKET_CYCLE_MEDIUM, + _Period // + ); + } + else + { + mMCPeriod = mcPeriod; + } + + // + result = IsValid(mMCPeriod); + if (!result) + { + return result; + } + + // + mMCLength = PeriodSeconds(mMCPeriod) / cPeriodSeconds; + mMSMLength = mMCLength * mCSMLength; + result = mMCLength > 0; + if (!result) + { + return result; + } + + // + // Long Cycle Initialization ... + + // + // Find Cycle Period ... + if (lcMethod == X_PERIOD_AUTO) + { + // + // Select Period ... + mLCPeriod = GetCyclePeriod( + X_MARKET_CYCLE_LONG, + _Period // + ); + } + else + { + mLCPeriod = lcPeriod; + } + + // + result = IsValid(mLCPeriod); + if (!result) + { + return result; + } + + // + mLCLength = PeriodSeconds(mLCPeriod) / cPeriodSeconds; + mLSMLength = mLCLength * mCSMLength; + result = mLCLength > 0; + if (!result) + { + return result; + } + + // + // Hind Cycle Initialization ... + + // + // Find Cycle Period ... + if (hcMethod == X_PERIOD_AUTO) + { + // + // Select Period ... + mHCPeriod = GetCyclePeriod( + X_MARKET_CYCLE_HIND, + _Period // + ); + } + else + { + mHCPeriod = hcPeriod; + } + + // + result = IsValid(mHCPeriod); + if (!result) + { + return result; + } + + // + mHCLength = PeriodSeconds(mHCPeriod) / cPeriodSeconds; + mHSMLength = mHCLength * mCSMLength; + result = mHCLength > 0; + if (!result) + { + return result; + } + + // + return result; +} + +// +// Retrieve all Exists Input Max Length ... +// use for Start Of Drawing ... +int ExtractMaxLengthOfInputs() +{ + // + int result = 0; + + // + result = MathMax(mCSMLength, mSSMLength); + result = MathMax(result, mMSMLength); + result = MathMax(result, mLSMLength); + result = MathMax(result, mHSMLength); + + // + return result; +} + +// +// Define Indexes and Styles ... +void DefineBuffers() +{ + // + // Data Buffers ... + + // + // Open ... + ArraySetAsSeries(openBuffer, true); + SetIndexBuffer(openBufferIndex, openBuffer, INDICATOR_CALCULATIONS); + + // + // High ... + ArraySetAsSeries(highBuffer, true); + SetIndexBuffer(highBufferIndex, highBuffer, INDICATOR_CALCULATIONS); + + // + // Low ... + ArraySetAsSeries(lowBuffer, true); + SetIndexBuffer(lowBufferIndex, lowBuffer, INDICATOR_CALCULATIONS); + + // + // Close ... + ArraySetAsSeries(closeBuffer, true); + SetIndexBuffer(closeBufferIndex, closeBuffer, INDICATOR_CALCULATIONS); + + // + // Current ... + + // + // Color ... + ArraySetAsSeries(cColorBuffer, true); + SetIndexBuffer(cColorBufferIndex, cColorBuffer, INDICATOR_COLOR_INDEX); + + // + // Set EMPTY_VALUE on Bar Buffer ... + PlotIndexSetDouble(cBufferIndex, PLOT_EMPTY_VALUE, 0.0); + + // + PlotIndexSetInteger(cBufferIndex, PLOT_SHOW_DATA, false); + PlotIndexSetInteger(cColorBufferIndex, PLOT_SHOW_DATA, false); + + // + // Open ... + ArraySetAsSeries(cOpenBuffer, true); + PlotIndexSetInteger(cOpenBufferIndex, PLOT_SHOW_DATA, false); + SetIndexBuffer(cOpenBufferIndex, cOpenBuffer, INDICATOR_DATA); + + // + // High ... + ArraySetAsSeries(cHighBuffer, true); + PlotIndexSetInteger(cHighBufferIndex, PLOT_SHOW_DATA, false); + SetIndexBuffer(cHighBufferIndex, cHighBuffer, INDICATOR_DATA); + + // + // Close ... + ArraySetAsSeries(cCloseBuffer, true); + PlotIndexSetInteger(cCloseBufferIndex, PLOT_SHOW_DATA, false); + SetIndexBuffer(cCloseBufferIndex, cCloseBuffer, INDICATOR_DATA); + + // + // Low ... + ArraySetAsSeries(cLowBuffer, true); + PlotIndexSetInteger(cLowBufferIndex, PLOT_SHOW_DATA, false); + SetIndexBuffer(cLowBufferIndex, cLowBuffer, INDICATOR_DATA); + + // + // Short ... + + // + // Color ... + ArraySetAsSeries(sColorBuffer, true); + SetIndexBuffer(sColorBufferIndex, sColorBuffer, INDICATOR_COLOR_INDEX); + + // + // Set EMPTY_VALUE on Bar Buffer ... + PlotIndexSetDouble(sBufferIndex, PLOT_EMPTY_VALUE, 0.0); + + // + PlotIndexSetInteger(sBufferIndex, PLOT_SHOW_DATA, false); + PlotIndexSetInteger(sColorBufferIndex, PLOT_SHOW_DATA, false); + + // + // Open ... + ArraySetAsSeries(sOpenBuffer, true); + PlotIndexSetInteger(sOpenBufferIndex, PLOT_SHOW_DATA, false); + SetIndexBuffer(sOpenBufferIndex, sOpenBuffer, INDICATOR_DATA); + + // + // High ... + ArraySetAsSeries(sHighBuffer, true); + PlotIndexSetInteger(sHighBufferIndex, PLOT_SHOW_DATA, false); + SetIndexBuffer(sHighBufferIndex, sHighBuffer, INDICATOR_DATA); + + // + // Close ... + ArraySetAsSeries(sCloseBuffer, true); + PlotIndexSetInteger(sCloseBufferIndex, PLOT_SHOW_DATA, false); + SetIndexBuffer(sCloseBufferIndex, sCloseBuffer, INDICATOR_DATA); + + // + // Low ... + ArraySetAsSeries(sLowBuffer, true); + PlotIndexSetInteger(sLowBufferIndex, PLOT_SHOW_DATA, false); + SetIndexBuffer(sLowBufferIndex, sLowBuffer, INDICATOR_DATA); + + // + // Medium ... + + // + // Color ... + ArraySetAsSeries(mColorBuffer, true); + SetIndexBuffer(mColorBufferIndex, mColorBuffer, INDICATOR_COLOR_INDEX); + + // + // Set EMPTY_VALUE on Bar Buffer ... + PlotIndexSetDouble(mBufferIndex, PLOT_EMPTY_VALUE, 0.0); + + // + PlotIndexSetInteger(mBufferIndex, PLOT_SHOW_DATA, false); + PlotIndexSetInteger(mColorBufferIndex, PLOT_SHOW_DATA, false); + + // + // Open ... + ArraySetAsSeries(mOpenBuffer, true); + PlotIndexSetInteger(mOpenBufferIndex, PLOT_SHOW_DATA, false); + SetIndexBuffer(mOpenBufferIndex, mOpenBuffer, INDICATOR_DATA); + + // + // High ... + ArraySetAsSeries(mHighBuffer, true); + PlotIndexSetInteger(mHighBufferIndex, PLOT_SHOW_DATA, false); + SetIndexBuffer(mHighBufferIndex, mHighBuffer, INDICATOR_DATA); + + // + // Close ... + ArraySetAsSeries(mCloseBuffer, true); + PlotIndexSetInteger(mCloseBufferIndex, PLOT_SHOW_DATA, false); + SetIndexBuffer(mCloseBufferIndex, mCloseBuffer, INDICATOR_DATA); + + // + // Low ... + ArraySetAsSeries(mLowBuffer, true); + PlotIndexSetInteger(mLowBufferIndex, PLOT_SHOW_DATA, false); + SetIndexBuffer(mLowBufferIndex, mLowBuffer, INDICATOR_DATA); + + // + // Long ... + + // + // Color ... + ArraySetAsSeries(lColorBuffer, true); + SetIndexBuffer(lColorBufferIndex, lColorBuffer, INDICATOR_COLOR_INDEX); + + // + // Set EMPTY_VALUE on Bar Buffer ... + PlotIndexSetDouble(lBufferIndex, PLOT_EMPTY_VALUE, 0.0); + + // + PlotIndexSetInteger(lBufferIndex, PLOT_SHOW_DATA, false); + PlotIndexSetInteger(lColorBufferIndex, PLOT_SHOW_DATA, false); + + // + // Open ... + ArraySetAsSeries(lOpenBuffer, true); + PlotIndexSetInteger(lOpenBufferIndex, PLOT_SHOW_DATA, false); + SetIndexBuffer(lOpenBufferIndex, lOpenBuffer, INDICATOR_DATA); + + // + // High ... + ArraySetAsSeries(lHighBuffer, true); + PlotIndexSetInteger(lHighBufferIndex, PLOT_SHOW_DATA, false); + SetIndexBuffer(lHighBufferIndex, lHighBuffer, INDICATOR_DATA); + + // + // Close ... + ArraySetAsSeries(lCloseBuffer, true); + PlotIndexSetInteger(lCloseBufferIndex, PLOT_SHOW_DATA, false); + SetIndexBuffer(lCloseBufferIndex, lCloseBuffer, INDICATOR_DATA); + + // + // Low ... + ArraySetAsSeries(lLowBuffer, true); + PlotIndexSetInteger(lLowBufferIndex, PLOT_SHOW_DATA, false); + SetIndexBuffer(lLowBufferIndex, lLowBuffer, INDICATOR_DATA); + + // + // Hind ... + + // + // Color ... + ArraySetAsSeries(hColorBuffer, true); + SetIndexBuffer(hColorBufferIndex, hColorBuffer, INDICATOR_COLOR_INDEX); + + // + // Set EMPTY_VALUE on Bar Buffer ... + PlotIndexSetDouble(hBufferIndex, PLOT_EMPTY_VALUE, 0.0); + + // + PlotIndexSetInteger(hBufferIndex, PLOT_SHOW_DATA, false); + PlotIndexSetInteger(hColorBufferIndex, PLOT_SHOW_DATA, false); + + // + // Open ... + ArraySetAsSeries(hOpenBuffer, true); + PlotIndexSetInteger(hOpenBufferIndex, PLOT_SHOW_DATA, false); + SetIndexBuffer(hOpenBufferIndex, hOpenBuffer, INDICATOR_DATA); + + // + // High ... + ArraySetAsSeries(hHighBuffer, true); + PlotIndexSetInteger(hHighBufferIndex, PLOT_SHOW_DATA, false); + SetIndexBuffer(hHighBufferIndex, hHighBuffer, INDICATOR_DATA); + + // + // Close ... + ArraySetAsSeries(hCloseBuffer, true); + PlotIndexSetInteger(hCloseBufferIndex, PLOT_SHOW_DATA, false); + SetIndexBuffer(hCloseBufferIndex, hCloseBuffer, INDICATOR_DATA); + + // + // Low ... + ArraySetAsSeries(hLowBuffer, true); + PlotIndexSetInteger(hLowBufferIndex, PLOT_SHOW_DATA, false); + SetIndexBuffer(hLowBufferIndex, hLowBuffer, INDICATOR_DATA); +} + +// +// Set Indicator Short Name and also we can define Buffers Labels ... +void SetIndicatorName() +{ + IndicatorSetString(INDICATOR_SHORTNAME, ShortName); +} + +// +// Calculations ... + +// +// Calculate Hiken Ashi ... +void CalculateHK( + int bar_index, // Selected Bar Index + const int prevCalculated, + const int ratesTotal, + const double &open[], + const double &high[], + const double &close[], + const double &low[] // +) +{ + // + double mPrevHKOpenValue; + double mPrevHKCloseValue; + + // + if (ArraySize(open) <= bar_index + 1) + { + // + mPrevHKOpenValue = 0; + mPrevHKCloseValue = 0; + } + else + { + // + mPrevHKOpenValue = openBuffer[bar_index + 1]; + mPrevHKCloseValue = closeBuffer[bar_index + 1]; + } + + // + double mHKOpenValue = (mPrevHKOpenValue + mPrevHKCloseValue) / 2; + double mHKCloseValue = (open[bar_index] + high[bar_index] + close[bar_index] + low[bar_index]) / 4; + double mHKHighValue = MathMax(high[bar_index], MathMax(mHKOpenValue, mHKCloseValue)); + double mHKLowValue = MathMin(low[bar_index], MathMin(mHKOpenValue, mHKCloseValue)); + + // + openBuffer[bar_index] = mHKOpenValue; + highBuffer[bar_index] = mHKHighValue; + lowBuffer[bar_index] = mHKLowValue; + closeBuffer[bar_index] = mHKCloseValue; +} + +// +void CalculateCycles( + int ratesTotal, // Total Bars + int prevCalculated // Calculated Bars +) +{ + // + // Current ... + CalculateCycle( + cOpenBuffer, + cHighBuffer, + cLowBuffer, + cCloseBuffer, + cColorBuffer, + mCSMLength, + showCurrent, + ratesTotal, + prevCalculated // + ); + + // + // Short ... + CalculateCycle( + sOpenBuffer, + sHighBuffer, + sLowBuffer, + sCloseBuffer, + sColorBuffer, + mSSMLength, + showShort, + ratesTotal, + prevCalculated // + ); + + // + // Medium ... + CalculateCycle( + mOpenBuffer, + mHighBuffer, + mLowBuffer, + mCloseBuffer, + mColorBuffer, + mMSMLength, + showMedium, + ratesTotal, + prevCalculated // + ); + + // + // Long ... + CalculateCycle( + lOpenBuffer, + lHighBuffer, + lLowBuffer, + lCloseBuffer, + lColorBuffer, + mLSMLength, + showLong, + ratesTotal, + prevCalculated // + ); + + // + // Hind ... + CalculateCycle( + hOpenBuffer, + hHighBuffer, + hLowBuffer, + hCloseBuffer, + hColorBuffer, + mHSMLength, + showHind, + ratesTotal, + prevCalculated // + ); +} + +// +void CalculateCycle( + double &open[], + double &high[], + double &low[], + double &close[], + double &clr[], // Color Index Buffer + int length, // Calculation Length + bool show, // Show or not + int ratesTotal, // Total Bars + int prevCalculated // Calculated Bars +) +{ + // + // Open ... + int calculatedSMOpens = ExponentialMAOnBuffer( + ratesTotal, + prevCalculated, + 0, + length, + openBuffer, + open // + ); + + // + // Close ... + int calculatedSMCloses = ExponentialMAOnBuffer( + ratesTotal, + prevCalculated, + 0, + length, + closeBuffer, + close // + ); + + // + int calculatedSMLows = 0; + int calculatedSMHighs = 0; + if (!ignoreShadows) + { + // + // High ... + calculatedSMHighs = ExponentialMAOnBuffer( + ratesTotal, + prevCalculated, + 0, + length, + highBuffer, + high // + ); + + // + // Low ... + calculatedSMLows = ExponentialMAOnBuffer( + ratesTotal, + prevCalculated, + 0, + length, + lowBuffer, + low // + ); + } + else + { + // + // High ... + calculatedSMHighs = ExponentialMAOnBuffer( + ratesTotal, + prevCalculated, + 0, + length, + openBuffer, + high // + ); + + // + // Low ... + calculatedSMLows = ExponentialMAOnBuffer( + ratesTotal, + prevCalculated, + 0, + length, + closeBuffer, + low // + ); + } + + // + // Find Calculated Items for Colors Calculations ... + int mNumberOfItems = MathMin(calculatedSMOpens, calculatedSMHighs); + mNumberOfItems = MathMin(mNumberOfItems, calculatedSMLows); + mNumberOfItems = MathMin(mNumberOfItems, calculatedSMCloses); + + // + // Create a Loop for Color of Candles ... + for (int i = 0; i < mNumberOfItems; i++) + { + // + bool isBearish = + // + open[i] > close[i] + // + ; + + // + if (show) + { + // + clr[i] = isBearish + ? bearishColorIDX + : bullishColorIDX; + } + else + { + // + clr[i] = hideColorIDX; + } + } +} + +// \ No newline at end of file diff --git a/BKPS/Indicators 14030517/x-saherelm.xchich.ex5 b/BKPS/Indicators 14030517/x-saherelm.xchich.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..ca1469ab523fe2f824ca3c7649fbed6e6dae7cc2 GIT binary patch literal 50888 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%0A|Ei_;^ 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 LMX`4#^7j7$E}_c` literal 0 HcmV?d00001 diff --git a/BKPS/Indicators 14030517/x-saherelm.xpv.mq5 b/BKPS/Indicators 14030517/x-saherelm.xpv.mq5 new file mode 100644 index 0000000..e15924d --- /dev/null +++ b/BKPS/Indicators 14030517/x-saherelm.xpv.mq5 @@ -0,0 +1,1289 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL5 Indicator +// ------------------------------------------------- +// Name: XPV +// Description: Peaks and Vales ... +// +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://saherelm.ir" +#property version "1.00" +#property description "SaherElm XPV Indicator" +#property strict + +// +// Definitions ... + +// +#define ShortName "XPV" + +// +// Includes Common Library ... +#include "../Libraries/x-saherelm.common.lib.mq5" + +// +// Inputs ... + +// +input group "Makret Cycles"; + +// +input group "Short"; +input ENUM_X_PERIOD_METHOD scMethod = X_PERIOD_AUTO; // How to Find Period +input ENUM_TIMEFRAMES scPeriod = NULL; // Time Period + +// +input group "Medium"; +input ENUM_X_PERIOD_METHOD mcMethod = X_PERIOD_AUTO; // How to Find Period +input ENUM_TIMEFRAMES mcPeriod = NULL; // Time Period + +// +input group "Long"; +input ENUM_X_PERIOD_METHOD lcMethod = X_PERIOD_AUTO; // How to Find Period +input ENUM_TIMEFRAMES lcPeriod = NULL; // Time Period + +// +input group "Hind"; +input ENUM_X_PERIOD_METHOD hcMethod = X_PERIOD_AUTO; // How to Find Period +input ENUM_TIMEFRAMES hcPeriod = NULL; // Time Period + +// +input group "Fibonacci"; +input double fiboLevel1 = 0.236; // Fibio 1st Level +input double fiboLevel2 = 0.382; // Fibio 2st Level +input double fiboLevel3 = 0.5; // Fibio 3rd Level +input double fiboLevel4 = 0.618; // Fibio 4th Level +input double fiboLevel5 = 0.764; // Fibio 5th Level + +// +input group "Boundary Detection Modes"; +input ENUM_SERIESMODE hhMode = MODE_HIGH; // Highest High Calculation Method +input ENUM_SERIESMODE llMode = MODE_LOW; // Lowest Low Calculation Method + +// +input group "Presentation"; +input bool showPeaksAndVales = true; // Show Peaks and Vales +input bool showLevels = false; // Show Levels +input bool showConsolidations = false; // Show Consolidations +input bool showFibo1Levels = false; // Show Fibo 1st Level +input bool showFibo2Levels = false; // Show Fibo 2nd Level +input bool showFibo3Levels = false; // Show Fibo 3rd Level +input bool showFibo4Levels = false; // Show Fibo 4th Level +input bool showFibo5Levels = false; // Show Fibo 5th Level + +// +// Buffers ... + +// +#property indicator_chart_window + +// +#property indicator_buffers 32 +#property indicator_plots 32 + +// +// PEAKS ... + +// +#define peaksBufferIndex 0 +double peaksBuffer[]; + +// +#property indicator_label1 "XPV PEAKS" +#property indicator_type1 DRAW_ARROW +#property indicator_color1 clrAqua +#property indicator_width1 1 + +// +// VALES ... + +// +#define valesBufferIndex 1 +double valesBuffer[]; + +// +#property indicator_label2 "XPV VALES" +#property indicator_type2 DRAW_ARROW +#property indicator_color2 clrMagenta +#property indicator_width2 1 + +// +#define rBufferIndex 2 +double rBuffer[]; + +// +#define rColorBufferIndex 3 +double rColorBuffer[]; + +// +#property indicator_label3 "XPV R" +#property indicator_type3 DRAW_COLOR_LINE +#property indicator_color3 CLR_NONE, clrAqua +#property indicator_style3 STYLE_DOT +#property indicator_width3 1 + +// +#define sBufferIndex 4 +#define sBufferPlotIndex 3 +double sBuffer[]; + +// +#define sColorBufferIndex 5 +double sColorBuffer[]; + +// +#property indicator_label4 "XPV S" +#property indicator_type4 DRAW_COLOR_LINE +#property indicator_color4 CLR_NONE, clrMagenta +#property indicator_style4 STYLE_DOT +#property indicator_width4 1 + +// +// FIBBO Level 1 ... + +// +#define fl1BufferIndex 6 +#define fl1BufferPlotIndex 4 +double fl1Buffer[]; + +// +#define fl1ColorBufferIndex 7 +double fl1ColorBuffer[]; + +// +#property indicator_label5 "XPV FL1" +#property indicator_type5 DRAW_COLOR_LINE +#property indicator_color5 CLR_NONE, clrGold +#property indicator_style5 STYLE_DASHDOTDOT +#property indicator_width5 1 + +// +// FIBBO Level 2 ... + +// +#define fl2BufferIndex 8 +#define fl2BufferPlotIndex 5 +double fl2Buffer[]; + +// +#define fl2ColorBufferIndex 9 +double fl2ColorBuffer[]; + +// +#property indicator_label6 "XPV FL2" +#property indicator_type6 DRAW_COLOR_LINE +#property indicator_color6 CLR_NONE, clrGold +#property indicator_style6 STYLE_DASHDOTDOT +#property indicator_width6 1 + +// +// FIBBO Level 3 ... + +// +#define fl3BufferIndex 10 +#define fl3BufferPlotIndex 6 +double fl3Buffer[]; + +// +#define fl3ColorBufferIndex 11 +double fl3ColorBuffer[]; + +// +#property indicator_label7 "XPV FL3" +#property indicator_type7 DRAW_COLOR_LINE +#property indicator_color7 CLR_NONE, clrGold +#property indicator_style7 STYLE_DASHDOTDOT +#property indicator_width7 1 + +// +// FIBBO Level 4 ... + +// +#define fl4BufferIndex 12 +#define fl4BufferPlotIndex 7 +double fl4Buffer[]; + +// +#define fl4ColorBufferIndex 13 +double fl4ColorBuffer[]; + +// +#property indicator_label8 "XPV FL4" +#property indicator_type8 DRAW_COLOR_LINE +#property indicator_color8 CLR_NONE, clrGold +#property indicator_style8 STYLE_DASHDOTDOT +#property indicator_width8 1 + +// +// FIBBO Level 5 ... + +// +#define fl5BufferIndex 14 +#define fl5BufferPlotIndex 8 +double fl5Buffer[]; + +// +#define fl5ColorBufferIndex 15 +double fl5ColorBuffer[]; + +// +#property indicator_label9 "XPV FL5" +#property indicator_type9 DRAW_COLOR_LINE +#property indicator_color9 CLR_NONE, clrGold +#property indicator_style9 STYLE_DASHDOTDOT +#property indicator_width9 1 + +// +// LEVELS ... + +// +#define scHHBufferIndex 16 +#define scHHBufferPlotIndex 9 +double scHHBuffer[]; + +// +#define scHHColorBufferIndex 17 +double scHHColorBuffer[]; + +// +#property indicator_label10 "XPV SHH" +#property indicator_type10 DRAW_COLOR_LINE +#property indicator_color10 CLR_NONE, clrLightGray, clrAqua, clrMagenta +#property indicator_style10 STYLE_DOT +#property indicator_width10 1 + +#define scLLBufferIndex 18 +#define scLLBufferPlotIndex 10 +double scLLBuffer[]; + +// +#define scLLColorBufferIndex 19 +double scLLColorBuffer[]; + +// +#property indicator_label11 "XPV SLL" +#property indicator_type11 DRAW_COLOR_LINE +#property indicator_color11 CLR_NONE, clrLightGray, clrAqua, clrMagenta +#property indicator_style11 STYLE_DOT +#property indicator_width11 1 + +// +#define mcHHBufferIndex 20 +#define mcHHBufferPlotIndex 11 +double mcHHBuffer[]; + +// +#define mcHHColorBufferIndex 21 +double mcHHColorBuffer[]; + +// +#property indicator_label12 "XPV MHH" +#property indicator_type12 DRAW_COLOR_LINE +#property indicator_color12 CLR_NONE, clrLightGray, clrAqua, clrMagenta +#property indicator_style12 STYLE_DOT +#property indicator_width12 1 + +// +#define mcLLBufferIndex 22 +#define mcLLBufferPlotIndex 12 +double mcLLBuffer[]; + +// +#define mcLLColorBufferIndex 23 +double mcLLColorBuffer[]; + +// +#property indicator_label13 "XPV MLL" +#property indicator_type13 DRAW_COLOR_LINE +#property indicator_color13 CLR_NONE, clrLightGray, clrAqua, clrMagenta +#property indicator_style13 STYLE_DOT +#property indicator_width13 1 + +// +#define lcHHBufferIndex 24 +#define lcHHBufferPlotIndex 13 +double lcHHBuffer[]; + +// +#define lcHHColorBufferIndex 25 +double lcHHColorBuffer[]; + +// +#property indicator_label14 "XPV LHH" +#property indicator_type14 DRAW_COLOR_LINE +#property indicator_color14 CLR_NONE, clrLightGray, clrAqua, clrMagenta +#property indicator_style14 STYLE_DOT +#property indicator_width14 1 + +// +#define lcLLBufferIndex 26 +#define lcLLBufferPlotIndex 14 +double lcLLBuffer[]; + +// +#define lcLLColorBufferIndex 27 +double lcLLColorBuffer[]; + +// +#property indicator_label15 "XPV LLL" +#property indicator_type15 DRAW_COLOR_LINE +#property indicator_color15 CLR_NONE, clrLightGray, clrAqua, clrMagenta +#property indicator_style15 STYLE_DOT +#property indicator_width15 1 + +// +#define hcHHBufferIndex 28 +#define hcHHBufferPlotIndex 15 +double hcHHBuffer[]; + +// +#define hcHHColorBufferIndex 29 +double hcHHColorBuffer[]; + +// +#property indicator_label16 "XPV HHH" +#property indicator_type16 DRAW_COLOR_LINE +#property indicator_color16 CLR_NONE, clrLightGray, clrAqua, clrMagenta +#property indicator_style16 STYLE_DOT +#property indicator_width16 1 + +// +#define hcLLBufferIndex 30 +#define hcLLBufferPlotIndex 16 +double hcLLBuffer[]; + +// +#define hcLLColorBufferIndex 31 +double hcLLColorBuffer[]; + +// +#property indicator_label17 "XPV HLL" +#property indicator_type17 DRAW_COLOR_LINE +#property indicator_color17 CLR_NONE, clrLightGray, clrAqua, clrMagenta +#property indicator_style17 STYLE_DOT +#property indicator_width17 1 + +// +// Variables, Properties and etc ... + +// +int maxLength; + +// +double mHideColorIDX = 0; + +// +// XMarketCycle sc; +int mSCLength = 0; +double mLastSCHH = 0; +double mLastSCLL = 0; +ENUM_TIMEFRAMES mSCPeriod = NULL; + +// +// XMarketCycle mc; +int mMCLength = 0; +double mLastMCHH = 0; +double mLastMCLL = 0; +ENUM_TIMEFRAMES mMCPeriod = NULL; + +// +// XMarketCycle lc; +int mLCLength = 0; +double mLastLCHH = 0; +double mLastLCLL = 0; +ENUM_TIMEFRAMES mLCPeriod = NULL; + +// +// XMarketCycle hc; +int mHCLength = 0; +double mLastHCHH = 0; +double mLastHCLL = 0; +ENUM_TIMEFRAMES mHCPeriod = NULL; + +// +double lastPeak = 0; +double lastVale = 0; + +// +// Event Handlers ... + +// +// Initialization ... +int OnInit() +{ + // + // Validate Inputs ... + if (!ValidateInputs()) + { + return INIT_PARAMETERS_INCORRECT; + } + + // + if (!InitMarketCycles()) + { + return INIT_PARAMETERS_INCORRECT; + } + + // + // because in some cases we may have more than one input for + // calculation and we must prevent any calculation + // untill we pass the biggest input length, here we get max Input length + // and then wait until pass it ... + maxLength = ExtractMaxLengthOfInputs(); + + // + // Define Index Buffers ... + DefineBuffers(); + + // + // Set Indicator ShortName ... + SetIndicatorName(); + + // + // Init Succeed ... + return INIT_SUCCEEDED; +} + +// +// DeInitialization ... +void OnDeinit(const int reason) +{ + // + // REASON_PROGRAM 0 The EA has stopped working calling the ExpertRemove() function + // REASON_REMOVE 1 Program removed from a chart + // REASON_RECOMPILE 2 Program recompiled + // REASON_CHARTCHANGE 3 A symbol or a chart period is changed + // REASON_CHARTCLOSE 4 Chart closed + // REASON_PARAMETERS 5 Inputs changed by a user + // REASON_ACCOUNT 6 Another account has been activated or reconnection to the trade server has occurred due to changes in the account settings + // REASON_TEMPLATE 7 Another chart template applied + // REASON_INITFAILED 8 The OnInit() handler returned a non-zero value + // REASON_CLOSE 9 Terminal closed +} + +// +// Calculating what we want ... +int OnCalculate( + const int rates_total, // Total Bars on Chart ... + const int prev_calculated, // Total Calculated Bars on Charts ... + const datetime &time[], // History of Open Time ... + const double &open[], // History of Open Price ... + const double &high[], // History of High Price ... + const double &low[], // History of Low Price ... + const double &close[], // History of Close Price ... + const long &tick_volume[], // History of Tick Volumes on Bar ... + const long &volume[], // History of Trade Volumes ... + const int &spread[] // History of Spread Price ... + // +) +{ + // + // Prepare Buffers ... + ArraySetAsSeries(time, true); + ArraySetAsSeries(open, true); + ArraySetAsSeries(high, true); + ArraySetAsSeries(low, true); + ArraySetAsSeries(close, true); + ArraySetAsSeries(tick_volume, true); + ArraySetAsSeries(volume, true); + ArraySetAsSeries(spread, true); + + // + // this counts Available Bars ... + int limit; + + // + limit = (prev_calculated > rates_total || prev_calculated <= 0) ? rates_total : (rates_total - prev_calculated) + 1; + + // + // Main Loop ... + for (int i = limit - 1; i >= 0 && !IsStopped(); i--) + { + // + CalculateBuffers(i); + } + + // + return rates_total; +} + +// +// Functions ... + +// +// Validate Input Args for Initialization ... +bool ValidateInputs() +{ + // + bool result = + // + (IsValid(scMethod, scPeriod) && + IsValid(mcMethod, mcPeriod) && + IsValid(lcMethod, lcPeriod) && + IsValid(hcMethod, hcPeriod)) + // + ; + + // + return result; +} + +// +// Retrieve all Exists Input Max Length ... +// use for Start Of Drawing ... +int ExtractMaxLengthOfInputs() +{ + // + int result = 0; + + // + result = MathMax(mSCLength, mMCLength); + result = MathMax(result, mLCLength); + result = MathMax(result, mHCLength); + + // + return result; +} + +// +// Define Indexes and Styles ... +void DefineBuffers() +{ + // + // PEAKS and VALES ... + ENUM_DRAW_TYPE pvDrawType = showPeaksAndVales ? DRAW_ARROW : DRAW_NONE; + + // + // PEAKS ... + ArraySetAsSeries(peaksBuffer, true); + SetIndexBuffer(peaksBufferIndex, peaksBuffer, INDICATOR_DATA); + PlotIndexSetInteger(peaksBufferIndex, PLOT_ARROW, 225); + PlotIndexSetDouble(peaksBufferIndex, PLOT_EMPTY_VALUE, 0); + + // + PlotIndexSetInteger(peaksBufferIndex, PLOT_SHOW_DATA, showPeaksAndVales); + PlotIndexSetInteger(peaksBufferIndex, PLOT_DRAW_TYPE, pvDrawType); + + // + // VALES ... + ArraySetAsSeries(valesBuffer, true); + SetIndexBuffer(valesBufferIndex, valesBuffer, INDICATOR_DATA); + PlotIndexSetInteger(valesBufferIndex, PLOT_ARROW, 225); + PlotIndexSetDouble(valesBufferIndex, PLOT_EMPTY_VALUE, 0); + + // + PlotIndexSetInteger(valesBufferIndex, PLOT_SHOW_DATA, showPeaksAndVales); + PlotIndexSetInteger(valesBufferIndex, PLOT_DRAW_TYPE, pvDrawType); + + // + // SUPPORT and RESISTANCE ... + // + + // + // RESISTANCE ... + ArraySetAsSeries(rBuffer, true); + SetIndexBuffer(rBufferIndex, rBuffer, INDICATOR_DATA); + PlotIndexSetInteger(rBufferIndex, PLOT_SHOW_DATA, false); + PlotIndexSetInteger(rBufferIndex, PLOT_DRAW_BEGIN, maxLength); + + // + // RESISTANCE Color ... + ArraySetAsSeries(rColorBuffer, true); + SetIndexBuffer(rColorBufferIndex, rColorBuffer, INDICATOR_COLOR_INDEX); + + // + // SUPPORT ... + ArraySetAsSeries(sBuffer, true); + SetIndexBuffer(sBufferIndex, sBuffer, INDICATOR_DATA); + PlotIndexSetInteger(sBufferPlotIndex, PLOT_DRAW_BEGIN, maxLength); + PlotIndexSetInteger(sBufferPlotIndex, PLOT_SHOW_DATA, false); + + // + // SUPPORT Color ... + ArraySetAsSeries(sColorBuffer, true); + SetIndexBuffer(sColorBufferIndex, sColorBuffer, INDICATOR_COLOR_INDEX); + + // + // FIBBO Levels ... + + // + // LEVEL 1 ... + + // + // Buffer ... + ArraySetAsSeries(fl1Buffer, true); + SetIndexBuffer(fl1BufferIndex, fl1Buffer, INDICATOR_DATA); + PlotIndexSetInteger(fl1BufferPlotIndex, PLOT_DRAW_BEGIN, maxLength); + PlotIndexSetInteger(fl1BufferPlotIndex, PLOT_SHOW_DATA, showFibo1Levels); + + // + // Color ... + ArraySetAsSeries(fl1ColorBuffer, true); + SetIndexBuffer(fl1ColorBufferIndex, fl1ColorBuffer, INDICATOR_COLOR_INDEX); + + // + // LEVEL 2 ... + + // + // Buffer ... + ArraySetAsSeries(fl2Buffer, true); + SetIndexBuffer(fl2BufferIndex, fl2Buffer, INDICATOR_DATA); + PlotIndexSetInteger(fl2BufferPlotIndex, PLOT_DRAW_BEGIN, maxLength); + PlotIndexSetInteger(fl2BufferPlotIndex, PLOT_SHOW_DATA, showFibo2Levels); + + // + // Color ... + ArraySetAsSeries(fl2ColorBuffer, true); + SetIndexBuffer(fl2ColorBufferIndex, fl2ColorBuffer, INDICATOR_COLOR_INDEX); + + // + // LEVEL 3 ... + + // + // Buffer ... + ArraySetAsSeries(fl3Buffer, true); + SetIndexBuffer(fl3BufferIndex, fl3Buffer, INDICATOR_DATA); + PlotIndexSetInteger(fl3BufferPlotIndex, PLOT_DRAW_BEGIN, maxLength); + PlotIndexSetInteger(fl3BufferPlotIndex, PLOT_SHOW_DATA, showFibo3Levels); + + // + // Color ... + ArraySetAsSeries(fl3ColorBuffer, true); + SetIndexBuffer(fl3ColorBufferIndex, fl3ColorBuffer, INDICATOR_COLOR_INDEX); + + // + // LEVEL 4 ... + + // + // Buffer ... + ArraySetAsSeries(fl4Buffer, true); + SetIndexBuffer(fl4BufferIndex, fl4Buffer, INDICATOR_DATA); + PlotIndexSetInteger(fl4BufferPlotIndex, PLOT_DRAW_BEGIN, maxLength); + PlotIndexSetInteger(fl4BufferPlotIndex, PLOT_SHOW_DATA, showFibo4Levels); + + // + // Color ... + ArraySetAsSeries(fl4ColorBuffer, true); + SetIndexBuffer(fl4ColorBufferIndex, fl4ColorBuffer, INDICATOR_COLOR_INDEX); + + // + // LEVEL 5 ... + + // + // Buffer ... + ArraySetAsSeries(fl5Buffer, true); + SetIndexBuffer(fl5BufferIndex, fl5Buffer, INDICATOR_DATA); + PlotIndexSetInteger(fl5BufferPlotIndex, PLOT_DRAW_BEGIN, maxLength); + PlotIndexSetInteger(fl5BufferPlotIndex, PLOT_SHOW_DATA, showFibo5Levels); + + // + // Color ... + ArraySetAsSeries(fl5ColorBuffer, true); + SetIndexBuffer(fl5ColorBufferIndex, fl5ColorBuffer, INDICATOR_COLOR_INDEX); + + // + // SHORT Buffers ... + + // + // HIGH ... + ArraySetAsSeries(scHHBuffer, true); + SetIndexBuffer(scHHBufferIndex, scHHBuffer, INDICATOR_DATA); + + // + PlotIndexSetInteger(scHHBufferPlotIndex, PLOT_DRAW_BEGIN, maxLength); + PlotIndexSetInteger(scHHBufferPlotIndex, PLOT_SHOW_DATA, showLevels); + + // + ArraySetAsSeries(scHHColorBuffer, true); + SetIndexBuffer(scHHColorBufferIndex, scHHColorBuffer, INDICATOR_COLOR_INDEX); + + // + // LOW ... + ArraySetAsSeries(scLLBuffer, true); + SetIndexBuffer(scLLBufferIndex, scLLBuffer, INDICATOR_DATA); + + // + PlotIndexSetInteger(scLLBufferPlotIndex, PLOT_DRAW_BEGIN, maxLength); + PlotIndexSetInteger(scLLBufferPlotIndex, PLOT_SHOW_DATA, showLevels); + + // + ArraySetAsSeries(scLLColorBuffer, true); + SetIndexBuffer(scLLColorBufferIndex, scLLColorBuffer, INDICATOR_COLOR_INDEX); + + // + // MEDIUM Buffer ... + + // + // HIGH ... + ArraySetAsSeries(mcHHBuffer, true); + SetIndexBuffer(mcHHBufferIndex, mcHHBuffer, INDICATOR_DATA); + + // + PlotIndexSetInteger(mcHHBufferPlotIndex, PLOT_DRAW_BEGIN, maxLength); + PlotIndexSetInteger(mcHHBufferPlotIndex, PLOT_SHOW_DATA, showLevels); + + // + ArraySetAsSeries(mcHHColorBuffer, true); + SetIndexBuffer(mcHHColorBufferIndex, mcHHColorBuffer, INDICATOR_COLOR_INDEX); + + // + // LOW ... + ArraySetAsSeries(mcLLBuffer, true); + SetIndexBuffer(mcLLBufferIndex, mcLLBuffer, INDICATOR_DATA); + + // + PlotIndexSetInteger(mcLLBufferPlotIndex, PLOT_DRAW_BEGIN, maxLength); + PlotIndexSetInteger(mcLLBufferPlotIndex, PLOT_SHOW_DATA, showLevels); + + // + ArraySetAsSeries(mcLLColorBuffer, true); + SetIndexBuffer(mcLLColorBufferIndex, mcLLColorBuffer, INDICATOR_COLOR_INDEX); + + // + // LONG Buffer ... + + // + // HIGH ... + ArraySetAsSeries(lcHHBuffer, true); + SetIndexBuffer(lcHHBufferIndex, lcHHBuffer, INDICATOR_DATA); + + // + PlotIndexSetInteger(lcHHBufferPlotIndex, PLOT_DRAW_BEGIN, maxLength); + PlotIndexSetInteger(lcHHBufferPlotIndex, PLOT_SHOW_DATA, showLevels); + + // + ArraySetAsSeries(lcHHColorBuffer, true); + SetIndexBuffer(lcHHColorBufferIndex, lcHHColorBuffer, INDICATOR_COLOR_INDEX); + + // + // LOW ... + ArraySetAsSeries(lcLLBuffer, true); + SetIndexBuffer(lcLLBufferIndex, lcLLBuffer, INDICATOR_DATA); + + // + PlotIndexSetInteger(lcLLBufferPlotIndex, PLOT_DRAW_BEGIN, maxLength); + PlotIndexSetInteger(lcLLBufferPlotIndex, PLOT_SHOW_DATA, showLevels); + + // + ArraySetAsSeries(lcLLColorBuffer, true); + SetIndexBuffer(lcLLColorBufferIndex, lcLLColorBuffer, INDICATOR_COLOR_INDEX); + + // + // HIND Buffer ... + + // + // HIGH ... + ArraySetAsSeries(hcHHBuffer, true); + SetIndexBuffer(hcHHBufferIndex, hcHHBuffer, INDICATOR_DATA); + + // + PlotIndexSetInteger(hcHHBufferPlotIndex, PLOT_DRAW_BEGIN, maxLength); + PlotIndexSetInteger(hcHHBufferPlotIndex, PLOT_SHOW_DATA, showLevels); + + // + ArraySetAsSeries(hcHHColorBuffer, true); + SetIndexBuffer(hcHHColorBufferIndex, hcHHColorBuffer, INDICATOR_COLOR_INDEX); + + // + // LOW ... + ArraySetAsSeries(hcLLBuffer, true); + SetIndexBuffer(hcLLBufferIndex, hcLLBuffer, INDICATOR_DATA); + + // + PlotIndexSetInteger(hcLLBufferPlotIndex, PLOT_DRAW_BEGIN, maxLength); + PlotIndexSetInteger(hcLLBufferPlotIndex, PLOT_SHOW_DATA, showLevels); + + // + ArraySetAsSeries(hcLLColorBuffer, true); + SetIndexBuffer(hcLLColorBufferIndex, hcLLColorBuffer, INDICATOR_COLOR_INDEX); +} + +// +// Set Indicator Short Name and also we can define Buffers Labels ... +void SetIndicatorName() +{ + IndicatorSetString(INDICATOR_SHORTNAME, ShortName); +} + +// +// Calculate Buffers ... +void CalculateBuffers( + int bar_index // Selected Bar Index +) +{ + // + // Calculate Cycles ... + CalculateCycles(bar_index); + + // + // Calculate Peaks and Vales ... + CalculatePeaksAndVales(bar_index); + + // + // Calculate Fibonnaci ... + CalculateFibonacci(bar_index); +} + +// +// Custom ... + +// +// Initial Market Cycles ... +bool InitMarketCycles() +{ + // + bool result = false; + + // + int cPeriodSeconds = PeriodSeconds(_Period); + + // + // Find Cycle Period ... + if (scMethod == X_PERIOD_AUTO) + { + // + // Select Period ... + mSCPeriod = GetCyclePeriod( + X_MARKET_CYCLE_SHORT, + _Period // + ); + } + else + { + mSCPeriod = scPeriod; + } + + // + if (IsValid(mSCPeriod)) + { + mSCLength = PeriodSeconds(mSCPeriod) / cPeriodSeconds; + } + + // + // Find Cycle Period ... + if (mcMethod == X_PERIOD_AUTO) + { + // + // Select Period ... + mMCPeriod = GetCyclePeriod( + X_MARKET_CYCLE_MEDIUM, + _Period // + ); + } + else + { + mMCPeriod = mcPeriod; + } + + // + if (IsValid(mMCPeriod)) + { + mMCLength = PeriodSeconds(mMCPeriod) / cPeriodSeconds; + } + + // + // Find Cycle Period ... + if (lcMethod == X_PERIOD_AUTO) + { + // + // Select Period ... + mLCPeriod = GetCyclePeriod( + X_MARKET_CYCLE_LONG, + _Period // + ); + } + else + { + mLCPeriod = lcPeriod; + } + + // + if (IsValid(mLCPeriod)) + { + mLCLength = PeriodSeconds(mLCPeriod) / cPeriodSeconds; + } + + // + // Find Cycle Period ... + if (hcMethod == X_PERIOD_AUTO) + { + // + // Select Period ... + mHCPeriod = GetCyclePeriod( + X_MARKET_CYCLE_HIND, + _Period // + ); + } + else + { + mHCPeriod = hcPeriod; + } + + // + if (IsValid(mHCPeriod)) + { + mHCLength = PeriodSeconds(mHCPeriod) / cPeriodSeconds; + } + + // + result = mSCLength > 0 && + mMCLength > mSCLength && + mLCLength > mMCLength && + mHCLength > mLCLength; + + // + return result; +} + +// +// Calculate Specified Cycles HH and LL ... +void CalculateCycle( + int barIndex, + ENUM_X_MARKET_CYCLES cycle, + double &lastHH, + double &hhBuffer[], + double &hhColorBuffer[], + double &lastLL, + double &llBuffer[], + double &llColorBuffer[] // +) +{ + // + XOHCL bar; + bar.Init( + _Symbol, + _Period, + barIndex + // + ); + + // + int mLength = 0; + switch (cycle) + { + // + case X_MARKET_CYCLE_SHORT: + mLength = mSCLength; + break; + + // + case X_MARKET_CYCLE_MEDIUM: + mLength = mMCLength; + break; + + // + case X_MARKET_CYCLE_LONG: + mLength = mLCLength; + break; + + // + case X_MARKET_CYCLE_HIND: + mLength = mHCLength; + break; + } + + // + if (mLength <= 0) + { + return; + } + + // + double hhValue = bar.FindHighest( + mLength, + hhMode + // + ); + hhBuffer[barIndex] = hhValue; + + // + double hhColorIDX = + !showLevels + ? mHideColorIDX + : (hhValue == lastHH) + ? !showConsolidations + ? mHideColorIDX + : 1 + : hhValue > lastHH + ? 2 + : hhValue < lastHH + ? 3 + : mHideColorIDX; + hhColorBuffer[barIndex] = hhColorIDX; + + // + lastHH = hhValue; + + // + double llValue = bar.FindLowest( + mLength, + llMode + // + ); + llBuffer[barIndex] = llValue; + + // + double llColorIDX = + !showLevels + ? mHideColorIDX + : (llValue == lastLL) + ? !showConsolidations + ? mHideColorIDX + : 1 + : llValue > lastLL + ? 2 + : llValue < lastLL + ? 3 + : mHideColorIDX; + llColorBuffer[barIndex] = llColorIDX; + + // + lastLL = llValue; +} + +// +// Calculate Cycles Up and Down Boundaries ... +void CalculateCycles( + int barIndex // Bar Index +) +{ + // + // Short ... + CalculateCycle( + barIndex, + X_MARKET_CYCLE_SHORT, + // + mLastSCHH, + scHHBuffer, + scHHColorBuffer, + // + mLastSCLL, + scLLBuffer, + scLLColorBuffer + // + ); + + // + // Medium ... + CalculateCycle( + barIndex, + X_MARKET_CYCLE_MEDIUM, + // + mLastMCHH, + mcHHBuffer, + mcHHColorBuffer, + // + mLastMCLL, + mcLLBuffer, + mcLLColorBuffer + // + ); + + // + // Long ... + CalculateCycle( + barIndex, + X_MARKET_CYCLE_LONG, + // + mLastLCHH, + lcHHBuffer, + lcHHColorBuffer, + // + mLastLCLL, + lcLLBuffer, + lcLLColorBuffer + // + ); + + // + // Hind ... + CalculateCycle( + barIndex, + X_MARKET_CYCLE_HIND, + // + mLastHCHH, + hcHHBuffer, + hcHHColorBuffer, + // + mLastHCLL, + hcLLBuffer, + hcLLColorBuffer + // + ); +} + +// +// Calculate Peaks and Values ... +void CalculatePeaksAndVales( + int barIndex // Bar Index +) +{ + // + // Retrieve Requirements ... + + // + // Short ... + double scHHValue = scHHBuffer[barIndex]; + double scLLValue = scLLBuffer[barIndex]; + + // + // Medium ... + double mcHHValue = mcHHBuffer[barIndex]; + double mcLLValue = mcLLBuffer[barIndex]; + + // + // Long ... + double lcHHValue = lcHHBuffer[barIndex]; + double lcLLValue = lcLLBuffer[barIndex]; + + // + // Hind ... + double hcHHValue = hcHHBuffer[barIndex]; + double hcLLValue = hcLLBuffer[barIndex]; + + // + double rColorIDX = mHideColorIDX; + double sColorIDX = mHideColorIDX; + + // + // RESISTANCE ... + double rValue = (scHHValue + mcHHValue + lcHHValue + hcHHValue) / 4; + + // + // PEAKS ... + bool isPeak = rValue == hcHHValue && + hcHHValue == lcHHValue && + lcHHValue == mcHHValue && + mcHHValue == scHHValue; + + // + if (isPeak && lastPeak != rValue) + { + // + rColorIDX = 1; + lastPeak = rValue; + } + + // + // SUPPORT ... + double sValue = (scLLValue + mcLLValue + lcLLValue + hcLLValue) / 4; + + // + // VALES ... + bool isVale = sValue == hcLLValue && + hcLLValue == lcLLValue && + lcLLValue == mcLLValue && + mcLLValue == scLLValue; + + // + if (isVale && lastVale != sValue) + { + // + sColorIDX = 1; + + // + lastVale = sValue; + } + + // + rBuffer[barIndex] = rValue; + sBuffer[barIndex] = sValue; + peaksBuffer[barIndex] = lastPeak; + valesBuffer[barIndex] = lastVale; + + // + if (showPeaksAndVales) + { + // + rColorBuffer[barIndex] = rColorIDX; + sColorBuffer[barIndex] = sColorIDX; + } + else + { + // + rColorBuffer[barIndex] = mHideColorIDX; + sColorBuffer[barIndex] = mHideColorIDX; + } +} + +// +// Calculate Fibonacci Level 1 ... +void CalculateFibonacci( + int barIndex // Bar Index +) +{ + // + // Select Requirements ... + double upPrice = peaksBuffer[barIndex]; + double downPrice = valesBuffer[barIndex]; + + // + // Level 1 ... + double fibLevel1Value = GetFibonacciLevel( + upPrice, + downPrice, + fiboLevel1, + 1); + // + // Level 2 ... + double fibLevel2Value = GetFibonacciLevel( + upPrice, + downPrice, + fiboLevel2, + 1); + + // + // Level 3 ... + double fibLevel3Value = GetFibonacciLevel( + upPrice, + downPrice, + fiboLevel3, + 1); + + // + // Level 4 ... + double fibLevel4Value = GetFibonacciLevel( + upPrice, + downPrice, + fiboLevel4, + 1); + + // + // Level 5 ... + double fibLevel5Value = GetFibonacciLevel( + upPrice, + downPrice, + fiboLevel5, + 1); + + // + fl1Buffer[barIndex] = fibLevel1Value; + fl2Buffer[barIndex] = fibLevel2Value; + fl3Buffer[barIndex] = fibLevel3Value; + fl4Buffer[barIndex] = fibLevel4Value; + fl5Buffer[barIndex] = fibLevel5Value; + + // + double fl1ColorIdx = showFibo1Levels ? 1 : mHideColorIDX; + double fl2ColorIdx = showFibo2Levels ? 1 : mHideColorIDX; + double fl3ColorIdx = showFibo3Levels ? 1 : mHideColorIDX; + double fl4ColorIdx = showFibo4Levels ? 1 : mHideColorIDX; + double fl5ColorIdx = showFibo5Levels ? 1 : mHideColorIDX; + + // + fl1ColorBuffer[barIndex] = fl1ColorIdx; + fl2ColorBuffer[barIndex] = fl2ColorIdx; + fl3ColorBuffer[barIndex] = fl3ColorIdx; + fl4ColorBuffer[barIndex] = fl4ColorIdx; + fl5ColorBuffer[barIndex] = fl5ColorIdx; +} + +// \ No newline at end of file

=hV0|7rjTb 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 literal 0 HcmV?d00001 diff --git a/BKPS/Indicators 14030517/x-saherelm.xchich.mq5 b/BKPS/Indicators 14030517/x-saherelm.xchich.mq5 new file mode 100644 index 0000000..f468e31 --- /dev/null +++ b/BKPS/Indicators 14030517/x-saherelm.xchich.mq5 @@ -0,0 +1,1826 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL5 Indicator +// ------------------------------------------------- +// Name: XCHICH +// Description: Ichimoku Kinko Hyo on Cycles ... +// +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://saherelm.ir" +#property version "1.00" +#property description "SaherElm XCHICH Indicator" +#property strict + +// +#define ShortName "XCHICH" + +// +// Includes Common Library ... +#include "../Libraries/x-saherelm.common.lib.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 +}; + +// +// Inputs ... + +// +input group "Market"; + +// +// TENKANSEN ... +input group "Tenkan Sen"; +input int tenkanSenLength = 9; // Length +input ENUM_X_ICHIMOKU_CALCULATION_MODE tenkanSenMode = X_XICH_HH_LL_MODE; // Calculation Mode + +// +// KIJUNSEN ... +input group "Kijun Sen"; +input int kijunSenLength = 26; // Length +input ENUM_X_ICHIMOKU_CALCULATION_MODE kijunSenMode = X_XICH_HH_LL_MODE; // Calculation Mode + +// +// SENKOUSPANB ... +input group "Senkou Span B"; +input int senkouSpanBLength = 52; // Length +input ENUM_X_ICHIMOKU_CALCULATION_MODE senkouSpanBMode = X_XICH_HH_LL_MODE; // Calculation Mode + +// +// CHIKOUSPAN ... +input group "Chikou Span"; +input ENUM_APPLIED_PRICE chikuoSpanAppliedTo = PRICE_CLOSE; // Price Type + +// +input group "Cycles"; + +// +input group "Short"; +input ENUM_X_PERIOD_METHOD scMethod = X_PERIOD_AUTO; // How to Find Period +input ENUM_TIMEFRAMES scPeriod = NULL; // Time Period + +// +input group "Medium"; +input ENUM_X_PERIOD_METHOD mcMethod = X_PERIOD_AUTO; // How to Find Period +input ENUM_TIMEFRAMES mcPeriod = NULL; // Time Period + +// +input group "Long"; +input ENUM_X_PERIOD_METHOD lcMethod = X_PERIOD_AUTO; // How to Find Period +input ENUM_TIMEFRAMES lcPeriod = NULL; // Time Period + +// +input group "Hind"; +input ENUM_X_PERIOD_METHOD hcMethod = X_PERIOD_AUTO; // How to Find Period +input ENUM_TIMEFRAMES hcPeriod = NULL; // Time Period + +// +input group "Presentation"; + +// +input bool showTenkanSen = true; // Show Tenkan Sen +input bool showKijunSen = true; // Show Kijun Sen +input bool showChikouSpan = true; // Show Chikou Span +input bool showSenkouSpanA = true; // Show Senkou Span A +input bool showSenkouSpanB = true; // Show Senkou Span B +input bool showKumo = true; // Show Kumo +input bool shiftKumo = true; // Shift Kumo to Future + +// +input bool showCurrent = true; // Show Current Cycle +input bool showShort = true; // Show Short Cycle +input bool showMedium = true; // Show Medium Cycle +input bool showLong = true; // Show Long Cycle +input bool showHind = true; // Show Hind Cycle + + +// +// Buffers ... + +// +#define hideColorIDX 0 +#define bullishColorIDX 1 +#define bearishColorIDX 2 + +// +#property indicator_chart_window + +// +#property indicator_buffers 40 +#property indicator_plots 30 + +// +// CURRENT ... + +// +#define cTenBufferIndex 0 +double cTenBuffer[]; + +// +#property indicator_label1 "XICH C TK" +#property indicator_type1 DRAW_LINE +#property indicator_color1 clrBrown +#property indicator_style1 STYLE_SOLID +#property indicator_width1 1 + +// +#define cKijBufferIndex 1 +double cKijBuffer[]; + +// +#property indicator_label2 "XICH C KJ" +#property indicator_type2 DRAW_LINE +#property indicator_color2 clrDodgerBlue +#property indicator_style2 STYLE_SOLID +#property indicator_width2 1 + +// +#define cChikBufferIndex 2 +double cChikBuffer[]; + +// +#property indicator_label3 "XICH C CS" +#property indicator_type3 DRAW_LINE +#property indicator_color3 clrDarkGreen +#property indicator_style3 STYLE_SOLID +#property indicator_width3 1 + +// +#define cSSABufferIndex 3 +double cSSABuffer[]; + +// +#property indicator_label4 "XICH C SSA" +#property indicator_type4 DRAW_LINE +#property indicator_color4 clrLightGray +#property indicator_style4 STYLE_DASHDOTDOT +#property indicator_width4 1 + +// +#define cSSBBufferIndex 4 +double cSSBBuffer[]; + +// +#property indicator_label5 "XICH C SSB" +#property indicator_type5 DRAW_LINE +#property indicator_color5 clrLightGray +#property indicator_style5 STYLE_DASHDOTDOT +#property indicator_width5 1 + +// +// SHORT ... + +// +#define sTenBufferIndex 5 +double sTenBuffer[]; + +// +#property indicator_label6 "XICH S TK" +#property indicator_type6 DRAW_LINE +#property indicator_color6 clrBrown +#property indicator_style6 STYLE_SOLID +#property indicator_width6 1 + +// +#define sKijBufferIndex 6 +double sKijBuffer[]; + +// +#property indicator_label7 "XICH S KJ" +#property indicator_type7 DRAW_LINE +#property indicator_color7 clrDodgerBlue +#property indicator_style7 STYLE_SOLID +#property indicator_width7 1 + +// +#define sChikBufferIndex 7 +double sChikBuffer[]; + +// +#property indicator_label8 "XICH S CS" +#property indicator_type8 DRAW_LINE +#property indicator_color8 clrDarkGreen +#property indicator_style8 STYLE_SOLID +#property indicator_width8 1 + +// +#define sSSABufferIndex 8 +double sSSABuffer[]; + +// +#property indicator_label9 "XICH S SSA" +#property indicator_type9 DRAW_LINE +#property indicator_color9 clrLightGray +#property indicator_style9 STYLE_DASHDOTDOT +#property indicator_width9 1 + +// +#define sSSBBufferIndex 9 +double sSSBBuffer[]; + +// +#property indicator_label10 "XICH S SSB" +#property indicator_type10 DRAW_LINE +#property indicator_color10 clrLightGray +#property indicator_style10 STYLE_DASHDOTDOT +#property indicator_width10 1 + +// +// MEDIUM ... + +// +#define mTenBufferIndex 10 +double mTenBuffer[]; + +// +#property indicator_label11 "XICH M TK" +#property indicator_type11 DRAW_LINE +#property indicator_color11 clrBrown +#property indicator_style11 STYLE_SOLID +#property indicator_width11 1 + +// +#define mKijBufferIndex 11 +double mKijBuffer[]; + +// +#property indicator_label12 "XICH M KJ" +#property indicator_type12 DRAW_LINE +#property indicator_color12 clrDodgerBlue +#property indicator_style12 STYLE_SOLID +#property indicator_width12 1 + +// +#define mChikBufferIndex 12 +double mChikBuffer[]; + +// +#property indicator_label13 "XICH M CS" +#property indicator_type13 DRAW_LINE +#property indicator_color13 clrDarkGreen +#property indicator_style13 STYLE_SOLID +#property indicator_width13 1 + +// +#define mSSABufferIndex 13 +double mSSABuffer[]; + +// +#property indicator_label14 "XICH M SSA" +#property indicator_type14 DRAW_LINE +#property indicator_color14 clrLightGray +#property indicator_style14 STYLE_DASHDOTDOT +#property indicator_width14 1 + +// +#define mSSBBufferIndex 14 +double mSSBBuffer[]; + +// +#property indicator_label15 "XICH M SSB" +#property indicator_type15 DRAW_LINE +#property indicator_color15 clrLightGray +#property indicator_style15 STYLE_DASHDOTDOT +#property indicator_width15 1 + +// +// LONG ... + +// +#define lTenBufferIndex 15 +double lTenBuffer[]; + +// +#property indicator_label16 "XICH L TK" +#property indicator_type16 DRAW_LINE +#property indicator_color16 clrBrown +#property indicator_style16 STYLE_SOLID +#property indicator_width16 1 + +// +#define lKijBufferIndex 16 +double lKijBuffer[]; + +// +#property indicator_label17 "XICH L KJ" +#property indicator_type17 DRAW_LINE +#property indicator_color17 clrDodgerBlue +#property indicator_style17 STYLE_SOLID +#property indicator_width17 1 + +// +#define lChikBufferIndex 17 +double lChikBuffer[]; + +// +#property indicator_label18 "XICH L CS" +#property indicator_type18 DRAW_LINE +#property indicator_color18 clrDarkGreen +#property indicator_style18 STYLE_SOLID +#property indicator_width18 1 + +// +#define lSSABufferIndex 18 +double lSSABuffer[]; + +// +#property indicator_label19 "XICH L SSA" +#property indicator_type19 DRAW_LINE +#property indicator_color19 clrLightGray +#property indicator_style19 STYLE_DASHDOTDOT +#property indicator_width19 1 + +// +#define lSSBBufferIndex 19 +double lSSBBuffer[]; + +// +#property indicator_label20 "XICH L SSB" +#property indicator_type20 DRAW_LINE +#property indicator_color20 clrLightGray +#property indicator_style20 STYLE_DASHDOTDOT +#property indicator_width20 1 + +// +// HIND ... + +// +#define hTenBufferIndex 20 +double hTenBuffer[]; + +// +#property indicator_label21 "XICH H TK" +#property indicator_type21 DRAW_LINE +#property indicator_color21 clrBrown +#property indicator_style21 STYLE_SOLID +#property indicator_width21 1 + +// +#define hKijBufferIndex 21 +double hKijBuffer[]; + +// +#property indicator_label22 "XICH H KJ" +#property indicator_type22 DRAW_LINE +#property indicator_color22 clrDodgerBlue +#property indicator_style22 STYLE_SOLID +#property indicator_width22 1 + +// +#define hChikBufferIndex 22 +double hChikBuffer[]; + +// +#property indicator_label23 "XICH H CS" +#property indicator_type23 DRAW_LINE +#property indicator_color23 clrDarkGreen +#property indicator_style23 STYLE_SOLID +#property indicator_width23 1 + +// +#define hSSABufferIndex 23 +double hSSABuffer[]; + +// +#property indicator_label24 "XICH H SSA" +#property indicator_type24 DRAW_LINE +#property indicator_color24 clrLightGray +#property indicator_style24 STYLE_DASHDOTDOT +#property indicator_width24 1 + +// +#define hSSBBufferIndex 24 +double hSSBBuffer[]; + +// +#property indicator_label25 "XICH H SSB" +#property indicator_type25 DRAW_LINE +#property indicator_color25 clrLightGray +#property indicator_style25 STYLE_DASHDOTDOT +#property indicator_width25 1 + +// +// +// + +// +// CURRENT ... + +// +#define cSSAKCBufferIndex 25 +double cSSAKCBuffer[]; + +// +#define cSSBKCBufferIndex 26 +double cSSBKCBuffer[]; + +// +// CLOUD ... + +// +#define cKCBufferIndex 25 + +// +#property indicator_label26 "XICH C Kumo" +#property indicator_type26 DRAW_FILLING +#property indicator_color26 clrAqua, clrMagenta +#property indicator_style26 STYLE_SOLID +#property indicator_width26 1 + +// +// SHORT ... + +// +#define sSSAKCBufferIndex 27 +double sSSAKCBuffer[]; + +// +#define sSSBKCBufferIndex 28 +double sSSBKCBuffer[]; + +// +// CLOUD ... + +// +#define sKCBufferIndex 26 + +// +#property indicator_label27 "XICH S Kumo" +#property indicator_type27 DRAW_FILLING +#property indicator_color27 clrAqua, clrMagenta +#property indicator_style27 STYLE_SOLID +#property indicator_width27 1 + +// +// MEDIUM ... + +// +#define mSSAKCBufferIndex 29 +double mSSAKCBuffer[]; + +// +#define mSSBKCBufferIndex 30 +double mSSBKCBuffer[]; + +// +// CLOUD ... + +// +#define mKCBufferIndex 27 + +// +#property indicator_label28 "XICH M Kumo" +#property indicator_type28 DRAW_FILLING +#property indicator_color28 clrAqua, clrMagenta +#property indicator_style28 STYLE_SOLID +#property indicator_width28 1 + +// +// LONG ... + +// +#define lSSAKCBufferIndex 31 +double lSSAKCBuffer[]; + +// +#define lSSBKCBufferIndex 32 +double lSSBKCBuffer[]; + +// +// CLOUD ... + +// +#define lKCBufferIndex 28 + +// +#property indicator_label29 "XICH L Kumo" +#property indicator_type29 DRAW_FILLING +#property indicator_color29 clrAqua, clrMagenta +#property indicator_style29 STYLE_SOLID +#property indicator_width29 1 + +// +// HIND ... + +// +#define hSSAKCBufferIndex 33 +double hSSAKCBuffer[]; + +// +#define hSSBKCBufferIndex 34 +double hSSBKCBuffer[]; + +// +// CLOUD ... + +// +#define hKCBufferIndex 29 + +// +#property indicator_label30 "XICH H Kumo" +#property indicator_type30 DRAW_FILLING +#property indicator_color30 clrAqua, clrMagenta +#property indicator_style30 STYLE_SOLID +#property indicator_width30 1 + +// +// Variables, Properties and etc ... + +// +int maxLength; + +// +// Current ... +int mCTenkanSenLength = tenkanSenLength; +int mCKijunSenLength = kijunSenLength; +int mCSenkouSpanBLength = senkouSpanBLength; + +// +// Short ... +int mSCycleLength = 0; +int mSTenkanSenLength = 0; +int mSKijunSenLength = 0; +int mSSenkouSpanBLength = 0; +ENUM_TIMEFRAMES mSCPeriod = NULL; + +// +// Medium ... +int mMCycleLength = 0; +int mMTenkanSenLength = 0; +int mMKijunSenLength = 0; +int mMSenkouSpanBLength = 0; +ENUM_TIMEFRAMES mMCPeriod = NULL; + +// +// Long ... +int mLCycleLength = 0; +int mLTenkanSenLength = 0; +int mLKijunSenLength = 0; +int mLSenkouSpanBLength = 0; +ENUM_TIMEFRAMES mLCPeriod = NULL; + +// +// Hind ... +int mHCycleLength = 0; +int mHTenkanSenLength = 0; +int mHKijunSenLength = 0; +int mHSenkouSpanBLength = 0; +ENUM_TIMEFRAMES mHCPeriod = NULL; + +// +ENUM_SERIESMODE mTenkanSenTopMode = NULL; +ENUM_SERIESMODE mTenkanSenBottomMode = NULL; + +// +ENUM_SERIESMODE mKijunSenTopMode = NULL; +ENUM_SERIESMODE mKijunSenBottomMode = NULL; + +// +ENUM_SERIESMODE mSenkouSpanBTopMode = NULL; +ENUM_SERIESMODE mSenkouSpanBBottomMode = NULL; + +// +// Event Handlers ... + +// +// Initialization ... +int OnInit() +{ + // + // Validate Inputs ... + if (!ValidateInputs()) + { + return INIT_PARAMETERS_INCORRECT; + } + + // + if (!InitMarketCycles()) + { + return INIT_PARAMETERS_INCORRECT; + } + + // + // because in some cases we may have more than one input for + // calculation and we must prevent any calculation + // untill we pass the biggest input length, here we get max Input length + // and then wait until pass it ... + maxLength = ExtractMaxLengthOfInputs(); + + // + // Define Index Buffers ... + DefineBuffers(); + + // + // Set Indicator ShortName ... + SetIndicatorName(); + + // + // Init Succeed ... + return INIT_SUCCEEDED; +} + +// +// DeInitialization ... +void OnDeinit(const int reason) +{ + // + // REASON_PROGRAM 0 The EA has stopped working calling the ExpertRemove() function + // REASON_REMOVE 1 Program removed from a chart + // REASON_RECOMPILE 2 Program recompiled + // REASON_CHARTCHANGE 3 A symbol or a chart period is changed + // REASON_CHARTCLOSE 4 Chart closed + // REASON_PARAMETERS 5 Inputs changed by a user + // REASON_ACCOUNT 6 Another account has been activated or reconnection to the trade server has occurred due to changes in the account settings + // REASON_TEMPLATE 7 Another chart template applied + // REASON_INITFAILED 8 The OnInit() handler returned a non-zero value + // REASON_CLOSE 9 Terminal closed +} + +// +// Calculating what we want ... +int OnCalculate( + const int rates_total, // Total Bars on Chart ... + const int prev_calculated, // Total Calculated Bars on Charts ... + const datetime &time[], // History of Open Time ... + const double &open[], // History of Open Price ... + const double &high[], // History of High Price ... + const double &low[], // History of Low Price ... + const double &close[], // History of Close Price ... + const long &tick_volume[], // History of Tick Volumes on Bar ... + const long &volume[], // History of Trade Volumes ... + const int &spread[] // History of Spread Price ... +) +{ + // + // Prepare Buffers ... + ArraySetAsSeries(time, true); + ArraySetAsSeries(open, true); + ArraySetAsSeries(high, true); + ArraySetAsSeries(low, true); + ArraySetAsSeries(close, true); + ArraySetAsSeries(tick_volume, true); + ArraySetAsSeries(volume, true); + ArraySetAsSeries(spread, true); + + // + // this counts Available Bars ... + int limit; + + // + limit = (prev_calculated > rates_total || prev_calculated <= 0) ? rates_total : (rates_total - prev_calculated) + 1; + + // + // Main Loop ... + for (int i = limit - 1; i >= 0 && !IsStopped(); i--) + { + // + CalculateBuffers( + // + i, + prev_calculated, + rates_total, + // + open, + high, + close, + low, + tick_volume + // + ); + } + + // + return rates_total; +} + +// +// Functions ... + +// +// Validate Input Args for Initialization ... +bool ValidateInputs() +{ + // + bool result = false; + + // + result = + // + (tenkanSenLength > 2 && + kijunSenLength > tenkanSenLength && + senkouSpanBLength > kijunSenLength) + // + && + // + (IsValid(scMethod, scPeriod) && + IsValid(mcMethod, mcPeriod) && + IsValid(lcMethod, lcPeriod) && + IsValid(hcMethod, hcPeriod)) + // + ; + + // + return result; +} + +// +// Initialize Market Cycles ... +bool InitMarketCycles() +{ + // + bool result = false; + + // + // Current Cycle Initialization ... + + // + int cPeriodSeconds = PeriodSeconds(_Period); + + // + // Short Cycle Initialization ... + + // + // Find Cycle Period ... + if (scMethod == X_PERIOD_AUTO) + { + // + // Select Period ... + mSCPeriod = GetCyclePeriod( + X_MARKET_CYCLE_SHORT, + _Period // + ); + } + else + { + mSCPeriod = scPeriod; + } + + // + result = IsValid(mSCPeriod); + if (!result) + { + return result; + } + + // + mSCycleLength = PeriodSeconds(mSCPeriod) / cPeriodSeconds; + mSTenkanSenLength = mSCycleLength * mCTenkanSenLength; + mSKijunSenLength = mSCycleLength * mCKijunSenLength; + mSSenkouSpanBLength = mSCycleLength * mCSenkouSpanBLength; + result = mSCycleLength > 0; + if (!result) + { + return result; + } + + // + // Medium Cycle Initialization ... + + // + // Find Cycle Period ... + if (mcMethod == X_PERIOD_AUTO) + { + // + // Select Period ... + mMCPeriod = GetCyclePeriod( + X_MARKET_CYCLE_MEDIUM, + _Period // + ); + } + else + { + mMCPeriod = mcPeriod; + } + + // + result = IsValid(mMCPeriod); + if (!result) + { + return result; + } + + // + mMCycleLength = PeriodSeconds(mMCPeriod) / cPeriodSeconds; + mMTenkanSenLength = mMCycleLength * mCTenkanSenLength; + mMKijunSenLength = mMCycleLength * mCKijunSenLength; + mMSenkouSpanBLength = mMCycleLength * mCSenkouSpanBLength; + result = mMCycleLength > 0; + if (!result) + { + return result; + } + + // + // Long Cycle Initialization ... + + // + // Find Cycle Period ... + if (lcMethod == X_PERIOD_AUTO) + { + // + // Select Period ... + mLCPeriod = GetCyclePeriod( + X_MARKET_CYCLE_LONG, + _Period // + ); + } + else + { + mLCPeriod = lcPeriod; + } + + // + result = IsValid(mLCPeriod); + if (!result) + { + return result; + } + + // + mLCycleLength = PeriodSeconds(mLCPeriod) / cPeriodSeconds; + mLTenkanSenLength = mLCycleLength * mCTenkanSenLength; + mLKijunSenLength = mLCycleLength * mCKijunSenLength; + mLSenkouSpanBLength = mLCycleLength * mCSenkouSpanBLength; + result = mLCycleLength > 0; + if (!result) + { + return result; + } + + // + // Hind Cycle Initialization ... + + // + // Find Cycle Period ... + if (hcMethod == X_PERIOD_AUTO) + { + // + // Select Period ... + mHCPeriod = GetCyclePeriod( + X_MARKET_CYCLE_HIND, + _Period // + ); + } + else + { + mHCPeriod = hcPeriod; + } + + // + result = IsValid(mHCPeriod); + if (!result) + { + return result; + } + + // + mHCycleLength = PeriodSeconds(mHCPeriod) / cPeriodSeconds; + mHTenkanSenLength = mHCycleLength * mCTenkanSenLength; + mHKijunSenLength = mHCycleLength * mCKijunSenLength; + mHSenkouSpanBLength = mHCycleLength * mCSenkouSpanBLength; + result = mHCycleLength > 0; + if (!result) + { + return result; + } + + // + return result; +} + +// +// Retrieve all Exists Input Max Length ... +// use for Start Of Drawing ... +int ExtractMaxLengthOfInputs() +{ + // + int result = 0; + + // + // Current ... + result = MathMax(mCTenkanSenLength, mCKijunSenLength); + result = MathMax(result, mCSenkouSpanBLength); + + // + // Short ... + result = MathMax(mSTenkanSenLength, mSKijunSenLength); + result = MathMax(result, mSSenkouSpanBLength); + + // + // Medium ... + result = MathMax(mMTenkanSenLength, mMKijunSenLength); + result = MathMax(result, mMSenkouSpanBLength); + + // + // Long ... + result = MathMax(mLTenkanSenLength, mLKijunSenLength); + result = MathMax(result, mLSenkouSpanBLength); + + // + // Hind ... + result = MathMax(mHTenkanSenLength, mHKijunSenLength); + result = MathMax(result, mHSenkouSpanBLength); + + // + return result; +} + +// +// Set Indicator Short Name and also we can define Buffers Labels ... +void SetIndicatorName() +{ + // + IndicatorSetString(INDICATOR_SHORTNAME, ShortName); + IndicatorSetInteger(INDICATOR_DIGITS, _Digits); +} + +// +// Define Indexes and Styles ... +void DefineBuffers() +{ + // + // Current ... + + // + // TENKANSEN ... + + // + bool canCShowTenkanSen = showTenkanSen && showCurrent; + ENUM_DRAW_TYPE cTenkanSenDrawType = canCShowTenkanSen ? DRAW_LINE : DRAW_NONE; + + // + ArraySetAsSeries(cTenBuffer, true); + SetIndexBuffer(cTenBufferIndex, cTenBuffer, INDICATOR_DATA); + PlotIndexSetInteger(cTenBufferIndex, PLOT_DRAW_BEGIN, maxLength); + PlotIndexSetInteger(cTenBufferIndex, PLOT_SHOW_DATA, canCShowTenkanSen); + PlotIndexSetInteger(cTenBufferIndex, PLOT_DRAW_TYPE, cTenkanSenDrawType); + + // + // KIJUNSEN ... + + // + bool canCShowKijunSen = showKijunSen && showCurrent; + ENUM_DRAW_TYPE cKijunSenDrawType = canCShowKijunSen ? DRAW_LINE : DRAW_NONE; + + // + ArraySetAsSeries(cKijBuffer, true); + SetIndexBuffer(cKijBufferIndex, cKijBuffer, INDICATOR_DATA); + PlotIndexSetInteger(cKijBufferIndex, PLOT_DRAW_BEGIN, maxLength); + PlotIndexSetInteger(cKijBufferIndex, PLOT_SHOW_DATA, canCShowKijunSen); + PlotIndexSetInteger(cKijBufferIndex, PLOT_DRAW_TYPE, cKijunSenDrawType); + + // + // CHIKOUSPAN ... + + // + bool canCShowChikouSpan = showChikouSpan && showCurrent; + ENUM_DRAW_TYPE cChikouSpanDrawType = canCShowChikouSpan ? DRAW_LINE : DRAW_NONE; + + // + ArraySetAsSeries(cChikBuffer, true); + SetIndexBuffer(cChikBufferIndex, cChikBuffer, INDICATOR_DATA); + PlotIndexSetInteger(cChikBufferIndex, PLOT_DRAW_BEGIN, maxLength); + PlotIndexSetInteger(cChikBufferIndex, PLOT_SHIFT, -mCKijunSenLength); + PlotIndexSetInteger(cChikBufferIndex, PLOT_SHOW_DATA, canCShowChikouSpan); + PlotIndexSetInteger(cChikBufferIndex, PLOT_DRAW_TYPE, cChikouSpanDrawType); + + // + // SENKOUSPAN A and B ... + int cShiftSize = shiftKumo ? mCKijunSenLength : 0; + + // + // SENKOUSPANA ... + bool canCShowSenkouSpanA = showSenkouSpanA && showCurrent; + ENUM_DRAW_TYPE cSenkouSpanADrawType = canCShowSenkouSpanA ? DRAW_LINE : DRAW_NONE; + + // + ArraySetAsSeries(cSSABuffer, true); + SetIndexBuffer(cSSABufferIndex, cSSABuffer, INDICATOR_DATA); + PlotIndexSetInteger(cSSABufferIndex, PLOT_SHIFT, cShiftSize); + PlotIndexSetInteger(cSSABufferIndex, PLOT_SHOW_DATA, canCShowSenkouSpanA); + PlotIndexSetInteger(cSSABufferIndex, PLOT_DRAW_TYPE, cSenkouSpanADrawType); + + // + // SENKOUSPANB ... + bool canCShowSenkouSpanB = showSenkouSpanB && showCurrent; + ENUM_DRAW_TYPE cSenkouSpanBDrawType = canCShowSenkouSpanB ? DRAW_LINE : DRAW_NONE; + + // + ArraySetAsSeries(cSSBBuffer, true); + SetIndexBuffer(cSSBBufferIndex, cSSBBuffer, INDICATOR_DATA); + PlotIndexSetInteger(cSSBBufferIndex, PLOT_SHIFT, cShiftSize); + PlotIndexSetInteger(cSSBBufferIndex, PLOT_SHOW_DATA, canCShowSenkouSpanB); + PlotIndexSetInteger(cSSBBufferIndex, PLOT_DRAW_TYPE, cSenkouSpanBDrawType); + + // + // Short ... + + // + // TENKANSEN ... + + // + bool canSShowTenkanSen = showTenkanSen && showShort; + ENUM_DRAW_TYPE sTenkanSenDrawType = canSShowTenkanSen ? DRAW_LINE : DRAW_NONE; + + // + ArraySetAsSeries(sTenBuffer, true); + SetIndexBuffer(sTenBufferIndex, sTenBuffer, INDICATOR_DATA); + PlotIndexSetInteger(sTenBufferIndex, PLOT_DRAW_BEGIN, maxLength); + PlotIndexSetInteger(sTenBufferIndex, PLOT_SHOW_DATA, canSShowTenkanSen); + PlotIndexSetInteger(sTenBufferIndex, PLOT_DRAW_TYPE, sTenkanSenDrawType); + + // + // KIJUNSEN ... + + // + bool canSShowKijunSen = showKijunSen && showShort; + ENUM_DRAW_TYPE sKijunSenDrawType = canSShowKijunSen ? DRAW_LINE : DRAW_NONE; + + // + ArraySetAsSeries(sKijBuffer, true); + SetIndexBuffer(sKijBufferIndex, sKijBuffer, INDICATOR_DATA); + PlotIndexSetInteger(sKijBufferIndex, PLOT_DRAW_BEGIN, maxLength); + PlotIndexSetInteger(sKijBufferIndex, PLOT_SHOW_DATA, canSShowKijunSen); + PlotIndexSetInteger(sKijBufferIndex, PLOT_DRAW_TYPE, sKijunSenDrawType); + + // + // CHIKOUSPAN ... + + // + bool canSShowChikouSpan = showChikouSpan && showShort; + ENUM_DRAW_TYPE sChikouSpanDrawType = canSShowChikouSpan ? DRAW_LINE : DRAW_NONE; + + // + ArraySetAsSeries(sChikBuffer, true); + SetIndexBuffer(sChikBufferIndex, sChikBuffer, INDICATOR_DATA); + PlotIndexSetInteger(sChikBufferIndex, PLOT_DRAW_BEGIN, maxLength); + PlotIndexSetInteger(sChikBufferIndex, PLOT_SHIFT, -mSKijunSenLength); + PlotIndexSetInteger(sChikBufferIndex, PLOT_SHOW_DATA, canSShowChikouSpan); + PlotIndexSetInteger(sChikBufferIndex, PLOT_DRAW_TYPE, sChikouSpanDrawType); + + // + // SENKOUSPAN A and B ... + int sShiftSize = shiftKumo ? mSKijunSenLength : 0; + + // + // SENKOUSPANA ... + bool canSShowSenkouSpanA = showSenkouSpanA && showShort; + ENUM_DRAW_TYPE sSenkouSpanADrawType = canSShowSenkouSpanA ? DRAW_LINE : DRAW_NONE; + + // + ArraySetAsSeries(sSSABuffer, true); + SetIndexBuffer(sSSABufferIndex, sSSABuffer, INDICATOR_DATA); + PlotIndexSetInteger(sSSABufferIndex, PLOT_SHIFT, sShiftSize); + PlotIndexSetInteger(sSSABufferIndex, PLOT_SHOW_DATA, canSShowSenkouSpanA); + PlotIndexSetInteger(sSSABufferIndex, PLOT_DRAW_TYPE, sSenkouSpanADrawType); + + // + // SENKOUSPANB ... + bool canSShowSenkouSpanB = showSenkouSpanB && showShort; + ENUM_DRAW_TYPE sSenkouSpanBDrawType = canSShowSenkouSpanB ? DRAW_LINE : DRAW_NONE; + + // + ArraySetAsSeries(sSSBBuffer, true); + SetIndexBuffer(sSSBBufferIndex, sSSBBuffer, INDICATOR_DATA); + PlotIndexSetInteger(sSSBBufferIndex, PLOT_SHIFT, sShiftSize); + PlotIndexSetInteger(sSSBBufferIndex, PLOT_SHOW_DATA, canSShowSenkouSpanB); + PlotIndexSetInteger(sSSBBufferIndex, PLOT_DRAW_TYPE, sSenkouSpanBDrawType); + + // + // Medium ... + + // + // TENKANSEN ... + + // + bool canMShowTenkanSen = showTenkanSen && showMedium; + ENUM_DRAW_TYPE mTenkanSenDrawType = canMShowTenkanSen ? DRAW_LINE : DRAW_NONE; + + // + ArraySetAsSeries(mTenBuffer, true); + SetIndexBuffer(mTenBufferIndex, mTenBuffer, INDICATOR_DATA); + PlotIndexSetInteger(mTenBufferIndex, PLOT_DRAW_BEGIN, maxLength); + PlotIndexSetInteger(mTenBufferIndex, PLOT_SHOW_DATA, canMShowTenkanSen); + PlotIndexSetInteger(mTenBufferIndex, PLOT_DRAW_TYPE, mTenkanSenDrawType); + + // + // KIJUNSEN ... + + // + bool canMShowKijunSen = showKijunSen && showMedium; + ENUM_DRAW_TYPE mKijunSenDrawType = canMShowKijunSen ? DRAW_LINE : DRAW_NONE; + + // + ArraySetAsSeries(mKijBuffer, true); + SetIndexBuffer(mKijBufferIndex, mKijBuffer, INDICATOR_DATA); + PlotIndexSetInteger(mKijBufferIndex, PLOT_DRAW_BEGIN, maxLength); + PlotIndexSetInteger(mKijBufferIndex, PLOT_SHOW_DATA, canMShowKijunSen); + PlotIndexSetInteger(mKijBufferIndex, PLOT_DRAW_TYPE, mKijunSenDrawType); + + // + // CHIKOUSPAN ... + + // + bool canMShowChikouSpan = showChikouSpan && showMedium; + ENUM_DRAW_TYPE mChikouSpanDrawType = canMShowChikouSpan ? DRAW_LINE : DRAW_NONE; + + // + ArraySetAsSeries(mChikBuffer, true); + SetIndexBuffer(mChikBufferIndex, mChikBuffer, INDICATOR_DATA); + PlotIndexSetInteger(mChikBufferIndex, PLOT_DRAW_BEGIN, maxLength); + PlotIndexSetInteger(mChikBufferIndex, PLOT_SHIFT, -mMKijunSenLength); + PlotIndexSetInteger(mChikBufferIndex, PLOT_SHOW_DATA, canMShowChikouSpan); + PlotIndexSetInteger(mChikBufferIndex, PLOT_DRAW_TYPE, mChikouSpanDrawType); + + // + // SENKOUSPAN A and B ... + int mShiftSize = shiftKumo ? mMKijunSenLength : 0; + + // + // SENKOUSPANA ... + bool canMShowSenkouSpanA = showSenkouSpanA && showMedium; + ENUM_DRAW_TYPE mSenkouSpanADrawType = canMShowSenkouSpanA ? DRAW_LINE : DRAW_NONE; + + // + ArraySetAsSeries(mSSABuffer, true); + SetIndexBuffer(mSSABufferIndex, mSSABuffer, INDICATOR_DATA); + PlotIndexSetInteger(mSSABufferIndex, PLOT_SHIFT, mShiftSize); + PlotIndexSetInteger(mSSABufferIndex, PLOT_SHOW_DATA, canMShowSenkouSpanA); + PlotIndexSetInteger(mSSABufferIndex, PLOT_DRAW_TYPE, mSenkouSpanADrawType); + + // + // SENKOUSPANB ... + bool canMShowSenkouSpanB = showSenkouSpanB && showMedium; + ENUM_DRAW_TYPE mSenkouSpanBDrawType = canMShowSenkouSpanB ? DRAW_LINE : DRAW_NONE; + + // + ArraySetAsSeries(mSSBBuffer, true); + SetIndexBuffer(mSSBBufferIndex, mSSBBuffer, INDICATOR_DATA); + PlotIndexSetInteger(mSSBBufferIndex, PLOT_SHIFT, mShiftSize); + PlotIndexSetInteger(mSSBBufferIndex, PLOT_SHOW_DATA, canMShowSenkouSpanB); + PlotIndexSetInteger(mSSBBufferIndex, PLOT_DRAW_TYPE, mSenkouSpanBDrawType); + + // + // Long ... + + // + // TENKANSEN ... + + // + bool canLShowTenkanSen = showTenkanSen && showLong; + ENUM_DRAW_TYPE lTenkanSenDrawType = canLShowTenkanSen ? DRAW_LINE : DRAW_NONE; + + // + ArraySetAsSeries(lTenBuffer, true); + SetIndexBuffer(lTenBufferIndex, lTenBuffer, INDICATOR_DATA); + PlotIndexSetInteger(lTenBufferIndex, PLOT_DRAW_BEGIN, maxLength); + PlotIndexSetInteger(lTenBufferIndex, PLOT_SHOW_DATA, canLShowTenkanSen); + PlotIndexSetInteger(lTenBufferIndex, PLOT_DRAW_TYPE, lTenkanSenDrawType); + + // + // KIJUNSEN ... + + // + bool canLShowKijunSen = showKijunSen && showLong; + ENUM_DRAW_TYPE lKijunSenDrawType = canLShowKijunSen ? DRAW_LINE : DRAW_NONE; + + // + ArraySetAsSeries(lKijBuffer, true); + SetIndexBuffer(lKijBufferIndex, lKijBuffer, INDICATOR_DATA); + PlotIndexSetInteger(lKijBufferIndex, PLOT_DRAW_BEGIN, maxLength); + PlotIndexSetInteger(lKijBufferIndex, PLOT_SHOW_DATA, canLShowKijunSen); + PlotIndexSetInteger(lKijBufferIndex, PLOT_DRAW_TYPE, lKijunSenDrawType); + + // + // CHIKOUSPAN ... + + // + bool canLShowChikouSpan = showChikouSpan && showLong; + ENUM_DRAW_TYPE lChikouSpanDrawType = canLShowChikouSpan ? DRAW_LINE : DRAW_NONE; + + // + ArraySetAsSeries(lChikBuffer, true); + SetIndexBuffer(lChikBufferIndex, lChikBuffer, INDICATOR_DATA); + PlotIndexSetInteger(lChikBufferIndex, PLOT_DRAW_BEGIN, maxLength); + PlotIndexSetInteger(lChikBufferIndex, PLOT_SHIFT, -mLKijunSenLength); + PlotIndexSetInteger(lChikBufferIndex, PLOT_SHOW_DATA, canLShowChikouSpan); + PlotIndexSetInteger(lChikBufferIndex, PLOT_DRAW_TYPE, lChikouSpanDrawType); + + // + // SENKOUSPAN A and B ... + int lShiftSize = shiftKumo ? mLKijunSenLength : 0; + + // + // SENKOUSPANA ... + bool canLShowSenkouSpanA = showSenkouSpanA && showLong; + ENUM_DRAW_TYPE lSenkouSpanADrawType = canLShowSenkouSpanA ? DRAW_LINE : DRAW_NONE; + + // + ArraySetAsSeries(lSSABuffer, true); + SetIndexBuffer(lSSABufferIndex, lSSABuffer, INDICATOR_DATA); + PlotIndexSetInteger(lSSABufferIndex, PLOT_SHIFT, lShiftSize); + PlotIndexSetInteger(lSSABufferIndex, PLOT_SHOW_DATA, canLShowSenkouSpanA); + PlotIndexSetInteger(lSSABufferIndex, PLOT_DRAW_TYPE, lSenkouSpanADrawType); + + // + // SENKOUSPANB ... + bool canLShowSenkouSpanB = showSenkouSpanB && showLong; + ENUM_DRAW_TYPE lSenkouSpanBDrawType = canLShowSenkouSpanB ? DRAW_LINE : DRAW_NONE; + + // + ArraySetAsSeries(lSSBBuffer, true); + SetIndexBuffer(lSSBBufferIndex, lSSBBuffer, INDICATOR_DATA); + PlotIndexSetInteger(lSSBBufferIndex, PLOT_SHIFT, lShiftSize); + PlotIndexSetInteger(lSSBBufferIndex, PLOT_SHOW_DATA, canLShowSenkouSpanB); + PlotIndexSetInteger(lSSBBufferIndex, PLOT_DRAW_TYPE, lSenkouSpanBDrawType); + + // + // Hind ... + + // + // TENKANSEN ... + + // + bool canHShowTenkanSen = showTenkanSen && showHind; + ENUM_DRAW_TYPE hTenkanSenDrawType = canHShowTenkanSen ? DRAW_LINE : DRAW_NONE; + + // + ArraySetAsSeries(hTenBuffer, true); + SetIndexBuffer(hTenBufferIndex, hTenBuffer, INDICATOR_DATA); + PlotIndexSetInteger(hTenBufferIndex, PLOT_DRAW_BEGIN, maxLength); + PlotIndexSetInteger(hTenBufferIndex, PLOT_SHOW_DATA, canHShowTenkanSen); + PlotIndexSetInteger(hTenBufferIndex, PLOT_DRAW_TYPE, hTenkanSenDrawType); + + // + // KIJUNSEN ... + + // + bool canHShowKijunSen = showKijunSen && showHind; + ENUM_DRAW_TYPE hKijunSenDrawType = canHShowKijunSen ? DRAW_LINE : DRAW_NONE; + + // + ArraySetAsSeries(hKijBuffer, true); + SetIndexBuffer(hKijBufferIndex, hKijBuffer, INDICATOR_DATA); + PlotIndexSetInteger(hKijBufferIndex, PLOT_DRAW_BEGIN, maxLength); + PlotIndexSetInteger(hKijBufferIndex, PLOT_SHOW_DATA, canHShowKijunSen); + PlotIndexSetInteger(hKijBufferIndex, PLOT_DRAW_TYPE, hKijunSenDrawType); + + // + // CHIKOUSPAN ... + + // + bool canHShowChikouSpan = showChikouSpan && showHind; + ENUM_DRAW_TYPE hChikouSpanDrawType = canHShowChikouSpan ? DRAW_LINE : DRAW_NONE; + + // + ArraySetAsSeries(hChikBuffer, true); + SetIndexBuffer(hChikBufferIndex, hChikBuffer, INDICATOR_DATA); + PlotIndexSetInteger(hChikBufferIndex, PLOT_DRAW_BEGIN, maxLength); + PlotIndexSetInteger(hChikBufferIndex, PLOT_SHIFT, -mHKijunSenLength); + PlotIndexSetInteger(hChikBufferIndex, PLOT_SHOW_DATA, canHShowChikouSpan); + PlotIndexSetInteger(hChikBufferIndex, PLOT_DRAW_TYPE, hChikouSpanDrawType); + + // + // SENKOUSPAN A and B ... + int hShiftSize = shiftKumo ? mHKijunSenLength : 0; + + // + // SENKOUSPANA ... + bool canHShowSenkouSpanA = showSenkouSpanA && showHind; + ENUM_DRAW_TYPE hSenkouSpanADrawType = canHShowSenkouSpanA ? DRAW_LINE : DRAW_NONE; + + // + ArraySetAsSeries(hSSABuffer, true); + SetIndexBuffer(hSSABufferIndex, hSSABuffer, INDICATOR_DATA); + PlotIndexSetInteger(hSSABufferIndex, PLOT_SHIFT, hShiftSize); + PlotIndexSetInteger(hSSABufferIndex, PLOT_SHOW_DATA, canHShowSenkouSpanA); + PlotIndexSetInteger(hSSABufferIndex, PLOT_DRAW_TYPE, hSenkouSpanADrawType); + + // + // SENKOUSPANB ... + bool canHShowSenkouSpanB = showSenkouSpanB && showHind; + ENUM_DRAW_TYPE hSenkouSpanBDrawType = canHShowSenkouSpanB ? DRAW_LINE : DRAW_NONE; + + // + ArraySetAsSeries(hSSBBuffer, true); + SetIndexBuffer(hSSBBufferIndex, hSSBBuffer, INDICATOR_DATA); + PlotIndexSetInteger(hSSBBufferIndex, PLOT_SHIFT, hShiftSize); + PlotIndexSetInteger(hSSBBufferIndex, PLOT_SHOW_DATA, canHShowSenkouSpanB); + PlotIndexSetInteger(hSSBBufferIndex, PLOT_DRAW_TYPE, hSenkouSpanBDrawType); + + // + // Here we Create KUMO CLOUD Buffers ... + + // + // int lastBufferIndex = hSSBBufferIndex; + + // + // Current ... + bool cCanShowKumo = showKumo && showCurrent; + ENUM_DRAW_TYPE cKumoDrawType = cCanShowKumo ? DRAW_FILLING : DRAW_NONE; + + // + // SENKOUSPANA ... + ArraySetAsSeries(cSSAKCBuffer, true); + SetIndexBuffer(cSSAKCBufferIndex, cSSAKCBuffer, INDICATOR_DATA); + PlotIndexSetInteger(cSSAKCBufferIndex, PLOT_DRAW_BEGIN, maxLength); + + // + // SENKOUSPANB ... + ArraySetAsSeries(cSSBKCBuffer, true); + SetIndexBuffer(cSSBKCBufferIndex, cSSBKCBuffer, INDICATOR_DATA); + PlotIndexSetInteger(cSSBKCBufferIndex, PLOT_DRAW_BEGIN, maxLength); + + // + PlotIndexSetInteger(cKCBufferIndex, PLOT_SHOW_DATA, false); + PlotIndexSetInteger(cKCBufferIndex, PLOT_SHIFT, cShiftSize); + PlotIndexSetInteger(cKCBufferIndex, PLOT_DRAW_TYPE, cKumoDrawType); + + // + // Short ... + bool sCanShowKumo = showKumo && showShort; + ENUM_DRAW_TYPE sKumoDrawType = sCanShowKumo ? DRAW_FILLING : DRAW_NONE; + + // + // SENKOUSPANA ... + ArraySetAsSeries(sSSAKCBuffer, true); + SetIndexBuffer(sSSAKCBufferIndex, sSSAKCBuffer, INDICATOR_DATA); + PlotIndexSetInteger(sSSAKCBufferIndex, PLOT_DRAW_BEGIN, maxLength); + + // + // SENKOUSPANB ... + ArraySetAsSeries(sSSBKCBuffer, true); + SetIndexBuffer(sSSBKCBufferIndex, sSSBKCBuffer, INDICATOR_DATA); + PlotIndexSetInteger(sSSBKCBufferIndex, PLOT_DRAW_BEGIN, maxLength); + + // + PlotIndexSetInteger(sKCBufferIndex, PLOT_SHOW_DATA, false); + PlotIndexSetInteger(sKCBufferIndex, PLOT_SHIFT, sShiftSize); + PlotIndexSetInteger(sKCBufferIndex, PLOT_DRAW_TYPE, sKumoDrawType); + + // + // Medium ... + bool mCanShowKumo = showKumo && showMedium; + ENUM_DRAW_TYPE mKumoDrawType = mCanShowKumo ? DRAW_FILLING : DRAW_NONE; + + // + // SENKOUSPANA ... + ArraySetAsSeries(mSSAKCBuffer, true); + SetIndexBuffer(mSSAKCBufferIndex, mSSAKCBuffer, INDICATOR_DATA); + PlotIndexSetInteger(mSSAKCBufferIndex, PLOT_DRAW_BEGIN, maxLength); + + // + // SENKOUSPANB ... + ArraySetAsSeries(mSSBKCBuffer, true); + SetIndexBuffer(mSSBKCBufferIndex, mSSBKCBuffer, INDICATOR_DATA); + PlotIndexSetInteger(mSSBKCBufferIndex, PLOT_DRAW_BEGIN, maxLength); + + // + PlotIndexSetInteger(mKCBufferIndex, PLOT_SHOW_DATA, false); + PlotIndexSetInteger(mKCBufferIndex, PLOT_SHIFT, mShiftSize); + PlotIndexSetInteger(mKCBufferIndex, PLOT_DRAW_TYPE, mKumoDrawType); + + // + // Long ... + bool lCanShowKumo = showKumo && showLong; + ENUM_DRAW_TYPE lKumoDrawType = lCanShowKumo ? DRAW_FILLING : DRAW_NONE; + + // + // SENKOUSPANA ... + ArraySetAsSeries(lSSAKCBuffer, true); + SetIndexBuffer(lSSAKCBufferIndex, lSSAKCBuffer, INDICATOR_DATA); + PlotIndexSetInteger(lSSAKCBufferIndex, PLOT_DRAW_BEGIN, maxLength); + + // + // SENKOUSPANB ... + ArraySetAsSeries(lSSBKCBuffer, true); + SetIndexBuffer(lSSBKCBufferIndex, lSSBKCBuffer, INDICATOR_DATA); + PlotIndexSetInteger(lSSBKCBufferIndex, PLOT_DRAW_BEGIN, maxLength); + + // + PlotIndexSetInteger(lKCBufferIndex, PLOT_SHOW_DATA, false); + PlotIndexSetInteger(lKCBufferIndex, PLOT_SHIFT, lShiftSize); + PlotIndexSetInteger(lKCBufferIndex, PLOT_DRAW_TYPE, lKumoDrawType); + + // + // Hind ... + bool hCanShowKumo = showKumo && showHind; + ENUM_DRAW_TYPE hKumoDrawType = hCanShowKumo ? DRAW_FILLING : DRAW_NONE; + + // + // SENKOUSPANA ... + ArraySetAsSeries(hSSAKCBuffer, true); + SetIndexBuffer(hSSAKCBufferIndex, hSSAKCBuffer, INDICATOR_DATA); + PlotIndexSetInteger(hSSAKCBufferIndex, PLOT_DRAW_BEGIN, maxLength); + + // + // SENKOUSPANB ... + ArraySetAsSeries(hSSBKCBuffer, true); + SetIndexBuffer(hSSBKCBufferIndex, hSSBKCBuffer, INDICATOR_DATA); + PlotIndexSetInteger(hSSBKCBufferIndex, PLOT_DRAW_BEGIN, maxLength); + + // + PlotIndexSetInteger(hKCBufferIndex, PLOT_SHOW_DATA, false); + PlotIndexSetInteger(hKCBufferIndex, PLOT_SHIFT, hShiftSize); + PlotIndexSetInteger(hKCBufferIndex, PLOT_DRAW_TYPE, hKumoDrawType); +} + +// +// Calculations ... + +// +// Calculate Buffers ... +void CalculateBuffers( + int bar_index, // Selected Bar Index + const int prevCalculated, + const int ratesTotal, + const double &open[], + const double &high[], + const double &close[], + const double &low[], + const long &tickVolume[] // +) +{ + // + CalculateCycles( + bar_index, + prevCalculated, + ratesTotal, + open, + high, + close, + low, + tickVolume // + ); +} + +// +void CalculateCycles( + int bar_index, // Selected Bar Index + const int prevCalculated, + const int ratesTotal, + const double &open[], + const double &high[], + const double &close[], + const double &low[], + const long &tickVolume[] // +) +{ + // + // CURRENT ... + CalculateCycle( + // + bar_index, + prevCalculated, + ratesTotal, + // + open, + high, + close, + low, + tickVolume, + // + mCTenkanSenLength, + mCKijunSenLength, + mCSenkouSpanBLength, + // + cTenBuffer, + cKijBuffer, + cChikBuffer, + cSSABuffer, + cSSBBuffer, + cSSAKCBuffer, + cSSBKCBuffer + // + ); + + // + // SHORT ... + CalculateCycle( + // + bar_index, + prevCalculated, + ratesTotal, + // + open, + high, + close, + low, + tickVolume, + // + mSTenkanSenLength, + mSKijunSenLength, + mSSenkouSpanBLength, + // + sTenBuffer, + sKijBuffer, + sChikBuffer, + sSSABuffer, + sSSBBuffer, + sSSAKCBuffer, + sSSBKCBuffer + // + ); + + // + // MEDIUM ... + CalculateCycle( + // + bar_index, + prevCalculated, + ratesTotal, + // + open, + high, + close, + low, + tickVolume, + // + mMTenkanSenLength, + mMKijunSenLength, + mMSenkouSpanBLength, + // + mTenBuffer, + mKijBuffer, + mChikBuffer, + mSSABuffer, + mSSBBuffer, + mSSAKCBuffer, + mSSBKCBuffer + // + ); + + // + // LONG ... + CalculateCycle( + // + bar_index, + prevCalculated, + ratesTotal, + // + open, + high, + close, + low, + tickVolume, + // + mLTenkanSenLength, + mLKijunSenLength, + mLSenkouSpanBLength, + // + lTenBuffer, + lKijBuffer, + lChikBuffer, + lSSABuffer, + lSSBBuffer, + lSSAKCBuffer, + lSSBKCBuffer + // + ); + + // + // HIND ... + CalculateCycle( + // + bar_index, + prevCalculated, + ratesTotal, + // + open, + high, + close, + low, + tickVolume, + // + mHTenkanSenLength, + mHKijunSenLength, + mHSenkouSpanBLength, + // + hTenBuffer, + hKijBuffer, + hChikBuffer, + hSSABuffer, + hSSBBuffer, + hSSAKCBuffer, + hSSBKCBuffer + // + ); +} + +// +void CalculateCycle( + int bar_index, // Selected Bar Index + const int prevCalculated, + const int ratesTotal, + const double &open[], + const double &high[], + const double &close[], + const double &low[], + const long &tickVolume[], + // + int _tenkanSenLength, + int _kijunSenLength, + int _senkouSpanBLength, + // + double &_tenkanSenBuffer[], + double &_kijunSenBuffer[], + double &_chikouSpanBuffer[], + double &_senkouABuffer[], + double &_senkouBBuffer[], + double &_cloudSenkouSpanABuffer[], + double &_cloudSenkouSpanBBuffer[] + // +) +{ + // + double topValue; + double bottomValue; + + // + // TENKANSEN ... + + // + // Extract Tenkan Sen Top/Bottom Calculation Mode based on User Input ... + if (mTenkanSenTopMode == NULL || mTenkanSenBottomMode == NULL) + { + // + switch (tenkanSenMode) + { + // + case X_XICH_HH_LL_MODE: + // + mTenkanSenTopMode = MODE_HIGH; + mTenkanSenBottomMode = MODE_LOW; + break; + + // + case X_XICH_HO_LC_MODE: + // + mTenkanSenTopMode = MODE_OPEN; + mTenkanSenBottomMode = MODE_CLOSE; + break; + } + } + + // + XOHCL bar; + bar.Init( + _Symbol, + _Period, + bar_index + // + ); + + // + // Calculate Top ... + topValue = bar + .FindHighest( + _tenkanSenLength, + mTenkanSenTopMode + // + ); + + // + // Calculate Bottom ... + bottomValue = bar + .FindLowest( + _tenkanSenLength, + mTenkanSenBottomMode + // + ); + + // + double tenkanSenValue = (topValue + bottomValue) / 2; + _tenkanSenBuffer[bar_index] = tenkanSenValue; + + // + // KIJUNSEN ... + + // + // Extract Kijun Sen Top/Bottom Calculation Mode based on User Input ... + if (mKijunSenTopMode == NULL || mKijunSenBottomMode == NULL) + { + // + switch (kijunSenMode) + { + // + case X_XICH_HH_LL_MODE: + // + mKijunSenTopMode = MODE_HIGH; + mKijunSenBottomMode = MODE_LOW; + break; + + // + case X_XICH_HO_LC_MODE: + // + mKijunSenTopMode = MODE_OPEN; + mKijunSenBottomMode = MODE_CLOSE; + break; + } + } + + // + // Calculate Top ... + topValue = bar + .FindHighest( + _kijunSenLength, + mKijunSenTopMode + // + ); + + // + // Calculate Bottom ... + bottomValue = bar + .FindLowest( + _kijunSenLength, + mKijunSenBottomMode + // + ); + + // + double kijunSenValue = (topValue + bottomValue) / 2; + _kijunSenBuffer[bar_index] = kijunSenValue; + + // + // CHIKOUSPAN ... + double chikouSpanValue = bar + .GetPrice(chikuoSpanAppliedTo); + + // + _chikouSpanBuffer[bar_index] = chikouSpanValue; + + // + // KUMO ... + + // + // SENKOUSPANA ... + double senkouSpanAValue = (tenkanSenValue + kijunSenValue) / 2; + _senkouABuffer[bar_index] = senkouSpanAValue; + _cloudSenkouSpanABuffer[bar_index] = senkouSpanAValue; + + // + // SENKOUSPANB ... + + // + // Extract Senkou Span B Top/Bottom Calculation Mode based on User Input ... + if (mSenkouSpanBTopMode == NULL || mSenkouSpanBBottomMode == NULL) + { + // + switch (senkouSpanBMode) + { + // + case X_XICH_HH_LL_MODE: + // + mSenkouSpanBTopMode = MODE_HIGH; + mSenkouSpanBBottomMode = MODE_LOW; + break; + + // + case X_XICH_HO_LC_MODE: + // + mSenkouSpanBTopMode = MODE_OPEN; + mSenkouSpanBBottomMode = MODE_CLOSE; + break; + } + } + + // + // Calculate Top ... + topValue = bar + .FindHighest( + _senkouSpanBLength, + mSenkouSpanBTopMode + // + ); + + // + // Calculate Bottom ... + bottomValue = bar + .FindLowest( + _senkouSpanBLength, + mSenkouSpanBBottomMode + // + ); + + // + double senkouSpanBValue = (topValue + bottomValue) / 2; + _senkouBBuffer[bar_index] = senkouSpanBValue; + _cloudSenkouSpanBBuffer[bar_index] = senkouSpanBValue; + + // +} + +// \ No newline at end of file diff --git a/BKPS/Indicators 14030517/x-saherelm.xchm.ex5 b/BKPS/Indicators 14030517/x-saherelm.xchm.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..f028f4329ae09c3b6db94764b6ea6eab25541b16 GIT binary patch literal 38216 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 T@H1AZ)fb~= maxLength && + BarsCalculated(cSlowHandler) >= maxLength && + // + // Short ... + BarsCalculated(sFastHandler) >= maxLength && + BarsCalculated(sSlowHandler) >= maxLength && + // + // Medium ... + BarsCalculated(mFastHandler) >= maxLength && + BarsCalculated(mSlowHandler) >= maxLength && + // + // Long ... + BarsCalculated(lFastHandler) >= maxLength && + BarsCalculated(lSlowHandler) >= maxLength && + // + // Hind ... + BarsCalculated(hFastHandler) >= maxLength && + BarsCalculated(hSlowHandler) >= maxLength + // + ; + if (!isPassedRequiredCalculatedBars) + { + return prev_calculated; + } + + // + limit = + (prev_calculated > rates_total || prev_calculated <= 0) + ? rates_total + : (rates_total - prev_calculated) + 1; + + // + // Buffers Copy ... + + // + // Current ... + int copiedCFasts = CopyBuffer(cFastHandler, 0, 0, limit, cFastBuffer); + int copiedCSlows = CopyBuffer(cSlowHandler, 0, 0, limit, cSlowBuffer); + + // + // Short ... + int copiedSFasts = CopyBuffer(sFastHandler, 0, 0, limit, sFastBuffer); + int copiedSSlows = CopyBuffer(sSlowHandler, 0, 0, limit, sSlowBuffer); + + // + // Medium ... + int copiedMFasts = CopyBuffer(mFastHandler, 0, 0, limit, mFastBuffer); + int copiedMSlows = CopyBuffer(mSlowHandler, 0, 0, limit, mSlowBuffer); + + // + // Long ... + int copiedLFasts = CopyBuffer(lFastHandler, 0, 0, limit, lFastBuffer); + int copiedLSlows = CopyBuffer(lSlowHandler, 0, 0, limit, lSlowBuffer); + + // + // Hind ... + int copiedHFasts = CopyBuffer(hFastHandler, 0, 0, limit, hFastBuffer); + int copiedHSlows = CopyBuffer(hSlowHandler, 0, 0, limit, hSlowBuffer); + + // + // Validate Copied Items ... + bool isPassedRequiredCopiedItems = + // + // + // Current ... + copiedCFasts > 0 && + copiedCSlows > 0 && + // + // Short ... + copiedSFasts > 0 && + copiedSSlows > 0 && + // + // Medium ... + copiedMFasts > 0 && + copiedMSlows > 0 && + // + // Long ... + copiedLFasts > 0 && + copiedLSlows > 0 && + // + // Hind ... + copiedHFasts > 0 && + copiedHSlows > 0 + // + ; + if (!isPassedRequiredCopiedItems) + { + return prev_calculated; + } + + // + // Main Loop ... + for (int i = limit - 1; i >= 0 && !IsStopped(); i--) + { + CalculateBuffers(i); + } + + // + return rates_total; +} + +// +// CUSTOM Functions ... + +// +// Validate Input Args for Initialization ... +bool ValidateInputs() +{ + // + bool result = + // + fastLength > 2 && + slowLength > fastLength && + // + (IsValid(scMethod, scPeriod) && + IsValid(mcMethod, mcPeriod) && + IsValid(lcMethod, lcPeriod) && + IsValid(hcMethod, hcPeriod)) + // + ; + + // + return result; +} + +// +// Retrieve all Exists Input Max Length ... +// use for Start Of Drawing ... +int ExtractMaxLengthOfInputs() +{ + // + int result = 0; + + // + // Current ... + result = MathMax(fastLength, slowLength); + + // + // Short ... + result = MathMax(result, mSCFastLength); + result = MathMax(result, mSCSlowLength); + + // + // Medium ... + result = MathMax(result, mMCFastLength); + result = MathMax(result, mMCSlowLength); + + // + // Long ... + result = MathMax(result, mLCFastLength); + result = MathMax(result, mLCSlowLength); + + // + // Hind ... + result = MathMax(result, mHCFastLength); + result = MathMax(result, mHCSlowLength); + + // + return result; +} + +// +// Set Indicator Short Name and also we can define Buffers Labels ... +void SetIndicatorName() +{ + // + IndicatorSetInteger(INDICATOR_DIGITS, _Digits); + IndicatorSetString(INDICATOR_SHORTNAME, ShortName); +} + +// +// Define Indexes and Styles ... +void DefineBuffers() +{ + // + // AVG ... + + // + // Fast ... + ENUM_DRAW_TYPE avgFastDrawType = showFast ? DRAW_LINE : DRAW_NONE; + ArraySetAsSeries(avgFastBuffer, true); + SetIndexBuffer(avgFastBufferIndex, avgFastBuffer, INDICATOR_DATA); + PlotIndexSetDouble(avgFastBufferIndex, PLOT_EMPTY_VALUE, 0); + PlotIndexSetInteger(avgFastBufferIndex, PLOT_DRAW_BEGIN, maxLength); + PlotIndexSetInteger(avgFastBufferIndex, PLOT_SHOW_DATA, showFast); + PlotIndexSetInteger(avgFastBufferIndex, PLOT_DRAW_TYPE, avgFastDrawType); + + // + // Slow ... + ENUM_DRAW_TYPE avgSlowDrawType = showSlow ? DRAW_LINE : DRAW_NONE; + ArraySetAsSeries(avgSlowBuffer, true); + SetIndexBuffer(avgSlowBufferIndex, avgSlowBuffer, INDICATOR_DATA); + PlotIndexSetDouble(avgSlowBufferIndex, PLOT_EMPTY_VALUE, 0); + PlotIndexSetInteger(avgSlowBufferIndex, PLOT_DRAW_BEGIN, maxLength); + PlotIndexSetInteger(avgSlowBufferIndex, PLOT_SHOW_DATA, showSlow); + PlotIndexSetInteger(avgSlowBufferIndex, PLOT_DRAW_TYPE, avgSlowDrawType); + + // + // Current ... + + // + // Fast ... + ENUM_DRAW_TYPE cFastDrawType = showCCFast ? DRAW_LINE : DRAW_NONE; + ArraySetAsSeries(cFastBuffer, true); + SetIndexBuffer(cFastBufferIndex, cFastBuffer, INDICATOR_DATA); + PlotIndexSetDouble(cFastBufferIndex, PLOT_EMPTY_VALUE, 0); + PlotIndexSetInteger(cFastBufferIndex, PLOT_DRAW_BEGIN, maxLength); + PlotIndexSetInteger(cFastBufferIndex, PLOT_SHOW_DATA, showCCFast); + PlotIndexSetInteger(cFastBufferIndex, PLOT_DRAW_TYPE, cFastDrawType); + + // + // Slow ... + ENUM_DRAW_TYPE cSlowDrawType = showCCSlow ? DRAW_LINE : DRAW_NONE; + ArraySetAsSeries(cSlowBuffer, true); + SetIndexBuffer(cSlowBufferIndex, cSlowBuffer, INDICATOR_DATA); + PlotIndexSetDouble(cSlowBufferIndex, PLOT_EMPTY_VALUE, 0); + PlotIndexSetInteger(cSlowBufferIndex, PLOT_DRAW_BEGIN, maxLength); + PlotIndexSetInteger(cSlowBufferIndex, PLOT_SHOW_DATA, showCCSlow); + PlotIndexSetInteger(cSlowBufferIndex, PLOT_DRAW_TYPE, cSlowDrawType); + + // + // Short ... + + // + // Fast ... + ENUM_DRAW_TYPE sFastDrawType = showSCFast ? DRAW_LINE : DRAW_NONE; + ArraySetAsSeries(sFastBuffer, true); + SetIndexBuffer(sFastBufferIndex, sFastBuffer, INDICATOR_DATA); + PlotIndexSetDouble(sFastBufferIndex, PLOT_EMPTY_VALUE, 0); + PlotIndexSetInteger(sFastBufferIndex, PLOT_DRAW_BEGIN, maxLength); + PlotIndexSetInteger(sFastBufferIndex, PLOT_SHOW_DATA, showSCFast); + PlotIndexSetInteger(sFastBufferIndex, PLOT_DRAW_TYPE, sFastDrawType); + + // + // Slow ... + ENUM_DRAW_TYPE sSlowDrawType = showSCSlow ? DRAW_LINE : DRAW_NONE; + ArraySetAsSeries(sSlowBuffer, true); + SetIndexBuffer(sSlowBufferIndex, sSlowBuffer, INDICATOR_DATA); + PlotIndexSetDouble(sSlowBufferIndex, PLOT_EMPTY_VALUE, 0); + PlotIndexSetInteger(sSlowBufferIndex, PLOT_DRAW_BEGIN, maxLength); + PlotIndexSetInteger(sSlowBufferIndex, PLOT_SHOW_DATA, showSCSlow); + PlotIndexSetInteger(sSlowBufferIndex, PLOT_DRAW_TYPE, sSlowDrawType); + + // + // Medium ... + + // + // Fast ... + ENUM_DRAW_TYPE mFastDrawType = showMCFast ? DRAW_LINE : DRAW_NONE; + ArraySetAsSeries(mFastBuffer, true); + SetIndexBuffer(mFastBufferIndex, mFastBuffer, INDICATOR_DATA); + PlotIndexSetDouble(mFastBufferIndex, PLOT_EMPTY_VALUE, 0); + PlotIndexSetInteger(mFastBufferIndex, PLOT_DRAW_BEGIN, maxLength); + PlotIndexSetInteger(mFastBufferIndex, PLOT_SHOW_DATA, showMCFast); + PlotIndexSetInteger(mFastBufferIndex, PLOT_DRAW_TYPE, mFastDrawType); + + // + // Slow ... + ENUM_DRAW_TYPE mSlowDrawType = showMCSlow ? DRAW_LINE : DRAW_NONE; + ArraySetAsSeries(mSlowBuffer, true); + SetIndexBuffer(mSlowBufferIndex, mSlowBuffer, INDICATOR_DATA); + PlotIndexSetDouble(mSlowBufferIndex, PLOT_EMPTY_VALUE, 0); + PlotIndexSetInteger(mSlowBufferIndex, PLOT_DRAW_BEGIN, maxLength); + PlotIndexSetInteger(mSlowBufferIndex, PLOT_SHOW_DATA, showMCSlow); + PlotIndexSetInteger(mSlowBufferIndex, PLOT_DRAW_TYPE, mSlowDrawType); + + // + // Long ... + + // + // Fast ... + ENUM_DRAW_TYPE lFastDrawType = showLCFast ? DRAW_LINE : DRAW_NONE; + ArraySetAsSeries(lFastBuffer, true); + SetIndexBuffer(lFastBufferIndex, lFastBuffer, INDICATOR_DATA); + PlotIndexSetDouble(lFastBufferIndex, PLOT_EMPTY_VALUE, 0); + PlotIndexSetInteger(lFastBufferIndex, PLOT_DRAW_BEGIN, maxLength); + PlotIndexSetInteger(lFastBufferIndex, PLOT_SHOW_DATA, showLCFast); + PlotIndexSetInteger(lFastBufferIndex, PLOT_DRAW_TYPE, lFastDrawType); + + // + // Slow ... + ENUM_DRAW_TYPE lSlowDrawType = showLCSlow ? DRAW_LINE : DRAW_NONE; + ArraySetAsSeries(lSlowBuffer, true); + SetIndexBuffer(lSlowBufferIndex, lSlowBuffer, INDICATOR_DATA); + PlotIndexSetDouble(lSlowBufferIndex, PLOT_EMPTY_VALUE, 0); + PlotIndexSetInteger(lSlowBufferIndex, PLOT_DRAW_BEGIN, maxLength); + PlotIndexSetInteger(lSlowBufferIndex, PLOT_SHOW_DATA, showLCSlow); + PlotIndexSetInteger(lSlowBufferIndex, PLOT_DRAW_TYPE, lSlowDrawType); + + // + // Hind ... + + // + // Fast ... + ENUM_DRAW_TYPE hFastDrawType = showHCFast ? DRAW_LINE : DRAW_NONE; + ArraySetAsSeries(hFastBuffer, true); + SetIndexBuffer(hFastBufferIndex, hFastBuffer, INDICATOR_DATA); + PlotIndexSetDouble(hFastBufferIndex, PLOT_EMPTY_VALUE, 0); + PlotIndexSetInteger(hFastBufferIndex, PLOT_DRAW_BEGIN, maxLength); + PlotIndexSetInteger(hFastBufferIndex, PLOT_SHOW_DATA, showHCFast); + PlotIndexSetInteger(hFastBufferIndex, PLOT_DRAW_TYPE, hFastDrawType); + + // + // Slow ... + ENUM_DRAW_TYPE hSlowDrawType = showHCSlow ? DRAW_LINE : DRAW_NONE; + ArraySetAsSeries(hSlowBuffer, true); + SetIndexBuffer(hSlowBufferIndex, hSlowBuffer, INDICATOR_DATA); + PlotIndexSetDouble(hSlowBufferIndex, PLOT_EMPTY_VALUE, 0); + PlotIndexSetInteger(hSlowBufferIndex, PLOT_DRAW_BEGIN, maxLength); + PlotIndexSetInteger(hSlowBufferIndex, PLOT_SHOW_DATA, showHCSlow); + PlotIndexSetInteger(hSlowBufferIndex, PLOT_DRAW_TYPE, hSlowDrawType); +} + +// +// Initial Market Cycles ... +bool InitMarketCycles() +{ + // + bool result = false; + + // + // Current Cycle Initialization ... + + // + int cPeriodSeconds = PeriodSeconds(_Period); + + // + // Initialize Handlers ... + cFastHandler = iMA( + _Symbol, + _Period, + fastLength, + 0, + method, + appliedTo // + ); + cSlowHandler = iMA( + _Symbol, + _Period, + slowLength, + 0, + method, + appliedTo // + ); + result = + // + cFastHandler != INVALID_HANDLE && + cSlowHandler != INVALID_HANDLE + // + ; + if (!result) + { + return result; + } + + // + // Short Cycle Initialization ... + + // + // Find Cycle Period ... + if (scMethod == X_PERIOD_AUTO) + { + // + // Select Period ... + mSCPeriod = GetCyclePeriod( + X_MARKET_CYCLE_SHORT, + _Period // + ); + } + else + { + mSCPeriod = scPeriod; + } + + // + result = IsValid(mSCPeriod); + if (!result) + { + return result; + } + + // + mSCLength = PeriodSeconds(mSCPeriod) / cPeriodSeconds; + mSCFastLength = fastLength * mSCLength; + mSCSlowLength = slowLength * mSCLength; + + // + result = mSCLength > 0; + if (!result) + { + return result; + } + + // + // Initialize Handlers ... + sFastHandler = iMA( + _Symbol, + _Period, + mSCFastLength, + 0, + method, + appliedTo // + ); + sSlowHandler = iMA( + _Symbol, + _Period, + mSCSlowLength, + 0, + method, + appliedTo // + ); + result = + // + sFastHandler != INVALID_HANDLE && + sSlowHandler != INVALID_HANDLE + // + ; + if (!result) + { + return result; + } + + // + // Medium Cycle Initialization ... + + // + // Find Cycle Period ... + if (mcMethod == X_PERIOD_AUTO) + { + // + // Select Period ... + mMCPeriod = GetCyclePeriod( + X_MARKET_CYCLE_MEDIUM, + _Period // + ); + } + else + { + mMCPeriod = mcPeriod; + } + + // + result = IsValid(mMCPeriod); + if (!result) + { + return result; + } + + // + mMCLength = PeriodSeconds(mMCPeriod) / cPeriodSeconds; + mMCFastLength = fastLength * mMCLength; + mMCSlowLength = slowLength * mMCLength; + + // + result = mMCLength > 0; + if (!result) + { + return result; + } + + // + // Initialize Handlers ... + mFastHandler = iMA( + _Symbol, + _Period, + mMCFastLength, + 0, + method, + appliedTo // + ); + mSlowHandler = iMA( + _Symbol, + _Period, + mMCSlowLength, + 0, + method, + appliedTo // + ); + result = + // + mFastHandler != INVALID_HANDLE && + mSlowHandler != INVALID_HANDLE + // + ; + if (!result) + { + return result; + } + + // + // Long Cycle Initialization ... + + // + // Find Cycle Period ... + if (lcMethod == X_PERIOD_AUTO) + { + // + // Select Period ... + mLCPeriod = GetCyclePeriod( + X_MARKET_CYCLE_LONG, + _Period // + ); + } + else + { + mLCPeriod = lcPeriod; + } + + // + result = IsValid(mLCPeriod); + if (!result) + { + return result; + } + + // + mLCLength = PeriodSeconds(mLCPeriod) / cPeriodSeconds; + mLCFastLength = fastLength * mLCLength; + mLCSlowLength = slowLength * mLCLength; + + // + result = mLCLength > 0; + if (!result) + { + return result; + } + + // + // Initialize Handlers ... + lFastHandler = iMA( + _Symbol, + _Period, + mLCFastLength, + 0, + method, + appliedTo // + ); + lSlowHandler = iMA( + _Symbol, + _Period, + mLCSlowLength, + 0, + method, + appliedTo // + ); + result = + // + lFastHandler != INVALID_HANDLE && + lSlowHandler != INVALID_HANDLE + // + ; + if (!result) + { + return result; + } + + // + // Hind Cycle Initialization ... + + // + // Find Cycle Period ... + if (hcMethod == X_PERIOD_AUTO) + { + // + // Select Period ... + mHCPeriod = GetCyclePeriod( + X_MARKET_CYCLE_HIND, + _Period // + ); + } + else + { + mHCPeriod = hcPeriod; + } + + // + result = IsValid(mHCPeriod); + if (!result) + { + return result; + } + + // + mHCLength = PeriodSeconds(mHCPeriod) / cPeriodSeconds; + mHCFastLength = fastLength * mHCLength; + mHCSlowLength = slowLength * mHCLength; + + // + result = mHCLength > 0; + if (!result) + { + return result; + } + + // + // Initialize Handlers ... + hFastHandler = iMA( + _Symbol, + _Period, + mHCFastLength, + 0, + method, + appliedTo // + ); + hSlowHandler = iMA( + _Symbol, + _Period, + mHCSlowLength, + 0, + method, + appliedTo // + ); + result = + // + hFastHandler != INVALID_HANDLE && + hSlowHandler != INVALID_HANDLE + // + ; + if (!result) + { + return result; + } + + // + return result; +} + +// +// Do all Custom Calculations ... +void CalculateBuffers(int barIndex) +{ + // + double cFast = cFastBuffer[barIndex]; + double sFast = sFastBuffer[barIndex]; + double mFast = mFastBuffer[barIndex]; + double lFast = lFastBuffer[barIndex]; + double hFast = hFastBuffer[barIndex]; + + // + double fast = + cFast + + sFast + + mFast + + lFast + + hFast; + avgFastBuffer[barIndex] = fast / 5; + + // + double cSlow = cSlowBuffer[barIndex]; + double sSlow = sSlowBuffer[barIndex]; + double mSlow = mSlowBuffer[barIndex]; + double lSlow = lSlowBuffer[barIndex]; + double hSlow = hSlowBuffer[barIndex]; + + // + double slow = + cSlow + + sSlow + + mSlow + + lSlow + + hSlow; + avgSlowBuffer[barIndex] = slow / 5; +} + +// \ No newline at end of file diff --git a/BKPS/Indicators 14030517/x-saherelm.xchstr.ex5 b/BKPS/Indicators 14030517/x-saherelm.xchstr.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..717b1a6952e94b67c48468726ccb34f81e037f92 GIT binary patch literal 36208 zcmdS8V~}P+wediuTb%@=d$$NfKv%x|0sW@{0sU9?ztR6{n}Oy~Z7I`K{BYN}wQMGkuVwnR&Y1X}a#%u`sxdsU!4>Je ziWC>&rWC7&zZ@NrCfPaM-8>|Xwm6wzyCg3wy1Ib-|m;U3wO0=O< zbyR%MlRKxhx%-lrbIC!wWpi9O!=Mao8cBbG!9j3ZsGZ3{5!-6HzA1ai&fY@Y!4(RA za6~0LcInT?O^J8O5xn9w9C}im70u8;R5YS+YPIZ$7{HKh0H_3JgQ?g5qDTCr<>D2u z1#%g0%Lln(Qlq7^wgkouE7C1MC!gRmpO$96W?i-^hgSL~x+`EUbp4u_t897D>_>@(h>-jUjn2m8QqDAj0fHyoh(;x9igwFm_7xlyr>^p^ecBk*)E~<|(zYE@x8;Bqc1=d+F0vD-x^09gz~# z75~8FW7P60-c=0b5g@s6&dMzvyZ~ddK>lKY>m|4HN+vaygpHzYrC)xYBodPSq$3Z0 zR5oA6O%ZquS#)AtSysszl&uaPka&I;9c%2A)qX%+uF6PGf<~rQ_R8z z%)uLY!uOCM`3e<~`orWCfGQuBc5BM&;#2J=TW6BukI=agEht+tkRcS+?8_Nz zcnHsGW5oAyh@)LswE$DfXdAYb9Z3LYvk39Hi-+na*+WM|Y%R=$0~1}HGSmi}F+g67 zw$39=`R#zAZj&j&?4hH>skwld9Zd!=p_>1&lm)!BEnWmZ9sIDr z&eoY;J(R_&JQKoXVi9#DcT3HFnz0QlTBBf~eZ~H5fAbdhiBv>mD^ctyMHGhNbeyKk zEk*QK&~s&O8=Gx9`phTG#@B_5cKywZd{pyyV^?Z}5G5QO#n1+K#Z{1F|M)IU)Fzsp z7>=emH5vAT*pK+w0j%^QgntGhY9pI$xWh;6b55sbEP@3m2lw zZ9IO)BBVE(oiVxLSGjweo#FYGC1Gs_*``M!90o;Cv>&;9@ImkCBh zG?2S+(OeH9E49Dy_?Wv!aCbnR^Dn*RYJ_FT8jX_0(z)y2H@GPs14k@VX45R}5FFBT zvU(}sIyRRd&!)0E&`D{2YJOc=e)WymCwR7RNR8KRVhc76SvLKT`%tDV=s(Wmy)nqy z9(uX~kQ+FxG>z_nMx_*sp9)O5A$o*d+CDN(C3@+ju8#e)cX)w2b`p6WT>T2i+A}SZ z$5vQ30&I+Pn7$;cfnQm{HImM9?BWw|aW(EaASwB8qnX%7t?+L3R5){s$eZrPo=fet&309oQftdPvks<0eM%cs zZn}7V?H`BQBTYN3Y(Yo)JTC8Z=MRC}GH`Pnuj&9Cm`^M;-AMiA5|9dhQTR@WDPXfb zk3KfrwAI>jtw39rbv!Ij#~m2N#k8Vh9pBXIh$-hUE6l~Ug-S2A?=j5PBQiTIdk{u* zxh*4+GFFx-&EwkDn@ZG?F0G5#!$OS#x6)XDCy2&_A3bZ{geaCSvcX}Q=1N8E6V?pzP$xdqeCl< z+l-+Q*^dGjr74~;2_B7rk4LIYV27d_5!}~!xKCf@itZ*tgq$q`6W5PdQp;+=|Gm3H zr(qkTN?>6Ze2PI3QgG^lis6H)$gRnAGa+o;$f>{7<0J^+S>35gOvyDTyFwFq+0UuS zvL{Wuykflgd_8&pqe7YP8ohbpUHb)mqhANR#`Clnz|eHhLt*lbuZdsO9h&x-k^_jK zT{I{|i170a5nrOQH3`$&k|J-nBg$+4-RHvB6IOUK%cmQs|?k0?wWh^5K3 zG99dpLq^iooB8iS2PDawbCv!f5=*@EPU*z$s#!v!%l$89xB)CW{x~G^V}LNR$DnQ- z_6>N(N;lPon5Shx(nFY(l8L3Ajbd2&V*ava=E0byG z)92~dZecq}G;a(lm#zn63dhBKV(OAtlB~VyAhV?4)+CfDReOAFRi?pT$<{|i7TTSm zJ-=0-WP#+n(tNJB*96)fiogWNPS#F;uzQ2+v$3xDN4^_W3gJZ3>$kF)==ik_Wh+sq zS`J+B%zjVTQ5Y&YO;bO(&)x_uvReTfUF3NX$w3BpevKnj8-=>VMN0>3Bg(IJNz`CK zVKIW&mbS10j+b*`mN+^WiF^TkP_IOWSS6;wi`rN}FR(OI(R0Ern-HNPr|HH#pj6-b zV)ajNN|X5=gRe5fy|8&yo|ydG!KXo!SPCbTOm*tGFUloXC6jaGo!hl-ZRC zq}lI-Nj$hKFS~(yR7RzqwTBo6>{n|hGq-a@`$Rw_zN}furGsd7CQudZ5|gtkgMPI>2SoPQA z3zR*hT$F1`*~(3E6*}R+v0LUS@@N@iZ*c(8{S5YNT3oS?7~?JN`eLR9$^pM409KT; zAb7<3xn>eRAG8DXQV28uB!I@Y!T3f*o*k8xx-^2!$1iyRfBpV#!V{JMq!*6F+=cL~ zzULYP#+maQD&y=$3Cb(@l5xOOGGL`L6Rp;Ru=#-|B~1~^@f+#M|Ji_bzEXEq87Wel zhVH{7eA;C+q;5G|WH@(yWdP%9)UQJRw{y+$nrC2+kNJ5WMEE0Aw^vw=bC2bC%wf|$ zOaz8b0s1CX8o5{Lju_Jtm6|eF<76mQR;33S4^({D-C){G^R(X?f@~TB=Y+upVb%2j zId*3(1dovy>Lx388VKhVp3&93dNyEPs^^=VsBbHEn;E5sYXi(Ayn42vMy4LL)(Gn$ z?a2v~g1o^Qc<3M9yD zs$(sc32PyOKLlJnl^)!T1YhS;?Rl9+Oy!Jsq~Tc;t^J^&}pq_rd7S>qC5taF_3 z8O){WUoTf@Wxo|wZj2788xo08Juf8FaWG$)DjAwvlE{2_?hPW{3J7e!vOS8}QSG3U z1)i%y1}GGgO(Coj`r?$aO#RNz)uf0R&>H)`uH`A}py1*yJ1FM|AP?%v<`)~#MaS0o zYMEZAR03_njOGa){E&CTr_d-SA>Ho%^3o-)1>}r7=k!hoh5#daL{D< zoQ1C~BqYpcBf{*=>m|w8lXetEKpvh9@9?=rB|@s4M`vp+gM)NxpG4N|slJ6yC2_Qs za!xe)2E`wj2_1=U#?{`g;hRLUiMxhHva=-}#PoRk9ZN%!Wmik`iGd2!vuFy;*Y^|M zj|@B&L{aVj>g(y(;!xkbT-pV6gruPPClI4t)oLw+qb;c{c@-M5cGHG)28ea@Bk$uw zLJ*c?Pb3p5bzs!tWLD0kHz2c~Tb17Vwo-v=Z^*yExH0c?Q&ArIZ!vOSx!ynH`uZ_p zdWCfOH-nqH;nM&tW~B=BPESKw#0-b}ZZ@zP9r(-e@p5! zYal3BUNRxE^L2rnMGU~CV}>Fk+XU}t`1@zXO%YlvtsCK4)ZsN3n1Mfp;K+yg(w3D7 zL>xFTP3r>#(Ut!`^M;~=O*2QQVc|JD5+uB3X74UDR>E$hF0J2--9RQex|SijqHPsJ z%w%pp6%;We@6VhCP2z6wU!^%WL=>-k90?6HSX~yNy&a51*I>d_N+33Yccr_fwBd#T zz|ePYPLReNTLFlyoy>m-rKKR^QwmSjSBjiL=yyVIvX!EVs5u&ED z(o$_4$dE`~3s&Hp(qYHZbA^euEaI|3+1tw@=Iag1FQ+O4MJsY(9SW=G^gk0!EnS-7 zSzuz~d0d47>TDHd19axO|I)I@7RI1yg@SR)4#U}yLrSZsm@F^>#iB+X>jPT=XYUjU z!gJ#snm8rf0)|>+N)fsT&|`2sRA}0((OMx z)pn2e0k{eaI~bhY#Di5Pltue}KAQZphjs!$!XCjBzNRUo$Ht^z^vrdN_P*d7XX&>(lP+#!AEp(VGS7W&VhiPi+d=!Ie2y@o4T7 zx+@cM0`z8%T@JGBEYW@vZ&d`tl*t^fGC9EKKq+G9QQjRJYCPkZ(Lmy}6ZiJzK~!rN zIouat-)`9tio!Hz6jIc4j>rVu54X(uKz=NNm9piO3+#bKhe(yy|7D+k3lKRoYHwzr_1% z6`NZs&t1*GC(2L*B;=1k<3!hMfk-T+S@_txPA=~^=>TdJj~d(Ec`y% z>G$SILa5%9cJWI;={iXx#QcN6CtDYKWlh2FN4juT1&)rZUzAAG=R=4x16iC*yHMDd z%Hn;{LDJjv39PXX#>Q0HQupaT?>?Zsm4J>nXn2fea#0n$%-XQ@H5Bw|*s?Gl%v+++ zzA54I{cCjQ#mOCTjm*L)j(%6tW)pC*F0#6=-k=p6nB+a~DgWh-r z(P+Im4p7wdQnaNCfPtsKOnJcR!Mdvv0>tUF9*)l3?FqR)bHB!tZZ^>5c0sh_!&DK zn1C}aTX4ifG$K6zRTN%t=fX3B2b6dCo@%=8$jJsp(e5T?wU)jAk}e*m0eU04;GPax~s)x zMpk}HDa_$NnrZPx2f9+}@N9~T?M(-kv-giNglf6hMx@EM)_#(YM>N$fDLC${4LKq; z{v#31e!MrMTbwq3Cvv*~V?Jko8Bs?Yt5Ag}+{}~$Noamqh7iMQikYwBEokfHi`l@ObWTT~T0UeL&R193 zJSu~Wmy!VJOHhSebMym{zVqo4Ehfi}^eSpLJ)?-)nl{~#F5$a+FzU_gkhOn%B)$-? zgLZfR<7%iNY=o)J1g`h#ZU4BE#17`eul8Glnn4ew~_r6)V9i8|xu?1yZ`i zLAwbgj(-yTIkQ+S-t!0r#=gaA)E^|tFl#Ec-GxP#+?pjL^QDD4BxBiQ2)S`Ust-wb zsea=1*}2=}jW-B@_lt>k=Cntwz0K3MEIX3x-cGg{#zvvx;S(tY)zJDonVw`lc;dqu zZUHej?>0I3x+bI9odT8hJGb<9t&8LJaOgY4cq5L>HwJP$wxOo2&Y_EG3 zT8zI`FnXe+?s~?F<0EXIVXp;rmhTIbwWfz<-`MZO&kSrC#x{zyLZ&!SPJ>ea)_dA+ z+tGfLF}!K*0|?; zYFhqX@|StET)6(yCun*0AK;~79 z=fFwspgXL=UaBjPB6RG1`l}=372sVI0qv9}4ArxeC${*CYc4w7-}T-%;htm+_3cH7 z_T?rZ?~lUqS2b2~Hwoc}DNHKZ)?-5KdW{MwCAI#02=B4+B~H>ax{S*-O^R`?oSI_p~{MvEfdmaq4Ty&re+*t=|c8P)#@e8{&JRR+yCBu z9(+olQ$*S}aqT;-Y%^roCfRZH@eamrVWeE81t~s&eH+C2)cQTL@>aU* z(MRI`Sn4wn=Ca=Y!9zsdQz5b>OQkcY%2nrjwi*Mxevu*08Gjx<8KECQS~Z<*GpWu> z>Y@voQRHFZ&Q?>0fnK^}*acvU*<|9qcpb^1Y_QK2EH|9lvnHDh!B$`#52i;oRek*M ziN<{LeQEp-ha~9d#0=k%4h4x222ToBe7dShz6!K5?HLEMu8W+vG#x`dOwczmhhPVJ zrysdRrEk{tDOflm7vi*7I3GE54+%LCskfCKJwO+Phojxsi*HJAj!WG$4}v~?1h|Ld z;Ma$Y-JQGF;-u2iX@Ge;zD7J_NML8GV-HJ*OixLr{CK;7k{AihhJ-#{Im6`j z&(gQMfi~8!z|~A&D0JIHIGP^IEL9=rmeNu)C*2PE}u^5UKRxad2=Z}kl zJ%7!W7Nl9uW(eG}taBKNfI~FrJoT28OH5Kzh!IpJgHw`d zd{OX`e4=&TRJ$`QwcF!S?JAF6_9CQ7jUVTS)Az3(Ucz;3NNWB9Z#rMXe0qi5z@x~D zrv1{N(0R`4=RNG#ftuI~J02UiT*?bGiVhW&xDCLDp#Vv4K`DYm$0GINdh%|Bu=Lg6 zR-R{er28Rk)M^w@s=4JOT&*!acSXhm*>ZK!VWEKtB%@-)hr8AIp71!}Pm!pEt_ibb z%11HVSnn%Rb;O=0sV?Yr!%qCXtS;xD%7eWVLki`gat$bVJjxDv`Ch&;jO8guF0cVC zZUN-TdGfyvFb2GGto>{LsO=Uma#uY!E)l}=DAGzSST1DuoFOd%N-njGvOtx|``wvOg?*|xYdG8xo>ym@n(gBfFwK@vL9V$a^ygc_L>58~}=3BZyKdQJll;YB0 zK9hZZ*rpqtWgEe3QjBnRL1r3UzBIRxvF&;33G|&TGrRB5Hp+r|`6OU@h4SANGX@uP>M9=i{3Hf~M&$uK00D>R!5H?L!k2ZeR0h z5^ngYKlyYX05)cAdKEQs4>RIu_Ot!1=*MX|KM0*>%MT zS1kp&2bHfVC#h0nQ&Yi`b{!1Msljm=CN!6&LAdRl?~a{O)infQ|FX zS8?wrO`?|F6*bU7q~imP2rP#$46lE2(GMnG?yIY7PwJH#u*Kx;{sN-}gI14iQ5vU;H`dxGRO8P~(+xXZfiS+!l;|nS6v+L7B?}Yt?2b-797T9mK6JEV>uC8Ed#? z(#NY>u2LLo(v%rtLvFT&fCOEN@yQugGcK67Xu(37IHg8VTwwf*7s|$3Yld!@v$;?& z+AWXQ9SWk8fk}j+Qwn4T^>Ry)uu)+`>lB?V=z6A&-#X+H%;~248~57I&?xHG5m&58 z%cwY3?;czjb#m;fUGdRhXw`sH0VcX;ST>-e#kJc(a7h&59S8UW6;?eq(q2E0X<#MI zX=Xf-N1+}4p_MUqIL9XutSKC*LWJvZKOWb|XbsDu_bj^+dSKU(@1z_ajak`L)Ih+) zvIu-L<+H>Z79qj|BulMHrGGJ^B9~#_j`N!5S^_E&+xq81HhRa+O`=Oz ziowk`XF>lqJXEJeMA_ywk6uxajHL$`^*taY zV_X!{rRQrNVC70WfSx4d)P*edvgDVSxyZZY^-_SC0NjQslngoqNDMh*ev?2+S?fCo z+8XuPT}XOw|6d&Ccj4WxHu`Rm(J6L~{uG#rk=3`xtv`akXbGYa5pDq_E9hQG5;k6I z-fjw*!cfw@)Jg*Ggp=%+vHpe$ew1fNI7H}A>ziCkY41|aE58CImvAgdtgUClPO$xO z(}#~>rY5z^RV}j*?13me;49ihr4vx*O&N}>#+atADT)~nb^W&$h{rMoe!Js;vv_`S zQ(aH=n)e3IUR;-mzi`tT`x>-ZmGKtlDMu50M{|E*4DeIEpZq-8RBx1I3SUK>&uR(V zXh@0K?E5+IUF?CN*vua-{5p1(mr3=qT=7Gsx5KZ(ScbWCIZN-dLXN_3TDcgt4NZNr zrxSKWmr70+(913#`G7?b90a0 z7C-wIbvCJ5*=c?TG-T0wW;(1#y~XV;qr&3;o7{1aJnhs;ue^v;5h;yg5ENuHgC12R z+zqcV)+={7MCpgom3urjf#(d9lvB5=)1xhudd*^rb|aFFxizbbI9L&DQMhdMYdsFd zcT;t$!4|e{fLCoDL}0psyH?1zY-3Kfhq6z=M>{%uwFXKiIGosnBwSSDnlv0%1}SL5 z(4aBaekI#+ZJ@8rB%$`ek-+Uh5bE?x?ib&}wo)v*_N;7)m>BUVLX0VBt6orN(TSak z+l{7^CRX&)#0?wF>rCoPB=7y708Vr-nqyKFBK01AV-3!{RSad9!h{?zxt#Z%Q5TgY zOX+&;!)p?UeCM)7s6ZmGMhUU>tefgVZ3K#%{J6W)hV*iMucux=yd$XC<*Uta6Z~iT zk2xldU+X)cF}EkiTFASX!Ox?1Mw5j@U(^xf)wqz=ii`|Go)yQwL6lht278IrsDKzQ?HHk)5)711WLZTY z1?MUj%O-1}?kOjG^v0AnAE@nV284vD_b28V8`CKT; z{G^KsZM|)wWHOu|-Oyf@G&{T(g(3;TGPrkR>KmOO#)-|g`_3{aNkJp*0$COyr=fMc z=?%;bAZOWqb?Xzgs1`@Xdv=(5-;gXgZmvns?Rs*pF`iL2lnw?532{Wkh*s&4C>*U2 zk#Z=l`4rgaT3>`6Y`G2}0Y`FG%iSY%$N~@&6nJ5dRqoRWjE6-c%Cs>$RLIoTtP;)X z)$4)Ay%jydxU9o!wKDD3M@&AJJ^6N6^+!hLfIVEeaGq<70Ohe z&CgxU!3gJ}H-B%}!`~de7tIRsNn^Lla{2dSh3GKU++Q3!HU*t=J8>`>YGua=y$l&~ z%->|~A>K1r9&21a2xgoWPS%$7kSuFcUYWn9iYM}2p2=VoH|GT7lqJL_F?OwB2AS6y z<5)8SBf&hGUVB^jA3&j;4w^5}svOUnQ-3vd=Gn3hT4ggRqfSRMtQk8}lN_*Xzy;$p zm{ib{`11<{Xa|P|0hZ}bJFQt2sL5!2RelM~M_LwQ5w>xVyoUa1({j^UU!yGs42uC= z+3xFUfxOevkELArexti06{{=v1!;&GQQGsI#S)7bY#k#a3Mxz$B#u|Y?Akw|F$xXJ zbdKO7=~=ysO*y<@n@CVohqz_uOBRu=(+&X6O~Z)}L3Py2^OVX?$FE@+pkigE#PaE5 z(O{BaXqQ%PLGY4^O#VRv>S3B)hl5H7cq3wKEkzsBJ`)!ElhMbD_Ys$?aceX|dpdGr z#91b~C~z-_p)G!f&aKw4Bn^9(!Mfk^tD<}Eg^930Oe6>MoTP9v3*kAHXoqxB09zwC z(5jywp{je|^7Dda!Xu7zV=F|D0@h&Nv8njtQ~1hzEx(uup&a?AsFU54SOKiW$F6swBX_*k2Ity& zPA$e)s*eGlu#+3rJjQ$ z9J=!XZlG=Ej&w!;FNsz{DhWKpn9g9mmgM(pGOn=QJ$WVqSfMzYY&bP?ujd8si znJ;j|5#s_yT~q?khLk1G8qY-pL+n7q{CO}F71$=?bl02~Di8ryqgl;B8S)G?r^zVG8&ijTnhNF7yfh zbTu(1xRS`85GpWdg{%DTXl`4m^2;G}(k@3J50!?e+H90Nltg|Z@wM|T+oP*RpZ=@P z9c8UW)$R^Ia@S^&&Djori->f3)#ZkDV%OkgKH2~ zqN~znJdvMrAnFJ7+>Nws7rm9;_LbA?248>uwdPzCXR^~Wh;7s8)p9qd!XH|tYKs2u z+DzwrPO}>=X&sB`6a;84J{{8{9n*vTz0VW+aR(M>a-}hW@JcYJYC*KRbnU3NUNt?3 z$Vmd$&nZ65Htd}+0Z{h#bgj8ys=@ru^n2?h@TG8hN#_S00@tH4B*doJUSz~E{(8Rw zCB`@4j3&=}vse0a3Azvp>F|&c!~SPRFV~cVycTPLB!qpH!M|`O%llJ3uJ+P|THpPz zDmhEG85rBlp+yCP5OexW4CO@%iVp53Lf*AbyU9JNoI@DCeN& zA33LaLd0`%X57@Ak+ZjqZI@9vBVL=j#|JdWnI~`RqJ8Aj?p+LF5c=?Ard8^C(?rSh z&vW!l2Tu)|=M7}A27OFJcqUy3nQD(_+vDm{Fj%(;nq?X55PuspB{*WF_qj?qm|M=B zZYQoro)m3o#5w66J*hD$Gt{Mo{mFzQVYai1f)_t|d;vS7Have!5U8}&@JvqLiml?L zUiJ(QIuLQQD1RLX$|4v(pICjMmdV<1_w#q@%#YtTbwni zZ7p#VQV41)f|AtkMatw2?z7EGrK*061WrS9c&9!u@Art#L6?_gQPc{}-KD(@Q0R;z z^PKNGf33)3qw(#3KLwvmxiP)hp@TX*d8D`0)LIY|4UPx}x`DGGQ?2a}M}mPmrQ zJ)(@KVYDer*Q{w?JnWKRP!Vdgd5%?X{jMcfEJ3#3sGlupIvc*ro4D?t_=>HB3=E51g+Uss-l`2sJOCkCtc_ioZ@PHyJQI#k>CTb zAbAy!$4ZvuBvPU$LC}SAfP|j@wnaupTAa})%x~xgUD3!B?w)6`@1CI_Zx+wLd&Nps zJafc*r7%>ftreHN_+p2a1N^3>{bw0?3LV8ZP=-HxvQPb>)EM*u$(6pW6@9Fi;Rg|` zm#^%oC)x)Q|Hl~PK$5C(tRrz~>4b`joZ0biwm{^o1wb~hqso}Gm1WKcOJUPuIMGTN z)`qh9*JyGx@0n#wjWRBWvUrgEmJgZZF+-}9Byg2QyPW%8K4JMXf&oXq!*24mRfA23(<;lp>9+mMH zM_PEJQ=DDTbCu*@%HRq1`2HJo)gNK}W!cn4$sy^^5oa%^bM_*cV`%7NKiuCi9GzB< zjd42$#Ln=8YnGhn$gGv!6Ap3+WrQss=Iqltw*0~aR4ZnD@j^!umWhj>|4tlhwRmh| zTe^|ysuP0=eWhecQATP{yo3$uk8Z>=I$=gmv3QBVn^pdd8ihPSL9MGvQ0S6BZSuUx z@7j$BM;3%`mS?an82Hr-c+=PP&oS8XQD*khOs|4bVLxd0VDIXBsuwlNkJf0lI*(W& z9o9$wYEAAaj83UUjVnrb=0PEIbWQ#P(*$24O1!lIzghh?ONiy|NiYisZ9jQckRO2= z)~XsPIM3jiwbAnDuF;o0LvFeaw2xt`!50o#BCd296Z{Rff?f5Gb(v;*_Y{qnhEVgW z!riCmTz@)8@Ih(&-5eHL8tfx?nMtcV@=*g=zpbT4<7bh`}zJD^yIG8;~=VxOv-~fNS+ff8QBgy zb`ju~3I;04$^nk!PFGd>(@9;OXZ`ug6H^SYzzdkOd_xysM;Q}QHyejo9bi-&Hn!u- zjWd&NfM4X(;t0-UuT2rk)vi%^FG@_gUTf{I_yYg7NULg3(q_`D=~$JtfH3M=Dbikn zpUx>f#X`2QVLo{FFZuE1aMPC_+*F|@_Fu*A{#>>2VEjh0r>*QTg!Pr-$E&RkI{#}` z(@`y0wo6D+1-3h=6J1$3-|tMZsIlF`jCF{jnbD zM9&^@34}@kQWLyHBx}9<-3X@-9LC@I&>59(+*S_`RgT68NWHbAqC|SO&f=|mh=@E2vT$vohTHPj3B+ieY~A(dSopqnjT%L1PpgQi}cqZ&u2v_hbuwI(DJD@7@B_iIqXgI z&R|Yts~0KH0*J|Anq$ytF_)c*(6-a@*HC9nQs??&cha!Bz*XK7#07G+id>|0Lv-cc zchf1>@jC~9of0`xP9se5GZu2~yv4JUFRqgXb#*$glN;|h=R`n@{l$84z(^ntq_rhb zMGMuJm-L~%rFe0wtAj6qtZTdLME;xpvI$;nRAkS~;D^y!Y@g=Ag-g}EzNRR4S0Kml zVDnX!Yc1J#sJM-|YnPOuAnRXJUTsH9p^u{GBH!)}KC)Wmo=y`pPJ}$%1s|R)O5D~5 zMj*@|?;1C7gr8Sm>m|EfB}C!{+A}f!GTZsb)PgZ{-E}f&ZYiT`i6TQQ$D$!BeD%wM z2Uk5fu*cK%F$z8FZNM0 zj0vmHEC`vER%|jAyQRv?x^vIxn^uUbw-Aoafi8&EUKx{G%i&-c#kt631lP%1{JGRy}&mpte07OV)d*l%c)`qTnBO24~(0RQwSYps3YQ|SkWn12(ZR|-x+2p6Y+R829d(-{__W&tx!p;8)L zNCCqA5aqAH0Y1gHa*xoI0z< z7q2(-q5}NPYP%o}^Y2mat7uJ$9{x@vK&sI{74`Lk>MnnF6^DP@!nsPQw|(JkwMl4T zoqVdlXuSoDpr2@vw$wdxE498}?fGIZKL{-7Ae?`CY&Z&vwEpM&*NY2x68=X5R>MUp zw^?z#PN&^<%nIeWF&e5pwW~NbjV29|RFma<`Atm9V(X*uTmF779GDAY?YJS?iG74( zB_%oM1$V7D1}}NYXfcy0V9u;H0h{_`Y`I%;ZiRk=6UYNRHFiiR%HGXQ77;(x09a zi8Xkw&HBfB47018c-Q!#c_3zYO_F5NJwEPHRu2mc>fYx)mhG z&k$ZeVhXPwjlu5EwuPdKZW^$6{7iXYN(V$(tdjs$JunGy7muqXHpQd7MA}8Ztfj>^ zTQ3YX%ByX!?&#k+I_IPW>uws{#<%p=JXL1g zIqxA`V)@P>Xr_BEkO6uUyT_CT zcuDbf<>P2})n!l9767wSvrJ4O+Og)hNjq0#V zy3Y{4pNZP?r+gnPz@Mr5-BDC6P)){ZCy9Ikr+tfoB^a`=_!z*sicslw(`BT+vf)o> zVLn5CQ(2LyI{lFay5_C6G>?0?)HuxiTr^x1-hID9y(66QejLG_SH zwLL{b6uar>p&zRi42bu1CInjDn+vmVvu->cTJ-}?cMRfr2EsSlhW|y@JFrLEMO(XZ z(y`5sosMnWb~@_VwmU}0wr$(C&5rHlRQmn)b-sPhFR1IOde)kAj&YA!2ynPw;ER|Xe2w<1Gaw5Rh#eO9=8m}sZ>9MY)1|B z>o#M|7DVC2@A}t!81?wV$SbT9LY`fpiB1eBeWeQ0;tMLv1g z_mM95idDdQz8rOD&0&d#$HP1^y0B7`yWE>8XA3i8SS>QBc_0?QNAl@-KSuZY9~|80 zqCO{kqVUnRa+-;a6-D;E;i$FGDb_SBJ=Sqf7epw(P?mMYjpSJe- zVs^H}+{NrJpBBUHS$NyY2Ug%uJQbb$+3}4Zlq!L8qk*Ct2d^*!F=wrv_A! z5T7@cj&nF>Dn-JnzFE;j{P0h{d*K42B?J8a>umg8w@%yNVLsB?IEu-{16b>a7TKId zHTDQ}K!j0mNz{|$`9Q3Ho1upbYz<=A>(?->EEk|B(84J5kTdK^53ULm9C!60p)nN> zSPo;irznnt&*WBlOb+1@4LQZe+{;adh1&i9-#;1V{@n>)AA8Nev5Rgof0nBA2-|qI z_no%lykoP0`4OMYqh3`Ee#Bh!SmjQ}f8u2I4b&b2?w?_-4ih%8O>O97xQFc%?-L`J z@(_7)sg&~yH8lGvqP}d6IoRcrM*nKx2_Q2qmj^Cfp&&qdjBoHp!{F9zq6BY z8KXq|Mu|7&xaeNPr%*NRHVI)rGuVd?(2I8eppda7E)+xqk;XCdz**|B;QDOjz)?af znn8FPAz4y+5Dcf7@OPFwnpBU>BDkkj#am-sC}b_(p)r?$GtO@%n`BAh{$jm4(boS3 zu&f#o{CT)Zzxk}I4CtVIH-i)9;2tRAclL)2srQZ)f|d)q0erat zMJrk(WSKJQ&A8;#;_Lq8lI4PKap$%75$i_|xi-Nqd03Wy-zjSXV?@Bg;^)n_T+%0H@+l#8f<^X;w zOkN^T%swSFQN*N&d4ejnxEr*{lXF<|Gdt9&lNTqdDEfWylF3yws7-iS#`SAgkxKPG z(7f11eBxo|uVHoZrLWvKzSz1LiN3etltTN4Jr5Wk8ga35h#-Dx z7P})itd9XK*R>ZN_OiBb3&Fd|Xv~q~E&WY_sPIb3RoL1R+^bGt-<9?WX623S=a6^D zc?_p)+$Bp=?Z5OFNfY7d0-=^{*%H%cZE$!}AU{t{44|MW`GDguRFk(2C@07$ED;iQpiphTIhA#w&p9~lsUa*i-7y2zBs`xy7X-|&CM+4%d8iWfF{EuVI_N{fvF=bXoYFhp2Y*T%k{F%u~ZuT(r#)i%{hqP ztoC#77R$fyuvX=sRZyu*Efrqck?E=7x4v!NO&*ub}RU|dd{Y~0}8 zZXvlbwwu-{cb1-pVnbG5i*s}9W$~#W{}K-8Nj{;XF#OiX@iO_Id=wHQTLsUf{WQle z{%zq@j5nTIxkrN{?Wq`&B)^r^G*C@3X!V(@jqG_kT)Fm?ZZqX7#zF|BenXF8em90cNH}rv42!#{Ed8{#$tAvV zN{Q|~8MWhTQKMxUH791Uf*+heVfj(4l9 z2Cjxqy8$JTmGU8YPn=)12lUFz@+XgGIIbsIWzX~vTmDz!!9CB1!Ggk=Cwd_W`zY8J z{?dzi|Bct&5eTfK9zHyAZ2iCpq6ir@8H(%SGtR$+9HG;?)w5H;c?V*qj{J28Zr=>x zsVJk4F^-Xf%(tM5F}FBV3I`nJs=Ie93xL6@*=(jEci^;p99?{meL2Lol^~ zknq=p{1y4C7XP-jz2f=RriqN|f(&04)-OKCq6yEQPLQNJ!AJ0(5==8uZ%BU|=>OPF(Z*|YLE z{xpqJ*~ejk{^)5BP2ATe&lOb5?{EWnepxX*WtN!TK%|{Fog+a1cfh|Byc=6l&Z#>e z9p$1m^HSTYKmZ|q+8mEdbJ03Yv#V#)#aw^`U&W`FACPKM@qQIW>HKF<4Me-?>KmFe z$s_-6)^(5yGwJ)jSb_P%^%OS4q%idg^Nr9^i~$`~FmuG-QS5%_~|YDMR} zGa)IbaKA^>&t&zjILbfJtyjYe@}KK;iRXI@aV1VP2sMV_Xwq6ieWJANCTs^}oEdU# zjqHFUW{li_kEcYqp$_i5K@-j~iV*sB$NUz@-j`G+3DBd&^jOLGMtW~{!|zHwQw}{_ zX+3h%Ctw3&%=z~w9-HY zs~zGet#1#JX|QpvlE&H42FLj?yHR&k+^a4*v52fjet+P*BY)edxu3U%I<`LB1eedJ zk*RkdleD}^dt{Ob9!V;av;_+t|IOdG-Km%o2m&uST32g9MG~qrB@;M4xxVL`P2b9n zGb8_<|5hL((eE?oX9{Ih2m2E>glsAAhPozmts%d$ z?88U=2h?W8k+-tzpser&H|~qHHMJF=z$-xixNMN%KkX_&-S zsf+e`_0eOo8DIJXXW5lbb=$6hHna7N7QqE{+TmO3X21PJ__{CU%TNx1CZc+5AavI6 zyRpuH^(V_s5g*2+SrY@50Rs2zc>psy?p_51AJ2bX3mxraSDp5NXTBnE)O?uAQsk;{ zg{91UNV$gzZ>JMr|i?Szl&}_3b!~1s7RTJLL=by)x8xB@*y}u)gG< zNy}JQGCw`X!hiJ_#b&Qc&EUa6-oGtTk5#i6i1l@}D|Qe3W@pkV+Q6CTrfwIP=u=!p1?P_DkehjVQO9K1(y(_~6VYeeEV z?KBG&b!gP;w(!4~Ls8ctgIX?J!6zYMwjPT|?CU|<$Y;NbH~4kJ;wj?auO$iae^rm-Wvj8el9Zw zEfNg>ZHh$z87>w$FnHL3p%|V~2J|2N<`UQlzuI-z@T+Q0YD#Qnei2NipW_4^sGzD`z8pBsxHyns!} zrv)Z66FbO%{ZFgrXzYb_Tn)~(ou42)iLcje3%6srdf?Ktia_XzTRLcy&{0Z_#=eNo2pQAp)?c8$%^%L_? z`n??AHO{fCZNn?FSJ&BNS>kEd^iDeIj;}!8ZY}pvrA^O7#+!_sW8PHU2lmrOpg>!$ ze3^QQ55-F1gj9_6`(Z&PTdrGVO@s=Kd}c4igTWxN6GlQ=X;OtxgnAk0QRsGbSt)|~ zab9k?&4KJ7Jh+8oG8?+<>YSm1X&=^jY-ZB85d<-5N*t4c72zh2fLj#qnxv)c&^4*8?17y*R&Q1~NC(dv5Xg~a15f7$W# zSN{=U(3n+H3+)t~n&Zg;saG+7gU+(f{+s4oFSnBbGQp{ZbePT?o6>BNSpn+CP#Mwo z3C=(LNlz(jO_6{lR!kEe_8Y)|+F|%^TG3B$#|j*FCv#86<_|}sRtzPE@gvQ&JucmH zEJA0GP7u-|+KNo-_hh|chsU@r*4O)==T{glskAJVQBxL7_AZw(e}lwO3y;zeCuMkR zCnS$+^T4G&?va#uWq4Xx5M_Vt#M7aSyGGO<4K`j}WFNW@eNyXl_mhdtC}YV?-+6}^ zF+)0V`uTu+9{Da*GzgQXr^R)|YhXJ|1U56v8t> zlwX~t?^wy_s;*|cH`LoQj_Kq#5wG|)*)RsV3*$# zkQOqS)eBRaped8@D91Ju4bxB$ZaPt54NZFOA|qy&@ymWnGZb#AO^M>nVm2+VkqeC` zRebwI*Bh5;`|SmNRhmXGR(rQ2nWaG{;tVNx?-2aue;@iNp?DEpPv=}ANa<-0?<;mE zh}r}6Zvxw&Y#;Seu+52W`L2NadyGcT{#dg>ObqN85C1EjR|&8%FU=BWNkg%?JYCAv zq>LB)f8GE8(LM)Vyyo47r-q^`jo_7=luTz1+Z}QMV zoXc0*Z@z2-pK9Wls4>Qv%?s~Mm5@8ZI#8_dyY0(JU0q9S`%X?@82A$LME_vFmI}l? zNim)nw6?dvVqtz>^#i}j5B$@w6s^v+ zNY3!+u(Co=SONNvO`XheVYTnp^qccP{WTje=il?Avi;}3uy6%+m~YtY6nVpiWI84v zN>*gfHX;9nINjGx(xSmSur;5aN9ZUk^;}dzM0i?PjK{IqiPp^*^4B?fYz|C)_|iXw z8veE8IKGLrdv~L z3Mr31r+k~v25KP>ZVGyK1k_)_Bo|Nt;AtV-FpVM{ndX-xU+sYPSDFrc#1HCm#aIK0 z)-7q29a%+(s4)QrRNr*vCaj;Ra_`Fzlcm2V4!U@#l{nR+Q|MCix>MyYS~qDJ<@^_p1H}eYYh}vvdTH6Y&otyyGd28Ak9TPxnkVVS} zl{gkFJMVYkSFJUxeI-N-QI$Y1y!h4vIDb;S>n>MzxlAAGZFl#SX6!im@Wo9YQdCkj zp`jG#8cw%A*0BUAml*joS9UzV{QuhQzu4cKzPrGQ5T11JGeQH^fc|tJzu;m({Z4rG zKEi$V6#tmt-9_5P`#e(HNQ2%efp{&y3rqnTnV}2tUkx6(ML*{A(BtK|qM8seQbt)XoS_%3;c%jWCl*1=`HneNZOOgC7Wc#mTfQD2XUa>K5P>5r+ zv7JSFi-6W;a1kCA|LZ^bF@eM>o+vrNUB#IrFX=wS-3WK3Rmp-Dtxt(+9Jk+A+X~5* z{xAO{TyWN`;#+3e-h3Q9)-{@unt~o4v}uc$D;g>tGZ@kaLz6omT~h-UiYjBc$NTGq01_0%VK;xtB#O?hK~^9dMf^>| z6{5x}wl~KwkLH&FQ@R4&k|S4&`G>GemkP|EA*OfOGY~7V!6eg75Q`^VN)X}w7nrJR z0Rb%AL{_=06vRkZnYyEc`qj%2)YZJCTZk`-*9NhmpZ4KHgJ06^zQH#`hyB5pBNtHd z-Df;KX}&C36b6HvJfql5tv-<1PI~2@DnS3q)o0zYkPJph$bTawdXi+1_}qgPbGo5qkP(o_1c|K8de$_hPTTj`J({2WU!aY7?qMvw&X4;#A|8^|x4$^rL(2U4GS zb<%V4yXCMMA_TjJ2q$>qfF^WQQUg+LYtOe~iK(^izxXEs=9@?bn-R^|N)1Z{ z+tJj(`$$UGP<6H^AhWKyL=b$~5aj;5)zCc!`xMrZB)iLu121qQ>TYUTNjGJ@J4}<{ z=oruQfQ84QQspKm4pHQW8))~7jFx8acj!+jK>Z&QQMP7^UwOj4aS9SerU+c|LhEQe zYoklc73{nL)c-I4^Aped(}k*MKJr4H!el80Vqv=)AzXzc{iTyiw3jUVyh0sfC+jMK z2Y#)AX{T#{qN!V@n^QJGm;B?qEh-%&1u(#WqCM14F=iD)2q{aIfpv*T9`b@JHdkV+ z;PwT}-Vq2X1aGe`$+rvHO98YA#D9LOk<^!8v&pu+B2w@}CDiUYrpuiJ3Fd`sQK#1v zHFV!Av%=r2yYiF_TFa6=CISlz0d3%w-`bb6$Ciib$jN$k@g*=gR`PLC5DRq)B z{vo!TcmpJS@_-8Y!P5LYGPIgWxfGRSdvg=OfBBWTB|X9g{SJMa6NgTdv@%FuOXm>N zqZr2BI&myf>`I?qjOjw- zI6#_M?2lD;ipBb0Ze6ZB>mmnX1w32xu0C@NCdQ;|Tk0?WJw4Z04$-=P4*A?AL>!eW zxQU=@O&!qxXf$a2o4+6ns|gJN{NLJa{`!Snl&;qWQ#Kr?-*#6LjCHeTWXT<$%59M* z)Lu{8QAq?Dkhiwp;2I2CDH=Ep(xN$^QBBi=xM??@4HACD4S#Q3mIV_e-Hz)mLew4% z!N2d{lL{gKT_>+MM^b>83gEvY*q`#S7CM<__I7}X>y5&?iKQL10`$+e$iO{rfd3s2 zMwti%^X31SBY+Nx8Z!G_MY-t0n!=Ox{NjSz)en<~CA*~WuacOb`BMx;V()xI&WK^( zZ!%{Y_OJgd&3k^=zP~_rnURNqzFm?ztT6txgOWYhhW$ZF0^lD?@B->{0Q?tn3M)#| zm;Rp1RufgRX@d-Y$zB7{KR>mOLTK5cOw9!_J)S#$`m*^yB>0%ngrrY_ka4Ii>v>4{!O|OJ`9EbkH5lZKj5ST#!Ck-=8fj3 zfc4L*<#L<=@E1Kc+reSVzXm-`v5-LQ1(>OHwXzT2%}V*OcB*=S8HFYnie~7dCNfMT zL{^&m;%`8s{iDA41MZMw(ewb%r8k)@aZ3)$7>q;taLt0pqDN(09 zTm5wc{4W6ie|PN%3khwbWYxD&Awg<{AoL8KM{%)8ns8~mlb=7t^4vCr?hNK~{|G*- z-aaC@x0iq{Az4Ru$^jo5IR_n*-h1~qUg-kvpXJQ&=RxB2)2-k*EqGx58*Q-fh4`ms zl)1h$tv#bONl2uMv=0;4d`EPzBhlZqyfjh%d;aLq&D~H|MTJJhXh{ix{+~7j+u^@W zCK9N3^4tpWpU_%Th=^T8TMDtrfI>6BNx2Fy;QS1z7wOhM|5txEe&Jr}nz1KgVp;v| zd^Zo;0M()JHAS<`aZx= z+DXm#Q96n1dr!qf6|&;7*eWb`FtV8YcqJ;yd;SfIRsl87QklIn3AbMzGwUF*FO!1( zd0>t0OaBXc7-$Yc`)~d*Z^T+H>c0=}al8RXb*c{}ue*%i0bi*9;x9>0RO}EKq1V&> z8Nww}d5>BF`qSsecbJYr<}6F!pd=d8D%+o)#G%Q0af_YKkMN2L6~{F zp8EgfS_i5oi6bdmpDUJAA0ABBQm8$e(ske(`gNy~vV8G}qZQBG9A)lS3Tk@!e}OG4 z`!et>nA^`kG%2Q6@PYUcD4V(0Yuh7E)v)a@T7j*?np~9s-M@Rx%YOOr$0kxBAnar| zU^W}q5IegqwLo^!w$UOvw}0%Z|LcE;)^paSUop_bn{K-8wD=kty(YvcT|0H6`CG5V zEd4hVq>=D3!qlZa=;W(Fji-_6fqZNj!r8vxBSgCX>A#6^d<>XFd%H_@ z)|yFv#%sUO(F$JFGdnCRRrD4&Zsn}IFB1F!{Xb|+54Yo;UXC?qssKKZ^`{2q%q9+~ zATmuCIHbAL7k{JNgtj7LpwP6Ef53j&L+~uJq^nF<4jp!uBO%DbNG&g`-9DABK`cAD3VVr2Iq9_qy9p;q-ZXpC}NW_>a7N0+o*skXqntEF{z309;j#az~;UOR9< zAi%qCmILq)8Kjq1t88J^-vrz5uX-+8HI>GvQFI z`OA(Zv~fSB3-YO-awW_)4WWd>afutqBHw*x9M~r)w8+?m5f!EUf=p2LbSoflD*7v8 zA(=n3>f3SjKl!lB+rRW*{f#r$9YrG4D_`3|8llRox62@<-0o}tw<=P0vErkqY|iYh znvMtyPjczC$5t}IY3o5mak_Q31(h~L`u8Oj(47#J7my?nyP(!T8Vt(0xu^L^&eOyq z$aOaBCV>9$>V#MDG^L>)%i*SCcdVNgsYU|vLFFFxi~qIZQmAm<#4XBz+mOdCFTdsk z_;1f={#IwuT;u2?a>&4jId<-+nD<}(rvMg|#Yp5c+BwQZ%g(rmDw+vYjjs%S#n=2z zNZCjfo;6=(&TrY8*-kGz&+wZ@0>rbSJ2ug<_&4Z6Ae-WhT7oe)Ch&pQm_?3-2cBU-isd{B zlWv}`eJ3gTnt#9e7Y4xdqpqOP9X&?6g1DczO9A>nO15K%`5ytKhDKTCjluDHb>;6L zAl2hzOp&ldedRF_Y)fMB)AXoJxQ};W`L=&WW8ka?{cd{dV+avRr3@z!Hl|JN_;sTR zu_uI7jR(OO5@~{oc=?g8wwse)#9>_%j4H?R>(eCig%TJlcwr8Vs{{L8y;Rxm#`kd9@w z4vYjjX%?iAPTk2rv=OWJIi3*cgK^m|G$qyF?oH63k|`vjT4yA}VLzYZzw_Jrb=aPL z!dm4!st%oLT)p;{{5F&*$Jr8^kK4G7C4;LA0#$y>VFH?!@2SUK;uT*X;#c<5W`Sk! zj<2EN8~pBwJ{u0l*cqK}_HrxmLk*mW5KMO=CfZedmg%XuqYgykm<%{9MG>DlMs9pY z69eG?lQu-os#tac1vneLed1BK2eLH`FR{Cb0cloGHkfau!rCF$Iwa z@m8NS0Ny_zMVyHa?=)=hWferYhgoqSf@swIg&X3**55LwZ;S_3-(f17p)syo+a-v8x)eU2BBpsfgf zV6aUzGl@CMeSN;N{kbO-z<;-+D*yAPe-mJuVEfWZN?b~Gd$=2kb+Eq8OQ2iTDpWsp z=a)H099w4|F%!ibs(|dIC7@FMS?Z}*JeM$SmKgDjFI?k>-)yI4%V!frwnNSs)Nx|Z z@6L=pc+3muNcawUa_9!&U!|K)Ny(JVK&$Gk&=LRYzgM&=6%T;F zIz__~BJrDZ!ZKV$SSxP{f}^4Q)I?*bLbEx{DF*1zD0S2UAO=N)fc(W(td7G}J`o{Q zz+GQsucBbc#J*f?V%}2r^cCR`6Rf1t&=bt#8>0cnw!tSg9<Gsf_nkXpPc7L&S8HkpJ#3V6xMch5ZIr&x)2S1*;uDm6KE1LzMfwj8}S zfc!<`l?~Nb{(^dE#s0&oRU^gm0b(kx25wYL^s<%u<-ClG>k6GVdG&C`=U2-TRLURm z$(<{O82vtcW{0!Qswe{v!hqRCMp;-j!cHCG^v7teoyQU5kYwazrs+GE`QDe7q=W*-lotG24^|H6*glimQR9wqr9cAxaH{hzKJ#a6@UvF&v zug#Wur52PJsjvCJLuWkxEB{6E8Jg@SqSYilGDB5>ez3gnXjS_JnE$^mQekKaI0Wh$ zWc1_tbVdzJ(3}g&5qNK{2E_3K_)D|85z{aK@9X}53p3hjNlFhQXDCH`f&T$p=#_K% zf*CMl){ovC$kP?>BCbNDB3s@^xpaGjZhMrQ^V@pA#3AwhnmtXFNS_Z@NH zxTQw(2c8~h|NK|~!drmpZMwr2t*&Qk3$k^c3gfA9 zCiNTe#Gm{c)0>QDwso;UsX##fWC4OXdYaBL{(GoAD$e1XIzogc=NJF>6zV$wPZ~4( z*ljkG70@tvJq-4be=9H<5u{;-Fg~37k3X|&8A2bgGic|EVBe|r(O4Swk1Mg1+#J!O z|H;RJh-&zqfA)F@;J@+y&--WEFyTnd$6E#-$j32;A$!ojwP*N#JKfq}mFtnyms zoEHN$)$6m4$Wa5}Pv_Q8-USWfh&AEDGb`X_@I*7-n~QFHbN;?88Q(|F`|=cwgJPtT z-*xqY2cBh!!^f04kLGuLv%VT!?R3l7d+}w}r?he|iX}{vzbZq68t(J3R2MD15 z*BT$uc>$Yeq5(UVEw);@kG!G5w8I@MBtf|TH-9&rD#|?qCjzG}O2{u&%@L9K-=qFM z#B5!SH%$As8n3rHM@dVQ)ymO19H5vL2KXy8WKjd&^j%=vw4IC?K>cMY<~}oDE6sQ@ zVimA^G|cbGME1Fs@Q7fGQ$)G|=s!gU{UX$CkS0Zt z8(O;P=(H;ZTx1Mt3_>rzlIaN4av7_%#a&~F ziI_1wc!llyQ*iOyMJXVE;ZlQ9FNJk$hyPZ5?G=m@42mI5em{Q2OJ_31jzsR7ig2Yp znl0kP^`*a!xEvnvCc82rzea#4-$6}rr3U2wv3-Fa1NhJD4i@Ni^SNmLX;LLvfc%O1 z|KSgn`2N#hUM*ukGE3Z+M{+_>B>?w7nxyA&&wji$jTg~qnwem?wX~h4u*|N^&>G@t zJ%InLSy&6$7l>!Uvbi9??Vri`lfT2Z6W~jkTJE5Jt3iO)DJpWPb#jochQMQ@VLH$u_k7uU)C4W zk*`=m<$(|A^!PeZm!Ft+^Vx~N=ARVXgxyQH&_$~eoQ`ne#!N{ZiaQg%j%xJ&?JeO< z+@unGKMqDt1w^r&89r(Mc>_s`UWmKiaR% zH9w%VytGh*y8@IAXv6%c3$(tGk|f`_iTsrLQS_LEP{fwF{t9y_uW!jt9-uZ~3E4;< zAFQ;uMrh)7Ooa|rDDX4E2?CgMJwm1FVKCdE+^TOX>tnAi7u*QI|B!?B5v%c?i~kS* zu`yJ+2MU)97m_wz<|t*;(X*v!hv_)@|I0u3;H0W3^AIKV%gPKW*F7gMRC7vlfO91Q zd7X>eY_CpSc%!JFgW1$%wiU+_0r>M)tGx%2!h?oQInR@@gr9x&5e|!A^;bPipS~c9 z8)Kfd=NHa#FaK1LYG;>^kK>vL$)$8SH zEYWq>xgfL77er#n(>Ir7q;DQaY%9|1s`wh;&?Hc{cWw=;VU(w!wR9f+|*E{9I8( zy+M6{1o{JH;nRK?ZSs40czl*{h{8SH^+(lldt|Cfb;%o0p|Y*bpGy-W!f)qB&Gz4b zWA-SAA$DwhzUn_qZ7a$cH_XRJRN<*-e9}sBn)DF}A@hI(S$@-3{)Z^8j&S?54Vwz& zuS~dH+fv#%3y7=2=W5E|V0wN4f3L`(Bg()r$x%1-wv_FXcG7d-0as687jH+Ey^>?^ zBbAo$U;h1ne*gW-36XhXb0|@ws;)qJlU}bE5G~cA#4!2oWjqzjM-B_!KMXUMDu*gi zdk@Y_=!Ywk7RzQ1Lb?8$f(4*MOmZ-uGMv>xOz;!It@)%e%?#?BzviEaLt{b$s53*Y&7cgLqz%v3KRDE1`s0qSNf#$T|K=R+ zg_QX@g~SSLL|-!n6#HI{Lx<;m)!oO;mj8p>b*UnVz<)a*k*1&OQMk3sN*q%CDd#Ky zA^csK7K5;XaGNw%<;(vq+}W9N9mC_pTU3tJq2q$oQ?ID`(m#T>bg{nlFY$?}KokIf z=c2fL+!B=b*v=uG;d;_srg5@M{*`~kXEvhme5d2HCd#V4RnBwpy3id1fvZDymKDf1 zrQQeHr1YHkb2M{{r`i-<$z{}d5r+iT1FRWe`hcbAbKZz&hI%E**bg(6ZL)e4l7Ejd(7u%L8ePM{~_H&FM%xR3bEY zrvU9n>M+3o_#a~>gPWnTWU-REY0e5-FfLWc5B<6T{&p`NS&9I_pP<2;S|D|;tvaVV z2t$;P5jT5@uH&etb9t!l-_-!}C)s%9zW1iAl;|Jf1*8D|fe!=Mgv+s@@hXp!8^*HC zgXB*wK}V>1Q>wk&x;^W}N$tDAC&YQ$zvm|ehCwB-Hh}gv(3xWFh4}S0%3ohz1v2B|6M{x7oyk~7bG}4 ziXf~tnP%o4`7EjuoHQ2i+ zhdF_`oL(`}>|cgE&UT6a^*b`dO8#{?%66%Ujki@zPSW_ zXGN%>h=XjT?YSBOE|ahQD+3w1XSfLb3X%M+6Z0&N!sN*e$puQuAn`5ceu#)Q_qiA9S=4XYf_aHEg~QWNdctZ{sPoxc%pytZBvXR6NV_C!3~ z+nhC)197!sVaC zQYA|c&zFt1I1hA!dV=LMN-)s1PnnHPlDJ39&h2)mQ<9s$>GZP$c5WKL{)@bJ4VUKZ zz?U-XiUQ_2tY!k1uAFkW=+hj0Qg4n@H%o@@=64|gfA1(5`z}bNXq2TmfApc3X|2$^ zukZxAR>L^Wei$oxDdbO;cyGY6Oay0%|)cVgNQ#FPu zA|awx`7nj=^siFFDH)NRswxM@rP}CG_(PVIyRQ1L0^9h{A%K4(;!c(souy8&1NWs^ zE6n;mXZdc=UlhO5c?raMZsQ++#{_zz7jiehRRw=BSm5?`|8~)TN0M+R`D}-4F{Eye zLyWenP3sxuEzz{j^QN;n*860iAjQgdr78g%XZZ~s74&KLhT#%;dn?59u-to+8TO%z#z_4b%vRs0|rUEbXpTHsD*`USdiLQwj?|%NupY^pP8cRK+p|Zze z&9_c0l76)DFUtRa>i;BwKbq84O#?)p3OJ#r+9as7EDJTZZixJQVl~H}jA1bjMaVu5 z#G5=0L1f#5ZgilViPW`V zE6cwD#8p{Y)>zvA{r=(bw50A~Q`Y4nXr#N9{e*M!$`xjSuH$&ZuYm=?ABqv2sZwJ~ zXeNmD%{N0I{aU&rVU-A|ER=nG`M7Px@?%VhaV?K;5!lG5w^ zqsyZ7?jhc`>i2);kM`CXS=WDm?LYZ1|9_Y8%EM$OolySdWiM^&Peh@a3B|3rNe5<; zj-MtY=A3SO?eM<;H;^CJ$;FK{Ex`|NVjxv>VN7VB*^C1uR&nY8Oo!&om=C19swkw) z9a3@$6b0nY8Q(NebW?pArcfmUXxo+Ae@*N&nE#fm$&+Dmj^YPlACHbWJM7)}=NNth z+u`D;9)g^Jn|Fbm$MTE=l=zwrr53jbq!PsCqTQ)p{ny{cE58cV*DpWx3?{|Itk*n( zRRI2b8gOjdb z3WWao=s@%{L}*844yr^k`hCxd&Sz5?BtYnjx88?#Wty6fxSL;7iUr}C^dX+-yVY31 zYv=dO;7cIh`@5>tW5mSDZTWWRXZUiswH7e=4<3Iu`^=t@U`E42q^Gw_fDGA3+ z>s!0e-7|kdXcs3B;*7Wen5n*W^`#M!T~-q=pm_P2JqRtjzotB3r8Na%C7$5Y3*bm# zH?Fwm{^IMJfWL=R`wg<`P8ql&@gB;1&(Y$}IKM!~gg?NgC&~%^K=>LZh-W`o`p}1$ z=XduiboE@CwTBj4x2DqMafecbyx94P@(keftPJ3q{+t0_RU+d(B?`+T?MW-QT9sW_ zheNH2T6-MkIjs-7v5+x*Fki>?=)0%8d7T$+!gZKVX?P8dooIV}_nx+wg9`15)J@2O zdzMjnEa>ea^92%a*W_h30)6U|t$>|BW9O-jC=xU{PSq8Ei_5g`FVoi5iiB*`uCA%; zASvw!l4fb*FxHwEkckA>O#K4`N^)2HET|9{P1>JvMnme;duDSacFHLRjnSvn%gm}v z-VcF~i8ywMHr`FhZXt*R$tUVt=i$c!$ro+SVbV`v{Wisc{Q!qxC|0AMGBqhT4l~;Ju!#} zR?R_S(3A?z=CW_!?p!tNlgqxz)>U?rF6U7anZ|GTTMdx$d}u249BqT4fH)H~&Vjl$ zIemhPL$O+-Jm1m?rAXGhkcqFo9@n;{eZHzoJiC?zcNXPNWMF>WOF{^f^nBV5-STO*&SjgrD>8-P^Q5=raMn(rv5pf4%R^ZC;IRk%g1SR z>@{Ro!HL*_6$p3(*nTw}IHV@DiH8zSN!}*>ZaWzD-+WeW&}&}9a*vG9+?1CSc2BFj zKLL}A7DAZ3SAu()b=H=p7U5eB(>PU5J*JL4oy6uYJH4m&)rpr&+OvcxDOTKFsZBKV zgIhUyIxU9eC5F_e^HMtWFLZDvn&EqeEXTa*# zmfU*xW-C;l{RhH(U~_8CSdLSvjgLC<|0mA|F!`DD?Q1x7=sFB}P3B0di6i62H6$&z zN>EiR8RswToii+B)td#hER>Mt3N-)fxsdV(prq|nwW2=0e0HK-&A^=OC!^TqorJNE;4IvQ}ZR9tX2j?0E!qxY`Ta*l|T_S%ICE<#>gg*)ktW7}Af5;se& z`Ab9X9}`@w52`*^XRBcVWDM2$bx-|-Xowc7g^>Q-wy8_xyi(OeSxEDsL*CXCPCMOn zFcF=;n3kN0_*uvj1QF$h4|a7`&u76Jmt=hp(T5z7%vSJ~F#;^cZ9m8289))zE^IkR z{R0ySflm;Bxwq-i5U_Ls?oi_fovhX(guu>Xs)*+xnjgu_@*wPW?}1=$0K|y-^ZlV8 z5Cw@*K_1pwN5^2esG4RACJWb1n9wUp; zhNz00=4-Yj@*~ri{fJ{{y?L)Jg?4KpznKc7x@g{~9~2tcTT!+22U7p!9DXNR>lFbS zZ(;tCr^(mi{=#At++xufi@wA(a?-qXn3~lxh%vX_;4<2W-IGp$?$&k-;SY~7{ug&+ zFEGSwHQ7$e($8!syk$?C$HG?oshAc;5gio}ao|CjeVAShi2d%|NbWkJ5bO4qN)DA6 zMcru}s)?md=Egv2lE;c!r}MJTc8ZK}<`uQtUJ{NgwF?-7wO}r+=6QRx>>>pdi5MerbFK#CehUpmVByV<$Y#u0 zC@J{jG~pFhKSre`|2OgK$26_q0ar|6{3ak}VbWZdoe%f2Nf1GzUOZ_REz?8Tu^&KB z>4zDhK!Bvt9v~Ce&3p#(w2=NX+E^Fx%J2D`BJdnVA5oA#FqF8-BhAt8K-IY+aqb2w zcbAZe6pgOs{v(lC34oZn>sD9;Q`=Y0vz~)jzgD2i%DXU{imZHJQmHspjLg^8hnuU~ z>__JdD1?G1)P>9!>9O>TxJb@TJe14Cbo`_h%k?itsg<5fSn-i(KLv@WWzC{xRb+(k zF&+_66kLT#C7-R-7}&=8HQ=r+X8HRxY@&se37Dhs^Dc&C{)>&o;9*S;Najr0sHu2j zv|*Lizs4n{f46aJN3<pW%IE8V8Vm}#csed0jpb1t*oU!!r0BTk#DDT6}zPCO(T6gq#Ous zg1mQfF&Ju&7%XDWKJo*T}P~%Idj3DO2 zI3X~zO-)!R9ON?TpfE3B*q8{hFOiet4KV`eyp8n(qoM6X$!P`wxd7;_5djNU4q|^# zAEl?-65hZ7FXpH+VE^?xW~hIe1D>7s?KFUC_>qUo+Gj@;LhMH0qOWpju4j+ixy&CI z@|$wb9CMLSZ$zN-lp@=8t|IeOA0{6sE75<})f#lGW;P#J&8|+qg;=-U{9`_wt2hKm zq*~XO?~419g#nS>B05pL{{8T}RpbHzpCs~dgOc+y0_nPZgQ>lsdt^HnWCkSj63{Fizx}pEeJ1yILY0pB{ev-0 zOb2U-Wn@h;r>so8gA#GK))nx2ic1$QiGGtdmmE^{023A58-92*i^T9D!I!*hIY!DS I+?80UmV`Lwu>b%7 literal 0 HcmV?d00001 diff --git a/BKPS/Indicators 14030517/x-saherelm.xchstr.mq5 b/BKPS/Indicators 14030517/x-saherelm.xchstr.mq5 new file mode 100644 index 0000000..b67b000 --- /dev/null +++ b/BKPS/Indicators 14030517/x-saherelm.xchstr.mq5 @@ -0,0 +1,1246 @@ +/////////////////////////////////////////////////////// +// SaherElm IT Center MQL5 Indicator +// ------------------------------------------- +// Name: XCHSTR +// Description: Smoothed HikenAshi Cycles ... +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://saherelm.ir" +#property version "1.00" +#property description "SaherElm XCHSTR Indicator" +#property strict + +// +#define ShortName "XCHSTR" + +// +// Includes Common Library ... +#include "../Libraries/x-saherelm.common.lib.mq5" + +// +// Inputs ... + +// +input group "Market"; + +// +input int atrLength = 14; // Length +input double atrMultiplier = 3.0; // Multiplier +input ENUM_APPLIED_PRICE atrAppliedTo = PRICE_MEDIAN; // Applied To + +// +input group "Cycles"; + +// +input group "Short"; +input ENUM_X_PERIOD_METHOD scMethod = X_PERIOD_AUTO; // How to Find Period +input ENUM_TIMEFRAMES scPeriod = NULL; // Time Period + +// +input group "Medium"; +input ENUM_X_PERIOD_METHOD mcMethod = X_PERIOD_AUTO; // How to Find Period +input ENUM_TIMEFRAMES mcPeriod = NULL; // Time Period + +// +input group "Long"; +input ENUM_X_PERIOD_METHOD lcMethod = X_PERIOD_AUTO; // How to Find Period +input ENUM_TIMEFRAMES lcPeriod = NULL; // Time Period + +// +input group "Hind"; +input ENUM_X_PERIOD_METHOD hcMethod = X_PERIOD_AUTO; // How to Find Period +input ENUM_TIMEFRAMES hcPeriod = NULL; // Time Period + +// +// Presentation ... +input group "Presentation"; + +// +input bool showCurrent = true; // Show Current Cycle +input bool showShort = true; // Show Short Cycle +input bool showMedium = true; // Show Medium Cycle +input bool showLong = true; // Show Long Cycle +input bool showHind = true; // Show Hind Cycle + +// +// Buffers ... + +// +#define hideColorIDX 0 +#define bullishColorIDX 1 +#define bearishColorIDX 2 + +// +#property indicator_chart_window + +// +#property indicator_buffers 35 +#property indicator_plots 10 + +// +// Current ... + +// +#define cBufferIndex 0 +#define cPlotBufferIndex 0 +double cBuffer[]; + +// +#define cColorBufferIndex 1 +double cColorBuffer[]; + +// +#property indicator_label1 "C XSTR" +#property indicator_type1 DRAW_COLOR_LINE +#property indicator_color1 CLR_NONE, clrGreen, clrDarkRed +#property indicator_style1 STYLE_DOT + +// +// Short ... + +// +#define sBufferIndex 2 +#define sPlotBufferIndex 1 +double sBuffer[]; + +// +#define sColorBufferIndex 3 +double sColorBuffer[]; + +// +#property indicator_label2 "S XSTR" +#property indicator_type2 DRAW_COLOR_LINE +#property indicator_color2 CLR_NONE, clrGreen, clrDarkRed +#property indicator_style2 STYLE_DOT + +// +// Medium ... + +// +#define mBufferIndex 4 +#define mPlotBufferIndex 2 +double mBuffer[]; + +// +#define mColorBufferIndex 5 +double mColorBuffer[]; + +// +#property indicator_label3 "M XSTR" +#property indicator_type3 DRAW_COLOR_LINE +#property indicator_color3 CLR_NONE, clrGreen, clrDarkRed +#property indicator_style3 STYLE_DOT + +// +// Long ... + +// +#define lBufferIndex 6 +#define lPlotBufferIndex 3 +double lBuffer[]; + +// +#define lColorBufferIndex 7 +double lColorBuffer[]; + +// +#property indicator_label4 "L XSTR" +#property indicator_type4 DRAW_COLOR_LINE +#property indicator_color4 CLR_NONE, clrGreen, clrDarkRed +#property indicator_style4 STYLE_DOT + +// +// Hind ... + +// +#define hBufferIndex 8 +#define hPlotBufferIndex 4 +double hBuffer[]; + +// +#define hColorBufferIndex 9 +double hColorBuffer[]; + +// +#property indicator_label5 "H XSTR" +#property indicator_type5 DRAW_COLOR_LINE +#property indicator_color5 CLR_NONE, clrGreen, clrDarkRed +#property indicator_style5 STYLE_DOT + +// +// Data Buffers ... + +// +// Current ... + +// +#define cAtrBufferIndex 10 +double cAtrBuffer[]; + +// +#define cTrendBufferIndex 11 +double cTrendBuffer[]; + +// +#define cUpBufferIndex 12 +double cUpBuffer[]; + +// +#define cDownBufferIndex 13 +double cDownBuffer[]; + +// +#define cPriceBufferIndex 14 +double cPriceBuffer[]; + +// +// Short ... + +// +#define sAtrBufferIndex 15 +double sAtrBuffer[]; + +// +#define sTrendBufferIndex 16 +double sTrendBuffer[]; + +// +#define sUpBufferIndex 17 +double sUpBuffer[]; + +// +#define sDownBufferIndex 18 +double sDownBuffer[]; + +// +#define sPriceBufferIndex 19 +double sPriceBuffer[]; + +// +// Medium ... + +// +#define mAtrBufferIndex 20 +double mAtrBuffer[]; + +// +#define mTrendBufferIndex 21 +double mTrendBuffer[]; + +// +#define mUpBufferIndex 22 +double mUpBuffer[]; + +// +#define mDownBufferIndex 23 +double mDownBuffer[]; + +// +#define mPriceBufferIndex 24 +double mPriceBuffer[]; + +// +// Long ... + +// +#define lAtrBufferIndex 25 +double lAtrBuffer[]; + +// +#define lTrendBufferIndex 26 +double lTrendBuffer[]; + +// +#define lUpBufferIndex 27 +double lUpBuffer[]; + +// +#define lDownBufferIndex 28 +double lDownBuffer[]; + +// +#define lPriceBufferIndex 29 +double lPriceBuffer[]; + +// +// Hind ... + +// +#define hAtrBufferIndex 30 +double hAtrBuffer[]; + +// +#define hTrendBufferIndex 31 +double hTrendBuffer[]; + +// +#define hUpBufferIndex 32 +double hUpBuffer[]; + +// +#define hDownBufferIndex 33 +double hDownBuffer[]; + +// +#define hPriceBufferIndex 34 +double hPriceBuffer[]; + +// +// Variables, Properties and etc ... + +// +int changeOfTrend; +int startBearishTrend; +int startBullishTrend; + +// +int maxLength; + +// +// Current ... +int mCSMLength = atrLength; +int mCAtrHandler = INVALID_HANDLE; + +// +// Short ... +int mSCLength = 0; +int mSSMLength = 0; +int mSAtrHandler = INVALID_HANDLE; +ENUM_TIMEFRAMES mSCPeriod = NULL; + +// +// Medium ... +int mMCLength = 0; +int mMSMLength = 0; +int mMAtrHandler = INVALID_HANDLE; +ENUM_TIMEFRAMES mMCPeriod = NULL; + +// +// Long ... +int mLCLength = 0; +int mLSMLength = 0; +int mLAtrHandler = INVALID_HANDLE; +ENUM_TIMEFRAMES mLCPeriod = NULL; + +// +// Hind ... +int mHCLength = 0; +int mHSMLength = 0; +int mHAtrHandler = INVALID_HANDLE; +ENUM_TIMEFRAMES mHCPeriod = NULL; + +// +// Event Handlers ... + +// +// Initialization ... +int OnInit() +{ + // + // Validate Inputs ... + if (!ValidateInputs()) + { + return INIT_PARAMETERS_INCORRECT; + } + + // + if (!InitMarketCycles()) + { + return INIT_PARAMETERS_INCORRECT; + } + + // + // because in some cases we may have more than one input for + // calculation and we must prevent any calculation + // untill we pass the biggest input length, here we get max Input length + // and then wait until pass it ... + maxLength = ExtractMaxLengthOfInputs(); + + // + // Define Index Buffers ... + DefineBuffers(); + + // + // Set Indicator ShortName ... + SetIndicatorName(); + + // + // Init Succeed ... + return INIT_SUCCEEDED; +} + +// +// DeInitialization ... +void OnDeinit(const int reason) +{ + // + // REASON_PROGRAM 0 The EA has stopped working calling the ExpertRemove() function + // REASON_REMOVE 1 Program removed from a chart + // REASON_RECOMPILE 2 Program recompiled + // REASON_CHARTCHANGE 3 A symbol or a chart period is changed + // REASON_CHARTCLOSE 4 Chart closed + // REASON_PARAMETERS 5 Inputs changed by a user + // REASON_ACCOUNT 6 Another account has been activated or reconnection to the trade server has occurred due to changes in the account settings + // REASON_TEMPLATE 7 Another chart template applied + // REASON_INITFAILED 8 The OnInit() handler returned a non-zero value + // REASON_CLOSE 9 Terminal closed +} + +// +// Calculating what we want ... +int OnCalculate( + const int rates_total, // Total Bars on Chart ... + const int prev_calculated, // Total Calculated Bars on Charts ... + const datetime &time[], // History of Open Time ... + const double &open[], // History of Open Price ... + const double &high[], // History of High Price ... + const double &low[], // History of Low Price ... + const double &close[], // History of Close Price ... + const long &tick_volume[], // History of Tick Volumes on Bar ... + const long &volume[], // History of Trade Volumes ... + const int &spread[] // History of Spread Price ... +) +{ + // + int numOfRequiredAtrs; + if (prev_calculated > rates_total || prev_calculated < 0) + { + numOfRequiredAtrs = rates_total; + } + else + { + // + numOfRequiredAtrs = rates_total - prev_calculated; + if (prev_calculated > 0) + { + numOfRequiredAtrs++; + } + } + + // + // Checking for stop ... + if (IsStopped()) + { + return 0; + } + + // + // Check Number of items Copy or not ... + int copiedCATRs = CopyBuffer(mCAtrHandler, 0, 0, numOfRequiredAtrs, cAtrBuffer); + int copiedSATRs = CopyBuffer(mSAtrHandler, 0, 0, numOfRequiredAtrs, sAtrBuffer); + int copiedMATRs = CopyBuffer(mMAtrHandler, 0, 0, numOfRequiredAtrs, mAtrBuffer); + int copiedLATRs = CopyBuffer(mLAtrHandler, 0, 0, numOfRequiredAtrs, lAtrBuffer); + int copiedHATRs = CopyBuffer(mHAtrHandler, 0, 0, numOfRequiredAtrs, hAtrBuffer); + if (copiedCATRs <= 0 || + copiedSATRs <= 0 || + copiedMATRs <= 0 || + copiedLATRs <= 0 || + copiedHATRs <= 0) + { + return 0; + } + + // + int limit; + + // + // checking for the limit start of calculation of an indicator ... + if (prev_calculated > rates_total || prev_calculated <= 0) + { + // + // starting index for calculation of all bars ... + limit = maxLength; + } + else + { + // + // starting number for calculation of new bars + limit = prev_calculated - 1; + } + + // + // Main Loop ... + for (int i = limit; i < rates_total && !IsStopped(); i++) + { + // + CalculateBuffers( + open, + high, + low, + close, + i // + ); + } + + // + return rates_total; +} + +// +// Functions ... + +// +// Validate Input Args for Initialization ... +bool ValidateInputs() +{ + // + bool result = false; + + // + result = + // + atrLength >= 2 && + atrMultiplier > 0 && + // + (IsValid(scMethod, scPeriod) && + IsValid(mcMethod, mcPeriod) && + IsValid(lcMethod, lcPeriod) && + IsValid(hcMethod, hcPeriod)) + // + ; + + // + return result; +} + +// +// Initialize Market Cycles ... +bool InitMarketCycles() +{ + // + bool result = false; + + // + // Current Cycle Initialization ... + + // + int cPeriodSeconds = PeriodSeconds(_Period); + + // + mCAtrHandler = iATR( + _Symbol, + _Period, + mCSMLength // + ); + result = mCAtrHandler != INVALID_HANDLE; + if (!result) + { + return result; + } + + // + // Short Cycle Initialization ... + + // + // Find Cycle Period ... + if (scMethod == X_PERIOD_AUTO) + { + // + // Select Period ... + mSCPeriod = GetCyclePeriod( + X_MARKET_CYCLE_SHORT, + _Period // + ); + } + else + { + mSCPeriod = scPeriod; + } + + // + result = IsValid(mSCPeriod); + if (!result) + { + return result; + } + + // + mSCLength = PeriodSeconds(mSCPeriod) / cPeriodSeconds; + mSSMLength = mSCLength * mCSMLength; + result = mSCLength > 0; + if (!result) + { + return result; + } + + // + mSAtrHandler = iATR( + _Symbol, + _Period, + mSSMLength // + ); + result = mSAtrHandler != INVALID_HANDLE; + if (!result) + { + return result; + } + + // + // Medium Cycle Initialization ... + + // + // Find Cycle Period ... + if (mcMethod == X_PERIOD_AUTO) + { + // + // Select Period ... + mMCPeriod = GetCyclePeriod( + X_MARKET_CYCLE_MEDIUM, + _Period // + ); + } + else + { + mMCPeriod = mcPeriod; + } + + // + result = IsValid(mMCPeriod); + if (!result) + { + return result; + } + + // + mMCLength = PeriodSeconds(mMCPeriod) / cPeriodSeconds; + mMSMLength = mMCLength * mCSMLength; + result = mMCLength > 0; + if (!result) + { + return result; + } + + // + mMAtrHandler = iATR( + _Symbol, + _Period, + mMSMLength // + ); + result = mMAtrHandler != INVALID_HANDLE; + if (!result) + { + return result; + } + + // + // Long Cycle Initialization ... + + // + // Find Cycle Period ... + if (lcMethod == X_PERIOD_AUTO) + { + // + // Select Period ... + mLCPeriod = GetCyclePeriod( + X_MARKET_CYCLE_LONG, + _Period // + ); + } + else + { + mLCPeriod = lcPeriod; + } + + // + result = IsValid(mLCPeriod); + if (!result) + { + return result; + } + + // + mLCLength = PeriodSeconds(mLCPeriod) / cPeriodSeconds; + mLSMLength = mLCLength * mCSMLength; + result = mLCLength > 0; + if (!result) + { + return result; + } + + // + mLAtrHandler = iATR( + _Symbol, + _Period, + mLSMLength // + ); + result = mLAtrHandler != INVALID_HANDLE; + if (!result) + { + return result; + } + + // + // Hind Cycle Initialization ... + + // + // Find Cycle Period ... + if (hcMethod == X_PERIOD_AUTO) + { + // + // Select Period ... + mHCPeriod = GetCyclePeriod( + X_MARKET_CYCLE_HIND, + _Period // + ); + } + else + { + mHCPeriod = hcPeriod; + } + + // + result = IsValid(mHCPeriod); + if (!result) + { + return result; + } + + // + mHCLength = PeriodSeconds(mHCPeriod) / cPeriodSeconds; + mHSMLength = mHCLength * mCSMLength; + result = mHCLength > 0; + if (!result) + { + return result; + } + + // + mHAtrHandler = iATR( + _Symbol, + _Period, + mHSMLength // + ); + result = mHAtrHandler != INVALID_HANDLE; + if (!result) + { + return result; + } + + // + return result; +} + +// +// Retrieve all Exists Input Max Length ... +// use for Start Of Drawing ... +int ExtractMaxLengthOfInputs() +{ + // + int result = 0; + + // + result = MathMax(mCSMLength, mSSMLength); + result = MathMax(result, mMSMLength); + result = MathMax(result, mLSMLength); + result = MathMax(result, mHSMLength); + + // + return result; +} + +// +// Define Indexes and Styles ... +void DefineBuffers() +{ + // + // CURRENT Cycle ... + + // + // STR ... + SetIndexBuffer(cBufferIndex, cBuffer, INDICATOR_DATA); + + // + // Color ... + SetIndexBuffer(cColorBufferIndex, cColorBuffer, INDICATOR_COLOR_INDEX); + + // + // Set EMPTY_VALUE on Bar Buffer ... + PlotIndexSetDouble(cPlotBufferIndex, PLOT_EMPTY_VALUE, 0.0); + PlotIndexSetInteger(cPlotBufferIndex, PLOT_SHOW_DATA, showCurrent); + + // + // Data Buffers ... + + // + // ATR ... + SetIndexBuffer(cAtrBufferIndex, cAtrBuffer, INDICATOR_CALCULATIONS); + + // + // Price ... + SetIndexBuffer(cPriceBufferIndex, cPriceBuffer, INDICATOR_CALCULATIONS); + + // + // Trend ... + SetIndexBuffer(cTrendBufferIndex, cTrendBuffer, INDICATOR_CALCULATIONS); + + // + // Up ... + SetIndexBuffer(cUpBufferIndex, cUpBuffer, INDICATOR_CALCULATIONS); + + // + // Down ... + SetIndexBuffer(cDownBufferIndex, cDownBuffer, INDICATOR_CALCULATIONS); + + // + // SHORT Cycle ... + + // + // STR ... + SetIndexBuffer(sBufferIndex, sBuffer, INDICATOR_DATA); + + // + // Color ... + SetIndexBuffer(sColorBufferIndex, sColorBuffer, INDICATOR_COLOR_INDEX); + + // + // Set EMPTY_VALUE on Bar Buffer ... + PlotIndexSetDouble(sPlotBufferIndex, PLOT_EMPTY_VALUE, 0.0); + PlotIndexSetInteger(sPlotBufferIndex, PLOT_SHOW_DATA, showShort); + + // + // Data Buffers ... + + // + // ATR ... + SetIndexBuffer(sAtrBufferIndex, sAtrBuffer, INDICATOR_CALCULATIONS); + + // + // Price ... + SetIndexBuffer(sPriceBufferIndex, sPriceBuffer, INDICATOR_CALCULATIONS); + + // + // Trend ... + SetIndexBuffer(sTrendBufferIndex, sTrendBuffer, INDICATOR_CALCULATIONS); + + // + // Up ... + SetIndexBuffer(sUpBufferIndex, sUpBuffer, INDICATOR_CALCULATIONS); + + // + // Down ... + SetIndexBuffer(sDownBufferIndex, sDownBuffer, INDICATOR_CALCULATIONS); + + // + // MEDIUM Cycle ... + + // + // STR ... + SetIndexBuffer(mBufferIndex, mBuffer, INDICATOR_DATA); + + // + // Color ... + SetIndexBuffer(mColorBufferIndex, mColorBuffer, INDICATOR_COLOR_INDEX); + + // + // Set EMPTY_VALUE on Bar Buffer ... + PlotIndexSetDouble(mPlotBufferIndex, PLOT_EMPTY_VALUE, 0.0); + PlotIndexSetInteger(mPlotBufferIndex, PLOT_SHOW_DATA, showMedium); + + // + // Data Buffers ... + + // + // ATR ... + SetIndexBuffer(mAtrBufferIndex, mAtrBuffer, INDICATOR_CALCULATIONS); + + // + // Price ... + SetIndexBuffer(mPriceBufferIndex, mPriceBuffer, INDICATOR_CALCULATIONS); + + // + // Trend ... + SetIndexBuffer(mTrendBufferIndex, mTrendBuffer, INDICATOR_CALCULATIONS); + + // + // Up ... + SetIndexBuffer(mUpBufferIndex, mUpBuffer, INDICATOR_CALCULATIONS); + + // + // Down ... + SetIndexBuffer(mDownBufferIndex, mDownBuffer, INDICATOR_CALCULATIONS); + + // + // LONG Cycle ... + + // + // STR ... + SetIndexBuffer(lBufferIndex, lBuffer, INDICATOR_DATA); + + // + // Color ... + SetIndexBuffer(lColorBufferIndex, lColorBuffer, INDICATOR_COLOR_INDEX); + + // + // Set EMPTY_VALUE on Bar Buffer ... + PlotIndexSetDouble(lPlotBufferIndex, PLOT_EMPTY_VALUE, 0.0); + PlotIndexSetInteger(lPlotBufferIndex, PLOT_SHOW_DATA, showLong); + + // + // Data Buffers ... + + // + // ATR ... + SetIndexBuffer(lAtrBufferIndex, lAtrBuffer, INDICATOR_CALCULATIONS); + + // + // Price ... + SetIndexBuffer(lPriceBufferIndex, lPriceBuffer, INDICATOR_CALCULATIONS); + + // + // Trend ... + SetIndexBuffer(lTrendBufferIndex, lTrendBuffer, INDICATOR_CALCULATIONS); + + // + // Up ... + SetIndexBuffer(lUpBufferIndex, lUpBuffer, INDICATOR_CALCULATIONS); + + // + // Down ... + SetIndexBuffer(lDownBufferIndex, lDownBuffer, INDICATOR_CALCULATIONS); + + // + // HIND Cycle ... + + // + // STR ... + SetIndexBuffer(hBufferIndex, hBuffer, INDICATOR_DATA); + + // + // Color ... + SetIndexBuffer(hColorBufferIndex, hColorBuffer, INDICATOR_COLOR_INDEX); + + // + // Set EMPTY_VALUE on Bar Buffer ... + PlotIndexSetDouble(hPlotBufferIndex, PLOT_EMPTY_VALUE, 0.0); + PlotIndexSetInteger(hPlotBufferIndex, PLOT_SHOW_DATA, showHind); + + // + // Data Buffers ... + + // + // ATR ... + SetIndexBuffer(hAtrBufferIndex, hAtrBuffer, INDICATOR_CALCULATIONS); + + // + // Price ... + SetIndexBuffer(hPriceBufferIndex, hPriceBuffer, INDICATOR_CALCULATIONS); + + // + // Trend ... + SetIndexBuffer(hTrendBufferIndex, hTrendBuffer, INDICATOR_CALCULATIONS); + + // + // Up ... + SetIndexBuffer(hUpBufferIndex, hUpBuffer, INDICATOR_CALCULATIONS); + + // + // Down ... + SetIndexBuffer(hDownBufferIndex, hDownBuffer, INDICATOR_CALCULATIONS); +} + +// +// Set Indicator Short Name and also we can define Buffers Labels ... +void SetIndicatorName() +{ + IndicatorSetString(INDICATOR_SHORTNAME, ShortName); +} + +// +// Calculations ... + +// +// Calculate Hiken Ashi ... +void CalculateBuffers( + const double &open[], + const double &high[], + const double &low[], + const double &close[], + int barIndex // +) +{ + // + // Current ... + CalculateCycle( + open, + high, + low, + close, + barIndex, + cAtrBuffer, + cPriceBuffer, + cUpBuffer, + cDownBuffer, + cTrendBuffer, + cBuffer, + cColorBuffer, + showCurrent // + ); + + // + // Short ... + CalculateCycle( + open, + high, + low, + close, + barIndex, + sAtrBuffer, + sPriceBuffer, + sUpBuffer, + sDownBuffer, + sTrendBuffer, + sBuffer, + sColorBuffer, + showShort // + ); + + // + // Short ... + CalculateCycle( + open, + high, + low, + close, + barIndex, + mAtrBuffer, + mPriceBuffer, + mUpBuffer, + mDownBuffer, + mTrendBuffer, + mBuffer, + mColorBuffer, + showMedium // + ); + + // + // Short ... + CalculateCycle( + open, + high, + low, + close, + barIndex, + lAtrBuffer, + lPriceBuffer, + lUpBuffer, + lDownBuffer, + lTrendBuffer, + lBuffer, + lColorBuffer, + showLong // + ); + + // + // Hind ... + CalculateCycle( + open, + high, + low, + close, + barIndex, + hAtrBuffer, + hPriceBuffer, + hUpBuffer, + hDownBuffer, + hTrendBuffer, + hBuffer, + hColorBuffer, + showHind // + ); +} + +// +void CalculateCycle( + const double &open[], + const double &high[], + const double &low[], + const double &close[], + int barIndex, + double &atr[], + double &price[], + double &up[], + double &down[], + double &trend[], + double &main[], + double &clr[], // Color Index Buffer + bool show // +) +{ + // + // Calculated Price ... + double _price = getPrice( + atrAppliedTo, + open, + high, + low, + close, + barIndex // + ); + price[barIndex] = _price; + + // + double _atr = atr[barIndex]; + + // + // Up ... + up[barIndex] = _price + (atrMultiplier * _atr); + + // + // Down ... + down[barIndex] = _price - (atrMultiplier * _atr); + + // + if (close[barIndex] > up[barIndex - 1]) + { + // + trend[barIndex] = 1; + if (trend[barIndex - 1] == -1) + { + changeOfTrend = 1; + } + } + else if (close[barIndex] < down[barIndex - 1]) + { + // + trend[barIndex] = -1; + if (trend[barIndex - 1] == 1) + { + changeOfTrend = 1; + } + } + else if (trend[barIndex - 1] == 1) + { + // + trend[barIndex] = 1; + changeOfTrend = 0; + } + else if (trend[barIndex - 1] == -1) + { + // + trend[barIndex] = -1; + changeOfTrend = 0; + } + + // + // Down Trend Starting ... + if (trend[barIndex] < 0 && trend[barIndex - 1] > 0) + { + startBearishTrend = 1; + } + else + { + startBearishTrend = 0; + } + + // + // Up Trend Starting ... + if (trend[barIndex] > 0 && trend[barIndex - 1] < 0) + { + startBullishTrend = 1; + } + else + { + startBullishTrend = 0; + } + + // + if (trend[barIndex] > 0 && down[barIndex] < down[barIndex - 1]) + { + down[barIndex] = down[barIndex - 1]; + } + + // + if (trend[barIndex] < 0 && up[barIndex] > up[barIndex - 1]) + { + up[barIndex] = up[barIndex - 1]; + } + + // + if (startBearishTrend == 1) + { + up[barIndex] = price[barIndex] + (atrMultiplier * _atr); + } + + // + if (startBullishTrend == 1) + { + down[barIndex] = price[barIndex] - (atrMultiplier * _atr); + } + + // + double colorIDX = hideColorIDX; + clr[barIndex] = colorIDX; + + // + if (trend[barIndex] == 1) + { + // + main[barIndex] = down[barIndex]; + if (changeOfTrend == 1) + { + // + main[barIndex - 1] = main[barIndex - 2]; + changeOfTrend = 0; + } + + // + colorIDX = bullishColorIDX; + } + else if (trend[barIndex] == -1) + { + // + main[barIndex] = up[barIndex]; + if (changeOfTrend == 1) + { + // + main[barIndex - 1] = main[barIndex - 2]; + changeOfTrend = 0; + } + + // + colorIDX = bearishColorIDX; + } + + // + if (show) + { + clr[barIndex] = colorIDX; + } + + // +} + +// +// TEMPLATE Function ... + +template +double getPrice(ENUM_APPLIED_PRICE tprice, T &open[], T &high[], T &low[], T &close[], int i) +{ + switch (tprice) + { + case PRICE_CLOSE: + return (close[i]); + case PRICE_OPEN: + return (open[i]); + case PRICE_HIGH: + return (high[i]); + case PRICE_LOW: + return (low[i]); + case PRICE_MEDIAN: + return ((high[i] + low[i]) / 2.0); + case PRICE_TYPICAL: + return ((high[i] + low[i] + close[i]) / 3.0); + case PRICE_WEIGHTED: + return ((high[i] + low[i] + close[i] + close[i]) / 4.0); + } + return (0); +} + +// \ No newline at end of file diff --git a/BKPS/Indicators 14030517/x-saherelm.xchswings.ex5 b/BKPS/Indicators 14030517/x-saherelm.xchswings.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..aa7b1a2936553a3a3407bf1aba93138ac52d1f6f GIT binary patch literal 33510 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 p|9$^bdb= 2 && + // + (IsValid(scMethod, scPeriod) && + IsValid(mcMethod, mcPeriod) && + IsValid(lcMethod, lcPeriod) && + IsValid(hcMethod, hcPeriod)) + // + ; + + // + return result; +} + +// +// Initialize Market Cycles ... +bool InitMarketCycles() +{ + // + bool result = false; + + // + // Current Cycle Initialization ... + + // + int cPeriodSeconds = PeriodSeconds(_Period); + + // + // Short Cycle Initialization ... + + // + // Find Cycle Period ... + if (scMethod == X_PERIOD_AUTO) + { + // + // Select Period ... + mSCPeriod = GetCyclePeriod( + X_MARKET_CYCLE_SHORT, + _Period // + ); + } + else + { + mSCPeriod = scPeriod; + } + + // + result = IsValid(mSCPeriod); + if (!result) + { + return result; + } + + // + mSCycleLength = PeriodSeconds(mSCPeriod) / cPeriodSeconds; + mSMarketLength = mSCycleLength * mCMarketLength; + result = mSCycleLength > 0; + if (!result) + { + return result; + } + + // + // Medium Cycle Initialization ... + + // + // Find Cycle Period ... + if (mcMethod == X_PERIOD_AUTO) + { + // + // Select Period ... + mMCPeriod = GetCyclePeriod( + X_MARKET_CYCLE_MEDIUM, + _Period // + ); + } + else + { + mMCPeriod = mcPeriod; + } + + // + result = IsValid(mMCPeriod); + if (!result) + { + return result; + } + + // + mMCycleLength = PeriodSeconds(mMCPeriod) / cPeriodSeconds; + mMMarketLength = mMCycleLength * mCMarketLength; + result = mMCycleLength > 0; + if (!result) + { + return result; + } + + // + // Long Cycle Initialization ... + + // + // Find Cycle Period ... + if (lcMethod == X_PERIOD_AUTO) + { + // + // Select Period ... + mLCPeriod = GetCyclePeriod( + X_MARKET_CYCLE_LONG, + _Period // + ); + } + else + { + mLCPeriod = lcPeriod; + } + + // + result = IsValid(mLCPeriod); + if (!result) + { + return result; + } + + // + mLCycleLength = PeriodSeconds(mLCPeriod) / cPeriodSeconds; + mLMarketLength = mLCycleLength * mCMarketLength; + result = mLCycleLength > 0; + if (!result) + { + return result; + } + + // + // Hind Cycle Initialization ... + + // + // Find Cycle Period ... + if (hcMethod == X_PERIOD_AUTO) + { + // + // Select Period ... + mHCPeriod = GetCyclePeriod( + X_MARKET_CYCLE_HIND, + _Period // + ); + } + else + { + mHCPeriod = hcPeriod; + } + + // + result = IsValid(mHCPeriod); + if (!result) + { + return result; + } + + // + mHCycleLength = PeriodSeconds(mHCPeriod) / cPeriodSeconds; + mHMarketLength = mHCycleLength * mCMarketLength; + result = mHCycleLength > 0; + if (!result) + { + return result; + } + + // + return result; +} + +// +// Retrieve all Exists Input Max Length ... +// use for Start Of Drawing ... +int ExtractMaxLengthOfInputs() +{ + // + int result = 0; + + // + result = MathMax(mCMarketLength, mSMarketLength); + result = MathMax(result, mMMarketLength); + result = MathMax(result, mLMarketLength); + result = MathMax(result, mHMarketLength); + + // + return result; +} + +// +// Set Indicator Short Name and also we can define Buffers Labels ... +void SetIndicatorName() +{ + // + IndicatorSetString(INDICATOR_SHORTNAME, ShortName); + + // Setting Indicator Digits + IndicatorSetInteger(INDICATOR_DIGITS, _Digits); +} + +// +// Define Indexes and Styles ... +void DefineBuffers() +{ + // + // Current ... + + // + ENUM_DRAW_TYPE cSHDrawType = + showCurrent && showSwingHighs + ? DRAW_ARROW + : DRAW_NONE; + + // + SetIndexBuffer(cSHBufferIndex, cSHBuffer, INDICATOR_DATA); + PlotIndexSetDouble(cSHBufferIndex, PLOT_EMPTY_VALUE, 0); + PlotIndexSetInteger(cSHBufferIndex, PLOT_ARROW, 234); + PlotIndexSetInteger(cSHBufferIndex, PLOT_SHOW_DATA, showCurrent && showSwingHighs); + PlotIndexSetInteger(cSHBufferIndex, PLOT_DRAW_TYPE, cSHDrawType); + + // + ENUM_DRAW_TYPE cSLDrawType = + showCurrent && showSwingLows + ? DRAW_ARROW + : DRAW_NONE; + + // + SetIndexBuffer(cSLBufferIndex, cSLBuffer, INDICATOR_DATA); + PlotIndexSetDouble(cSLBufferIndex, PLOT_EMPTY_VALUE, 0); + PlotIndexSetInteger(cSLBufferIndex, PLOT_ARROW, 233); + PlotIndexSetInteger(cSLBufferIndex, PLOT_SHOW_DATA, showCurrent && showSwingLows); + PlotIndexSetInteger(cSLBufferIndex, PLOT_DRAW_TYPE, cSLDrawType); + + // + // Short ... + + // + ENUM_DRAW_TYPE sSHDrawType = + showShort && showSwingHighs + ? DRAW_ARROW + : DRAW_NONE; + + // + SetIndexBuffer(sSHBufferIndex, sSHBuffer, INDICATOR_DATA); + PlotIndexSetDouble(sSHBufferIndex, PLOT_EMPTY_VALUE, 0); + PlotIndexSetInteger(sSHBufferIndex, PLOT_ARROW, 234); + PlotIndexSetInteger(sSHBufferIndex, PLOT_SHOW_DATA, showShort && showSwingHighs); + PlotIndexSetInteger(sSHBufferIndex, PLOT_DRAW_TYPE, sSHDrawType); + + // + ENUM_DRAW_TYPE sSLDrawType = + showShort && showSwingLows + ? DRAW_ARROW + : DRAW_NONE; + + // + SetIndexBuffer(sSLBufferIndex, sSLBuffer, INDICATOR_DATA); + PlotIndexSetDouble(sSLBufferIndex, PLOT_EMPTY_VALUE, 0); + PlotIndexSetInteger(sSLBufferIndex, PLOT_ARROW, 233); + PlotIndexSetInteger(sSLBufferIndex, PLOT_SHOW_DATA, showShort && showSwingLows); + PlotIndexSetInteger(sSLBufferIndex, PLOT_DRAW_TYPE, sSLDrawType); + + // + // Medium ... + + // + ENUM_DRAW_TYPE mSHDrawType = + showMedium && showSwingHighs + ? DRAW_ARROW + : DRAW_NONE; + + // + SetIndexBuffer(mSHBufferIndex, mSHBuffer, INDICATOR_DATA); + PlotIndexSetDouble(mSHBufferIndex, PLOT_EMPTY_VALUE, 0); + PlotIndexSetInteger(mSHBufferIndex, PLOT_ARROW, 234); + PlotIndexSetInteger(mSHBufferIndex, PLOT_SHOW_DATA, showMedium && showSwingHighs); + PlotIndexSetInteger(mSHBufferIndex, PLOT_DRAW_TYPE, mSHDrawType); + + // + ENUM_DRAW_TYPE mSLDrawType = + showMedium && showSwingLows + ? DRAW_ARROW + : DRAW_NONE; + + // + SetIndexBuffer(mSLBufferIndex, mSLBuffer, INDICATOR_DATA); + PlotIndexSetDouble(mSLBufferIndex, PLOT_EMPTY_VALUE, 0); + PlotIndexSetInteger(mSLBufferIndex, PLOT_ARROW, 233); + PlotIndexSetInteger(mSLBufferIndex, PLOT_SHOW_DATA, showMedium && showSwingLows); + PlotIndexSetInteger(mSLBufferIndex, PLOT_DRAW_TYPE, mSLDrawType); + + // + // Long ... + + // + ENUM_DRAW_TYPE lSHDrawType = + showLong && showSwingHighs + ? DRAW_ARROW + : DRAW_NONE; + + // + SetIndexBuffer(lSHBufferIndex, lSHBuffer, INDICATOR_DATA); + PlotIndexSetDouble(lSHBufferIndex, PLOT_EMPTY_VALUE, 0); + PlotIndexSetInteger(lSHBufferIndex, PLOT_ARROW, 234); + PlotIndexSetInteger(lSHBufferIndex, PLOT_SHOW_DATA, showLong && showSwingHighs); + PlotIndexSetInteger(lSHBufferIndex, PLOT_DRAW_TYPE, lSHDrawType); + + // + ENUM_DRAW_TYPE lSLDrawType = + showLong && showSwingLows + ? DRAW_ARROW + : DRAW_NONE; + + // + SetIndexBuffer(lSLBufferIndex, lSLBuffer, INDICATOR_DATA); + PlotIndexSetDouble(lSLBufferIndex, PLOT_EMPTY_VALUE, 0); + PlotIndexSetInteger(lSLBufferIndex, PLOT_ARROW, 233); + PlotIndexSetInteger(lSLBufferIndex, PLOT_SHOW_DATA, showLong && showSwingLows); + PlotIndexSetInteger(lSLBufferIndex, PLOT_DRAW_TYPE, lSLDrawType); + + // + // Hind ... + + // + ENUM_DRAW_TYPE hSHDrawType = + showHind && showSwingHighs + ? DRAW_ARROW + : DRAW_NONE; + + // + SetIndexBuffer(hSHBufferIndex, hSHBuffer, INDICATOR_DATA); + PlotIndexSetDouble(hSHBufferIndex, PLOT_EMPTY_VALUE, 0); + PlotIndexSetInteger(hSHBufferIndex, PLOT_ARROW, 234); + PlotIndexSetInteger(hSHBufferIndex, PLOT_SHOW_DATA, showHind && showSwingHighs); + PlotIndexSetInteger(hSHBufferIndex, PLOT_DRAW_TYPE, hSHDrawType); + + // + ENUM_DRAW_TYPE hSLDrawType = + showHind && showSwingLows + ? DRAW_ARROW + : DRAW_NONE; + + // + SetIndexBuffer(hSLBufferIndex, hSLBuffer, INDICATOR_DATA); + PlotIndexSetDouble(hSLBufferIndex, PLOT_EMPTY_VALUE, 0); + PlotIndexSetInteger(hSLBufferIndex, PLOT_ARROW, 233); + PlotIndexSetInteger(hSLBufferIndex, PLOT_SHOW_DATA, showHind && showSwingLows); + PlotIndexSetInteger(hSLBufferIndex, PLOT_DRAW_TYPE, hSLDrawType); +} + +// +// Calculations ... + +// +// Calculate Buffers ... +void CalculateBuffers( + int bar_index, // Selected Bar Index + const int prevCalculated, + const int ratesTotal, + // + const datetime &time[], + const double &open[], + const double &high[], + const double &close[], + const double &low[], + const long &tickVolume[] // +) +{ + // + CalculateCycles( + // + bar_index, + prevCalculated, + ratesTotal, + // + time, + open, + high, + close, + low, + tickVolume // + ); +} + +// +void CalculateCycles( + int bar_index, // Selected Bar Index + const int prevCalculated, + const int ratesTotal, + // + const datetime &time[], + const double &open[], + const double &high[], + const double &close[], + const double &low[], + const long &tickVolume[] // +) +{ + // + // CURRENT ... + CalculateCycle( + bar_index, + prevCalculated, + ratesTotal, + // + time, + open, + high, + close, + low, + tickVolume, + // + mCMarketLength, + showCurrent, + cSHBuffer, + cSLBuffer, + cH1, + cH1Time, + cL1, + cL1Time // + ); + + // + // SHORT ... + CalculateCycle( + bar_index, + prevCalculated, + ratesTotal, + // + time, + open, + high, + close, + low, + tickVolume, + // + mSMarketLength, + showShort, + sSHBuffer, + sSLBuffer, + sH1, + sH1Time, + sL1, + sL1Time // + ); + + // + // MEDIUM ... + CalculateCycle( + bar_index, + prevCalculated, + ratesTotal, + // + time, + open, + high, + close, + low, + tickVolume, + // + mMMarketLength, + showMedium, + mSHBuffer, + mSLBuffer, + mH1, + mH1Time, + mL1, + mL1Time // + ); + + // + // LONG ... + CalculateCycle( + bar_index, + prevCalculated, + ratesTotal, + // + time, + open, + high, + close, + low, + tickVolume, + // + mLMarketLength, + showLong, + lSHBuffer, + lSLBuffer, + lH1, + lH1Time, + lL1, + lL1Time // + ); + + // + // HIND ... + CalculateCycle( + bar_index, + prevCalculated, + ratesTotal, + // + time, + open, + high, + close, + low, + tickVolume, + // + mHMarketLength, + showHind, + hSHBuffer, + hSLBuffer, + hH1, + hH1Time, + hL1, + hL1Time // + ); +} + +// +void CalculateCycle( + // + int bar_index, // Selected Bar Index + const int prevCalculated, + const int ratesTotal, + // + const datetime &time[], + const double &open[], + const double &high[], + const double &close[], + const double &low[], + const long &tickVolume[], + // + int _length, // Calculation Length + bool _show, + double &_hBuffer[], + double &_lBuffer[], + double &_h1, + datetime &_h1Time, + double &_l1, + datetime &_l1Time // +) +{ + // + bool isSwingHigh = true; + bool isSwingLow = true; + + // + _hBuffer[bar_index] = 0; + _lBuffer[bar_index] = 0; + + // + // Check for Swing High + for (int j = 1; j <= _length; j++) + { + // + if (high[bar_index] <= high[bar_index + j] || high[bar_index] <= high[bar_index - j]) + { + // + isSwingHigh = false; + break; + } + } + + // + // Check for Swing Low + for (int j = 1; j <= _length; j++) + { + // + if (low[bar_index] >= low[bar_index + j] || low[bar_index] >= low[bar_index - j]) + { + // + isSwingLow = false; + break; + } + } + + // + if (isSwingHigh) + { + // + _hBuffer[bar_index] = high[bar_index]; + if (high[bar_index] > _h1 || _h1 == 0) + { + // + _h1 = high[bar_index]; + _h1Time = time[bar_index]; + } + } + + // + if (isSwingLow) + { + // + _lBuffer[bar_index] = low[bar_index]; + if (low[bar_index] < _l1 || _l1 == 0) + { + // + _l1 = low[bar_index]; + _l1Time = time[bar_index]; + } + } +} \ No newline at end of file diff --git a/BKPS/Indicators 14030517/x-saherelm.xchtd.ex5 b/BKPS/Indicators 14030517/x-saherelm.xchtd.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..fdd3e0596969b34652620ae6e38715b7574bc2cf GIT binary patch literal 29690 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 literal 0 HcmV?d00001 diff --git a/BKPS/Indicators 14030517/x-saherelm.xchtd.mq5 b/BKPS/Indicators 14030517/x-saherelm.xchtd.mq5 new file mode 100644 index 0000000..86ec2b5 --- /dev/null +++ b/BKPS/Indicators 14030517/x-saherelm.xchtd.mq5 @@ -0,0 +1,900 @@ +/////////////////////////////////////////////////////// +// SaherElm IT Center MQL5 Indicator +// ------------------------------------------- +// Name: XCHTD +// Description: XCHTD Cycles ... +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://saherelm.ir" +#property version "1.00" +#property description "SaherElm XCHTD Indicator" +#property strict + +// +#define ShortName "XCHTD" + +// +// Includes Common Library ... +#include "../Libraries/x-saherelm.common.lib.mq5" + +// +enum ENUM_XCHTD_MODE +{ + XCHTD_POWER_MODE = 0, // Using Power + XCHTD_PRESSURE_MODE = 1, // Using Pressure + XCHTD_TYPE_MODE = 2, // Using Type + XCHTD_STRONG_MODE = 3, // Using Power and Pressures +}; + +// +// Inputs ... + +// +input group "Market"; +input int length = 14; // Length +input ENUM_XCHTD_MODE mode = XCHTD_POWER_MODE; // Mode + +// +input group "Cycles"; + +// +input group "Short"; +input ENUM_X_PERIOD_METHOD scMethod = X_PERIOD_AUTO; // How to Find Period +input ENUM_TIMEFRAMES scPeriod = NULL; // Time Period + +// +input group "Medium"; +input ENUM_X_PERIOD_METHOD mcMethod = X_PERIOD_AUTO; // How to Find Period +input ENUM_TIMEFRAMES mcPeriod = NULL; // Time Period + +// +input group "Long"; +input ENUM_X_PERIOD_METHOD lcMethod = X_PERIOD_AUTO; // How to Find Period +input ENUM_TIMEFRAMES lcPeriod = NULL; // Time Period + +// +input group "Hind"; +input ENUM_X_PERIOD_METHOD hcMethod = X_PERIOD_AUTO; // How to Find Period +input ENUM_TIMEFRAMES hcPeriod = NULL; // Time Period + +// +// Presentation ... +input group "Presentation"; + +// +// Current ... +input bool showCurrent = true; // Show Current Cycle +input bool showShort = true; // Show Short Cycle +input bool showMedium = true; // Show Medium Cycle +input bool showLong = true; // Show Long Cycle +input bool showHind = true; // Show Hind Cycle + +// +// Buffers ... + +// +#property indicator_chart_window + +// +#property indicator_buffers 10 +#property indicator_plots 0 + +// +// Current ... + +// +#define cBullBufferIndex 0 +double cBullBuffer[]; + +// +#property indicator_label1 "XCHTD C Bull" +#property indicator_type1 DRAW_LINE +#property indicator_color1 clrLime +#property indicator_style1 STYLE_SOLID + +// +#define cBearBufferIndex 1 +double cBearBuffer[]; + +// +#property indicator_label2 "XCHTD C Bear" +#property indicator_type2 DRAW_LINE +#property indicator_style2 STYLE_SOLID +#property indicator_color2 clrRed + +// +// Short ... + +// +#define sBullBufferIndex 2 +double sBullBuffer[]; + +// +#property indicator_label3 "XCHTD S Bull" +#property indicator_type3 DRAW_LINE +#property indicator_color3 clrLime +#property indicator_style3 STYLE_SOLID + +// +#define sBearBufferIndex 3 +double sBearBuffer[]; + +// +#property indicator_label4 "XCHTD S Bear" +#property indicator_type4 DRAW_LINE +#property indicator_style4 STYLE_SOLID +#property indicator_color4 clrRed + +// +// Medium ... + +// +#define mBullBufferIndex 4 +double mBullBuffer[]; + +// +#property indicator_label5 "XCHTD M Bull" +#property indicator_type5 DRAW_LINE +#property indicator_color5 clrLime +#property indicator_style5 STYLE_SOLID + +// +#define mBearBufferIndex 5 +double mBearBuffer[]; + +// +#property indicator_label6 "XCHTD M Bear" +#property indicator_type6 DRAW_LINE +#property indicator_style6 STYLE_SOLID +#property indicator_color6 clrRed + +// +// Long ... + +// +#define lBullBufferIndex 6 +double lBullBuffer[]; + +// +#property indicator_label7 "XCHTD L Bull" +#property indicator_type7 DRAW_LINE +#property indicator_color7 clrLime +#property indicator_style7 STYLE_SOLID + +// +#define lBearBufferIndex 7 +double lBearBuffer[]; + +// +#property indicator_label8 "XCHTD L Bear" +#property indicator_type8 DRAW_LINE +#property indicator_style8 STYLE_SOLID +#property indicator_color8 clrRed + +// +// Hind ... + +// +#define hBullBufferIndex 8 +double hBullBuffer[]; + +// +#property indicator_label9 "XCHTD H Bull" +#property indicator_type9 DRAW_LINE +#property indicator_color9 clrLime +#property indicator_style9 STYLE_SOLID + +// +#define hBearBufferIndex 9 +double hBearBuffer[]; + +// +#property indicator_label10 "XCHTD H Bear" +#property indicator_type10 DRAW_LINE +#property indicator_style10 STYLE_SOLID +#property indicator_color10 clrRed + +// +// Variables, Properties and etc ... + +// +int maxLength; + +// +// Current ... +int mCMarketLength = length; + +// +// Short ... +int mSCycleLength = 0; +int mSMarketLength = 0; +ENUM_TIMEFRAMES mSCPeriod = NULL; + +// +// Medium ... +int mMCycleLength = 0; +int mMMarketLength = 0; +ENUM_TIMEFRAMES mMCPeriod = NULL; + +// +// Long ... +int mLCycleLength = 0; +int mLMarketLength = 0; +ENUM_TIMEFRAMES mLCPeriod = NULL; + +// +// Hind ... +int mHCycleLength = 0; +int mHMarketLength = 0; +ENUM_TIMEFRAMES mHCPeriod = NULL; + +// +// Event Handlers ... + +// +// Initialization ... +int OnInit() +{ + // + // Validate Inputs ... + if (!ValidateInputs()) + { + return INIT_PARAMETERS_INCORRECT; + } + + // + if (!InitMarketCycles()) + { + return INIT_PARAMETERS_INCORRECT; + } + + // + // because in some cases we may have more than one input for + // calculation and we must prevent any calculation + // untill we pass the biggest input length, here we get max Input length + // and then wait until pass it ... + maxLength = ExtractMaxLengthOfInputs(); + + // + // Define Index Buffers ... + DefineBuffers(); + + // + // Set Indicator ShortName ... + SetIndicatorName(); + + // + // Init Succeed ... + return INIT_SUCCEEDED; +} + +// +// DeInitialization ... +void OnDeinit(const int reason) +{ + // + // REASON_PROGRAM 0 The EA has stopped working calling the ExpertRemove() function + // REASON_REMOVE 1 Program removed from a chart + // REASON_RECOMPILE 2 Program recompiled + // REASON_CHARTCHANGE 3 A symbol or a chart period is changed + // REASON_CHARTCLOSE 4 Chart closed + // REASON_PARAMETERS 5 Inputs changed by a user + // REASON_ACCOUNT 6 Another account has been activated or reconnection to the trade server has occurred due to changes in the account settings + // REASON_TEMPLATE 7 Another chart template applied + // REASON_INITFAILED 8 The OnInit() handler returned a non-zero value + // REASON_CLOSE 9 Terminal closed +} + +// +// Calculating what we want ... +int OnCalculate( + const int rates_total, // Total Bars on Chart ... + const int prev_calculated, // Total Calculated Bars on Charts ... + const datetime &time[], // History of Open Time ... + const double &open[], // History of Open Price ... + const double &high[], // History of High Price ... + const double &low[], // History of Low Price ... + const double &close[], // History of Close Price ... + const long &tick_volume[], // History of Tick Volumes on Bar ... + const long &volume[], // History of Trade Volumes ... + const int &spread[] // History of Spread Price ... +) +{ + // + // Prepare Buffers ... + ArraySetAsSeries(time, true); + ArraySetAsSeries(open, true); + ArraySetAsSeries(high, true); + ArraySetAsSeries(low, true); + ArraySetAsSeries(close, true); + ArraySetAsSeries(tick_volume, true); + ArraySetAsSeries(volume, true); + ArraySetAsSeries(spread, true); + + // + // this counts Available Bars ... + int limit; + + // + // because in some cases we may have more than one input for + // calculation and we must prevent any calculation + // untill we pass the biggest input length, here we get max Input length + // and then wait until pass it ... + + // + limit = prev_calculated < maxLength ? rates_total - (maxLength + 1) : rates_total - prev_calculated; + + // + // Main Loop ... + for (int i = limit; i >= 0 && !IsStopped(); i--) + { + // + CalculateBuffers( + i, + prev_calculated, + rates_total, + open, + high, + close, + low, + tick_volume // + ); + } + + // + return rates_total; +} + +// +// Functions ... + +// +// Validate Input Args for Initialization ... +bool ValidateInputs() +{ + // + bool result = false; + + // + result = + // + length >= 2 && + // + (IsValid(scMethod, scPeriod) && + IsValid(mcMethod, mcPeriod) && + IsValid(lcMethod, lcPeriod) && + IsValid(hcMethod, hcPeriod)) + // + ; + + // + return result; +} + +// +// Initialize Market Cycles ... +bool InitMarketCycles() +{ + // + bool result = false; + + // + // Current Cycle Initialization ... + + // + int cPeriodSeconds = PeriodSeconds(_Period); + + // + // Short Cycle Initialization ... + + // + // Find Cycle Period ... + if (scMethod == X_PERIOD_AUTO) + { + // + // Select Period ... + mSCPeriod = GetCyclePeriod( + X_MARKET_CYCLE_SHORT, + _Period // + ); + } + else + { + mSCPeriod = scPeriod; + } + + // + result = IsValid(mSCPeriod); + if (!result) + { + return result; + } + + // + mSCycleLength = PeriodSeconds(mSCPeriod) / cPeriodSeconds; + mSMarketLength = mSCycleLength * mCMarketLength; + result = mSCycleLength > 0; + if (!result) + { + return result; + } + + // + // Medium Cycle Initialization ... + + // + // Find Cycle Period ... + if (mcMethod == X_PERIOD_AUTO) + { + // + // Select Period ... + mMCPeriod = GetCyclePeriod( + X_MARKET_CYCLE_MEDIUM, + _Period // + ); + } + else + { + mMCPeriod = mcPeriod; + } + + // + result = IsValid(mMCPeriod); + if (!result) + { + return result; + } + + // + mMCycleLength = PeriodSeconds(mMCPeriod) / cPeriodSeconds; + mMMarketLength = mMCycleLength * mCMarketLength; + result = mMCycleLength > 0; + if (!result) + { + return result; + } + + // + // Long Cycle Initialization ... + + // + // Find Cycle Period ... + if (lcMethod == X_PERIOD_AUTO) + { + // + // Select Period ... + mLCPeriod = GetCyclePeriod( + X_MARKET_CYCLE_LONG, + _Period // + ); + } + else + { + mLCPeriod = lcPeriod; + } + + // + result = IsValid(mLCPeriod); + if (!result) + { + return result; + } + + // + mLCycleLength = PeriodSeconds(mLCPeriod) / cPeriodSeconds; + mLMarketLength = mLCycleLength * mCMarketLength; + result = mLCycleLength > 0; + if (!result) + { + return result; + } + + // + // Hind Cycle Initialization ... + + // + // Find Cycle Period ... + if (hcMethod == X_PERIOD_AUTO) + { + // + // Select Period ... + mHCPeriod = GetCyclePeriod( + X_MARKET_CYCLE_HIND, + _Period // + ); + } + else + { + mHCPeriod = hcPeriod; + } + + // + result = IsValid(mHCPeriod); + if (!result) + { + return result; + } + + // + mHCycleLength = PeriodSeconds(mHCPeriod) / cPeriodSeconds; + mHMarketLength = mHCycleLength * mCMarketLength; + result = mHCycleLength > 0; + if (!result) + { + return result; + } + + // + return result; +} + +// +// Retrieve all Exists Input Max Length ... +// use for Start Of Drawing ... +int ExtractMaxLengthOfInputs() +{ + // + int result = 0; + + // + result = MathMax(mCMarketLength, mSMarketLength); + result = MathMax(result, mMMarketLength); + result = MathMax(result, mLMarketLength); + result = MathMax(result, mHMarketLength); + + // + return result; +} + +// +// Define Indexes and Styles ... +void DefineBuffers() +{ + // + // Current ... + + // + // ENUM_DRAW_TYPE cDrawType = showCurrent ? DRAW_LINE : DRAW_NONE; + + // + ArraySetAsSeries(cBullBuffer, true); + SetIndexBuffer(cBullBufferIndex, cBullBuffer, INDICATOR_CALCULATIONS); + // PlotIndexSetInteger(cBullBufferIndex, PLOT_DRAW_TYPE, cDrawType); + // PlotIndexSetInteger(cBullBufferIndex, PLOT_SHOW_DATA, showCurrent); + + // + ArraySetAsSeries(cBearBuffer, true); + SetIndexBuffer(cBearBufferIndex, cBearBuffer, INDICATOR_CALCULATIONS); + // PlotIndexSetInteger(cBearBufferIndex, PLOT_DRAW_TYPE, cDrawType); + // PlotIndexSetInteger(cBearBufferIndex, PLOT_SHOW_DATA, showCurrent); + + // + // Short ... + + // + // ENUM_DRAW_TYPE sDrawType = showShort ? DRAW_LINE : DRAW_NONE; + + // + ArraySetAsSeries(sBullBuffer, true); + SetIndexBuffer(sBullBufferIndex, sBullBuffer, INDICATOR_CALCULATIONS); + // PlotIndexSetInteger(sBullBufferIndex, PLOT_DRAW_TYPE, sDrawType); + // PlotIndexSetInteger(sBullBufferIndex, PLOT_SHOW_DATA, showShort); + + // + ArraySetAsSeries(sBearBuffer, true); + SetIndexBuffer(sBearBufferIndex, sBearBuffer, INDICATOR_CALCULATIONS); + // PlotIndexSetInteger(sBearBufferIndex, PLOT_DRAW_TYPE, sDrawType); + // PlotIndexSetInteger(sBearBufferIndex, PLOT_SHOW_DATA, showShort); + + // + // Medium ... + + // + // ENUM_DRAW_TYPE mDrawType = showMedium ? DRAW_LINE : DRAW_NONE; + + // + ArraySetAsSeries(mBullBuffer, true); + SetIndexBuffer(mBullBufferIndex, mBullBuffer, INDICATOR_CALCULATIONS); + // PlotIndexSetInteger(mBullBufferIndex, PLOT_DRAW_TYPE, mDrawType); + // PlotIndexSetInteger(mBullBufferIndex, PLOT_SHOW_DATA, showMedium); + + // + ArraySetAsSeries(mBearBuffer, true); + SetIndexBuffer(mBearBufferIndex, mBearBuffer, INDICATOR_CALCULATIONS); + // PlotIndexSetInteger(mBearBufferIndex, PLOT_DRAW_TYPE, mDrawType); + // PlotIndexSetInteger(mBearBufferIndex, PLOT_SHOW_DATA, showMedium); + + // + // Long ... + + // + // ENUM_DRAW_TYPE lDrawType = showLong ? DRAW_LINE : DRAW_NONE; + + // + ArraySetAsSeries(lBullBuffer, true); + SetIndexBuffer(lBullBufferIndex, lBullBuffer, INDICATOR_CALCULATIONS); + // PlotIndexSetInteger(lBullBufferIndex, PLOT_DRAW_TYPE, lDrawType); + // PlotIndexSetInteger(lBullBufferIndex, PLOT_SHOW_DATA, showLong); + + // + ArraySetAsSeries(lBearBuffer, true); + SetIndexBuffer(lBearBufferIndex, lBearBuffer, INDICATOR_CALCULATIONS); + // PlotIndexSetInteger(lBearBufferIndex, PLOT_DRAW_TYPE, lDrawType); + // PlotIndexSetInteger(lBearBufferIndex, PLOT_SHOW_DATA, showLong); + + // + // Hind ... + + // + // ENUM_DRAW_TYPE hDrawType = showHind ? DRAW_LINE : DRAW_NONE; + + // + ArraySetAsSeries(hBullBuffer, true); + SetIndexBuffer(hBullBufferIndex, hBullBuffer, INDICATOR_CALCULATIONS); + // PlotIndexSetInteger(hBullBufferIndex, PLOT_DRAW_TYPE, hDrawType); + // PlotIndexSetInteger(hBullBufferIndex, PLOT_SHOW_DATA, showHind); + + // + ArraySetAsSeries(hBearBuffer, true); + SetIndexBuffer(hBearBufferIndex, hBearBuffer, INDICATOR_CALCULATIONS); + // PlotIndexSetInteger(hBearBufferIndex, PLOT_DRAW_TYPE, hDrawType); + // PlotIndexSetInteger(hBearBufferIndex, PLOT_SHOW_DATA, showHind); +} + +// +// Set Indicator Short Name and also we can define Buffers Labels ... +void SetIndicatorName() +{ + IndicatorSetString(INDICATOR_SHORTNAME, ShortName); +} + +// +// Calculations ... + +// +// Calculate Buffers ... +void CalculateBuffers( + int bar_index, // Selected Bar Index + const int prevCalculated, + const int ratesTotal, + const double &open[], + const double &high[], + const double &close[], + const double &low[], + const long &tickVolume[] // +) +{ + // + CalculateCycles( + bar_index, + prevCalculated, + ratesTotal, + open, + high, + close, + low, + tickVolume // + ); +} + +// +void CalculateCycles( + int bar_index, // Selected Bar Index + const int prevCalculated, + const int ratesTotal, + const double &open[], + const double &high[], + const double &close[], + const double &low[], + const long &tickVolume[] // +) +{ + // + // CURRENT ... + CalculateCycle( + bar_index, + prevCalculated, + ratesTotal, + open, + high, + close, + low, + tickVolume, + // + mCMarketLength, + showCurrent, + cBullBuffer, + cBearBuffer // + ); + + // + // SHORT ... + CalculateCycle( + bar_index, + prevCalculated, + ratesTotal, + open, + high, + close, + low, + tickVolume, + // + mSMarketLength, + showShort, + sBullBuffer, + sBearBuffer // + ); + + // + // MEDIUM ... + CalculateCycle( + bar_index, + prevCalculated, + ratesTotal, + open, + high, + close, + low, + tickVolume, + // + mMMarketLength, + showMedium, + mBullBuffer, + mBearBuffer // + ); + + // + // LONG ... + CalculateCycle( + bar_index, + prevCalculated, + ratesTotal, + open, + high, + close, + low, + tickVolume, + // + mLMarketLength, + showLong, + lBullBuffer, + lBearBuffer // + ); + + // + // HIND ... + CalculateCycle( + bar_index, + prevCalculated, + ratesTotal, + open, + high, + close, + low, + tickVolume, + // + mHMarketLength, + showHind, + hBullBuffer, + hBearBuffer // + ); +} + +// +void CalculateCycle( + int bar_index, // Selected Bar Index + const int prevCalculated, + const int ratesTotal, + const double &open[], + const double &high[], + const double &close[], + const double &low[], + const long &tickVolume[], + // + int _length, // Calculation Length + bool _show, + double &_bull[], + double &_bear[] // +) +{ + // + double bullPower = 0; + double bearPower = 0; + + // + double lowShadow = 0; + double highShadow = 0; + + // + double bullPressure = 0; + double bearPressure = 0; + + // + double bullRange = 0; + double bearRange = 0; + + // + for (int i = bar_index; i < bar_index + _length; i++) + { + // + bool isBullish = + // + close[i] > open[i] + // + ; + + // + bool isBearish = + // + close[i] < open[i] + // + ; + + // + double iUpper = MathMax(open[i], close[i]); + double iLower = MathMin(open[i], close[i]); + + // + double iBody = iUpper - iLower; + double iRange = high[i] - low[i]; + + // + double iHighShadow = high[i] - iUpper; + double iLowShadow = iLower - low[i]; + + // + if (isBullish) + { + // + bullPower += iBody; + bullRange += iRange; + bearPressure += iHighShadow; + } + else if (isBearish) + { + // + bearPower += iBody; + bearRange += iRange; + bullPressure += iLowShadow; + } + + // + lowShadow += iLowShadow; + highShadow += iHighShadow; + } + + // + if (mode == XCHTD_POWER_MODE) + { + // + _bull[bar_index] = bullPower; + _bear[bar_index] = bearPower; + } + else if (mode == XCHTD_PRESSURE_MODE) + { + // + _bull[bar_index] = bullPressure; + _bear[bar_index] = bearPressure; + } + else if (mode == XCHTD_TYPE_MODE) + { + // + _bull[bar_index] = bullRange; + _bear[bar_index] = bearRange; + } + else if (mode == XCHTD_STRONG_MODE) + { + // + _bull[bar_index] = bullPower + bullPressure; + _bear[bar_index] = bearPower + bearPressure; + } +} + +// \ No newline at end of file diff --git a/BKPS/Indicators 14030517/x-saherelm.xchtd.osc.ex5 b/BKPS/Indicators 14030517/x-saherelm.xchtd.osc.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..37e86f632e60e7517cdb014ebd55479cc6cc3b42 GIT binary patch literal 33402 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 literal 0 HcmV?d00001 diff --git a/BKPS/Indicators 14030517/x-saherelm.xchtd.osc.mq5 b/BKPS/Indicators 14030517/x-saherelm.xchtd.osc.mq5 new file mode 100644 index 0000000..8b30a6e --- /dev/null +++ b/BKPS/Indicators 14030517/x-saherelm.xchtd.osc.mq5 @@ -0,0 +1,898 @@ +/////////////////////////////////////////////////////// +// SaherElm IT Center MQL5 Indicator +// ------------------------------------------- +// Name: XCHTD +// Description: XCHTD Cycles ... +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://saherelm.ir" +#property version "1.00" +#property description "SaherElm XCHTD Indicator" +#property strict + +// +#define ShortName "XCHTD" + +// +// Includes Common Library ... +#include "../Libraries/x-saherelm.common.lib.mq5" + +// +enum ENUM_XCHTD_MODE +{ + XCHTD_POWER_MODE = 0, // Using Power + XCHTD_PRESSURE_MODE = 1, // Using Pressure + XCHTD_TYPE_MODE = 2, // Using Type + XCHTD_STRONG_MODE = 3, // Using Power and Pressures +}; + +// +// Inputs ... + +// +input group "Market"; +input int length = 14; // Length +input ENUM_XCHTD_MODE mode = XCHTD_POWER_MODE; // Mode + +// +input group "Cycles"; + +// +input group "Short"; +input ENUM_X_PERIOD_METHOD scMethod = X_PERIOD_AUTO; // How to Find Period +input ENUM_TIMEFRAMES scPeriod = NULL; // Time Period + +// +input group "Medium"; +input ENUM_X_PERIOD_METHOD mcMethod = X_PERIOD_AUTO; // How to Find Period +input ENUM_TIMEFRAMES mcPeriod = NULL; // Time Period + +// +input group "Long"; +input ENUM_X_PERIOD_METHOD lcMethod = X_PERIOD_AUTO; // How to Find Period +input ENUM_TIMEFRAMES lcPeriod = NULL; // Time Period + +// +input group "Hind"; +input ENUM_X_PERIOD_METHOD hcMethod = X_PERIOD_AUTO; // How to Find Period +input ENUM_TIMEFRAMES hcPeriod = NULL; // Time Period + +// +// Presentation ... +input group "Presentation"; + +// +// Current ... +input bool showCurrent = true; // Show Current Cycle +input bool showShort = true; // Show Short Cycle +input bool showMedium = true; // Show Medium Cycle +input bool showLong = true; // Show Long Cycle +input bool showHind = true; // Show Hind Cycle + +// +// Buffers ... + +// +#property indicator_separate_window + +// +#property indicator_buffers 10 +#property indicator_plots 10 + +// +// Current ... + +// +#define cBullBufferIndex 0 +double cBullBuffer[]; + +// +#property indicator_label1 "XCHTD C Bull" +#property indicator_type1 DRAW_LINE +#property indicator_color1 clrLime +#property indicator_style1 STYLE_SOLID + +// +#define cBearBufferIndex 1 +double cBearBuffer[]; + +// +#property indicator_label2 "XCHTD C Bear" +#property indicator_type2 DRAW_LINE +#property indicator_style2 STYLE_SOLID +#property indicator_color2 clrRed + +// +// Short ... + +// +#define sBullBufferIndex 2 +double sBullBuffer[]; + +// +#property indicator_label3 "XCHTD S Bull" +#property indicator_type3 DRAW_LINE +#property indicator_color3 clrLime +#property indicator_style3 STYLE_SOLID + +// +#define sBearBufferIndex 3 +double sBearBuffer[]; + +// +#property indicator_label4 "XCHTD S Bear" +#property indicator_type4 DRAW_LINE +#property indicator_style4 STYLE_SOLID +#property indicator_color4 clrRed + +// +// Medium ... + +// +#define mBullBufferIndex 4 +double mBullBuffer[]; + +// +#property indicator_label5 "XCHTD M Bull" +#property indicator_type5 DRAW_LINE +#property indicator_color5 clrLime +#property indicator_style5 STYLE_SOLID + +// +#define mBearBufferIndex 5 +double mBearBuffer[]; + +// +#property indicator_label6 "XCHTD M Bear" +#property indicator_type6 DRAW_LINE +#property indicator_style6 STYLE_SOLID +#property indicator_color6 clrRed + +// +// Long ... + +// +#define lBullBufferIndex 6 +double lBullBuffer[]; + +// +#property indicator_label7 "XCHTD L Bull" +#property indicator_type7 DRAW_LINE +#property indicator_color7 clrLime +#property indicator_style7 STYLE_SOLID + +// +#define lBearBufferIndex 7 +double lBearBuffer[]; + +// +#property indicator_label8 "XCHTD L Bear" +#property indicator_type8 DRAW_LINE +#property indicator_style8 STYLE_SOLID +#property indicator_color8 clrRed + +// +// Hind ... + +// +#define hBullBufferIndex 8 +double hBullBuffer[]; + +// +#property indicator_label9 "XCHTD H Bull" +#property indicator_type9 DRAW_LINE +#property indicator_color9 clrLime +#property indicator_style9 STYLE_SOLID + +// +#define hBearBufferIndex 9 +double hBearBuffer[]; + +// +#property indicator_label10 "XCHTD H Bear" +#property indicator_type10 DRAW_LINE +#property indicator_style10 STYLE_SOLID +#property indicator_color10 clrRed + +// +// Variables, Properties and etc ... + +// +int maxLength; + +// +// Current ... +int mCMarketLength = length; + +// +// Short ... +int mSCycleLength = 0; +int mSMarketLength = 0; +ENUM_TIMEFRAMES mSCPeriod = NULL; + +// +// Medium ... +int mMCycleLength = 0; +int mMMarketLength = 0; +ENUM_TIMEFRAMES mMCPeriod = NULL; + +// +// Long ... +int mLCycleLength = 0; +int mLMarketLength = 0; +ENUM_TIMEFRAMES mLCPeriod = NULL; + +// +// Hind ... +int mHCycleLength = 0; +int mHMarketLength = 0; +ENUM_TIMEFRAMES mHCPeriod = NULL; + +// +// Event Handlers ... + +// +// Initialization ... +int OnInit() +{ + // + // Validate Inputs ... + if (!ValidateInputs()) + { + return INIT_PARAMETERS_INCORRECT; + } + + // + if (!InitMarketCycles()) + { + return INIT_PARAMETERS_INCORRECT; + } + + // + // because in some cases we may have more than one input for + // calculation and we must prevent any calculation + // untill we pass the biggest input length, here we get max Input length + // and then wait until pass it ... + maxLength = ExtractMaxLengthOfInputs(); + + // + // Define Index Buffers ... + DefineBuffers(); + + // + // Set Indicator ShortName ... + SetIndicatorName(); + + // + // Init Succeed ... + return INIT_SUCCEEDED; +} + +// +// DeInitialization ... +void OnDeinit(const int reason) +{ + // + // REASON_PROGRAM 0 The EA has stopped working calling the ExpertRemove() function + // REASON_REMOVE 1 Program removed from a chart + // REASON_RECOMPILE 2 Program recompiled + // REASON_CHARTCHANGE 3 A symbol or a chart period is changed + // REASON_CHARTCLOSE 4 Chart closed + // REASON_PARAMETERS 5 Inputs changed by a user + // REASON_ACCOUNT 6 Another account has been activated or reconnection to the trade server has occurred due to changes in the account settings + // REASON_TEMPLATE 7 Another chart template applied + // REASON_INITFAILED 8 The OnInit() handler returned a non-zero value + // REASON_CLOSE 9 Terminal closed +} + +// +// Calculating what we want ... +int OnCalculate( + const int rates_total, // Total Bars on Chart ... + const int prev_calculated, // Total Calculated Bars on Charts ... + const datetime &time[], // History of Open Time ... + const double &open[], // History of Open Price ... + const double &high[], // History of High Price ... + const double &low[], // History of Low Price ... + const double &close[], // History of Close Price ... + const long &tick_volume[], // History of Tick Volumes on Bar ... + const long &volume[], // History of Trade Volumes ... + const int &spread[] // History of Spread Price ... +) +{ + // + // Prepare Buffers ... + ArraySetAsSeries(time, true); + ArraySetAsSeries(open, true); + ArraySetAsSeries(high, true); + ArraySetAsSeries(low, true); + ArraySetAsSeries(close, true); + ArraySetAsSeries(tick_volume, true); + ArraySetAsSeries(volume, true); + ArraySetAsSeries(spread, true); + + // + // this counts Available Bars ... + int limit; + + // + // because in some cases we may have more than one input for + // calculation and we must prevent any calculation + // untill we pass the biggest input length, here we get max Input length + // and then wait until pass it ... + + // + limit = prev_calculated < maxLength ? rates_total - (maxLength + 1) : rates_total - prev_calculated; + + // + // Main Loop ... + for (int i = limit; i >= 0 && !IsStopped(); i--) + { + // + CalculateBuffers( + i, + prev_calculated, + rates_total, + open, + high, + close, + low, + tick_volume // + ); + } + + // + return rates_total; +} + +// +// Functions ... + +// +// Validate Input Args for Initialization ... +bool ValidateInputs() +{ + // + bool result = false; + + // + result = + // + length >= 2 && + // + (IsValid(scMethod, scPeriod) && + IsValid(mcMethod, mcPeriod) && + IsValid(lcMethod, lcPeriod) && + IsValid(hcMethod, hcPeriod)) + // + ; + + // + return result; +} + +// +// Initialize Market Cycles ... +bool InitMarketCycles() +{ + // + bool result = false; + + // + // Current Cycle Initialization ... + + // + int cPeriodSeconds = PeriodSeconds(_Period); + + // + // Short Cycle Initialization ... + + // + // Find Cycle Period ... + if (scMethod == X_PERIOD_AUTO) + { + // + // Select Period ... + mSCPeriod = GetCyclePeriod( + X_MARKET_CYCLE_SHORT, + _Period // + ); + } + else + { + mSCPeriod = scPeriod; + } + + // + result = IsValid(mSCPeriod); + if (!result) + { + return result; + } + + // + mSCycleLength = PeriodSeconds(mSCPeriod) / cPeriodSeconds; + mSMarketLength = mSCycleLength * mCMarketLength; + result = mSCycleLength > 0; + if (!result) + { + return result; + } + + // + // Medium Cycle Initialization ... + + // + // Find Cycle Period ... + if (mcMethod == X_PERIOD_AUTO) + { + // + // Select Period ... + mMCPeriod = GetCyclePeriod( + X_MARKET_CYCLE_MEDIUM, + _Period // + ); + } + else + { + mMCPeriod = mcPeriod; + } + + // + result = IsValid(mMCPeriod); + if (!result) + { + return result; + } + + // + mMCycleLength = PeriodSeconds(mMCPeriod) / cPeriodSeconds; + mMMarketLength = mMCycleLength * mCMarketLength; + result = mMCycleLength > 0; + if (!result) + { + return result; + } + + // + // Long Cycle Initialization ... + + // + // Find Cycle Period ... + if (lcMethod == X_PERIOD_AUTO) + { + // + // Select Period ... + mLCPeriod = GetCyclePeriod( + X_MARKET_CYCLE_LONG, + _Period // + ); + } + else + { + mLCPeriod = lcPeriod; + } + + // + result = IsValid(mLCPeriod); + if (!result) + { + return result; + } + + // + mLCycleLength = PeriodSeconds(mLCPeriod) / cPeriodSeconds; + mLMarketLength = mLCycleLength * mCMarketLength; + result = mLCycleLength > 0; + if (!result) + { + return result; + } + + // + // Hind Cycle Initialization ... + + // + // Find Cycle Period ... + if (hcMethod == X_PERIOD_AUTO) + { + // + // Select Period ... + mHCPeriod = GetCyclePeriod( + X_MARKET_CYCLE_HIND, + _Period // + ); + } + else + { + mHCPeriod = hcPeriod; + } + + // + result = IsValid(mHCPeriod); + if (!result) + { + return result; + } + + // + mHCycleLength = PeriodSeconds(mHCPeriod) / cPeriodSeconds; + mHMarketLength = mHCycleLength * mCMarketLength; + result = mHCycleLength > 0; + if (!result) + { + return result; + } + + // + return result; +} + +// +// Retrieve all Exists Input Max Length ... +// use for Start Of Drawing ... +int ExtractMaxLengthOfInputs() +{ + // + int result = 0; + + // + result = MathMax(mCMarketLength, mSMarketLength); + result = MathMax(result, mMMarketLength); + result = MathMax(result, mLMarketLength); + result = MathMax(result, mHMarketLength); + + // + return result; +} + +// +// Define Indexes and Styles ... +void DefineBuffers() +{ + // + // Current ... + + // + ENUM_DRAW_TYPE cDrawType = showCurrent ? DRAW_LINE : DRAW_NONE; + + // + ArraySetAsSeries(cBullBuffer, true); + SetIndexBuffer(cBullBufferIndex, cBullBuffer, INDICATOR_DATA); + PlotIndexSetInteger(cBullBufferIndex, PLOT_DRAW_TYPE, cDrawType); + PlotIndexSetInteger(cBullBufferIndex, PLOT_SHOW_DATA, showCurrent); + + // + ArraySetAsSeries(cBearBuffer, true); + SetIndexBuffer(cBearBufferIndex, cBearBuffer, INDICATOR_DATA); + PlotIndexSetInteger(cBearBufferIndex, PLOT_DRAW_TYPE, cDrawType); + PlotIndexSetInteger(cBearBufferIndex, PLOT_SHOW_DATA, showCurrent); + + // + // Short ... + + // + ENUM_DRAW_TYPE sDrawType = showShort ? DRAW_LINE : DRAW_NONE; + + // + ArraySetAsSeries(sBullBuffer, true); + SetIndexBuffer(sBullBufferIndex, sBullBuffer, INDICATOR_DATA); + PlotIndexSetInteger(sBullBufferIndex, PLOT_DRAW_TYPE, sDrawType); + PlotIndexSetInteger(sBullBufferIndex, PLOT_SHOW_DATA, showShort); + + // + ArraySetAsSeries(sBearBuffer, true); + SetIndexBuffer(sBearBufferIndex, sBearBuffer, INDICATOR_DATA); + PlotIndexSetInteger(sBearBufferIndex, PLOT_DRAW_TYPE, sDrawType); + PlotIndexSetInteger(sBearBufferIndex, PLOT_SHOW_DATA, showShort); + + // + // Medium ... + + // + ENUM_DRAW_TYPE mDrawType = showMedium ? DRAW_LINE : DRAW_NONE; + + // + ArraySetAsSeries(mBullBuffer, true); + SetIndexBuffer(mBullBufferIndex, mBullBuffer, INDICATOR_DATA); + PlotIndexSetInteger(mBullBufferIndex, PLOT_DRAW_TYPE, mDrawType); + PlotIndexSetInteger(mBullBufferIndex, PLOT_SHOW_DATA, showMedium); + + // + ArraySetAsSeries(mBearBuffer, true); + SetIndexBuffer(mBearBufferIndex, mBearBuffer, INDICATOR_DATA); + PlotIndexSetInteger(mBearBufferIndex, PLOT_DRAW_TYPE, mDrawType); + PlotIndexSetInteger(mBearBufferIndex, PLOT_SHOW_DATA, showMedium); + + // + // Long ... + + // + ENUM_DRAW_TYPE lDrawType = showLong ? DRAW_LINE : DRAW_NONE; + + // + ArraySetAsSeries(lBullBuffer, true); + SetIndexBuffer(lBullBufferIndex, lBullBuffer, INDICATOR_DATA); + PlotIndexSetInteger(lBullBufferIndex, PLOT_DRAW_TYPE, lDrawType); + PlotIndexSetInteger(lBullBufferIndex, PLOT_SHOW_DATA, showLong); + + // + ArraySetAsSeries(lBearBuffer, true); + SetIndexBuffer(lBearBufferIndex, lBearBuffer, INDICATOR_DATA); + PlotIndexSetInteger(lBearBufferIndex, PLOT_DRAW_TYPE, lDrawType); + PlotIndexSetInteger(lBearBufferIndex, PLOT_SHOW_DATA, showLong); + + // + // Hind ... + + // + ENUM_DRAW_TYPE hDrawType = showHind ? DRAW_LINE : DRAW_NONE; + + // + ArraySetAsSeries(hBullBuffer, true); + SetIndexBuffer(hBullBufferIndex, hBullBuffer, INDICATOR_DATA); + PlotIndexSetInteger(hBullBufferIndex, PLOT_DRAW_TYPE, hDrawType); + PlotIndexSetInteger(hBullBufferIndex, PLOT_SHOW_DATA, showHind); + + // + ArraySetAsSeries(hBearBuffer, true); + SetIndexBuffer(hBearBufferIndex, hBearBuffer, INDICATOR_DATA); + PlotIndexSetInteger(hBearBufferIndex, PLOT_DRAW_TYPE, hDrawType); + PlotIndexSetInteger(hBearBufferIndex, PLOT_SHOW_DATA, showHind); +} + +// +// Set Indicator Short Name and also we can define Buffers Labels ... +void SetIndicatorName() +{ + IndicatorSetString(INDICATOR_SHORTNAME, ShortName); +} + +// +// Calculations ... + +// +// Calculate Buffers ... +void CalculateBuffers( + int bar_index, // Selected Bar Index + const int prevCalculated, + const int ratesTotal, + const double &open[], + const double &high[], + const double &close[], + const double &low[], + const long &tickVolume[] // +) +{ + // + CalculateCycles( + bar_index, + prevCalculated, + ratesTotal, + open, + high, + close, + low, + tickVolume // + ); +} + +// +void CalculateCycles( + int bar_index, // Selected Bar Index + const int prevCalculated, + const int ratesTotal, + const double &open[], + const double &high[], + const double &close[], + const double &low[], + const long &tickVolume[] // +) +{ + // + // CURRENT ... + CalculateCycle( + bar_index, + prevCalculated, + ratesTotal, + open, + high, + close, + low, + tickVolume, + // + mCMarketLength, + showCurrent, + cBullBuffer, + cBearBuffer // + ); + + // + // SHORT ... + CalculateCycle( + bar_index, + prevCalculated, + ratesTotal, + open, + high, + close, + low, + tickVolume, + // + mSMarketLength, + showShort, + sBullBuffer, + sBearBuffer // + ); + + // + // MEDIUM ... + CalculateCycle( + bar_index, + prevCalculated, + ratesTotal, + open, + high, + close, + low, + tickVolume, + // + mMMarketLength, + showMedium, + mBullBuffer, + mBearBuffer // + ); + + // + // LONG ... + CalculateCycle( + bar_index, + prevCalculated, + ratesTotal, + open, + high, + close, + low, + tickVolume, + // + mLMarketLength, + showLong, + lBullBuffer, + lBearBuffer // + ); + + // + // HIND ... + CalculateCycle( + bar_index, + prevCalculated, + ratesTotal, + open, + high, + close, + low, + tickVolume, + // + mHMarketLength, + showHind, + hBullBuffer, + hBearBuffer // + ); +} + +// +void CalculateCycle( + int bar_index, // Selected Bar Index + const int prevCalculated, + const int ratesTotal, + const double &open[], + const double &high[], + const double &close[], + const double &low[], + const long &tickVolume[], + // + int _length, // Calculation Length + bool _show, + double &_bull[], + double &_bear[] // +) +{ + // + double bullPower = 0; + double bearPower = 0; + + // + double lowShadow = 0; + double highShadow = 0; + + // + double bullPressure = 0; + double bearPressure = 0; + + // + double bullRange = 0; + double bearRange = 0; + + // + for (int i = bar_index; i < bar_index + _length; i++) + { + // + bool isBullish = + // + close[i] > open[i] + // + ; + + // + bool isBearish = + // + close[i] < open[i] + // + ; + + // + double iUpper = MathMax(open[i], close[i]); + double iLower = MathMin(open[i], close[i]); + + // + double iBody = iUpper - iLower; + double iRange = high[i] - low[i]; + + // + double iHighShadow = high[i] - iUpper; + double iLowShadow = iLower - low[i]; + + // + if (isBullish) + { + // + bullPower += iBody; + bullRange += iRange; + bearPressure += iHighShadow; + } + else if (isBearish) + { + // + bearPower += iBody; + bearRange += iRange; + bullPressure += iLowShadow; + } + + // + lowShadow += iLowShadow; + highShadow += iHighShadow; + } + + // + if (mode == XCHTD_POWER_MODE) + { + // + _bull[bar_index] = bullPower; + _bear[bar_index] = bearPower; + } + else if (mode == XCHTD_PRESSURE_MODE) + { + // + _bull[bar_index] = bullPressure; + _bear[bar_index] = bearPressure; + } + else if (mode == XCHTD_TYPE_MODE) + { + // + _bull[bar_index] = bullRange; + _bear[bar_index] = bearRange; + } else if (mode == XCHTD_STRONG_MODE) { + // + _bull[bar_index] = bullPower + bullPressure; + _bear[bar_index] = bearPower + bearPressure; + } +} + +// \ No newline at end of file diff --git a/BKPS/Indicators 14030517/x-saherelm.xchvlm.ex5 b/BKPS/Indicators 14030517/x-saherelm.xchvlm.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..a75e6ba38168ea52ea47b002fee01895e5274327 GIT binary patch literal 29408 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 z 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 +#include "../Libraries/x-saherelm.common.lib.mq5" + +// +// Inputs ... + +// +input group "Market"; +input int length = 14; // Length + +// +input group "Cycles"; + +// +input group "Short"; +input ENUM_X_PERIOD_METHOD scMethod = X_PERIOD_AUTO; // How to Find Period +input ENUM_TIMEFRAMES scPeriod = NULL; // Time Period + +// +input group "Medium"; +input ENUM_X_PERIOD_METHOD mcMethod = X_PERIOD_AUTO; // How to Find Period +input ENUM_TIMEFRAMES mcPeriod = NULL; // Time Period + +// +input group "Long"; +input ENUM_X_PERIOD_METHOD lcMethod = X_PERIOD_AUTO; // How to Find Period +input ENUM_TIMEFRAMES lcPeriod = NULL; // Time Period + +// +input group "Hind"; +input ENUM_X_PERIOD_METHOD hcMethod = X_PERIOD_AUTO; // How to Find Period +input ENUM_TIMEFRAMES hcPeriod = NULL; // Time Period + +// +// Presentation ... +input group "Presentation"; + +// +input bool showCurrent = true; // Show Current Cycle +input bool showShort = true; // Show Short Cycle +input bool showMedium = true; // Show Medium Cycle +input bool showLong = true; // Show Long Cycle +input bool showHind = true; // Show Hind Cycle + +// +// Buffers ... + +// +#define hideColorIDX 0 +#define bullishColorIDX 1 +#define bearishColorIDX 2 + +// +#property indicator_chart_window + +// +#property indicator_buffers 10 +#property indicator_plots 0 + +// +// Current ... + +// +#define cBufferIndex 0 +double cBuffer[]; + +// +#define cColorBufferIndex 1 +double cColorBuffer[]; + +// +#define cPlotBufferIndex 0 +#property indicator_label1 "XCHVLM C" +#property indicator_style1 STYLE_SOLID +#property indicator_type1 DRAW_COLOR_HISTOGRAM +#property indicator_color1 CLR_NONE, clrLime, clrRed + +// +// Short ... + +// +#define sBufferIndex 2 +double sBuffer[]; + +// +#define sColorBufferIndex 3 +double sColorBuffer[]; + +// +#define sPlotBufferIndex 1 +#property indicator_label2 "XCHVLM S" +#property indicator_style2 STYLE_SOLID +#property indicator_type2 DRAW_COLOR_HISTOGRAM +#property indicator_color2 CLR_NONE, clrLime, clrRed + +// +// Medium ... + +// +#define mBufferIndex 4 +double mBuffer[]; + +// +#define mColorBufferIndex 5 +double mColorBuffer[]; + +// +#define mPlotBufferIndex 2 +#property indicator_label3 "XCHVLM M" +#property indicator_style3 STYLE_SOLID +#property indicator_type3 DRAW_COLOR_HISTOGRAM +#property indicator_color3 CLR_NONE, clrLime, clrRed + +// +// Long ... + +// +#define lBufferIndex 6 +double lBuffer[]; + +// +#define lColorBufferIndex 7 +double lColorBuffer[]; + +// +#define lPlotBufferIndex 3 +#property indicator_label4 "XCHVLM L" +#property indicator_style4 STYLE_SOLID +#property indicator_type4 DRAW_COLOR_HISTOGRAM +#property indicator_color4 CLR_NONE, clrLime, clrRed + +// +// Hind ... + +// +#define hBufferIndex 8 +double hBuffer[]; + +// +#define hColorBufferIndex 9 +double hColorBuffer[]; + +// +#define hPlotBufferIndex 4 +#property indicator_label5 "XCHVLM H" +#property indicator_style5 STYLE_SOLID +#property indicator_type5 DRAW_COLOR_HISTOGRAM +#property indicator_color5 CLR_NONE, clrLime, clrRed + +// +// Variables, Properties and etc ... + +// +int maxLength; + +// +// Current ... +int mCMarketLength = length; +double cVolumes[]; +double cDistances[]; + +// +// Short ... +int mSCycleLength = 0; +int mSMarketLength = 0; +ENUM_TIMEFRAMES mSCPeriod = NULL; +double sVolumes[]; +double sDistances[]; + +// +// Medium ... +int mMCycleLength = 0; +int mMMarketLength = 0; +ENUM_TIMEFRAMES mMCPeriod = NULL; +double mVolumes[]; +double mDistances[]; + +// +// Long ... +int mLCycleLength = 0; +int mLMarketLength = 0; +ENUM_TIMEFRAMES mLCPeriod = NULL; +double lVolumes[]; +double lDistances[]; + +// +// Hind ... +int mHCycleLength = 0; +int mHMarketLength = 0; +ENUM_TIMEFRAMES mHCPeriod = NULL; +double hVolumes[]; +double hDistances[]; + +// +// Event Handlers ... + +// +// Initialization ... +int OnInit() +{ + // + // Validate Inputs ... + if (!ValidateInputs()) + { + return INIT_PARAMETERS_INCORRECT; + } + + // + if (!InitMarketCycles()) + { + return INIT_PARAMETERS_INCORRECT; + } + + // + // because in some cases we may have more than one input for + // calculation and we must prevent any calculation + // untill we pass the biggest input length, here we get max Input length + // and then wait until pass it ... + maxLength = ExtractMaxLengthOfInputs(); + + // + // Current ... + ArrayResize(cVolumes, maxLength, 0); + ArrayResize(cDistances, maxLength, 0); + + // + // Short ... + ArrayResize(sVolumes, maxLength, 0); + ArrayResize(sDistances, maxLength, 0); + + // + // Medium ... + ArrayResize(mVolumes, maxLength, 0); + ArrayResize(mDistances, maxLength, 0); + + // + // Long ... + ArrayResize(lVolumes, maxLength, 0); + ArrayResize(lDistances, maxLength, 0); + + // + // Hind ... + ArrayResize(hVolumes, maxLength, 0); + ArrayResize(hDistances, maxLength, 0); + + // + // Define Index Buffers ... + DefineBuffers(); + + // + // Set Indicator ShortName ... + SetIndicatorName(); + + // + // Init Succeed ... + return INIT_SUCCEEDED; +} + +// +// DeInitialization ... +void OnDeinit(const int reason) +{ + // + // REASON_PROGRAM 0 The EA has stopped working calling the ExpertRemove() function + // REASON_REMOVE 1 Program removed from a chart + // REASON_RECOMPILE 2 Program recompiled + // REASON_CHARTCHANGE 3 A symbol or a chart period is changed + // REASON_CHARTCLOSE 4 Chart closed + // REASON_PARAMETERS 5 Inputs changed by a user + // REASON_ACCOUNT 6 Another account has been activated or reconnection to the trade server has occurred due to changes in the account settings + // REASON_TEMPLATE 7 Another chart template applied + // REASON_INITFAILED 8 The OnInit() handler returned a non-zero value + // REASON_CLOSE 9 Terminal closed + + // + Clean(cVolumes); + Clean(cDistances); + + // + Clean(sVolumes); + Clean(sDistances); + + // + Clean(mVolumes); + Clean(mDistances); + + // + Clean(lVolumes); + Clean(lDistances); + + // + Clean(hVolumes); + Clean(hDistances); +} + +// +// Calculating what we want ... +int OnCalculate( + const int rates_total, // Total Bars on Chart ... + const int prev_calculated, // Total Calculated Bars on Charts ... + const datetime &time[], // History of Open Time ... + const double &open[], // History of Open Price ... + const double &high[], // History of High Price ... + const double &low[], // History of Low Price ... + const double &close[], // History of Close Price ... + const long &tick_volume[], // History of Tick Volumes on Bar ... + const long &volume[], // History of Trade Volumes ... + const int &spread[] // History of Spread Price ... +) +{ + // + static int i = maxLength * 2; + for (i; i < rates_total; i++) + { + // + CalculateBuffers( + i, + prev_calculated, + rates_total, + // + open, + high, + close, + low, + tick_volume // + ); + } + + // + i = rates_total - 1; + + // + return rates_total; +} + +// +// Functions ... + +// +// Validate Input Args for Initialization ... +bool ValidateInputs() +{ + // + bool result = false; + + // + result = + // + length >= 2 && + // + (IsValid(scMethod, scPeriod) && + IsValid(mcMethod, mcPeriod) && + IsValid(lcMethod, lcPeriod) && + IsValid(hcMethod, hcPeriod)) + // + ; + + // + return result; +} + +// +// Initialize Market Cycles ... +bool InitMarketCycles() +{ + // + bool result = false; + + // + // Current Cycle Initialization ... + + // + int cPeriodSeconds = PeriodSeconds(_Period); + + // + // Short Cycle Initialization ... + + // + // Find Cycle Period ... + if (scMethod == X_PERIOD_AUTO) + { + // + // Select Period ... + mSCPeriod = GetCyclePeriod( + X_MARKET_CYCLE_SHORT, + _Period // + ); + } + else + { + mSCPeriod = scPeriod; + } + + // + result = IsValid(mSCPeriod); + if (!result) + { + return result; + } + + // + mSCycleLength = PeriodSeconds(mSCPeriod) / cPeriodSeconds; + mSMarketLength = mSCycleLength * mCMarketLength; + result = mSCycleLength > 0; + if (!result) + { + return result; + } + + // + // Medium Cycle Initialization ... + + // + // Find Cycle Period ... + if (mcMethod == X_PERIOD_AUTO) + { + // + // Select Period ... + mMCPeriod = GetCyclePeriod( + X_MARKET_CYCLE_MEDIUM, + _Period // + ); + } + else + { + mMCPeriod = mcPeriod; + } + + // + result = IsValid(mMCPeriod); + if (!result) + { + return result; + } + + // + mMCycleLength = PeriodSeconds(mMCPeriod) / cPeriodSeconds; + mMMarketLength = mMCycleLength * mCMarketLength; + result = mMCycleLength > 0; + if (!result) + { + return result; + } + + // + // Long Cycle Initialization ... + + // + // Find Cycle Period ... + if (lcMethod == X_PERIOD_AUTO) + { + // + // Select Period ... + mLCPeriod = GetCyclePeriod( + X_MARKET_CYCLE_LONG, + _Period // + ); + } + else + { + mLCPeriod = lcPeriod; + } + + // + result = IsValid(mLCPeriod); + if (!result) + { + return result; + } + + // + mLCycleLength = PeriodSeconds(mLCPeriod) / cPeriodSeconds; + mLMarketLength = mLCycleLength * mCMarketLength; + result = mLCycleLength > 0; + if (!result) + { + return result; + } + + // + // Hind Cycle Initialization ... + + // + // Find Cycle Period ... + if (hcMethod == X_PERIOD_AUTO) + { + // + // Select Period ... + mHCPeriod = GetCyclePeriod( + X_MARKET_CYCLE_HIND, + _Period // + ); + } + else + { + mHCPeriod = hcPeriod; + } + + // + result = IsValid(mHCPeriod); + if (!result) + { + return result; + } + + // + mHCycleLength = PeriodSeconds(mHCPeriod) / cPeriodSeconds; + mHMarketLength = mHCycleLength * mCMarketLength; + result = mHCycleLength > 0; + if (!result) + { + return result; + } + + // + return result; +} + +// +// Retrieve all Exists Input Max Length ... +// use for Start Of Drawing ... +int ExtractMaxLengthOfInputs() +{ + // + int result = 0; + + // + result = MathMax(mCMarketLength, mSMarketLength); + result = MathMax(result, mMMarketLength); + result = MathMax(result, mLMarketLength); + result = MathMax(result, mHMarketLength); + + // + return result; +} + +// +// Define Indexes and Styles ... +void DefineBuffers() +{ + // + // Current ... + + // + // ENUM_DRAW_TYPE cDrawType = showCurrent ? DRAW_COLOR_HISTOGRAM : DRAW_NONE; + // PlotIndexSetInteger(cPlotBufferIndex, PLOT_DRAW_TYPE, cDrawType); + // PlotIndexSetInteger(cPlotBufferIndex, PLOT_SHOW_DATA, showCurrent); + // SetIndexBuffer(cColorBufferIndex, cColorBuffer, INDICATOR_COLOR_INDEX); + SetIndexBuffer(cBufferIndex, cBuffer, INDICATOR_CALCULATIONS); + SetIndexBuffer(cColorBufferIndex, cColorBuffer, INDICATOR_CALCULATIONS); + + // + // Short ... + + // + // ENUM_DRAW_TYPE sDrawType = showShort ? DRAW_COLOR_HISTOGRAM : DRAW_NONE; + // PlotIndexSetInteger(sPlotBufferIndex, PLOT_DRAW_TYPE, sDrawType); + // PlotIndexSetInteger(sPlotBufferIndex, PLOT_SHOW_DATA, showShort); + // SetIndexBuffer(sColorBufferIndex, sColorBuffer, INDICATOR_COLOR_INDEX); + SetIndexBuffer(sBufferIndex, sBuffer, INDICATOR_CALCULATIONS); + SetIndexBuffer(sColorBufferIndex, sColorBuffer, INDICATOR_CALCULATIONS); + + // + // Medium ... + + // + // ENUM_DRAW_TYPE mDrawType = showMedium ? DRAW_COLOR_HISTOGRAM : DRAW_NONE; + // PlotIndexSetInteger(mPlotBufferIndex, PLOT_DRAW_TYPE, mDrawType); + // PlotIndexSetInteger(mPlotBufferIndex, PLOT_SHOW_DATA, showMedium); + // SetIndexBuffer(mColorBufferIndex, mColorBuffer, INDICATOR_COLOR_INDEX); + SetIndexBuffer(mBufferIndex, mBuffer, INDICATOR_CALCULATIONS); + SetIndexBuffer(mColorBufferIndex, mColorBuffer, INDICATOR_CALCULATIONS); + + // + // Long ... + + // + // ENUM_DRAW_TYPE lDrawType = showLong ? DRAW_COLOR_HISTOGRAM : DRAW_NONE; + // PlotIndexSetInteger(lPlotBufferIndex, PLOT_DRAW_TYPE, lDrawType); + // PlotIndexSetInteger(lPlotBufferIndex, PLOT_SHOW_DATA, showLong); + // SetIndexBuffer(lColorBufferIndex, lColorBuffer, INDICATOR_COLOR_INDEX); + SetIndexBuffer(lBufferIndex, lBuffer, INDICATOR_CALCULATIONS); + SetIndexBuffer(lColorBufferIndex, lColorBuffer, INDICATOR_CALCULATIONS); + + // + // Hind ... + + // + // ENUM_DRAW_TYPE hDrawType = showHind ? DRAW_COLOR_HISTOGRAM : DRAW_NONE; + // PlotIndexSetInteger(hPlotBufferIndex, PLOT_DRAW_TYPE, hDrawType); + // PlotIndexSetInteger(hPlotBufferIndex, PLOT_SHOW_DATA, showHind); + // SetIndexBuffer(hColorBufferIndex, hColorBuffer, INDICATOR_COLOR_INDEX); + SetIndexBuffer(hBufferIndex, hBuffer, INDICATOR_CALCULATIONS); + SetIndexBuffer(hColorBufferIndex, hColorBuffer, INDICATOR_CALCULATIONS); +} + +// +// Set Indicator Short Name and also we can define Buffers Labels ... +void SetIndicatorName() +{ + IndicatorSetString(INDICATOR_SHORTNAME, ShortName); +} + +// +// Calculations ... + +// +// Calculate Buffers ... +void CalculateBuffers( + int bar_index, // Selected Bar Index + const int prevCalculated, + const int ratesTotal, + const double &open[], + const double &high[], + const double &close[], + const double &low[], + const long &tickVolume[] // +) +{ + // + CalculateCycles( + bar_index, + prevCalculated, + ratesTotal, + open, + high, + close, + low, + tickVolume // + ); +} + +// +void CalculateCycles( + int bar_index, // Selected Bar Index + const int prevCalculated, + const int ratesTotal, + const double &open[], + const double &high[], + const double &close[], + const double &low[], + const long &tickVolume[] // +) +{ + // + // CURRENT ... + CalculateCycle( + bar_index, + prevCalculated, + ratesTotal, + open, + high, + close, + low, + tickVolume, + // + mCMarketLength, + showCurrent, + cVolumes, + cDistances, + cBuffer, + cColorBuffer // + ); + + // + // SHORT ... + CalculateCycle( + bar_index, + prevCalculated, + ratesTotal, + open, + high, + close, + low, + tickVolume, + // + mSMarketLength, + showShort, + sVolumes, + sDistances, + sBuffer, + sColorBuffer // + ); + + // + // MEDIUM ... + CalculateCycle( + bar_index, + prevCalculated, + ratesTotal, + open, + high, + close, + low, + tickVolume, + // + mMMarketLength, + showMedium, + mVolumes, + mDistances, + mBuffer, + mColorBuffer // + ); + + // + // LONG ... + CalculateCycle( + bar_index, + prevCalculated, + ratesTotal, + open, + high, + close, + low, + tickVolume, + // + mLMarketLength, + showLong, + lVolumes, + lDistances, + lBuffer, + lColorBuffer // + ); + + // + // HIND ... + CalculateCycle( + bar_index, + prevCalculated, + ratesTotal, + open, + high, + close, + low, + tickVolume, + // + mHMarketLength, + showHind, + hVolumes, + hDistances, + hBuffer, + hColorBuffer // + ); +} + +// +void CalculateCycle( + int bar_index, // Selected Bar Index + const int prevCalculated, + const int ratesTotal, + const double &open[], + const double &high[], + const double &close[], + const double &low[], + const long &tickVolume[], + // + int _length, // Calculation Length + bool _show, + double &_volumes[], + double &_distances[], + double &_buffer[], + double &_colorBuffer[] // +) +{ + // + for (int x = 0; x < _length; x++) + { + // + _volumes[x] = (double)tickVolume[bar_index - x]; + _distances[x] = + (close[bar_index - x] > open[bar_index - x]) + ? high[bar_index - x] - low[bar_index - x] + : low[bar_index - x] - high[bar_index - x]; + } + + // + double iValue = MathMean(_volumes) * MathMean(_distances); + + // + _buffer[bar_index] = iValue; + _colorBuffer[bar_index] = iValue > 0 + ? _show + ? bullishColorIDX + : hideColorIDX + : _show + ? bearishColorIDX + : hideColorIDX; +} + +// \ No newline at end of file diff --git a/BKPS/Indicators 14030517/x-saherelm.xchvlm.osc.ex5 b/BKPS/Indicators 14030517/x-saherelm.xchvlm.osc.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..993b9e4a9bb6a44831b886b1c0c466b5569c36b7 GIT binary patch literal 32206 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 +#include "../Libraries/x-saherelm.common.lib.mq5" + +// +// Inputs ... + +// +input group "Market"; +input int length = 14; // Length + +// +input group "Cycles"; + +// +input group "Short"; +input ENUM_X_PERIOD_METHOD scMethod = X_PERIOD_AUTO; // How to Find Period +input ENUM_TIMEFRAMES scPeriod = NULL; // Time Period + +// +input group "Medium"; +input ENUM_X_PERIOD_METHOD mcMethod = X_PERIOD_AUTO; // How to Find Period +input ENUM_TIMEFRAMES mcPeriod = NULL; // Time Period + +// +input group "Long"; +input ENUM_X_PERIOD_METHOD lcMethod = X_PERIOD_AUTO; // How to Find Period +input ENUM_TIMEFRAMES lcPeriod = NULL; // Time Period + +// +input group "Hind"; +input ENUM_X_PERIOD_METHOD hcMethod = X_PERIOD_AUTO; // How to Find Period +input ENUM_TIMEFRAMES hcPeriod = NULL; // Time Period + +// +// Presentation ... +input group "Presentation"; + +// +// Current ... +input bool showCurrent = true; // Show Current Cycle +input bool showShort = true; // Show Short Cycle +input bool showMedium = true; // Show Medium Cycle +input bool showLong = true; // Show Long Cycle +input bool showHind = true; // Show Hind Cycle + +// +// Buffers ... + +// +#define hideColorIDX 0 +#define bullishColorIDX 1 +#define bearishColorIDX 2 + +// +#property indicator_separate_window + +// +#property indicator_buffers 10 +#property indicator_plots 10 + +// +// Current ... + +// +#define cBufferIndex 0 +double cBuffer[]; + +// +#define cColorBufferIndex 1 +double cColorBuffer[]; + +// +#define cPlotBufferIndex 0 +#property indicator_label1 "XCHVLM C" +#property indicator_style1 STYLE_SOLID +#property indicator_type1 DRAW_COLOR_HISTOGRAM +#property indicator_color1 CLR_NONE, clrLime, clrRed + +// +// Short ... + +// +#define sBufferIndex 2 +double sBuffer[]; + +// +#define sColorBufferIndex 3 +double sColorBuffer[]; + +// +#define sPlotBufferIndex 1 +#property indicator_label2 "XCHVLM S" +#property indicator_style2 STYLE_SOLID +#property indicator_type2 DRAW_COLOR_HISTOGRAM +#property indicator_color2 CLR_NONE, clrLime, clrRed + +// +// Medium ... + +// +#define mBufferIndex 4 +double mBuffer[]; + +// +#define mColorBufferIndex 5 +double mColorBuffer[]; + +// +#define mPlotBufferIndex 2 +#property indicator_label3 "XCHVLM M" +#property indicator_style3 STYLE_SOLID +#property indicator_type3 DRAW_COLOR_HISTOGRAM +#property indicator_color3 CLR_NONE, clrLime, clrRed + +// +// Long ... + +// +#define lBufferIndex 6 +double lBuffer[]; + +// +#define lColorBufferIndex 7 +double lColorBuffer[]; + +// +#define lPlotBufferIndex 3 +#property indicator_label4 "XCHVLM L" +#property indicator_style4 STYLE_SOLID +#property indicator_type4 DRAW_COLOR_HISTOGRAM +#property indicator_color4 CLR_NONE, clrLime, clrRed + +// +// Hind ... + +// +#define hBufferIndex 8 +double hBuffer[]; + +// +#define hColorBufferIndex 9 +double hColorBuffer[]; + +// +#define hPlotBufferIndex 4 +#property indicator_label5 "XCHVLM H" +#property indicator_style5 STYLE_SOLID +#property indicator_type5 DRAW_COLOR_HISTOGRAM +#property indicator_color5 CLR_NONE, clrLime, clrRed + +// +// Variables, Properties and etc ... + +// +int maxLength; + +// +// Current ... +int mCMarketLength = length; +double cVolumes[]; +double cDistances[]; + +// +// Short ... +int mSCycleLength = 0; +int mSMarketLength = 0; +ENUM_TIMEFRAMES mSCPeriod = NULL; +double sVolumes[]; +double sDistances[]; + +// +// Medium ... +int mMCycleLength = 0; +int mMMarketLength = 0; +ENUM_TIMEFRAMES mMCPeriod = NULL; +double mVolumes[]; +double mDistances[]; + +// +// Long ... +int mLCycleLength = 0; +int mLMarketLength = 0; +ENUM_TIMEFRAMES mLCPeriod = NULL; +double lVolumes[]; +double lDistances[]; + +// +// Hind ... +int mHCycleLength = 0; +int mHMarketLength = 0; +ENUM_TIMEFRAMES mHCPeriod = NULL; +double hVolumes[]; +double hDistances[]; + +// +// Event Handlers ... + +// +// Initialization ... +int OnInit() +{ + // + // Validate Inputs ... + if (!ValidateInputs()) + { + return INIT_PARAMETERS_INCORRECT; + } + + // + if (!InitMarketCycles()) + { + return INIT_PARAMETERS_INCORRECT; + } + + // + // because in some cases we may have more than one input for + // calculation and we must prevent any calculation + // untill we pass the biggest input length, here we get max Input length + // and then wait until pass it ... + maxLength = ExtractMaxLengthOfInputs(); + + // + // Current ... + ArrayResize(cVolumes, maxLength, 0); + ArrayResize(cDistances, maxLength, 0); + + // + // Short ... + ArrayResize(sVolumes, maxLength, 0); + ArrayResize(sDistances, maxLength, 0); + + // + // Medium ... + ArrayResize(mVolumes, maxLength, 0); + ArrayResize(mDistances, maxLength, 0); + + // + // Long ... + ArrayResize(lVolumes, maxLength, 0); + ArrayResize(lDistances, maxLength, 0); + + // + // Hind ... + ArrayResize(hVolumes, maxLength, 0); + ArrayResize(hDistances, maxLength, 0); + + // + // Define Index Buffers ... + DefineBuffers(); + + // + // Set Indicator ShortName ... + SetIndicatorName(); + + // + // Init Succeed ... + return INIT_SUCCEEDED; +} + +// +// DeInitialization ... +void OnDeinit(const int reason) +{ + // + // REASON_PROGRAM 0 The EA has stopped working calling the ExpertRemove() function + // REASON_REMOVE 1 Program removed from a chart + // REASON_RECOMPILE 2 Program recompiled + // REASON_CHARTCHANGE 3 A symbol or a chart period is changed + // REASON_CHARTCLOSE 4 Chart closed + // REASON_PARAMETERS 5 Inputs changed by a user + // REASON_ACCOUNT 6 Another account has been activated or reconnection to the trade server has occurred due to changes in the account settings + // REASON_TEMPLATE 7 Another chart template applied + // REASON_INITFAILED 8 The OnInit() handler returned a non-zero value + // REASON_CLOSE 9 Terminal closed + + // + Clean(cVolumes); + Clean(cDistances); + + // + Clean(sVolumes); + Clean(sDistances); + + // + Clean(mVolumes); + Clean(mDistances); + + // + Clean(lVolumes); + Clean(lDistances); + + // + Clean(hVolumes); + Clean(hDistances); +} + +// +// Calculating what we want ... +int OnCalculate( + const int rates_total, // Total Bars on Chart ... + const int prev_calculated, // Total Calculated Bars on Charts ... + const datetime &time[], // History of Open Time ... + const double &open[], // History of Open Price ... + const double &high[], // History of High Price ... + const double &low[], // History of Low Price ... + const double &close[], // History of Close Price ... + const long &tick_volume[], // History of Tick Volumes on Bar ... + const long &volume[], // History of Trade Volumes ... + const int &spread[] // History of Spread Price ... +) +{ + // + static int i = maxLength * 2; + for (i; i < rates_total; i++) + { + // + CalculateBuffers( + i, + prev_calculated, + rates_total, + // + open, + high, + close, + low, + tick_volume // + ); + } + + // + i = rates_total - 1; + + // + return rates_total; +} + +// +// Functions ... + +// +// Validate Input Args for Initialization ... +bool ValidateInputs() +{ + // + bool result = false; + + // + result = + // + length >= 2 && + // + (IsValid(scMethod, scPeriod) && + IsValid(mcMethod, mcPeriod) && + IsValid(lcMethod, lcPeriod) && + IsValid(hcMethod, hcPeriod)) + // + ; + + // + return result; +} + +// +// Initialize Market Cycles ... +bool InitMarketCycles() +{ + // + bool result = false; + + // + // Current Cycle Initialization ... + + // + int cPeriodSeconds = PeriodSeconds(_Period); + + // + // Short Cycle Initialization ... + + // + // Find Cycle Period ... + if (scMethod == X_PERIOD_AUTO) + { + // + // Select Period ... + mSCPeriod = GetCyclePeriod( + X_MARKET_CYCLE_SHORT, + _Period // + ); + } + else + { + mSCPeriod = scPeriod; + } + + // + result = IsValid(mSCPeriod); + if (!result) + { + return result; + } + + // + mSCycleLength = PeriodSeconds(mSCPeriod) / cPeriodSeconds; + mSMarketLength = mSCycleLength * mCMarketLength; + result = mSCycleLength > 0; + if (!result) + { + return result; + } + + // + // Medium Cycle Initialization ... + + // + // Find Cycle Period ... + if (mcMethod == X_PERIOD_AUTO) + { + // + // Select Period ... + mMCPeriod = GetCyclePeriod( + X_MARKET_CYCLE_MEDIUM, + _Period // + ); + } + else + { + mMCPeriod = mcPeriod; + } + + // + result = IsValid(mMCPeriod); + if (!result) + { + return result; + } + + // + mMCycleLength = PeriodSeconds(mMCPeriod) / cPeriodSeconds; + mMMarketLength = mMCycleLength * mCMarketLength; + result = mMCycleLength > 0; + if (!result) + { + return result; + } + + // + // Long Cycle Initialization ... + + // + // Find Cycle Period ... + if (lcMethod == X_PERIOD_AUTO) + { + // + // Select Period ... + mLCPeriod = GetCyclePeriod( + X_MARKET_CYCLE_LONG, + _Period // + ); + } + else + { + mLCPeriod = lcPeriod; + } + + // + result = IsValid(mLCPeriod); + if (!result) + { + return result; + } + + // + mLCycleLength = PeriodSeconds(mLCPeriod) / cPeriodSeconds; + mLMarketLength = mLCycleLength * mCMarketLength; + result = mLCycleLength > 0; + if (!result) + { + return result; + } + + // + // Hind Cycle Initialization ... + + // + // Find Cycle Period ... + if (hcMethod == X_PERIOD_AUTO) + { + // + // Select Period ... + mHCPeriod = GetCyclePeriod( + X_MARKET_CYCLE_HIND, + _Period // + ); + } + else + { + mHCPeriod = hcPeriod; + } + + // + result = IsValid(mHCPeriod); + if (!result) + { + return result; + } + + // + mHCycleLength = PeriodSeconds(mHCPeriod) / cPeriodSeconds; + mHMarketLength = mHCycleLength * mCMarketLength; + result = mHCycleLength > 0; + if (!result) + { + return result; + } + + // + return result; +} + +// +// Retrieve all Exists Input Max Length ... +// use for Start Of Drawing ... +int ExtractMaxLengthOfInputs() +{ + // + int result = 0; + + // + result = MathMax(mCMarketLength, mSMarketLength); + result = MathMax(result, mMMarketLength); + result = MathMax(result, mLMarketLength); + result = MathMax(result, mHMarketLength); + + // + return result; +} + +// +// Define Indexes and Styles ... +void DefineBuffers() +{ + // + // Current ... + + // + // ENUM_DRAW_TYPE cDrawType = showCurrent ? DRAW_COLOR_HISTOGRAM : DRAW_NONE; + // PlotIndexSetInteger(cPlotBufferIndex, PLOT_DRAW_TYPE, cDrawType); + SetIndexBuffer(cBufferIndex, cBuffer, INDICATOR_DATA); + PlotIndexSetInteger(cPlotBufferIndex, PLOT_SHOW_DATA, showCurrent); + SetIndexBuffer(cColorBufferIndex, cColorBuffer, INDICATOR_COLOR_INDEX); + + // + // Short ... + + // + // ENUM_DRAW_TYPE sDrawType = showShort ? DRAW_COLOR_HISTOGRAM : DRAW_NONE; + // PlotIndexSetInteger(sPlotBufferIndex, PLOT_DRAW_TYPE, sDrawType); + SetIndexBuffer(sBufferIndex, sBuffer, INDICATOR_DATA); + PlotIndexSetInteger(sPlotBufferIndex, PLOT_SHOW_DATA, showShort); + SetIndexBuffer(sColorBufferIndex, sColorBuffer, INDICATOR_COLOR_INDEX); + + // + // Medium ... + + // + // ENUM_DRAW_TYPE mDrawType = showMedium ? DRAW_COLOR_HISTOGRAM : DRAW_NONE; + // PlotIndexSetInteger(mPlotBufferIndex, PLOT_DRAW_TYPE, mDrawType); + SetIndexBuffer(mBufferIndex, mBuffer, INDICATOR_DATA); + PlotIndexSetInteger(mPlotBufferIndex, PLOT_SHOW_DATA, showMedium); + SetIndexBuffer(mColorBufferIndex, mColorBuffer, INDICATOR_COLOR_INDEX); + + // + // Long ... + + // + // ENUM_DRAW_TYPE lDrawType = showLong ? DRAW_COLOR_HISTOGRAM : DRAW_NONE; + // PlotIndexSetInteger(lPlotBufferIndex, PLOT_DRAW_TYPE, lDrawType); + SetIndexBuffer(lBufferIndex, lBuffer, INDICATOR_DATA); + PlotIndexSetInteger(lPlotBufferIndex, PLOT_SHOW_DATA, showLong); + SetIndexBuffer(lColorBufferIndex, lColorBuffer, INDICATOR_COLOR_INDEX); + + // + // Hind ... + + // + // ENUM_DRAW_TYPE hDrawType = showHind ? DRAW_COLOR_HISTOGRAM : DRAW_NONE; + // PlotIndexSetInteger(hPlotBufferIndex, PLOT_DRAW_TYPE, hDrawType); + SetIndexBuffer(hBufferIndex, hBuffer, INDICATOR_DATA); + PlotIndexSetInteger(hPlotBufferIndex, PLOT_SHOW_DATA, showHind); + SetIndexBuffer(hColorBufferIndex, hColorBuffer, INDICATOR_COLOR_INDEX); +} + +// +// Set Indicator Short Name and also we can define Buffers Labels ... +void SetIndicatorName() +{ + IndicatorSetString(INDICATOR_SHORTNAME, ShortName); +} + +// +// Calculations ... + +// +// Calculate Buffers ... +void CalculateBuffers( + int bar_index, // Selected Bar Index + const int prevCalculated, + const int ratesTotal, + const double &open[], + const double &high[], + const double &close[], + const double &low[], + const long &tickVolume[] // +) +{ + // + CalculateCycles( + bar_index, + prevCalculated, + ratesTotal, + open, + high, + close, + low, + tickVolume // + ); +} + +// +void CalculateCycles( + int bar_index, // Selected Bar Index + const int prevCalculated, + const int ratesTotal, + const double &open[], + const double &high[], + const double &close[], + const double &low[], + const long &tickVolume[] // +) +{ + // + // CURRENT ... + CalculateCycle( + bar_index, + prevCalculated, + ratesTotal, + open, + high, + close, + low, + tickVolume, + // + mCMarketLength, + showCurrent, + cVolumes, + cDistances, + cBuffer, + cColorBuffer // + ); + + // + // SHORT ... + CalculateCycle( + bar_index, + prevCalculated, + ratesTotal, + open, + high, + close, + low, + tickVolume, + // + mSMarketLength, + showShort, + sVolumes, + sDistances, + sBuffer, + sColorBuffer // + ); + + // + // MEDIUM ... + CalculateCycle( + bar_index, + prevCalculated, + ratesTotal, + open, + high, + close, + low, + tickVolume, + // + mMMarketLength, + showMedium, + mVolumes, + mDistances, + mBuffer, + mColorBuffer // + ); + + // + // LONG ... + CalculateCycle( + bar_index, + prevCalculated, + ratesTotal, + open, + high, + close, + low, + tickVolume, + // + mLMarketLength, + showLong, + lVolumes, + lDistances, + lBuffer, + lColorBuffer // + ); + + // + // HIND ... + CalculateCycle( + bar_index, + prevCalculated, + ratesTotal, + open, + high, + close, + low, + tickVolume, + // + mHMarketLength, + showHind, + hVolumes, + hDistances, + hBuffer, + hColorBuffer // + ); +} + +// +void CalculateCycle( + int bar_index, // Selected Bar Index + const int prevCalculated, + const int ratesTotal, + const double &open[], + const double &high[], + const double &close[], + const double &low[], + const long &tickVolume[], + // + int _length, // Calculation Length + bool _show, + double &_volumes[], + double &_distances[], + double &_buffer[], + double &_colorBuffer[] // +) +{ + // + for (int x = 0; x < _length; x++) + { + // + _volumes[x] = (double)tickVolume[bar_index - x]; + _distances[x] = + (close[bar_index - x] > open[bar_index - x]) + ? high[bar_index - x] - low[bar_index - x] + : low[bar_index - x] - high[bar_index - x]; + } + + // + double iValue = MathMean(_volumes) * MathMean(_distances); + + // + _buffer[bar_index] = iValue; + _colorBuffer[bar_index] = iValue > 0 + ? _show + ? bullishColorIDX + : hideColorIDX + : _show + ? bearishColorIDX + : hideColorIDX; +} + +// \ No newline at end of file diff --git a/BKPS/Indicators 14030517/x-saherelm.xchvwap.ex5 b/BKPS/Indicators 14030517/x-saherelm.xchvwap.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..ea77844469d9be05a0b34833d30c17d58a405f2f GIT binary patch literal 32634 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 rates_total || prev_calculated <= 0) + ? rates_total + : (rates_total - prev_calculated) + 1; + + // + // Main Loop ... + for (int i = limit - 1; i >= 0 && !IsStopped(); i--) + { + // + CalculateBuffers( + i, + prev_calculated, + rates_total, + // + open, + high, + close, + low, + tick_volume // + ); + } + + // + return rates_total; +} + +// +// CUSTOM Functions ... + +// +// Validate Input Args for Initialization ... +bool ValidateInputs() +{ + // + bool result = + // + (IsValid(scMethod, scPeriod) && + IsValid(mcMethod, mcPeriod) && + IsValid(lcMethod, lcPeriod) && + IsValid(hcMethod, hcPeriod)) + // + ; + + // + return result; +} + +// +// Initialize Market Cycles ... +bool InitMarketCycles() +{ + // + bool result = false; + + // + // Current Cycle Initialization ... + + // + int cPeriodSeconds = PeriodSeconds(_Period); + + // + // Short Cycle Initialization ... + + // + // Find Cycle Period ... + if (scMethod == X_PERIOD_AUTO) + { + // + // Select Period ... + mSCPeriod = GetCyclePeriod( + X_MARKET_CYCLE_SHORT, + _Period // + ); + } + else + { + mSCPeriod = scPeriod; + } + + // + result = IsValid(mSCPeriod); + if (!result) + { + return result; + } + + // + mSCycleLength = PeriodSeconds(mSCPeriod) / cPeriodSeconds; + result = mSCycleLength > 0; + if (!result) + { + return result; + } + + // + // Medium Cycle Initialization ... + + // + // Find Cycle Period ... + if (mcMethod == X_PERIOD_AUTO) + { + // + // Select Period ... + mMCPeriod = GetCyclePeriod( + X_MARKET_CYCLE_MEDIUM, + _Period // + ); + } + else + { + mMCPeriod = mcPeriod; + } + + // + result = IsValid(mMCPeriod); + if (!result) + { + return result; + } + + // + mMCycleLength = PeriodSeconds(mMCPeriod) / cPeriodSeconds; + result = mMCycleLength > 0; + if (!result) + { + return result; + } + + // + // Long Cycle Initialization ... + + // + // Find Cycle Period ... + if (lcMethod == X_PERIOD_AUTO) + { + // + // Select Period ... + mLCPeriod = GetCyclePeriod( + X_MARKET_CYCLE_LONG, + _Period // + ); + } + else + { + mLCPeriod = lcPeriod; + } + + // + result = IsValid(mLCPeriod); + if (!result) + { + return result; + } + + // + mLCycleLength = PeriodSeconds(mLCPeriod) / cPeriodSeconds; + result = mLCycleLength > 0; + if (!result) + { + return result; + } + + // + // Hind Cycle Initialization ... + + // + // Find Cycle Period ... + if (hcMethod == X_PERIOD_AUTO) + { + // + // Select Period ... + mHCPeriod = GetCyclePeriod( + X_MARKET_CYCLE_HIND, + _Period // + ); + } + else + { + mHCPeriod = hcPeriod; + } + + // + result = IsValid(mHCPeriod); + if (!result) + { + return result; + } + + // + mHCycleLength = PeriodSeconds(mHCPeriod) / cPeriodSeconds; + result = mHCycleLength > 0; + if (!result) + { + return result; + } + + // + return result; +} + +// +// Set Indicator Short Name and also we can define Buffers Labels ... +void SetIndicatorName() +{ + IndicatorSetString(INDICATOR_SHORTNAME, ShortName); +} + +// +// Define Indexes and Styles ... +void DefineBuffers() +{ + // + // Short ... + + // + ArraySetAsSeries(sBuffer, true); + ArraySetAsSeries(sColorBuffer, true); + SetIndexBuffer(sBufferIndex, sBuffer, INDICATOR_DATA); + SetIndexBuffer(sColorBufferIndex, sColorBuffer, INDICATOR_COLOR_INDEX); + + // + // Medium ... + + // + ArraySetAsSeries(mBuffer, true); + ArraySetAsSeries(mColorBuffer, true); + SetIndexBuffer(mBufferIndex, mBuffer, INDICATOR_DATA); + SetIndexBuffer(mColorBufferIndex, mColorBuffer, INDICATOR_COLOR_INDEX); + + // + // Long ... + + // + ArraySetAsSeries(lBuffer, true); + ArraySetAsSeries(lColorBuffer, true); + SetIndexBuffer(lBufferIndex, lBuffer, INDICATOR_DATA); + SetIndexBuffer(lColorBufferIndex, lColorBuffer, INDICATOR_COLOR_INDEX); + + // + // Hind ... + + // + ArraySetAsSeries(hBuffer, true); + ArraySetAsSeries(hColorBuffer, true); + SetIndexBuffer(hBufferIndex, hBuffer, INDICATOR_DATA); + SetIndexBuffer(hColorBufferIndex, hColorBuffer, INDICATOR_COLOR_INDEX); + + // + // Data Buffers ... + + // + // Volumes ... + ArraySetAsSeries(volumeBuffer, true); + SetIndexBuffer(volumeBufferIndex, volumeBuffer, INDICATOR_CALCULATIONS); + + // + // Price ... + ArraySetAsSeries(priceBuffer, true); + SetIndexBuffer(priceBufferIndex, priceBuffer, INDICATOR_CALCULATIONS); + + // + // Short State ... + ArraySetAsSeries(sStateBuffer, true); + SetIndexBuffer(sStateBufferIndex, sStateBuffer, INDICATOR_CALCULATIONS); + + // + // Medium State ... + ArraySetAsSeries(mStateBuffer, true); + SetIndexBuffer(mStateBufferIndex, mStateBuffer, INDICATOR_CALCULATIONS); + + // + // Long State ... + ArraySetAsSeries(lStateBuffer, true); + SetIndexBuffer(lStateBufferIndex, lStateBuffer, INDICATOR_CALCULATIONS); + + // + // Hind State ... + ArraySetAsSeries(hStateBuffer, true); + SetIndexBuffer(hStateBufferIndex, hStateBuffer, INDICATOR_CALCULATIONS); +} + +// +// Retrieve all Exists Input Max Length ... +// use for Start Of Drawing ... +int ExtractMaxLengthOfInputs() +{ + // + int result = 0; + + // + result = MathMax(mSCycleLength, mMCycleLength); + result = MathMax(result, mLCycleLength); + result = MathMax(result, mHCycleLength); + + // + return result; +} + +// +// Calculate Buffers ... +void CalculateBuffers( + int bar_index, // Selected Bar Index + const int prevCalculated, + const int ratesTotal, + const double &open[], + const double &high[], + const double &close[], + const double &low[], + const long &tickVolume[] // +) +{ + // + // Calculate Volumes and Price ... + + // + if (ratesTotal - bar_index <= maxLength) + { + // + CalculateDataBuffers( + bar_index, + prevCalculated, + ratesTotal, + open, + high, + close, + low, + tickVolume // + ); + return; + } + + // + CalculateDataBuffers( + bar_index, + prevCalculated, + ratesTotal, + open, + high, + close, + low, + tickVolume // + ); + + // + CalculateCycles( + bar_index, + prevCalculated, + ratesTotal, + open, + high, + close, + low, + tickVolume // + ); +} + +// +void CalculateDataBuffers( + int bar_index, // Selected Bar Index + const int prevCalculated, + const int ratesTotal, + const double &open[], + const double &high[], + const double &close[], + const double &low[], + const long &tickVolume[] // +) +{ + // + double price = GetAppliedPrice( + appliedTo, + open, + high, + low, + close, + bar_index // + ); + priceBuffer[bar_index] = price; + volumeBuffer[bar_index] = (double)tickVolume[bar_index]; +} + +// +void CalculateCycles( + int bar_index, // Selected Bar Index + const int prevCalculated, + const int ratesTotal, + const double &open[], + const double &high[], + const double &close[], + const double &low[], + const long &tickVolume[] // +) +{ + // + // SHORT ... + CalculateCycle( + bar_index, + prevCalculated, + ratesTotal, + open, + high, + close, + low, + tickVolume, + // + mSCycleLength, + showShort, + sBuffer, + sColorBuffer, + sStateBuffer // + ); + + // + // MEDIUM ... + CalculateCycle( + bar_index, + prevCalculated, + ratesTotal, + open, + high, + close, + low, + tickVolume, + // + mMCycleLength, + showMedium, + mBuffer, + mColorBuffer, + mStateBuffer // + ); + + // + // LONG ... + CalculateCycle( + bar_index, + prevCalculated, + ratesTotal, + open, + high, + close, + low, + tickVolume, + // + mLCycleLength, + showLong, + lBuffer, + lColorBuffer, + lStateBuffer // + ); + + // + // HIND ... + CalculateCycle( + bar_index, + prevCalculated, + ratesTotal, + open, + high, + close, + low, + tickVolume, + // + mHCycleLength, + showHind, + hBuffer, + hColorBuffer, + hStateBuffer // + ); +} + +// +void CalculateCycle( + int bar_index, // Selected Bar Index + const int prevCalculated, + const int ratesTotal, + const double &open[], + const double &high[], + const double &close[], + const double &low[], + const long &tickVolume[], + // + int _length, // Calculation Length + bool _show, + double &_buffer[], + double &_colorBuffer[], + double &_stateBuffer[] // +) +{ + // + double vSum = 0; + double pSum = 0; + double mSum = 0; + for (int x = 0; x < _length; x++) + { + // + pSum += priceBuffer[x + bar_index]; + vSum += volumeBuffer[x + bar_index]; + mSum += priceBuffer[x + bar_index] * volumeBuffer[x + bar_index]; + } + + // + double iValue = mSum / vSum; + iValue = NormalizeDouble(iValue, _Digits); + + // + _buffer[bar_index] = iValue; + + // + bool isBullish = low[bar_index] > iValue; + bool isBearish = high[bar_index] < iValue; + + // + double iColor = + isBullish + ? bullishColorIDX + : isBearish + ? bearishColorIDX + : neuturalColorIDX; + + // + _colorBuffer[bar_index] = hideColorIDX; + _stateBuffer[bar_index] = iColor; + if (_show) + { + _colorBuffer[bar_index] = iColor; + } +} + +// \ No newline at end of file diff --git a/BKPS/Indicators 14030517/x-saherelm.xct.ex5 b/BKPS/Indicators 14030517/x-saherelm.xct.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..1d69dddaafd4dbc118361e20e7f500f374035550 GIT binary patch literal 17220 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