Gliding_Channels_[CF]_v2

Author: Crazy_Fox [UA]
Gliding_Channels_[CF]_v2
Miscellaneous
It issuies visual alerts to the screen
0 Views
0 Downloads
0 Favorites
Gliding_Channels_[CF]_v2
//+---------------------------------------------------------------------+
//|                                           Gliding Channels [CF].mq4 |
//|                                                      Crazy_Fox [UA] |
//|                                            e-mail: crazy_fox@ua.fm  |
//|                                                        ICQ: 529330  |
//|   ÄËß ÍÅÊÎÌÌÅÐ×ÅÑÊÎÃÎ ÈÑÏÎËÜÇÎÂÀÍÈß, ÏÓÁËÈÊÀÖÈß ÐÀÇÐÅØÅÍÀ ÒÎËÜÊÎ Ñ  |
//| ÓÊÀÇÀÍÈÅÌ ÏÅÐÂÎÈÑÒÎ×ÍÈÊÀ (http://www.community.finlist.org)         |
//| È ÈÌÅÍÈ ÀÂÒÎÐÀ (Crazy_Fox [UA])                                     |
//|   ÐÅÄÀÊÒÈÐÎÂÀÍÈÅ ÈÑÕÎÄÍÎÃÎ ÊÎÄÀ ÐÀÇÐÅØÀÅÒÑß ÒÎËÜÊÎ ÏÐÈ ÓÑËÎÂÈÈ      |
//| ÑÎÕÐÀÍÅÍÈß ÄÀÍÍÎÃÎ ÒÅÊÑÒÀ, ÀÄÐÅÑÎÂ È ÑÑÛËÎÊ. ÏÐÎÄÀÆÀ, ÈÍÄÈÊÀÒÎÐÀ,   |
//| ÎÒÄÅËÜÍÛÕ ×ÀÑÒÅÉ ÈÑÕÎÄÍÎÃÎ ÊÎÄÀ, ÃÐÀÔÈÊÎÂ, ÈÌ ÏÎÑÒÐÎÅÍÍÛÕ ÇÀÏÐÅÙÅÍÀ |
//|   ÀÂÒÎÐ ÍÅ ÍÅÑ¨Ò ÎÒÂÅÒÑÒÂÅÍÍÎÑÒÈ ÇÀ ÂÎÇÌÎÆÍÛÅ ÓÁÛÒÊÈ, ÏÎËÓ×ÅÍÍÛÅ    |
//| Â ÐÅÇÓËÜÒÀÒÅ ÐÀÁÎÒÛ ÈÍÄÈÊÀÒÎÐÀ                                      |
//|         Ñêîëüçÿùèå êàíàëû Áàðèøïîëüöà                               |
//| Êàíàëû ñòðîÿòñÿ ïî òðåì ïîñëåäíèì ýêñòðåìóìàì - ëèíèÿ ïî äâóì       |
//| íèçàì è ïàðàëëåëüíàÿ ÷åðåç âåðøèíó, èëè íàîáîðîò, ëèíèÿ ïî äâóì     |
//| âåðøèíàì è ïàðàëëåëüíàÿ ïî íèçó. Ëèíèè ñòðîÿòñÿ ÏÎ ÌÀÊÑÈÌÀËÜÍÛÌ     |
//| (ÌÈÍÈÌÀËÜÍÛÌ) ÇÍÀ×ÅÍÈßÌ, òî åñòü ïî òåíÿì ñâå÷åé. Ýêñòðåìóì         |
//| èäåíòèôèöèðóåòñÿ ïðè íå ìåíåå 2 ñâå÷åê äî è 2 ñâå÷åê ïîñëå åãî      |
//| ïðîõîæäåíèÿ. Òî åñòü äëÿ ìàêñèìóìà íåîáõîäèìî íå ìåíåå 2 ñâå÷åê     |
//| ìåíüøå ìàêñèìàëüíîé ñâå÷è äî, è íå ìåíåå 2 ñâå÷åê ìåíüøå ìàêñèìóìà  |
//| - ïîñëå. Ðàññòîÿíèå ìåæäó ñîñåäíèìè ýêñòðåìóìàìè íå îãðàíè÷èâàåòñÿ. |
//| Âñòðå÷àþòñÿ "ãðóïïîâûå ýêñòðåìóìû" - äâå èëè äàæå òðè ñâå÷è ñ       |
//| ïðàêòè÷åñêè îäèíàêîâûìè ìàêñèìóìàìè (ìèíèìóìàìè). Èäåíòèôèöèðóåì èõ |
//| êàê îäèí ýêñòðåìóì, ëèíèþ êàíàëà ïðîâîäèì ÷åðåç âåðõ (íèç) ïðàâîé   |
//| èç íèõ.                                                             |
//+---------------------------------------------------------------------+
#property copyright "Crazy_Fox [UA]"
#property link      "http://finlist.ru"
#property indicator_chart_window
//----
extern int   Start_Bar       = 2;
extern int   Line_Width      = 2;
extern int   Num_of_Channels = 1;
extern int   Sensitivity     = 0;
extern bool  Show_Labels     = true;
extern bool  Channel_as_Ray  = true;
extern bool  Show_Alerts     = true;
extern color Channel_Color1  = Blue;
extern color Channel_Color2  = LightSkyBlue;
extern color Channel_Color3  = DeepPink;
extern color Channel_Color4  = DodgerBlue;
extern color Channel_Color5  = PaleGreen;
extern color Channel_Color6  = DarkOrange;
extern color Channel_Color7  = DodgerBlue;
extern color Channel_Color8  = Yellow;
//----
double x1 = 0, y1 = 0,
       x2 = 0, y2 = 0,
       x_l = 0, y_l = 0,
       x_f = 0, y_f = 0,
       x_m = 0, y_m = 0,
       step = 0,
       l_border = 0, h_border=0,
       Price = 0;
