Author: Copyright 2018, MetaQuotes Software Corp.
Price Data Components
Indicators Used
Stochastic oscillator
2 Views
0 Downloads
0 Favorites
SS
ÿþ//+------------------------------------------------------------------+

//|                                                           SS.mq5 |

//|                        Copyright 2018, MetaQuotes Software Corp. |

//|                                                 https://mql5.com |

//+------------------------------------------------------------------+

#property copyright "Copyright 2018, MetaQuotes Software Corp."

#property link      "https://mql5.com"

#property version   "1.00"

#property description "Stochastic Stack indicator"

#property indicator_separate_window

#property indicator_buffers 10

#property indicator_plots   1

//--- plot SS

#property indicator_label1  "SStack"

#property indicator_type1   DRAW_COLOR_HISTOGRAM

#property indicator_color1  clrGreen,clrRed,clrDarkGray

#property indicator_style1  STYLE_SOLID

#property indicator_width1  2

//--- input parameters

input uint     InpPeriodK1          =  36;            // Stoch 1 %K period

input uint     InpPeriodD1          =  18;            // Stoch 1 %D period

input uint     InpSlowing1          =  9;             // Stoch 1 slowing

input ENUM_MA_METHOD InpMethod1     =  MODE_SMA;      // Stoch 1 Method

input ENUM_STO_PRICE InpPriceField1 =  STO_LOWHIGH;   // Stoch 1 Price field



input uint     InpPeriodK2          =  40;            // Stoch 2 %K period

input uint     InpPeriodD2          =  20;            // Stoch 2 %D period

input uint     InpSlowing2          =  10;            // Stoch 2 slowing

input ENUM_MA_METHOD InpMethod2     =  MODE_SMA;      // Stoch 2 Method

input ENUM_STO_PRICE InpPriceField2 =  STO_LOWHIGH;   // Stoch 2 Price field



input uint     InpPeriodK3          =  52;            // Stoch 3 %K period

input uint     InpPeriodD3          =  26;            // Stoch 3 %D period

input uint     InpSlowing3          =  13;            // Stoch 3 slowing

input ENUM_MA_METHOD InpMethod3     =  MODE_SMA;      // Stoch 3 Method

input ENUM_STO_PRICE InpPriceField3 =  STO_LOWHIGH;   // Stoch 3 Price field



input uint     InpPeriodK4          =  60;            // Stoch 4 %K period

input uint     InpPeriodD4          =  30;            // Stoch 4 %D period

input uint     InpSlowing4          =  15;            // Stoch 4 slowing

input ENUM_MA_METHOD InpMethod4     =  MODE_SMA;      // Stoch 4 Method

input ENUM_STO_PRICE InpPriceField4 =  STO_LOWHIGH;   // Stoch 4 Price field



input uint     InpPeriodK5          =  70;            // Stoch 5 %K period

input uint     InpPeriodD5          =  17;            // Stoch 5 %D period

input uint     InpSlowing5          =  8;             // Stoch 5 slowing

input ENUM_MA_METHOD InpMethod5     =  MODE_SMA;      // Stoch 5 Method

input ENUM_STO_PRICE InpPriceField5 =  STO_LOWHIGH;   // Stoch 5 Price field



input uint     InpPeriodK6          =  84;            // Stoch 6 %K period

input uint     InpPeriodD6          =  42;            // Stoch 6 %D period

input uint     InpSlowing6          =  21;            // Stoch 6 slowing

input ENUM_MA_METHOD InpMethod6     =  MODE_SMA;      // Stoch 6 Method

input ENUM_STO_PRICE InpPriceField6 =  STO_LOWHIGH;   // Stoch 6 Price field



input uint     InpPeriodK7          =  100;           // Stoch 7 %K period

input uint     InpPeriodD7          =  50;            // Stoch 7 %D period

input uint     InpSlowing7          =  25;            // Stoch 7 slowing

input ENUM_MA_METHOD InpMethod7     =  MODE_SMA;      // Stoch 7 Method

