colormetro_stochastic

Author: Copyright � 2005, TrendLaboratory Ltd.
Indicators Used
Stochastic oscillator
2 Views
0 Downloads
0 Favorites
colormetro_stochastic
//+------------------------------------------------------------------+
//|                                        ColorMETRO_Stochastic.mq5 | 
//|                           Copyright © 2005, TrendLaboratory Ltd. |
//|                                       E-mail: igorad2004@list.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, TrendLaboratory Ltd."
#property link      "E-mail: igorad2004@list.ru"
#property description "METRO"
//---- íîìåð âåðñèè èíäèêàòîðà
#property version   "1.10"
//---- îòðèñîâêà èíäèêàòîðà â îòäåëüíîì îêíå
#property indicator_separate_window
//---- êîëè÷åñòâî èíäèêàòîðíûõ áóôåðîâ 3
#property indicator_buffers 3 
//---- èñïîëüçîâàíî âñåãî äâà ãðàôè÷åñêèõ ïîñòðîåíèÿ
#property indicator_plots   2
//+--------------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè îáëàêà  StepStochastic cloud |
//+--------------------------------------------------+
//---- îòðèñîâêà èíäèêàòîðà 1 â âèäå îáëàêà
#property indicator_type1   DRAW_FILLING
//---- â êà÷åñòâå öâåòà èíäèêàòîðà èñïîëüçîâàíû öâåòà MediumSeaGreen,Tomato
#property indicator_color1  clrMediumSeaGreen,clrTomato
//---- ëèíèÿ èíäèêàòîðà 1 - íåïðåðûâíàÿ êðèâàÿ
#property indicator_style1  STYLE_SOLID
//---- òîëùèíà ëèíèè èíäèêàòîðà 1 ðàâíà 1
#property indicator_width1  1
//---- îòîáðàæåíèå ìåòêè èíäèêàòîðà
#property indicator_label1  "StepStochastic cloud"
//+--------------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè èíäèêàòîðà Stochastic        |
//+--------------------------------------------------+
//---- îòðèñîâêà èíäèêàòîðà 2 â âèäå ëèíèè
#property indicator_type2   DRAW_LINE
//---- â êà÷åñòâå öâåòà ëèíèè èíäèêàòîðà èñïîëüçîâàí öâåò SlateBlue
#property indicator_color2  clrSlateBlue
//---- ëèíèÿ èíäèêàòîðà 2 - íåïðåðûâíàÿ êðèâàÿ
#property indicator_style2  STYLE_SOLID
//---- òîëùèíà ëèíèè èíäèêàòîðà 2 ðàâíà 2
#property indicator_width2  2
//---- îòîáðàæåíèå ìåòêè èíäèêàòîðà
#property indicator_label2  "Stochastic"
//+--------------------------------------------------+
//| Ïàðàìåòðû îòîáðàæåíèÿ ãîðèçîíòàëüíûõ óðîâíåé     |
//+--------------------------------------------------+
#property indicator_level1  70
#property indicator_level2  50
#property indicator_level3  30
#property indicator_levelcolor clrMediumOrchid
#property indicator_levelstyle STYLE_DASHDOTDOT
//+--------------------------------------------------+
//| Âõîäíûå ïàðàìåòðû èíäèêàòîðà                     |
//+--------------------------------------------------+
input uint KPeriod=5;
input uint DPeriod=3;
input int Slowing=3;
input ENUM_MA_METHOD MA_Method=MODE_SMA;
input int StepSizeFast=5;                                 // Áûñòðûé øàã
input int StepSizeSlow=15;                                // Ìåäëåííûé øàã
input int Shift=0;                                        // Ñäâèã èíäèêàòîðà ïî ãîðèçîíòàëè â áàðàõ 
input ENUM_STO_PRICE Applied_price=STO_LOWHIGH;           // Òèï öåíû èëè handle
//+--------------------------------------------------+
//---- îáúÿâëåíèå äèíàìè÷åñêèõ ìàññèâîâ, êîòîðûå â äàëüíåéøåì
//---- áóäóò èñïîëüçîâàíû â êà÷åñòâå èíäèêàòîðíûõ áóôåðîâ
double Line1Buffer[];
double Line2Buffer[];
double Line3Buffer[];
//---- îáúÿâëåíèå öåëî÷èñëåííûõ ïåðåìåííûõ äëÿ õåíäëîâ èíäèêàòîðîâ
int Stochastic_Handle;
//---- îáúÿâëåíèå öåëî÷èñëåííûõ ïåðåìåííûõ íà÷àëà îòñ÷åòà äàííûõ
int min_rates_total;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+  
int OnInit()
  {
//---- èíèöèàëèçàöèÿ ïåðåìåííûõ íà÷àëà îòñ÷åòà äàííûõ
   min_rates_total=int(KPeriod+DPeriod+Slowing);
//---- ïîëó÷åíèå õåíäëà èíäèêàòîðà Stochastic
   Stochastic_Handle=iStochastic(NULL,0,KPeriod,DPeriod,Slowing,MA_Method,Applied_price);
   if(Stochastic_Handle==INVALID_HANDLE)
     {
      Print(" Íå óäàëîñü ïîëó÷èòü õåíäë èíäèêàòîðà Stochastic");
      return(INIT_FAILED);
     }
//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà Line1Buffer[] â èíäèêàòîðíûé áóôåð
   SetIndexBuffer(0,Line1Buffer,INDICATOR_DATA);
//---- îñóùåñòâëåíèå ñäâèãà èíäèêàòîðà 1 ïî ãîðèçîíòàëè íà Shift
   PlotIndexSetInteger(0,PLOT_SHIFT,Shift);
//---- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷åòà îòðèñîâêè èíäèêàòîðà 1 íà min_rates_total
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total);
//---- èíäåêñàöèÿ ýëåìåíòîâ â áóôåðàõ êàê â òàéìñåðèÿõ   
   ArraySetAsSeries(Line1Buffer,true);

