LinearRegressionChannel_Cloud

Author: Copyright © 2008, dimicr
Miscellaneous
It issuies visual alerts to the screen
2 Views
0 Downloads
0 Favorites
LinearRegressionChannel_Cloud
ÿþ//+------------------------------------------------------------------+

//|                                LinearRegressionChannel_Cloud.mq5 | 

//|                                         Copyright © 2008, dimicr | 

//|                                         http://www.signalsbg.com |

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

#property copyright "Copyright © 2008, dimicr"

#property link "http://www.signalsbg.com"

#property description "0=0; ;8=59=>9 @53@5AA88 A A>E@0=5=85< A2>8E 7=0G5=89 2 8=48:0B>@=KE 1CD5@0E 8 A F25B=K< D>=>2K< 70?>;=5=85< :0=0;0"

//---- =><5@ 25@A88 8=48:0B>@0

#property version   "1.00"

//---- >B@8A>2:0 8=48:0B>@0 2 3;02=>< >:=5

#property indicator_chart_window 

//---- :>;8G5AB2> 8=48:0B>@=KE 1CD5@>2 7

#property indicator_buffers 7 

//---- 8A?>;L7>20=> 2A53> 5 3@0D8G5A:8E ?>AB@>5=89

#property indicator_plots   5

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

//| 0@0<5B@K >B@8A>2:8 25@E=53> >1;0:0          |

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

//---- >B@8A>2:0 8=48:0B>@0 2 2845 >1;0:0

#property indicator_type1   DRAW_FILLING

//---- 2 :0G5AB25 F25B0 ;8=88 8=48:0B>@0 8A?>;L7>20= F25B PaleGreen

#property indicator_color1 clrPaleGreen

//---- >B>1@065=85 <5B:8 8=48:0B>@0

#property indicator_label1  "LinearRegressionChannel_Cloud Upper"

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

//| 0@0<5B@K >B@8A>2:8 =86=53> >1;0:0           |

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

//---- >B@8A>2:0 8=48:0B>@0 2 2845 >1;0:0

#property indicator_type2   DRAW_FILLING

//---- 2 :0G5AB25 F25B0 ;8=88 8=48:0B>@0 8A?>;L7>20= F25B Pink

#property indicator_color2 clrPink

//---- >B>1@065=85 <5B:8 8=48:0B>@0

#property indicator_label2  "LinearRegressionChannel_Cloud Lower"

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

//|  0@0<5B@K >B@8A>2:8 8=48:0B>@0              |

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

//---- >B@8A>2:0 8=48:0B>@0 2 2845 ;8=88

#property indicator_type3   DRAW_LINE

//---- 2 :0G5AB25 F25B0 ;8=88 8=48:0B>@0 8A?>;L7>20= A8=5-D8>;5B>2K9 F25B

#property indicator_color3 clrBlueViolet

//---- ;8=8O 8=48:0B>@0 - HB@8E?C=:B8@=0O :@820O

#property indicator_style3  STYLE_DASHDOTDOT

//---- B>;I8=0 ;8=88 8=48:0B>@0 @02=0 1

#property indicator_width3  1

//---- >B>1@065=85 <5B:8 8=48:0B>@0

#property indicator_label3  "LinearRegression Line"

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

//|  0@0<5B@K >B@8A>2:8 8=48:0B>@0 C@>2=59      |

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

//---- >B@8A>2:0 C@>2=59 2 2845 ;8=89

#property indicator_type4   DRAW_LINE

#property indicator_type5   DRAW_LINE

//---- 2K1>@ F25B>2 ;8=89

#property indicator_color4  clrTeal

#property indicator_color5  clrRed

//---- ;8=88- HB@8E?C=:B8@=K5 :@82K5

#property indicator_style4 STYLE_DASHDOTDOT

#property indicator_style5 STYLE_DASHDOTDOT

//---- B>;I8=0 ;8=89 @02=0 1

#property indicator_width4  1

#property indicator_width5  1

//---- >B>1@065=85 <5B>: ;8=89

#property indicator_label4  "LinearRegression Resistance"

#property indicator_label5  "LinearRegression Support"

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

//|  >1JO2;5=85 ?5@5G8A;5=8O                     |

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

enum ENUM_USER_PRICE

  {

   MODE_CLOSE_,    //A?>;L7C5< close

   MODE_HIGH_LOW  //A?>;L7C5< high 8 low

  };

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

//|  %+  " + "                 |

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

input ENUM_USER_PRICE UserPrice=MODE_CLOSE_; //0@80=B F5=

input uint  barsToCount=100;  //>;8G5AB2> 10@>2 4;O @0AGQB0

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

//---- >1JO2;5=85 48=0<8G5A:8E <0AA82>2, :>B>@K5 1C4CB 2 40;L=59H5< 8A?>;L7>20=K 2 :0G5AB25 8=48:0B>@=KE 1CD5@>2