input ENUM_STO_PRICE InpPriceField7 =  STO_LOWHIGH;   // Stoch 7 Price field



input uint     InpPeriodK8          =  120;           // Stoch 8 %K period

input uint     InpPeriodD8          =  60;            // Stoch 8 %D period

input uint     InpSlowing8          =  30;            // Stoch 8 slowing

input ENUM_MA_METHOD InpMethod8     =  MODE_SMA;      // Stoch 8 Method

input ENUM_STO_PRICE InpPriceField8 =  STO_LOWHIGH;   // Stoch 8 Price field



//--- indicator buffers

double         BufferSS[];

double         BufferColors[];

double         BufferSto1[];

double         BufferSto2[];

double         BufferSto3[];

double         BufferSto4[];

double         BufferSto5[];

double         BufferSto6[];

double         BufferSto7[];

double         BufferSto8[];

//--- global variables

int            period_k1,period_d1,slowing1;

int            period_k2,period_d2,slowing2;

int            period_k3,period_d3,slowing3;

int            period_k4,period_d4,slowing4;

int            period_k5,period_d5,slowing5;

int            period_k6,period_d6,slowing6;

int            period_k7,period_d7,slowing7;

int            period_k8,period_d8,slowing8;

int            handle_sto1;

int            handle_sto2;

int            handle_sto3;

int            handle_sto4;

int            handle_sto5;

int            handle_sto6;

int            handle_sto7;

int            handle_sto8;

//+------------------------------------------------------------------+

//| Custom indicator initialization function                         |

//+------------------------------------------------------------------+

