colorhma_stdev

Author: 2010, Nikolay Kositsin
2 Views
0 Downloads
0 Favorites
colorhma_stdev
//+---------------------------------------------------------------------+
//|                                                  ColorHMA_StDev.mq5 |
//|                                  Copyright © 2010, Nikolay Kositsin |
//|                                 Khabarovsk,   farria@mail.redcom.ru | 
//+---------------------------------------------------------------------+ 
//| Äëÿ ðàáîòû  èíäèêàòîðà  ñëåäóåò  ïîëîæèòü ôàéë SmoothAlgorithms.mqh |
//| â ïàïêó (äèðåêòîðèþ): êàòàëîã_äàííûõ_òåðìèíàëà\\MQL5\Include        |
//+---------------------------------------------------------------------+
#property copyright "2010,   Nikolay Kositsin"
#property link      "farria@mail.redcom.ru"
#property version   "1.00"
//---- îòðèñîâêà èíäèêàòîðà â îñíîâíîì îêíå
#property indicator_chart_window
//---- äëÿ ðàñ÷åòà è îòðèñîâêè èíäèêàòîðà èñïîëüçîâàíî øåñòü áóôåðîâ
#property indicator_buffers 6
//---- èñïîëüçîâàíî âñåãî ïÿòü ãðàôè÷åñêèõ ïîñòðîåíèé
#property indicator_plots   5
//+----------------------------------------------+
//|  Ïàðàìåòðû îòðèñîâêè ëèíèè  èíäèêàòîðà       |
//+----------------------------------------------+
//---- îòðèñîâêà èíäèêàòîðà â âèäå ëèíèè
#property indicator_type1   DRAW_COLOR_LINE
//---- â êà÷åñòâå öâåòîâ òðåõöâåòíîé ëèíèè èñïîëüçîâàíû
#property indicator_color1  clrGray,clrMediumPurple,clrRed
//---- ëèíèÿ èíäèêàòîðà - íåïðåðûâíàÿ êðèâàÿ
#property indicator_style1  STYLE_SOLID
//---- òîëùèíà ëèíèè èíäèêàòîðà ðàâíà 1
#property indicator_width1  2
//+----------------------------------------------+
//|  Ïàðàìåòðû îòðèñîâêè ìåäâåæüåãî èíäèêàòîðà   |
//+----------------------------------------------+
//---- îòðèñîâêà èíäèêàòîðà 2 â âèäå ñèìâîëà
#property indicator_type2   DRAW_ARROW
//---- â êà÷åñòâå öâåòà ìåäâåæüåãî èíäèêàòîðà èñïîëüçîâàí ðîçîâûé öâåò
#property indicator_color2  clrMagenta
//---- òîëùèíà ëèíèè èíäèêàòîðà 2 ðàâíà 2
#property indicator_width2  2
//---- îòîáðàæåíèå ìåäâåæüåé ìåòêè èíäèêàòîðà
#property indicator_label2  "Dn_Signal 1"
//+----------------------------------------------+
//|  Ïàðàìåòðû îòðèñîâêè áû÷üåãî èíäèêàòîðà      |
//+----------------------------------------------+
//---- îòðèñîâêà èíäèêàòîðà 3 â âèäå ñèìâîëà
#property indicator_type3   DRAW_ARROW
//---- â êà÷åñòâå öâåòà áû÷üåãî èíäèêàòîðà èñïîëüçîâàí ñèíèé öâåò
#property indicator_color3  clrBlue
//---- òîëùèíà ëèíèè èíäèêàòîðà 3 ðàâíà 2
#property indicator_width3  2
//---- îòîáðàæåíèå áû÷üåé ìåòêè èíäèêàòîðà
#property indicator_label3  "Up_Signal 1"
//+----------------------------------------------+
//|  Ïàðàìåòðû îòðèñîâêè ìåäâåæüåãî èíäèêàòîðà   |
//+----------------------------------------------+
//---- îòðèñîâêà èíäèêàòîðà 4 â âèäå ñèìâîëà
#property indicator_type4   DRAW_ARROW
//---- â êà÷åñòâå öâåòà ìåäâåæüåãî èíäèêàòîðà èñïîëüçîâàí ðîçîâûé öâåò
#property indicator_color4  clrMagenta
//---- òîëùèíà ëèíèè èíäèêàòîðà 4 ðàâíà 4
#property indicator_width4  4
//---- îòîáðàæåíèå ìåäâåæüåé ìåòêè èíäèêàòîðà
#property indicator_label4  "Dn_Signal 2"
//+----------------------------------------------+
//|  Ïàðàìåòðû îòðèñîâêè áû÷üåãî èíäèêàòîðà      |
//+----------------------------------------------+
//---- îòðèñîâêà èíäèêàòîðà 5 â âèäå ñèìâîëà
#property indicator_type5   DRAW_ARROW
//---- â êà÷åñòâå öâåòà áû÷üåãî èíäèêàòîðà èñïîëüçîâàí ñèíèé öâåò
#property indicator_color5  clrBlue
//---- òîëùèíà ëèíèè èíäèêàòîðà 5 ðàâíà 4
#property indicator_width5  4
//---- îòîáðàæåíèå áû÷üåé ìåòêè èíäèêàòîðà
#property indicator_label5  "Up_Signal 2"
//+-----------------------------------+
//|  Âõîäíûå ïàðàìåòðû èíäèêàòîðà     |
//+-----------------------------------+
input uint HMA_Period=13; // Ïåðèîä ìóâèíãà
input double dK1=1.5;  //Êîýôôèöèåíò 1 äëÿ êâàäðàòè÷íîãî ôèëüòðà
input double dK2=2.5;  //Êîýôôèöèåíò 2 äëÿ êâàäðàòè÷íîãî ôèëüòðà
input uint std_period=9; //Ïåðèîä êâàäðàòè÷íîãî ôèëüòðà
input int PriceShift=0; // Ñäâèã Ôàòëà ïî âåðòèêàëè â ïóíêòàõ
input int Shift=0; // Ñäâèã ìóâèíãà ïî ãîðèçîíòàëè â áàðàõ
//+-----------------------------------+
//---- îáúÿâëåíèå äèíàìè÷åñêèõ ìàññèâîâ, êîòîðûå áóäóò â 
// äàëüíåéøåì èñïîëüçîâàíû â êà÷åñòâå èíäèêàòîðíûõ áóôåðîâ
double ExtLineBuffer[],ColorExtLineBuffer[];
double BearsBuffer1[],BullsBuffer1[];
double BearsBuffer2[],BullsBuffer2[];
//---- Îáúÿâëåíèå öåëî÷èñëåííûõ ïåðåìåííûõ
int Hma2_Period,Sqrt_Period;
//---- Îáúÿâëåíèå öåëî÷èñëåííûõ ïåðåìåííûõ íà÷àëà îòñ÷åòà äàííûõ
int min_rates_total,min_rates;
double dPriceShift,dHMA[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
//----  
   Hma2_Period=int(MathFloor(HMA_Period/2));
   Sqrt_Period=int(MathFloor(MathSqrt(HMA_Period)));
//---- Èíèöèàëèçàöèÿ ñäâèãà ïî âåðòèêàëè
   dPriceShift=_Point*PriceShift;

//---- Èíèöèàëèçàöèÿ ïåðåìåííûõ íà÷àëà îòñ÷åòà äàííûõ
   min_rates=int(HMA_Period)+Sqrt_Period;
   min_rates_total=min_rates+int(std_period);
//---- Ðàñïðåäåëåíèå ïàìÿòè ïîä ìàññèâû ïåðåìåííûõ  
   ArrayResize(dHMA,std_period);

//---- óñòàíîâêà çíà÷åíèé èíäèêàòîðà, êîòîðûå íå áóäóò âèäèìû íà ãðàôèêå
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà ExtLineBuffer â èíäèêàòîðíûé áóôåð
   SetIndexBuffer(0,ExtLineBuffer,INDICATOR_DATA);
//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â öâåòîâîé, èíäåêñíûé áóôåð   
   SetIndexBuffer(1,ColorExtLineBuffer,INDICATOR_COLOR_INDEX);
//---- îñóùåñòâëåíèå ñäâèãà ñêîëüçÿùåé ñðåäíåé ïî ãîðèçîíòàëè íà HMAShift
   PlotIndexSetInteger(0,PLOT_SHIFT,Shift);
//---- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷åòà îòðèñîâêè èíäèêàòîðà HMAPeriod
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total);

