HLCrossSigForRSI

0 Views
0 Downloads
0 Favorites
HLCrossSigForRSI
//+------------------------------------------------------------------+

//|                                             HLCrossSigForRSI.mq5 |

//|                                  Copyright © 2008, Bigeev Rustem |

//|                                             http://www.parch.ru/ |

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

//---- 02B>@AB2> 8=48:0B>@0

#property copyright "Copyright © 2008, Bigeev Rustem"

//---- AAK;:0 =0 A09B 02B>@0

#property link      "http://www.parch.ru/"

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

#property version   "2.00"

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

#property indicator_chart_window 

//---- 4;O @0AGQB0 8 >B@8A>2:8 8=48:0B>@0 8A?>;L7>20=> H5ABL 1CD5@>2

#property indicator_buffers 8

//---- 8A?>;L7>20=> G5BK@5 3@0D8G5A:8E ?>AB@>5=8O

#property indicator_plots   8

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

//|  >1JO2;5=85 :>=AB0=B                         |

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

#define RESET 0 // >=AB0=B0 4;O 2>72@0B0 B5@<8=0;C :><0=4K =0 ?5@5AGQB 8=48:0B>@0

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

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

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

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

#property indicator_type1   DRAW_ARROW

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

#property indicator_color1  clrRed

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

#property indicator_width1  1

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

#property indicator_label1  "Sell Stop"

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

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

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

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

#property indicator_type2   DRAW_ARROW

//---- 2 :0G5AB25 F25B0 1KG59 ;8=88 8=48:0B>@0 8A?>;L7>20= 75;Q=K9 F25B

#property indicator_color2  clrLimeGreen

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

#property indicator_width2  1

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

#property indicator_label2 "Buy Stop"

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

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

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

//---- >B@8A>2:0 8=48:0B>@0 3 2 2845 A8<2>;0

#property indicator_type3 DRAW_ARROW

//---- 2 :0G5AB25 F25B0 <54256L59 ;8=88 8=48:0B>@0 8A?>;L7>20= @>7>2K9 F25B

#property indicator_color3 clrMagenta

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

#property indicator_width3  2

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

#property indicator_label3  "Sell TakeProfit"

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

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

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

//---- >B@8A>2:0 8=48:0B>@0 4 2 2845 A8<2>;0

#property indicator_type4 DRAW_ARROW

//---- 2 :0G5AB25 F25B0 1KG59 ;8=88 8=48:0B>@0 8A?>;L7>20= 3>;C1>9 F25B

#property indicator_color4 clrDeepSkyBlue

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

#property indicator_width4  2

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

#property indicator_label4 "Buy TakeProfit"

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

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

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

//---- >B@8A>2:0 8=48:0B>@0 5 2 2845 A8<2>;0

#property indicator_type5 DRAW_ARROW

//---- 2 :0G5AB25 F25B0 <54256L59 ;8=88 8=48:0B>@0 8A?>;L7>20= @>7>2K9  F25B

#property indicator_color5 clrMagenta 

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

#property indicator_width5  2

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

#property indicator_label5  "Sell Signal"

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

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

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

//---- >B@8A>2:0 8=48:0B>@0 6 2 2845 A8<2>;0

#property indicator_type6 DRAW_ARROW

//---- 2 :0G5AB25 F25B0 1KG59 ;8=88 8=48:0B>@0 8A?>;L7>20= 3>;C1>9 F25B

#property indicator_color6 clrDeepSkyBlue

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

#property indicator_width6  2

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

#property indicator_label6 "Buy Signal"

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

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

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

//---- >B@8A>2:0 8=48:0B>@0 7 2 2845 A8<2>;0

#property indicator_type7 DRAW_ARROW

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

#property indicator_color7 clrRed 

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

#property indicator_width7  3

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

#property indicator_label7  "Sell Input"

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

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

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

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

#property indicator_type8 DRAW_ARROW

//---- 2 :0G5AB25 F25B0 1KG59 ;8=88 8=48:0B>@0 8A?>;L7>20= 75;Q=K9 F25B