bool main_is_up = true, price_at_border = false;
int CurrentBar = 0,
    Extremum[3],
    TempExtremum[3],
    Colors[8],
    f_bar = 0, m_bar = 0, l_bar = 0;
//+------------------------------------------------------------------+
//| init                                                             |
//+------------------------------------------------------------------+
int init()
  {
   Colors[0] = Channel_Color1;
   Colors[1] = Channel_Color2;
   Colors[2] = Channel_Color3;
   Colors[3] = Channel_Color4;
   Colors[4] = Channel_Color5;
   Colors[5] = Channel_Color6;
   Colors[6] = Channel_Color7;
   Colors[7] = Channel_Color8;
   ArrayInitialize(Extremum, 0);
   ArrayInitialize(TempExtremum, 0);
   return(0);
  }
//+------------------------------------------------------------------+
//|  deinit                                                          |
//+------------------------------------------------------------------+
int deinit()
  {
   // Â öèêëå óäàëÿåì âñå îòðèñîâàííûå îáúåêòû
   for (int i = 1; i <= Num_of_Channels; i++)
     {
       ObjectDelete("Channel_"+i);
       if(Show_Labels)
         {
           ObjectDelete("Extremum_1_" + i);
           ObjectDelete("Extremum_2_" + i);
           ObjectDelete("Extremum_3_" + i);
         }
     }
   Comment(" ");
   ArrayInitialize(Extremum, 0);
   ArrayInitialize(TempExtremum, 0);
   return(0);
  }
//+------------------------------------------------------------------+
//|  min_ext                                                         |
//+------------------------------------------------------------------+
int min_ext(int bar)
  {
   int find, i, result;
   result = 0;
   i = bar;
   find = 0;
   while(find != 1)
     {
       if((Low[i-2] >= Low[i]) && (Low[i-1] >= Low[i]) && (Low[i] <= Low[i+1]) &&
          (Low[i] <= Low[i+2]))
         { 
           // Åñëè i ìåíüøå ëèáî ðàâíî äâóì áëèçñòîÿùèì ñâå÷àì è ñîñåäÿì ýòèõ ñâå÷åé - 
           // ýòî íàø ìèíèìóì
           result=i;
           find++;
         }
       i++;
     }
   return(result);
  }
//+------------------------------------------------------------------+
//|  max_ext                                                         |
//+------------------------------------------------------------------+
int max_ext(int bar)
  {
   int find, i, result;
   result = 0;
   i = bar;
   find = 0;
   while(find != 1)
     {
       if((High[i-2] <= High[i]) && (High[i-1] <= High[i]) && (High[i] >= High[i+1]) &&
          (High[i] >= High[i+2]))
         { 
           // Åñëè i áîëüøå ëèáî ðàâíî äâóì áëèçñòîÿùèì ñâå÷àì è ñîñåäÿì ýòèõ ñâå÷åé - 
           // ýòî íàø ìàêñèìóì
           result=i;
           find++;
         }
       i++;
     }
   return(result);
  }