int OnInit()

  {

//--- set global variables

   period_k1=int(InpPeriodK1<1 ? 1 : InpPeriodK1);

   period_d1=int(InpPeriodD1<1 ? 1 : InpPeriodD1);

   slowing1=int(InpSlowing1<1 ? 1 : InpSlowing1);

   

   period_k2=int(InpPeriodK2<1 ? 1 : InpPeriodK2);

   period_d2=int(InpPeriodD2<1 ? 1 : InpPeriodD2);

   slowing2=int(InpSlowing2<1 ? 1 : InpSlowing2);

   

   period_k3=int(InpPeriodK3<1 ? 1 : InpPeriodK3);

   period_d3=int(InpPeriodD3<1 ? 1 : InpPeriodD3);

   slowing3=int(InpSlowing3<1 ? 1 : InpSlowing3);

   

   period_k4=int(InpPeriodK4<1 ? 1 : InpPeriodK4);

   period_d4=int(InpPeriodD4<1 ? 1 : InpPeriodD4);

   slowing4=int(InpSlowing4<1 ? 1 : InpSlowing4);

   

   period_k5=int(InpPeriodK5<1 ? 1 : InpPeriodK5);

   period_d5=int(InpPeriodD5<1 ? 1 : InpPeriodD5);

   slowing5=int(InpSlowing5<1 ? 1 : InpSlowing5);

   

   period_k6=int(InpPeriodK6<1 ? 1 : InpPeriodK6);

   period_d6=int(InpPeriodD6<1 ? 1 : InpPeriodD6);

   slowing6=int(InpSlowing6<1 ? 1 : InpSlowing6);

   

   period_k7=int(InpPeriodK7<1 ? 1 : InpPeriodK7);

   period_d7=int(InpPeriodD7<1 ? 1 : InpPeriodD7);

   slowing7=int(InpSlowing7<1 ? 1 : InpSlowing7);

   

   period_k8=int(InpPeriodK8<1 ? 1 : InpPeriodK8);

   period_d8=int(InpPeriodD8<1 ? 1 : InpPeriodD8);

   slowing8=int(InpSlowing8<1 ? 1 : InpSlowing8);

   

//--- indicator buffers mapping

   SetIndexBuffer(0,BufferSS,INDICATOR_DATA);

   SetIndexBuffer(1,BufferColors,INDICATOR_COLOR_INDEX);

   SetIndexBuffer(2,BufferSto1,INDICATOR_CALCULATIONS);

   SetIndexBuffer(3,BufferSto2,INDICATOR_CALCULATIONS);

   SetIndexBuffer(4,BufferSto3,INDICATOR_CALCULATIONS);

   SetIndexBuffer(5,BufferSto4,INDICATOR_CALCULATIONS);

   SetIndexBuffer(6,BufferSto5,INDICATOR_CALCULATIONS);

   SetIndexBuffer(7,BufferSto6,INDICATOR_CALCULATIONS);

   SetIndexBuffer(8,BufferSto7,INDICATOR_CALCULATIONS);

   SetIndexBuffer(9,BufferSto8,INDICATOR_CALCULATIONS);

//--- setting indicator parameters

   IndicatorSetString(INDICATOR_SHORTNAME,"Stochastic Stack");

   IndicatorSetInteger(INDICATOR_DIGITS,Digits());

//--- setting buffer arrays as timeseries

   ArraySetAsSeries(BufferSS,true);

   ArraySetAsSeries(BufferColors,true);

   ArraySetAsSeries(BufferSto1,true);

   ArraySetAsSeries(BufferSto2,true);

   ArraySetAsSeries(BufferSto3,true);

   ArraySetAsSeries(BufferSto4,true);

   ArraySetAsSeries(BufferSto5,true);

   ArraySetAsSeries(BufferSto6,true);

   ArraySetAsSeries(BufferSto7,true);

   ArraySetAsSeries(BufferSto8,true);

//--- create Stochastic's handles

   ResetLastError();

   handle_sto1=iStochastic(NULL,PERIOD_CURRENT,period_k1,period_d1,slowing1,InpMethod1,InpPriceField1);

   if(handle_sto1==INVALID_HANDLE)

     {

      Print("The iStochastic(",(string)period_k1,",",(string)period_d1,",",(string)slowing1,") object was not created: Error ",GetLastError());

      return INIT_FAILED;

     }

   handle_sto2=iStochastic(NULL,PERIOD_CURRENT,period_k2,period_d2,slowing2,InpMethod2,InpPriceField2);

   if(handle_sto2==INVALID_HANDLE)

     {

      Print("The iStochastic(",(string)period_k2,",",(string)period_d2,",",(string)slowing2,") object was not created: Error ",GetLastError());

      return INIT_FAILED;

     }

   handle_sto3=iStochastic(NULL,PERIOD_CURRENT,period_k3,period_d3,slowing3,InpMethod3,InpPriceField3);

   if(handle_sto3==INVALID_HANDLE)

     {

      Print("The iStochastic(",(string)period_k3,",",(string)period_d3,",",(string)slowing3,") object was not created: Error ",GetLastError());

      return INIT_FAILED;

     }

   handle_sto4=iStochastic(NULL,PERIOD_CURRENT,period_k4,period_d4,slowing4,InpMethod4,InpPriceField4);

   if(handle_sto4==INVALID_HANDLE)

     {

      Print("The iStochastic(",(string)period_k4,",",(string)period_d4,",",(string)slowing4,") object was not created: Error ",GetLastError());

      return INIT_FAILED;

     }

   handle_sto5=iStochastic(NULL,PERIOD_CURRENT,period_k5,period_d5,slowing5,InpMethod5,InpPriceField5);

   if(handle_sto5==INVALID_HANDLE)

     {

      Print("The iStochastic(",(string)period_k5,",",(string)period_d5,",",(string)slowing5,") object was not created: Error ",GetLastError());

      return INIT_FAILED;

     }

   handle_sto6=iStochastic(NULL,PERIOD_CURRENT,period_k6,period_d6,slowing6,InpMethod6,InpPriceField6);

   if(handle_sto6==INVALID_HANDLE)

     {

      Print("The iStochastic(",(string)period_k6,",",(string)period_d6,",",(string)slowing6,") object was not created: Error ",GetLastError());

      return INIT_FAILED;

     }

   handle_sto7=iStochastic(NULL,PERIOD_CURRENT,period_k7,period_d7,slowing7,InpMethod7,InpPriceField7);

   if(handle_sto7==INVALID_HANDLE)

     {

      Print("The iStochastic(",(string)period_k7,",",(string)period_d7,",",(string)slowing7,") object was not created: Error ",GetLastError());

      return INIT_FAILED;

     }

   handle_sto8=iStochastic(NULL,PERIOD_CURRENT,period_k8,period_d8,slowing8,InpMethod8,InpPriceField8);

   if(handle_sto8==INVALID_HANDLE)

     {

      Print("The iStochastic(",(string)period_k8,",",(string)period_d8,",",(string)slowing8,") object was not created: Error ",GetLastError());

      return INIT_FAILED;

     }

//---

   return(INIT_SUCCEEDED);

  }