//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà Line2Buffer[] â èíäèêàòîðíûé áóôåð
   SetIndexBuffer(1,Line2Buffer,INDICATOR_DATA);
//---- îñóùåñòâëåíèå ñäâèãà èíäèêàòîðà 2 ïî ãîðèçîíòàëè íà Shift
   PlotIndexSetInteger(1,PLOT_SHIFT,Shift);
//---- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷åòà îòðèñîâêè èíäèêàòîðà 2 íà min_rates_total
   PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,min_rates_total);
//---- èíäåêñàöèÿ ýëåìåíòîâ â áóôåðàõ êàê â òàéìñåðèÿõ   
   ArraySetAsSeries(Line2Buffer,true);

//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà Line3Buffer[] â èíäèêàòîðíûé áóôåð
   SetIndexBuffer(2,Line3Buffer,INDICATOR_DATA);
//---- îñóùåñòâëåíèå ñäâèãà èíäèêàòîðà 3 ïî ãîðèçîíòàëè íà Shift
   PlotIndexSetInteger(2,PLOT_SHIFT,Shift);
//---- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷åòà îòðèñîâêè èíäèêàòîðà 3 íà min_rates_total
   PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,min_rates_total);
//---- èíäåêñàöèÿ ýëåìåíòîâ â áóôåðàõ êàê â òàéìñåðèÿõ   
   ArraySetAsSeries(Line3Buffer,true);

//---- èíèöèàëèçàöèÿ ïåðåìåííîé äëÿ êîðîòêîãî èìåíè èíäèêàòîðà
   string shortname="METRO_Stochastic";
//--- ñîçäàíèå èìåíè äëÿ îòîáðàæåíèÿ â îòäåëüíîì ïîäîêíå è âî âñïëûâàþùåé ïîäñêàçêå
   IndicatorSetString(INDICATOR_SHORTNAME,shortname);