//+------------------------------------------------------------------+
//|  find_extremums                                                  |
//+------------------------------------------------------------------+
void find_extremums(int i)
  {
   ArrayInitialize(Extremum, 0);
// Èùåì ïåðâûé ìèíèìóì, îïðåäåëÿåì êîîðäèíàòû
   Extremum[0] = min_ext(i); 
   y1=Low[Extremum[0]];  
   x1=Time[Extremum[0]]; 
// Èùåì ïåðâûé ìàêñèìóì, îïðåäåëÿåì êîîðäèíàòû
   Extremum[1] = max_ext(i); 
   y2=High[Extremum[1]]; 
   x2=Time[Extremum[1]];    
// Åñëè ìèíèìóì âñòðå÷àåòñÿ ðàíüøå ìàêñèìóìà - òðåòüÿ ýêñòðåìóì èùåì âíèçó
   if(Extremum[0] < Extremum[1])
     {
       // Ôóíêöèÿ min_ext âîçâðàùàåò íîìåð ïåðâîãî ìèíèìóìà, ïîèñê íà÷èíàåòñÿ ñ
       Extremum[2] = min_ext(Extremum[1]);  
       y_l = Low[Extremum[2]];
       x_l = Time[Extremum[2]];
       y_f = y1; 
       x_f = x1;
       y_m = y2; 
       x_m = x2;
       f_bar = Extremum[0]; 
       m_bar = Extremum[1]; 
       l_bar = Extremum[2];
       main_is_up = false;
     }
   if(Extremum[0] > Extremum[1])
     {
       Extremum[2] = max_ext(Extremum[0]);
       y_l = High[Extremum[2]];
       x_l = Time[Extremum[2]];
       y_f = y2; 
       x_f = x2;
       y_m = y1; 
       x_m = x1;
       f_bar = Extremum[1]; 
       m_bar = Extremum[0]; 
       l_bar = Extremum[2];
       main_is_up = true;
     }
   if(Extremum[0] == Extremum[1])
       if(min_ext(Extremum[0] + 1) < max_ext(Extremum[0] + 2))
         {
           Extremum[2] = min_ext(Extremum[0] + 2);
           y_l = Low[Extremum[2]]; 
           x_l = Time[Extremum[2]];
           y_f = y1; 
           x_f = x1;
           y_m = y2; 
           x_m = x2;
           f_bar =Extremum[0]; 
           m_bar = Extremum[1]; 
           l_bar = Extremum[2];
           main_is_up = false;
         }
       else
         {
           Extremum[2] = max_ext(Extremum[0] + 2);
           y_l = High[Extremum[2]]; 
           x_l = Time[Extremum[2]];
           y_f = y2; 
           x_f = x2;
           y_m = y1; 
           x_m = x1;
           f_bar = Extremum[0]; 
           m_bar = Extremum[1]; 
           l_bar = Extremum[2];
           main_is_up = true;
         }
  }