double LineBuffer[],ResBuffer[],SupBuffer[];

double UpUpBuffer[],UpDnBuffer[],DnUpBuffer[],DnDnBuffer[];

//---- 1JO2;5=85 F5;KE ?5@5<5==KE =0G0;0 >BAGQB0 40==KE

int min_rates_total;

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

//| LinearRegression indicator initialization function               | 

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

void OnInit()

  {

//---- =8F80;870F8O ?5@5<5==KE =0G0;0 >BAGQB0 40==KE

   min_rates_total=int(barsToCount);



//---- ?@52@0I5=85 48=0<8G5A:>3> <0AA820 2 8=48:0B>@=K9 1CD5@

   SetIndexBuffer(0,UpUpBuffer,INDICATOR_DATA);

//---- >ACI5AB2;5=85 A42830 =0G0;0 >BAGQB0 >B@8A>2:8 8=48:0B>@0

   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total);

//---- CAB0=>2:0 7=0G5=89 8=48:0B>@0, :>B>@K5 =5 1C4CB 2848<K =0 3@0D8:5

   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);

//---- 8=45:A0F8O M;5<5=B>2 2 1CD5@5 :0: 2 B09<A5@88

   ArraySetAsSeries(UpUpBuffer,true);



//---- ?@52@0I5=85 48=0<8G5A:>3> <0AA820 2 8=48:0B>@=K9 1CD5@

   SetIndexBuffer(1,UpDnBuffer,INDICATOR_DATA);

//---- 8=45:A0F8O M;5<5=B>2 2 1CD5@5 :0: 2 B09<A5@88

   ArraySetAsSeries(UpDnBuffer,true);



//---- ?@52@0I5=85 48=0<8G5A:>3> <0AA820 2 8=48:0B>@=K9 1CD5@

   SetIndexBuffer(2,DnUpBuffer,INDICATOR_DATA);

//---- >ACI5AB2;5=85 A42830 =0G0;0 >BAGQB0 >B@8A>2:8 8=48:0B>@0

   PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,min_rates_total);

//---- CAB0=>2:0 7=0G5=89 8=48:0B>@0, :>B>@K5 =5 1C4CB 2848<K =0 3@0D8:5

   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0);

//---- 8=45:A0F8O M;5<5=B>2 2 1CD5@5 :0: 2 B09<A5@88

   ArraySetAsSeries(DnUpBuffer,true);



//---- ?@52@0I5=85 48=0<8G5A:>3> <0AA820 2 8=48:0B>@=K9 1CD5@

   SetIndexBuffer(3,DnDnBuffer,INDICATOR_DATA);

//---- 8=45:A0F8O M;5<5=B>2 2 1CD5@5 :0: 2 B09<A5@88

   ArraySetAsSeries(DnDnBuffer,true);



//---- ?@52@0I5=85 48=0<8G5A:>3> <0AA820 2 8=48:0B>@=K9 1CD5@

   SetIndexBuffer(4,LineBuffer,INDICATOR_DATA);

//---- >ACI5AB2;5=85 A42830 =0G0;0 >BAGQB0 >B@8A>2:8 8=48:0B>@0

   PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,min_rates_total);

//---- CAB0=>2:0 7=0G5=89 8=48:0B>@0, :>B>@K5 =5 1C4CB 2848<K =0 3@0D8:5

   PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,0);

//---- 8=45:A0F8O M;5<5=B>2 2 1CD5@5 :0: 2 B09<A5@88

   ArraySetAsSeries(LineBuffer,true);



//---- ?@52@0I5=85 48=0<8G5A:8E <0AA82>2 2 8=48:0B>@=K5 1CD5@K

   SetIndexBuffer(5,ResBuffer,INDICATOR_DATA);

   SetIndexBuffer(6,SupBuffer,INDICATOR_DATA);

//---- CAB0=>2:0 ?>78F88, A :>B>@>9 =0G8=05BAO >B@8A>2:0 C@>2=59 >;;8=465@0

   PlotIndexSetInteger(3,PLOT_DRAW_BEGIN,min_rates_total);

   PlotIndexSetInteger(4,PLOT_DRAW_BEGIN,min_rates_total);

//---- 70?@5B =0 >B@8A>2:C 8=48:0B>@>< ?CABKE 7=0G5=89

   PlotIndexSetDouble(3,PLOT_EMPTY_VALUE,0);

   PlotIndexSetDouble(4,PLOT_EMPTY_VALUE,0);

//---- 8=45:A0F8O M;5<5=B>2 2 1CD5@5 :0: 2 B09<A5@88

   ArraySetAsSeries(ResBuffer,true);

   ArraySetAsSeries(SupBuffer,true);



//---- 8=8F80;870F88 ?5@5<5==>9 4;O :>@>B:>3> 8<5=8 8=48:0B>@0

   string shortname;

   StringConcatenate(shortname,"LinearRegression(",EnumToString(UserPrice),", ",barsToCount,")");