#property indicator_color8 clrLimeGreen

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

#property indicator_width8  3

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

#property indicator_label8 "Buy Input"

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

//| E>4=K5 ?0@0<5B@K 8=48:0B>@0                 |

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

input int Supr_Period=6;                       //5@8>4 ?@>18205<>3> 480?07>=0, G5< 1>;LH5 7=0G5=85, B5< 1>;55 ?>74=85 A83=0;K 8 @565

input int MA_Period=21;                        //5@8>4 4;O Heiken Ashi variable. !;C68B 2 :0G5AB25 4>?. D8;LB@0

input int Risk=0;                              //0:A8<0;L=K9 @8A: 2 ?8?A0E 4;O @0AG5B0 C@>2=O 2E>40 8AE>4O 87 C@>2=O 1;8609H53> MAX/MIN

input int ATR_Period=120;                      //5@8>4 "R. !;C68B 4;O @0AG5B0 C@>2=O 2>;0B8;L=>AB8.

input double Q=0.7;                            //0@0<5B@ 4;O ?>AB0=>2:8 "59:0. - >;O >B @07<5@0 !B>?0. 5A;8 =1, "59: = !B>?C

input int RSI_Period=12;                       //5@8>4 RSI. !;C68B 2 :0G5AB25 4>?. D8;LB@0

input ENUM_APPLIED_PRICE RSIPrice=PRICE_CLOSE; //F5=0  RSI

input int HLine=60;                            //5@E=OO A83=0;L=0O ;8=8O AB>?>2 4;O RSI

input int LLine=40;                            //86=OO A83=0;L=0O ;8=8O AB>?>2 4;O RSI

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

//---- >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 Sell[];

double Buy[];

double SellStop[];

double BuyStop[];

double SellTake[];

double BuyTake[];

double SellInput[];

double BuyInput[];

//----

double PointRisk,PointRisk10;

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

int min_rates_total;

//---- >1JO2;5=85 ?5@5<5==KE 4;O E@0=5=8O E5=4;>2 8=48:0B>@>2

int RSI_Handle,ATR_Handle,MA_Handle,MA1_Handle;

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

//| Custom indicator initialization function                         |

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

void OnInit()

  {

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

   min_rates_total=int(MathMax(MA_Period,MathMax(RSI_Period,MathMax(ATR_Period,Supr_Period+1))));



//---- =8F80;870F8O ?5@5<5==KE  

   PointRisk=Risk*_Point;

   PointRisk10=10*PointRisk;



//---- ?>;CG5=85 E5=4;0 8=48:0B>@0 MA

   MA_Handle=iMA(NULL,0,MA_Period,0,MODE_SMA,PRICE_MEDIAN);

   if(MA_Handle==INVALID_HANDLE) Print(" 5 C40;>AL ?>;CG8BL E5=4; 8=48:0B>@0 MA");



//---- ?>;CG5=85 E5=4;0 8=48:0B>@0 MA1

   MA1_Handle=iMA(NULL,0,1,0,MODE_SMA,PRICE_MEDIAN);

   if(MA1_Handle==INVALID_HANDLE) Print(" 5 C40;>AL ?>;CG8BL E5=4; 8=48:0B>@0 MA1");



//---- ?>;CG5=85 E5=4;0 8=48:0B>@0 RSI

   RSI_Handle=iRSI(NULL,0,RSI_Period,RSIPrice);

   if(RSI_Handle==INVALID_HANDLE) Print(" 5 C40;>AL ?>;CG8BL E5=4; 8=48:0B>@0 RSI");



//---- >;CG5=85 E5=4;0 8=48:0B>@0

   ATR_Handle=iATR(NULL,0,ATR_Period);

   if(ATR_Handle==INVALID_HANDLE) Print(" 5 C40;>AL ?>;CG8BL E5=4; 8=48:0B>@0 ATR");



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

   SetIndexBuffer(0,SellStop,INDICATOR_DATA);

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

   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total);

