cm_ind_level_cndl

Author: Copyright © 2014, cmillion@narod.ru
0 Views
0 Downloads
0 Favorites
cm_ind_level_cndl
ÿþ//+------------------------------------------------------------------+

//|                                            cm_ind_level_cndl.mq5 |

//|                                Copyright 2014, cmillion@narod.ru |

//|                                               http://cmillion.ru |

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

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

#property copyright "Copyright © 2014, cmillion@narod.ru"

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

#property link      "http://cmillion.ru"

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

#property version   "1.00"

#property description "=48:0B>@ ?>:07K205B B>G:C @072>@>B0 F5=K"

//---- >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=> =>;L 1CD5@>2

#property indicator_buffers 0

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

#property indicator_plots   0

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

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

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

input string level_name="cm_ind_level_cndl"; //?5@20O G0ABL 8<5=8 3@0D8G5A:8E >1J5:B>2

input uint Candles=5;                        //A:>;L:> A25G59 70F5?8;0 F5=0

input uint History=50;                       //=0 :0:>< ?@><56CB:5 8I5<

input color buy_level_color=clrLime;         //F25B ?>:C?>:

input color sell_level_color=clrMagenta;     //F25B ?@>406

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

string UP,DN,UP1,DN1;

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

int min_rates_total;

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

//|  !>740=85 B@5=4>2>9 ;8=88                                        |

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

void CreateTline

(

 long     chart_id,      // 845=B8D8:0B>@ 3@0D8:0

 string   name,          // 8<O >1J5:B0

 int      nwin,          // 8=45:A >:=0

 datetime time1,         // 2@5<O 1 F5=>2>3> C@>2=O

 double   price1,        // 1 F5=>2>9 C@>25=L

 datetime time2,         // 2@5<O 2 F5=>2>3> C@>2=O

 double   price2,        // 2 F5=>2>9 C@>25=L

 color    Color,         // F25B ;8=88

 int      style,         // AB8;L ;8=88

 int      width,         // B>;I8=0 ;8=88

 string   text           // B5:AB

 )

//---- 

  {

//----

   ObjectCreate(chart_id,name,OBJ_TREND,nwin,time1,price1,time2,price2);

   ObjectSetInteger(chart_id,name,OBJPROP_COLOR,Color);

   ObjectSetInteger(chart_id,name,OBJPROP_STYLE,style);

   ObjectSetInteger(chart_id,name,OBJPROP_WIDTH,width);

   ObjectSetString(chart_id,name,OBJPROP_TEXT,text);

   ObjectSetInteger(chart_id,name,OBJPROP_BACK,false);

   ObjectSetInteger(chart_id,name,OBJPROP_RAY_RIGHT,false);

   ObjectSetInteger(chart_id,name,OBJPROP_RAY,false);

   ObjectSetInteger(chart_id,name,OBJPROP_SELECTED,true);

   ObjectSetInteger(chart_id,name,OBJPROP_SELECTABLE,true);

   ObjectSetInteger(chart_id,name,OBJPROP_ZORDER,true);

//----

  }

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

//|  5@5CAB0=>2:0 B@5=4>2>9 ;8=88                                   |

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

void SetTline

(

 long     chart_id,      // 845=B8D8:0B>@ 3@0D8:0

 string   name,          // 8<O >1J5:B0

 int      nwin,          // 8=45:A >:=0

 datetime time1,         // 2@5<O 1 F5=>2>3> C@>2=O

 double   price1,        // 1 F5=>2>9 C@>25=L

 datetime time2,         // 2@5<O 2 F5=>2>3> C@>2=O

 double   price2,        // 2 F5=>2>9 C@>25=L

 color    Color,         // F25B ;8=88

 int      style,         // AB8;L ;8=88

 int      width,         // B>;I8=0 ;8=88

 string   text           // B5:AB

 )

//---- 

  {

//----

   if(ObjectFind(chart_id,name)==-1) CreateTline(chart_id,name,nwin,time1,price1,time2,price2,Color,style,width,text);

   else

     {

      ObjectSetString(chart_id,name,OBJPROP_TEXT,text);

      ObjectMove(chart_id,name,0,time1,price1);

      ObjectMove(chart_id,name,1,time2,price2);

      ObjectSetInteger(chart_id,name,OBJPROP_COLOR,Color);

     }

//----

  }

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

//| Custom indicator initialization function                         |

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

void OnInit()

  {

//---- =8F80;870F8O AB@8=3>2KE 8<Q=  

    UP=DN=UP1=DN1=level_name;

    UP+="UP";

    DN+="DN";

    UP1+="UP1";

    DN1+="DN1";

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

    min_rates_total=int(History);

//----

  }

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

//| Custom indicator deinitialization function                       |

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

void OnDeinit(const int reason)

  {

//---- C40;O5< 2A5 3@0D8G5A:85 >1J5:BK, A>740==K5 8=48:0B>@><

   ObjectsDeleteAll(NULL,level_name,-1,OBJ_TREND); 

//----

   ChartRedraw(NULL);

  }

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

//| 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(rates_total<min_rates_total) return(0);



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

   ArraySetAsSeries(time,true);

   ArraySetAsSeries(open,true);

   ArraySetAsSeries(high,true);

   ArraySetAsSeries(low,true);

   ArraySetAsSeries(close,true);

//----

    for(int kkk=0,iii=int(History)-1; iii>=0; iii--)

     {

      double H=high[iii];

      double L=MathMax(open[iii],close[iii]);

      bool YES=true;

      for(kkk=iii; kkk<iii+int(Candles); kkk++)

        {

         if(high[kkk]<L || MathMax(open[kkk],close[kkk])>H)

          {

           YES=false;

           break;

           }

         if(H>high[kkk]) H=high[kkk];

         if(L<MathMax(open[kkk],close[kkk])) L=MathMax(open[kkk],close[kkk]);

        }

      if(YES)

        {     

         SetTline(0,UP,0,time[kkk],H,time[iii],H,buy_level_color,STYLE_SOLID,5,"buy_level");

         SetTline(0,UP1,0,time[kkk],H,time[0],H,buy_level_color,STYLE_SOLID,1,"buy_level");

        }



      H=MathMin(open[iii],close[iii]);

      L=low[iii];

      YES=true;

      for(kkk=iii; kkk<iii+int(Candles); kkk++)

        {

         if(MathMin(open[kkk],close[kkk])<L || low[kkk]>H) {YES=false;break;}

         if(H>MathMin(open[kkk],close[kkk])) H=MathMin(open[kkk],close[kkk]);

         if(L<low[kkk]) L=low[kkk];

        }

      if(YES)

        {

         SetTline(0,DN,0,time[kkk],L,time[iii],L,sell_level_color,STYLE_SOLID,5,"sell_level");

         SetTline(0,DN1,0,time[kkk],L,time[0],L,sell_level_color,STYLE_SOLID,1,"sell_level");

        }

     }

//----   

   ChartRedraw(NULL); 

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