//--- îïðåäåëåíèå òî÷íîñòè îòîáðàæåíèÿ çíà÷åíèé èíäèêàòîðà
   IndicatorSetInteger(INDICATOR_DIGITS,0);
//---- çàâåðøåíèå èíèöèàëèçàöèè
   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[])
  {
//---- ïðîâåðêà êîëè÷åñòâà áàðîâ íà äîñòàòî÷íîñòü äëÿ ðàñ÷åòà
   if(BarsCalculated(Stochastic_Handle)<rates_total || rates_total<min_rates_total) return(0);
//---- îáúÿâëåíèå ëîêàëüíûõ ïåðåìåííûõ 
   int limit,to_copy,bar,ftrend,strend;
   double fmin0,fmax0,smin0,smax0,Stochastic0;
   static double fmax1,fmin1,smin1,smax1;
   static int ftrend_,strend_;
//---- ðàñ÷åò ñòàðòîâîãî íîìåðà first äëÿ öèêëà ïåðåñ÷åòà áàðîâ
   if(prev_calculated>rates_total || prev_calculated<=0) // ïðîâåðêà íà ïåðâûé ñòàðò ðàñ÷åòà èíäèêàòîðà
     {
      limit=rates_total-1; // ñòàðòîâûé íîìåð äëÿ ðàñ÷åòà âñåõ áàðîâ
      fmin1=+999999;
      fmax1=-999999;
      smin1=+999999;
      smax1=-999999;
      ftrend_=0;
      strend_=0;
     }
   else limit=rates_total-prev_calculated; // ñòàðòîâûé íîìåð äëÿ ðàñ÷åòà íîâûõ áàðîâ
//----
   to_copy=limit+1;
//---- êîïèðóåì âíîâü ïîÿâèâøèåñÿ äàííûå â ìàññèâ
   if(CopyBuffer(Stochastic_Handle,1,0,to_copy,Line3Buffer)<=0) return(0);
//---- âîññòàíàâëèâàåì çíà÷åíèÿ ïåðåìåííûõ
   ftrend = ftrend_;
   strend = strend_;
//---- îñíîâíîé öèêë ðàñ÷åòà èíäèêàòîðà
   for(bar=limit; bar>=0 && !IsStopped(); bar--)
     {
      //---- çàïîìèíàåì çíà÷åíèÿ ïåðåìåííûõ ïåðåä ïðîãîíàìè íà òåêóùåì áàðå
      if(rates_total!=prev_calculated && bar==0)
        {
         ftrend_=ftrend;
         strend_=strend;
        }
      //----
      Stochastic0=Line3Buffer[bar]=Line3Buffer[bar];
      //----
      fmax0=Stochastic0+2*StepSizeFast;
      fmin0=Stochastic0-2*StepSizeFast;
      //----
      if(Stochastic0>fmax1)  ftrend=+1;
      if(Stochastic0<fmin1)  ftrend=-1;
      //----
      if(ftrend>0 && fmin0<fmin1) fmin0=fmin1;
      if(ftrend<0 && fmax0>fmax1) fmax0=fmax1;
      //----
      smax0=Stochastic0+2*StepSizeSlow;
      smin0=Stochastic0-2*StepSizeSlow;
      //----
      if(Stochastic0>smax1)  strend=+1;
      if(Stochastic0<smin1)  strend=-1;
      //----
      if(strend>0 && smin0<smin1) smin0=smin1;
      if(strend<0 && smax0>smax1) smax0=smax1;
      //----
      if(ftrend>0) Line1Buffer[bar]=fmin0+StepSizeFast;
      if(ftrend<0) Line1Buffer[bar]=fmax0-StepSizeFast;
      if(strend>0) Line2Buffer[bar]=smin0+StepSizeSlow;
      if(strend<0) Line2Buffer[bar]=smax0-StepSizeSlow;
      //----
      if(bar>0)
        {
         fmin1=fmin0;
         fmax1=fmax0;
         smin1=smin0;
         smax1=smax0;
        }
     }
//----     
   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 ---