//---- A8<2>; 4;O 8=48:0B>@0

   PlotIndexSetInteger(0,PLOT_ARROW,119);

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

   ArraySetAsSeries(SellStop,true);



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

   SetIndexBuffer(1,BuyStop,INDICATOR_DATA);

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

   PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,min_rates_total);

//---- A8<2>; 4;O 8=48:0B>@0

   PlotIndexSetInteger(1,PLOT_ARROW,119);

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

   ArraySetAsSeries(BuyStop,true);



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

   SetIndexBuffer(2,SellTake,INDICATOR_DATA);

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

   PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,min_rates_total);

//---- A8<2>; 4;O 8=48:0B>@0

   PlotIndexSetInteger(2,PLOT_ARROW,158);

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

   ArraySetAsSeries(SellTake,true);



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

   SetIndexBuffer(3,BuyTake,INDICATOR_DATA);

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

   PlotIndexSetInteger(3,PLOT_DRAW_BEGIN,min_rates_total);

//---- A8<2>; 4;O 8=48:0B>@0

   PlotIndexSetInteger(3,PLOT_ARROW,158);

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

   ArraySetAsSeries(BuyTake,true);



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

   SetIndexBuffer(4,Sell,INDICATOR_DATA);

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

   PlotIndexSetInteger(4,PLOT_DRAW_BEGIN,min_rates_total);

//---- A8<2>; 4;O 8=48:0B>@0

   PlotIndexSetInteger(4,PLOT_ARROW,234);

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

   ArraySetAsSeries(Sell,true);



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

   SetIndexBuffer(5,Buy,INDICATOR_DATA);

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

   PlotIndexSetInteger(5,PLOT_DRAW_BEGIN,min_rates_total);

//---- A8<2>; 4;O 8=48:0B>@0

   PlotIndexSetInteger(5,PLOT_ARROW,233);

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

   ArraySetAsSeries(Buy,true);



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

   SetIndexBuffer(6,SellInput,INDICATOR_DATA);

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

   PlotIndexSetInteger(6,PLOT_DRAW_BEGIN,min_rates_total);

//---- A8<2>; 4;O 8=48:0B>@0

   PlotIndexSetInteger(6,PLOT_ARROW,177);

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

   ArraySetAsSeries(SellInput,true);



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

   SetIndexBuffer(7,BuyInput,INDICATOR_DATA);

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

   PlotIndexSetInteger(7,PLOT_DRAW_BEGIN,min_rates_total);

//---- A8<2>; 4;O 8=48:0B>@0

   PlotIndexSetInteger(7,PLOT_ARROW,177);

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

   ArraySetAsSeries(BuyInput,true);



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

//--- 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,"HL Cross Signal for RSI");

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

   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);

//----

  }

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

//| Custom indicator 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[],     // F5=>2>9 <0AA82 <0:A8<C<>2 F5=K 4;O @0AGQB0 8=48:0B>@0

                const double& low[],      // F5=>2>9 <0AA82 <8=8<C<>2  F5=K 4;O @0AGQB0 8=48:0B>@0

                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(BarsCalculated(MA_Handle)<rates_total

      || BarsCalculated(MA1_Handle)<rates_total

      || BarsCalculated(ATR_Handle)<rates_total

      || BarsCalculated(RSI_Handle)<rates_total

      || rates_total<min_rates_total)

      return(RESET);



//---- >1JO2;5=8O ;>:0;L=KE ?5@5<5==KE 

   int limit,bar,Flag;

   double RSI[1],ATR[1],MA[1],MA1[1];

   double Lhigh,Llow,Spread;

   static int Flag_;



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

   ArraySetAsSeries(high,true);

   ArraySetAsSeries(low,true);

   ArraySetAsSeries(close,true);

   ArraySetAsSeries(spread,true);



//---- @0AGQB AB0@B>2>3> =><5@0 limit 4;O F8:;0 ?5@5AGQB0 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;  // AB0@B>2K9 =><5@ 4;O @0AGQB0 2A5E 10@>2

      Flag_=0;

     }

   else limit=rates_total-prev_calculated; // AB0@B>2K9 =><5@ 4;O @0AGQB0 =>2KE 10@>2