//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà BearsBuffer â èíäèêàòîðíûé áóôåð
   SetIndexBuffer(2,BearsBuffer1,INDICATOR_DATA);
//---- îñóùåñòâëåíèå ñäâèãà èíäèêàòîðà 2 ïî ãîðèçîíòàëè
   PlotIndexSetInteger(1,PLOT_SHIFT,Shift);
//---- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷åòà îòðèñîâêè èíäèêàòîðà
   PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,min_rates_total);
//---- âûáîð ñèìâîëà äëÿ îòðèñîâêè
   PlotIndexSetInteger(1,PLOT_ARROW,159);
//---- çàïðåò íà îòðèñîâêó èíäèêàòîðîì ïóñòûõ çíà÷åíèé
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,EMPTY_VALUE);

//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà BullsBuffer â èíäèêàòîðíûé áóôåð
   SetIndexBuffer(3,BullsBuffer1,INDICATOR_DATA);
//---- îñóùåñòâëåíèå ñäâèãà èíäèêàòîðà 3 ïî ãîðèçîíòàëè
   PlotIndexSetInteger(2,PLOT_SHIFT,Shift);
//---- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷åòà îòðèñîâêè èíäèêàòîðà
   PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,min_rates_total);
//---- âûáîð ñèìâîëà äëÿ îòðèñîâêè
   PlotIndexSetInteger(2,PLOT_ARROW,159);
