Miscellaneous
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 Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---