//---- 2>AAB0=02;8205< 7=0G5=8O ?5@5<5==KE

   Flag=Flag_;



//---- >A=>2=>9 F8:; @0AGQB0 8=48:0B>@0

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

     {

      //---- 70?><8=05< 7=0G5=8O ?5@5<5==KE ?5@54 ?@>3>=0<8 =0 B5:CI5< 10@5

      if(rates_total!=prev_calculated && bar==0)

         Flag_=Flag;



      Sell[bar]=SellTake[bar]=SellStop[bar]=SellInput[bar]=NULL;

      Buy[bar]=BuyTake[bar]=BuyStop[bar]=BuyInput[bar]=NULL;

      

      Spread=spread[bar]*_Point;



      //---- :>?8@C5< 2=>2L ?>O282H85AO 40==K5 2 <0AA82K

      if(CopyBuffer(MA_Handle,0,bar,1,MA)<=0) return(RESET);

      if(CopyBuffer(MA1_Handle,0,bar,1,MA1)<=0) return(RESET);

      if(CopyBuffer(RSI_Handle,0,bar,1,RSI)<=0) return(RESET);

      if(CopyBuffer(ATR_Handle,0,bar,1,ATR)<=0) return(RESET);

      Lhigh=high[ArrayMaximum(high,bar+1,Supr_Period)];

      Llow=low[ArrayMinimum(low,bar+1,Supr_Period)];



      // #A;>285 A83=0;0 =0 ?>:C?:C

      if(Flag<=0)

         if((high[bar]>=Lhigh && close[bar]>MA1[0] && close[bar]>MA[0] && high[bar]>MA[0] && RSI[0]>=HLine)

           ||(close[bar]>=SellStop[bar+1] && high[bar]>Lhigh))

           {

            Buy[bar]=MathMin(close[bar],(Llow+2*ATR[0]));

            if(Risk!=0 && Buy[bar]-Llow>PointRisk) Buy[bar]=Llow+PointRisk10;

            if(close[bar]<Llow+PointRisk10) Buy[bar]=close[bar];

            Flag=+1;

           }



      



      // #A;>285 A83=0;0 =0 ?@>406C

      if(Flag>=0)

         if((low[bar]<=Llow && close[bar]<MA1[0] && close[bar]<MA[0] && low[bar]<MA[0] && RSI[0]<=LLine)

           ||(close[bar]<=BuyStop[bar+1] && low[bar]<Llow))

           {

            Sell[bar]=MathMax(close[bar],(Lhigh-2*ATR[0]));

            if(Risk!=0 && Lhigh-Sell[bar]>PointRisk) Sell[bar]=Lhigh-PointRisk10;

            if(close[bar]>Lhigh-PointRisk10) Sell[bar]=close[bar];

            Flag=-1;

           }

           

      if(Flag>0)

        {

         BuyStop[bar]=Llow-Spread*2;

         BuyTake[bar]=Lhigh+Spread*3;

         

         if(BuyStop[bar]<BuyStop[bar+1]&&!SellStop[bar+1]) BuyStop[bar]=BuyStop[bar+1];

         if(BuyTake[bar]<BuyTake[bar+1]&&!SellTake[bar+1]) BuyTake[bar]=BuyTake[bar+1];

        }



      if(Flag<0)

        {

         SellStop[bar]=Lhigh+Spread*3;

         SellTake[bar]=Llow-Spread*2;

         

         if(SellStop[bar]>SellStop[bar+1]&&!BuyStop[bar+1]) SellStop[bar]=SellStop[bar+1];

         if(SellTake[bar]>SellTake[bar+1]&&!BuyTake[bar+1]) SellTake[bar]=SellTake[bar+1];

        }

        

      if(Buy[bar]) BuyInput[bar]=Buy[bar]+(Buy[bar]-BuyStop[bar])*Q; 

      if(Sell[bar]) SellInput[bar]=Sell[bar]-(SellStop[bar]-Sell[bar])*Q+Spread;



     }

//----     

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