//---- çàïðåò íà îòðèñîâêó èíäèêàòîðîì ïóñòûõ çíà÷åíèé
   PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,EMPTY_VALUE);

//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà BearsBuffer â èíäèêàòîðíûé áóôåð
   SetIndexBuffer(4,BearsBuffer2,INDICATOR_DATA);
//---- îñóùåñòâëåíèå ñäâèãà èíäèêàòîðà 2 ïî ãîðèçîíòàëè
   PlotIndexSetInteger(3,PLOT_SHIFT,Shift);
//---- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷åòà îòðèñîâêè èíäèêàòîðà
   PlotIndexSetInteger(3,PLOT_DRAW_BEGIN,min_rates_total);
//---- âûáîð ñèìâîëà äëÿ îòðèñîâêè
   PlotIndexSetInteger(3,PLOT_ARROW,159);
//---- çàïðåò íà îòðèñîâêó èíäèêàòîðîì ïóñòûõ çíà÷åíèé
   PlotIndexSetDouble(3,PLOT_EMPTY_VALUE,EMPTY_VALUE);

//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà BullsBuffer â èíäèêàòîðíûé áóôåð
   SetIndexBuffer(5,BullsBuffer2,INDICATOR_DATA);
//---- îñóùåñòâëåíèå ñäâèãà èíäèêàòîðà 3 ïî ãîðèçîíòàëè
   PlotIndexSetInteger(4,PLOT_SHIFT,Shift);
//---- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷åòà îòðèñîâêè èíäèêàòîðà
   PlotIndexSetInteger(4,PLOT_DRAW_BEGIN,min_rates_total);
//---- âûáîð ñèìâîëà äëÿ îòðèñîâêè
   PlotIndexSetInteger(4,PLOT_ARROW,159);