//+------------------------------------------------------------------+

//| Custom indicator iteration function                              |

//+------------------------------------------------------------------+

int OnCalculate(const int rates_total,

                const int prev_calculated,

                const datetime &time[],

                const double &open[],

                const double &high[],

                const double &low[],

                const double &close[],

                const long &tick_volume[],

                const long &volume[],

                const int &spread[])

  {

//--- @>25@:0 8 @0AGQB :>;8G5AB20 ?@>AG8BK205<KE 10@>2

   if(rates_total<4) return 0;

//--- @>25@:0 8 @0AGQB :>;8G5AB20 ?@>AG8BK205<KE 10@>2

   int limit=rates_total-prev_calculated;

   if(limit>1)

     {

      limit=rates_total-1;

      ArrayInitialize(BufferSS,EMPTY_VALUE);

      ArrayInitialize(BufferSto1,0);

      ArrayInitialize(BufferSto2,0);

      ArrayInitialize(BufferSto3,0);

      ArrayInitialize(BufferSto4,0);

      ArrayInitialize(BufferSto5,0);

      ArrayInitialize(BufferSto6,0);

      ArrayInitialize(BufferSto7,0);

      ArrayInitialize(BufferSto8,0);

     }

//--- >43>B>2:0 40==KE

   int count=(limit>1 ? rates_total : 1),copied=0;

   copied=CopyBuffer(handle_sto1,MAIN_LINE,0,count,BufferSto1);

   if(copied!=count) return 0;

   copied=CopyBuffer(handle_sto2,MAIN_LINE,0,count,BufferSto2);

   if(copied!=count) return 0;

   copied=CopyBuffer(handle_sto3,MAIN_LINE,0,count,BufferSto3);

   if(copied!=count) return 0;

   copied=CopyBuffer(handle_sto4,MAIN_LINE,0,count,BufferSto4);

   if(copied!=count) return 0;

   copied=CopyBuffer(handle_sto5,MAIN_LINE,0,count,BufferSto5);

   if(copied!=count) return 0;

   copied=CopyBuffer(handle_sto6,MAIN_LINE,0,count,BufferSto6);

   if(copied!=count) return 0;

   copied=CopyBuffer(handle_sto7,MAIN_LINE,0,count,BufferSto7);

   if(copied!=count) return 0;

   copied=CopyBuffer(handle_sto8,MAIN_LINE,0,count,BufferSto8);

   if(copied!=count) return 0;

//---  0AGQB 8=48:0B>@0

   for(int i=limit; i>=0 && !IsStopped(); i--)

     {

      double Stoch1=BufferSto1[i];

      double Stoch2=BufferSto2[i];

      double Stoch3=BufferSto3[i];

      double Stoch4=BufferSto4[i];

      double Stoch5=BufferSto5[i];

      double Stoch6=BufferSto6[i];

      double Stoch7=BufferSto7[i];

      double Stoch8=BufferSto8[i];



      BufferSS[i]=Stoch1-Stoch2+Stoch3-Stoch4+Stoch5-Stoch6+Stoch7-Stoch8;

      BufferColors[i]=(BufferSS[i]>0 ? 0 : BufferSS[i]<0 ? 1 : 2);

     }

   

//--- return value of prev_calculated for next call

   return(rates_total);

  }

//+------------------------------------------------------------------+

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---