//--- A>740=85 8<5=8 4;O >B>1@065=8O 2 >B45;L=>< ?>4>:=5 8 2> 2A?;K20NI59 ?>4A:07:5

   IndicatorSetString(INDICATOR_SHORTNAME,shortname);



//--- >?@545;5=85 B>G=>AB8 >B>1@065=8O 7=0G5=89 8=48:0B>@0

   IndicatorSetInteger(INDICATOR_DIGITS,_Digits+1);

//---- 7025@H5=85 8=8F80;870F88

  }

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

//| LinearRegression iteration function                              | 

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

int OnCalculate(

                const int rates_total,    // :>;8G5AB2> 8AB>@88 2 10@0E =0 B5:CI5< B8:5

                const int prev_calculated,// :>;8G5AB2> 8AB>@88 2 10@0E =0 ?@54K4CI5< B8:5

                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 :>;8G5AB20 10@>2 =0 4>AB0B>G=>ABL 4;O @0AGQB0

   if(rates_total<min_rates_total) return(0);



//---- 8=45:A0F8O M;5<5=B>2 2 <0AA820E :0: 2 B09<A5@8OE  

   ArraySetAsSeries(high,true);

   ArraySetAsSeries(low,true);

   ArraySetAsSeries(close,true);



//---- >ACI5AB2;5=85 A42830 =0G0;0 >BAGQB0 >B@8A>2:8 8=48:0B>@0

   int DRAW_BEGIN=rates_total-min_rates_total+1;

   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,DRAW_BEGIN);

   PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,DRAW_BEGIN);

   PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,DRAW_BEGIN);

   PlotIndexSetInteger(3,PLOT_DRAW_BEGIN,DRAW_BEGIN);

   PlotIndexSetInteger(4,PLOT_DRAW_BEGIN,DRAW_BEGIN);



//---- 1JO2;5=85 ?5@5<5==KE A ?;020NI59 B>G:>9  

   double a,b,c,res,

   sumy=0.0,

   sumx=0.0,

   sumxy=0.0,

   sumx2=0.0,

   h=0.0,l=0.0;



//---- 1JO2;5=85 F5;KE ?5@5<5==KE

   int bar,limit;



//---- @0AGQBK AB0@B>2>3> =><5@0 limit 4;O F8:;0 AB8@0=8O 10@>2

   if(prev_calculated>rates_total || prev_calculated<=0)// ?@>25@:0 =0 ?5@2K9 AB0@B @0AGQB0 8=48:0B>@0

     {

      limit=rates_total-min_rates_total-1;

     }

   else limit=rates_total-prev_calculated;



//---- AB8@05< C65 =5=C6=K5 40==K5

   for(bar=limit+min_rates_total; bar>min_rates_total && !IsStopped(); bar--)

     {

      LineBuffer[bar]=NULL;

      SupBuffer[bar]=NULL;

      ResBuffer[bar]=NULL;



      UpUpBuffer[bar]=NULL;

      UpDnBuffer[bar]=NULL;

      DnUpBuffer[bar]=NULL;

      DnDnBuffer[bar]=NULL;

     }



   for(bar=0; bar<min_rates_total; bar++)

     {

      sumy+=close[bar];

      sumxy+=close[bar]*bar;

      sumx+=bar;

      sumx2+=bar*bar;

     }

//----

   c=sumx2*barsToCount-sumx*sumx;



   if(!c)

     {

      Alert("Error in linear regression!");

      return(0);

     }



//---- Line equation    

   b=(sumxy*barsToCount-sumx*sumy)/c;

   a=(sumy-sumx*b)/barsToCount;



//---- Linear regression line in buffer

   for(bar=0; bar<min_rates_total; bar++) LineBuffer[bar]=UpDnBuffer[bar]=DnUpBuffer[bar]=a+b*bar;



//---- Use PRICE_CLOSE for support-resistance

   if(UserPrice==MODE_CLOSE_)

      for(bar=0; bar<min_rates_total; bar++)

        {

         h=MathMax(h,close[bar]-LineBuffer[bar]);

         l=MathMax(l,LineBuffer[bar]-close[bar]);

        }

//---- Use HIGH - LOW

   else

   for(bar=0; bar<min_rates_total; bar++)

     {

      h=MathMax(h,high[bar]-LineBuffer[bar]);

      l=MathMax(l,LineBuffer[bar]-low[bar]);

     }



//----  Drawing support - resistance lines   

   if(h>l) res=h;

   else res=l;



   for(bar=0; bar<min_rates_total; bar++)

     {

      SupBuffer[bar]=DnDnBuffer[bar]=a-res+b*bar;

      ResBuffer[bar]=UpUpBuffer[bar]=a+res+b*bar;

     }

//----     

   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 ---