//---- çàïðåò íà îòðèñîâêó èíäèêàòîðîì ïóñòûõ çíà÷åíèé
   PlotIndexSetDouble(4,PLOT_EMPTY_VALUE,EMPTY_VALUE);

//---- Óñòàíîâêà ôîðìàòà òî÷íîñòè îòîáðàæåíèÿ èíäèêàòîðà
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits+1);
//---- èìÿ äëÿ îêîí äàííûõ è ëýéáà äëÿ ñóáúîêîí 
   string short_name="ColorHMA_StDev";
   IndicatorSetString(INDICATOR_SHORTNAME,short_name+"("+string(HMA_Period)+")");
//----
  }
//+------------------------------------------------------------------+
//| Îïèñàíèå êëàññà CMoving_Average                                  |
//+------------------------------------------------------------------+  
#include <SmoothAlgorithms.mqh> 
//+------------------------------------------------------------------+ 
//|  Moving Average                                                  |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,// êîëè÷åñòâî èñòîðèè â áàðàõ íà òåêóùåì òèêå
                const int prev_calculated,// êîëè÷åñòâî èñòîðèè â áàðàõ íà ïðåäûäóùåì òèêå
                const int begin,// íîìåð íà÷àëà äîñòîâåðíîãî îòñ÷åòà áàðîâ
                const double &price[])// öåíîâîé ìàññèâ äëÿ ðàñ÷åòà èíäèêàòîðà
  {
   int begin0=min_rates_total+begin;
//---- ïðîâåðêà êîëè÷åñòâà áàðîâ íà äîñòàòî÷íîñòü äëÿ ðàñ÷åòà
   if(rates_total<begin0) return(0);
//---- îáúÿâëåíèÿ ëîêàëüíûõ ïåðåìåííûõ 
   int first,bar,begin1;
   double lwma1,lwma2,dma,hma;
   double SMAdif,Sum,StDev,dstd,BEARS1,BULLS1,BEARS2,BULLS2,Filter1,Filter2;
   begin1=int(HMA_Period)+begin;
//---- ðàñ÷åò ñòàðòîâîãî íîìåðà first äëÿ öèêëà ïåðåñ÷åòà áàðîâ
   if(prev_calculated==0) // ïðîâåðêà íà ïåðâûé ñòàðò ðàñ÷åòà èíäèêàòîðà
     {
      first=begin; // ñòàðòîâûé íîìåð äëÿ ðàñ÷åòà âñåõ áàðîâ      
      PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,begin0+1);
      PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,begin0+1);
      PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,begin0+1);
      PlotIndexSetInteger(3,PLOT_DRAW_BEGIN,begin0+1);
      PlotIndexSetInteger(4,PLOT_DRAW_BEGIN,begin0+1);
     }
   else first=prev_calculated-1; // ñòàðòîâûé íîìåð äëÿ ðàñ÷åòà íîâûõ áàðîâ
//---- îáúÿâëåíèå ïåðåìåííîé êëàññà CMoving_Average èç ôàéëà HMASeries_Cls.mqh
   static CMoving_Average MA1,MA2,MA3;
//---- îñíîâíîé öèêë ðàñ÷åòà èíäèêàòîðà
   for(bar=first; bar<rates_total && !IsStopped(); bar++)
     {
      lwma1=MA1.LWMASeries(begin,prev_calculated,rates_total,Hma2_Period,price[bar],bar,false);
      lwma2=MA2.LWMASeries(begin,prev_calculated,rates_total,HMA_Period, price[bar],bar,false);
      dma=2*lwma1-lwma2;
      ExtLineBuffer[bar]=MA3.LWMASeries(begin1,prev_calculated,rates_total,Sqrt_Period,dma,bar,false);
     }
//---- ïåðåñ÷åò ñòàðòîâîãî íîìåðà first äëÿ öèêëà ïåðåñ÷åòà áàðîâ
   if(prev_calculated>rates_total || prev_calculated<=0) // ïðîâåðêà íà ïåðâûé ñòàðò ðàñ÷åòà èíäèêàòîðà
      first=begin0;