//+------------------------------------------------------------------+
//| indicator start function                                         |
//+------------------------------------------------------------------+
int start()
  {
   int n = 1, c = 0, i = 0;  // Ñ÷¸ò÷èê êàíàëîâ è ñ÷¸ò÷èê öâåòîâ
   if(Start_Bar > 0) 
       CurrentBar = Start_Bar; 
   else 
       CurrentBar = 2; //Òåêóùèé áàð - 2 (äëÿ ïîäòâåðæäåíèÿ ýêñòðåìóìà)
   ArrayInitialize(TempExtremum, 0);
   find_extremums(CurrentBar);
// Íà ñêîëüêî èçìåíÿåòñÿ öåíà ñ êàæäîé ïîñëåäóþùåé ñâå÷¸é
   step = (y_f - y_l) / (l_bar - f_bar);
   if(main_is_up)
     {
       h_border = High[f_bar] + step*f_bar;
       l_border = Low [m_bar] + step*m_bar;
     }
   else
     {
       l_border = Low [f_bar] + step*f_bar;
       h_border = High[m_bar] + step*m_bar;
     }
// Åñëè äîñòèãëè âåðõíåé ãðàíèöû êàíàëà
   if((Bid >= (h_border - Sensitivity*Point)) && (Bid <= (h_border + Sensitivity*Point)))
     {
       if(Show_Alerts) 
           Alert("Âåðõ êàíàëà - ïðîäàæà.");  
     }
// Åñëè äîñòèãëè íèæíåé ãðàíèöû êàíàëà
   if((Ask <= (l_border + Sensitivity*Point)) && (Ask >= (l_border - Sensitivity*Point)))
     {
       if(Show_Alerts) 
           Alert("Íèç êàíàëà - ïîêóïêà");
     }
   deinit();
   Comment("Ïàðàìåòðû êàíàëà:\nØèðèíà = ", (h_border - l_border) / Point, "; Íàêëîí = ", 
           -step / Point, ";\nÂåðõíÿÿ ãðàíèöà = ", DoubleToStr(h_border, Digits), 
           "; Íèæíÿÿ ãðàíèöà = ", DoubleToStr(l_border, Digits), ";");  
//  öèêëå îò 1 äî Num_of_Channels ðàñ÷èòûâàåì ýêñòðåìóìû è ðèñóåì êàíàë ñ íîìåðîì N
   while(n <= Num_of_Channels)
     {
       TempExtremum[0] = Extremum[0];
       TempExtremum[1] = Extremum[1];
       TempExtremum[2] = Extremum[2];
       find_extremums(CurrentBar);
       if((TempExtremum[0] == Extremum[0]) && (TempExtremum[1] == Extremum[1]) && 
          (TempExtremum[2] == Extremum[2])) 
           CurrentBar++;
       else
         {
           //SetIndexStyle(0, DRAW_ARROW);
           //SetIndexArrow(0, 164);
           //SetIndexBuffer(0, ExtMapBuffer);
           //SetIndexEmptyValue(0, 0.0);
           if(Show_Labels)
             {
               ObjectCreate("Extremum_1_" + n, OBJ_ARROW, 0, x1, y1); 
               ObjectSet("Extremum_1_" + n, OBJPROP_COLOR, Colors[c]); 
               ObjectSet("Extremum_1_" + n, OBJPROP_WIDTH, 1); 
               ObjectSet("Extremum_1_" + n, OBJPROP_ARROWCODE, SYMBOL_LEFTPRICE); 
               ObjectSet("Extremum_1_" + n, OBJPROP_STYLE, STYLE_SOLID);
               ObjectCreate("Extremum_2_" + n, OBJ_ARROW, 0, x2, y2); 
               ObjectSet("Extremum_2_" + n, OBJPROP_COLOR, Colors[c]); 
               ObjectSet("Extremum_2_" + n, OBJPROP_WIDTH, 1); 
               ObjectSet("Extremum_2_" + n, OBJPROP_ARROWCODE, SYMBOL_LEFTPRICE); 
               ObjectSet("Extremum_2_" + n, OBJPROP_STYLE, STYLE_SOLID);
               ObjectCreate("Extremum_3_" + n, OBJ_ARROW, 0, x_l, y_l); 
               ObjectSet("Extremum_3_" + n, OBJPROP_COLOR, Colors[c]); 
               ObjectSet("Extremum_3_" + n, OBJPROP_WIDTH, 1); 
               ObjectSet("Extremum_3_" + n, OBJPROP_ARROWCODE, SYMBOL_RIGHTPRICE); 
               ObjectSet("Extremum_3_" + n, OBJPROP_STYLE, STYLE_SOLID);
             }
           ObjectCreate("Channel_" + n, OBJ_CHANNEL, 0, x_l, y_l, x_f, y_f, x_m, y_m);
           ObjectSet("Channel_" + n, OBJPROP_COLOR, Colors[c]); 
           ObjectSet("Channel_" + n, OBJPROP_WIDTH, Line_Width); 
           ObjectSet("Channel_" + n, OBJPROP_RAY, Channel_as_Ray);
           ObjectSet("Channel_" + n, OBJPROP_STYLE, STYLE_SOLID);
           n++;
           if(c < 7) 
               c++; 
           else 
               c=0;
         }
       CurrentBar++;
     }
   return(0);
  }
//+------------------------------------------------------------------+

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