//---- Îñíîâíîé öèêë ðàñêðàñêè ñèãíàëüíîé ëèíèè
   for(bar=first; bar<rates_total && !IsStopped(); bar++)
     {
      ColorExtLineBuffer[bar]=0;
      if(ExtLineBuffer[bar-1]<ExtLineBuffer[bar]) ColorExtLineBuffer[bar]=1;
      if(ExtLineBuffer[bar-1]>ExtLineBuffer[bar]) ColorExtLineBuffer[bar]=2;
     }
//---- ïåðåñ÷åò ñòàðòîâîãî íîìåðà first äëÿ öèêëà ïåðåñ÷åòà áàðîâ
   if(prev_calculated>rates_total || prev_calculated<=0) // ïðîâåðêà íà ïåðâûé ñòàðò ðàñ÷åòà èíäèêàòîðà
      first=begin0;
//---- îñíîâíîé öèêë ðàñ÷åòà èíäèêàòîðà ñòàíäàðòíûõ îòêëîíåíèé
   for(bar=first; bar<rates_total && !IsStopped(); bar++)
     {
      //---- çàãðóæàåì ïðèðàùåíèÿ èíäèêàòîðà â ìàññèâ äëÿ ïðîìåæóòî÷íûõ âû÷èñëåíèé
      for(int iii=0; iii<int(std_period); iii++) dHMA[iii]=ExtLineBuffer[bar-iii]-ExtLineBuffer[bar-iii-1];
      //---- íàõîäèì ïðîñòîå ñðåäíåå ïðèðàùåíèé èíäèêàòîðà
      Sum=0.0;
      for(int iii=0; iii<int(std_period); iii++) Sum+=dHMA[iii];
      SMAdif=Sum/std_period;
      //---- íàõîäèì ñóììó êâàäðàòîâ ðàçíîñòåé ïðèðàùåíèé è ñðåäíåãî
      Sum=0.0;
      for(int iii=0; iii<int(std_period); iii++) Sum+=MathPow(dHMA[iii]-SMAdif,2);
      //---- îïðåäåëÿåì èòîãîâîå çíà÷åíèå ñðåäíåêâàäðàòè÷íîãî îòêëîíåíèÿ StDev îò ïðèðàùåíèÿ èíäèêàòîðà
      StDev=MathSqrt(Sum/std_period);
      int dig=_Digits+2;
      //---- èíèöèàëèçàöèÿ ïåðåìåííûõ
      dstd=NormalizeDouble(dHMA[0],dig);
      Filter1=NormalizeDouble(dK1*StDev,dig);
      Filter2=NormalizeDouble(dK2*StDev,dig);
      BEARS1=EMPTY_VALUE;
      BULLS1=EMPTY_VALUE;
      BEARS2=EMPTY_VALUE;
      BULLS2=EMPTY_VALUE;
      hma=ExtLineBuffer[bar];
      //---- âû÷èñëåíèå èíäèêàòîðíûõ çíà÷åíèé
      if(dstd<-Filter1 && dstd>=-Filter2) BEARS1=hma; //åñòü íèñõîäÿùèé òðåíä
      if(dstd<-Filter2) BEARS2=hma; //åñòü íèñõîäÿùèé òðåíä
      if(dstd>+Filter1 && dstd<=+Filter2) BULLS1=hma; //åñòü âîñõîäÿùèé òðåíä
      if(dstd>+Filter2) BULLS2=hma; //åñòü âîñõîäÿùèé òðåíä
      //---- èíèöèàëèçàöèÿ ÿ÷ååê èíäèêàòîðíûõ áóôåðîâ ïîëó÷åííûìè çíà÷åíèÿìè 
      BullsBuffer1[bar]=BULLS1;
      BearsBuffer1[bar]=BEARS1;
      BullsBuffer2[bar]=BULLS2;
      BearsBuffer2[bar]=BEARS2;
     }
//----     
   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 ---