0
Views
0
Downloads
0
Favorites
DonchianChannelsCloud
//+------------------------------------------------------------------+
//| DonchianChannelsCloud.mq5 |
//| Copyright © 2005, Luis Guilherme Damiani |
//| http://www.damianifx.com.br |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, Luis Guilherme Damiani"
#property link "http://www.damianifx.com.br"
//---- íîìåð âåðñèè èíäèêàòîðà
#property version "1.00"
//---- îòðèñîâêà èíäèêàòîðà â ãëàâíîì îêíå
#property indicator_chart_window
//--- äëÿ ðàñ÷åòà è îòðèñîâêè èíäèêàòîðà èñïîëüçîâàíî ñåìü áóôåðîâ
#property indicator_buffers 7
//--- èñïîëüçîâàíî ïÿòü ãðàôè÷åñêèõ ïîñòðîåíèé
#property indicator_plots 5
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè îáëàêà |
//+----------------------------------------------+
//---- îòðèñîâêà èíäèêàòîðà â âèäå öâåòíîãî îáëàêà
#property indicator_type1 DRAW_FILLING
//---- â êà÷åñòâå öâåòà îáëàêà èñïîëüçîâàí LightSkyBlue
#property indicator_color1 clrLightSkyBlue
//---- îòîáðàæåíèå ìåòêè èíäèêàòîðà
#property indicator_label1 "Upper Cloud"
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè âåðõíåé ãðàíèöû |
//+----------------------------------------------+
//---- îòðèñîâêà èíäèêàòîðà 2 â âèäå ëèíèè
#property indicator_type2 DRAW_LINE
//---- â êà÷åñòâå öâåòà áû÷åé ëèíèè èíäèêàòîðà èñïîëüçîâàí DodgerBlue
#property indicator_color2 clrDodgerBlue
//---- ëèíèÿ èíäèêàòîðà 2 - íåïðåðûâíàÿ êðèâàÿ
#property indicator_style2 STYLE_SOLID
//---- òîëùèíà ëèíèè èíäèêàòîðà 2 ðàâíà 2
#property indicator_width2 2
//---- îòîáðàæåíèå áû÷åé ìåòêè èíäèêàòîðà
#property indicator_label2 "Upper Donchian"
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè ñðåäíåé ëèíèè |
//+----------------------------------------------+
//---- îòðèñîâêà èíäèêàòîðà 3 â âèäå ëèíèè
#property indicator_type3 DRAW_LINE
//---- â êà÷åñòâå öâåòà ìåäâåæüåé ëèíèè èíäèêàòîðà èñïîëüçîâàí DarkViolet
#property indicator_color3 clrDarkViolet
//---- ëèíèÿ èíäèêàòîðà 3 - íåïðåðûâíàÿ êðèâàÿ
#property indicator_style3 STYLE_SOLID
//---- òîëùèíà ëèíèè èíäèêàòîðà 3 ðàâíà 2
#property indicator_width3 2
//---- îòîáðàæåíèå ìåäâåæüåé ìåòêè èíäèêàòîðà
#property indicator_label3 "Middle Donchian"
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè íèæíåé ãðàíèöû |
//+----------------------------------------------+
//---- îòðèñîâêà èíäèêàòîðà 4 â âèäå ëèíèè
#property indicator_type4 DRAW_LINE
//---- â êà÷åñòâå öâåòà ìåäâåæüåé ëèíèè èíäèêàòîðà èñïîëüçîâàí Magenta
#property indicator_color4 clrMagenta
//---- ëèíèÿ èíäèêàòîðà 4 - íåïðåðûâíàÿ êðèâàÿ
#property indicator_style4 STYLE_SOLID
//---- òîëùèíà ëèíèè èíäèêàòîðà 4 ðàâíà 2
#property indicator_width4 2
//---- îòîáðàæåíèå ìåäâåæüåé ìåòêè èíäèêàòîðà
#property indicator_label4 "Lower Donchian"
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè îáëàêà |
//+----------------------------------------------+
//---- îòðèñîâêà èíäèêàòîðà â âèäå öâåòíîãî îáëàêà
#property indicator_type5 DRAW_FILLING
//---- â êà÷åñòâå öâåòà îáëàêà èñïîëüçîâàí Violet
#property indicator_color5 clrViolet
//---- îòîáðàæåíèå ìåòêè èíäèêàòîðà
#property indicator_label5 "Lower Cloud"
//+-----------------------------------+
//| Îáúÿâëåíèå ïåðå÷èñëåíèÿ |
//+-----------------------------------+
enum Applied_Extrem //Òèï ýêñòðåìóìîâ
{
HIGH_LOW,
HIGH_LOW_OPEN,
HIGH_LOW_CLOSE,
OPEN_HIGH_LOW,
CLOSE_HIGH_LOW
};
//+-----------------------------------+
//| ÂÕÎÄÍÛÅ ÏÀÐÀÌÅÒÐÛ ÈÍÄÈÊÀÒÎÐÀ |
//+-----------------------------------+
input int DonchianPeriod=20; //Ïåðèîä óñðåäíåíèÿ
input Applied_Extrem Extremes=HIGH_LOW; //Òèï ýêñòðåìóìîâ
input int Margins=-2;
input int Shift = 0; // ñäâèã èíäèêàòîðà ïî ãîðèçîíòàëè â áàðàõ
//+-----------------------------------+
//---- îáúÿâëåíèå äèíàìè÷åñêèõ ìàññèâîâ, êîòîðûå áóäóò â äàëüíåéøåì èñïîëüçîâàíû â êà÷åñòâå èíäèêàòîðíûõ áóôåðîâ
double ExtUp1Buffer[];
double ExtUp2Buffer[];
double ExtABuffer[];
double ExtBBuffer[];
double ExtCBuffer[];
double ExtDn1Buffer[];
double ExtDn2Buffer[];
//---- Îáúÿâëåíèå öåëûõ ïåðåìåííûõ íà÷àëà îòñ÷¸òà äàííûõ
int min_rates_total;
//+------------------------------------------------------------------+
//| searching index of the highest bar |
//+------------------------------------------------------------------+
int iHighest(
const double &array[],// ìàññèâ äëÿ ïîèñêà èíäåêñà ìàêñèìàëüíîãî ýëåìåíòà
int count,// ÷èñëî ýëåìåíòîâ ìàññèâà (â íàïðàâëåíèè îò òåêóùåãî áàðà â ñòîðîíó óáûâàíèÿ èíäåêñà),
// ñðåäè êîòîðûõ äîëæåí áûòü ïðîèçâåäåí ïîèñê.
int startPos //èíäåêñ (ñìåùåíèå îòíîñèòåëüíî òåêóùåãî áàðà) íà÷àëüíîãî áàðà,
// ñ êîòîðîãî íà÷èíàåòñÿ ïîèñê íàèáîëüøåãî çíà÷åíèÿ
)
{
//----+
int index=startPos;
//---- ïðîâåðêà ñòàðòîâîãî èíäåêñà íà êîððåêòíîñòü
if(startPos<0)
{
Print("Íåâåðíîå çíà÷åíèå â ôóíêöèè iHighest, startPos = ",startPos);
return(0);
}
//---- ïðîâåðêà çíà÷åíèÿ startPos íà êîððåêòíîñòü
if(startPos-count<0)
count=startPos;
double max=array[startPos];
//---- ïîèñê èíäåêñà
for(int i=startPos; i>startPos-count; i--)
{
if(array[i]>max)
{
index=i;
max=array[i];
}
}
//----+ âîçâðàò èíäåêñà íàèáîëüøåãî áàðà
return(index);
}
//+------------------------------------------------------------------+
//| searching index of the lowest bar |
//+------------------------------------------------------------------+
int iLowest(
const double &array[],// ìàññèâ äëÿ ïîèñêà èíäåêñà ìèíèìàëüíîãî ýëåìåíòà
int count,// ÷èñëî ýëåìåíòîâ ìàññèâà (â íàïðàâëåíèè îò òåêóùåãî áàðà â ñòîðîíó óáûâàíèÿ èíäåêñà),
// ñðåäè êîòîðûõ äîëæåí áûòü ïðîèçâåäåí ïîèñê.
int startPos //èíäåêñ (ñìåùåíèå îòíîñèòåëüíî òåêóùåãî áàðà) íà÷àëüíîãî áàðà,
// ñ êîòîðîãî íà÷èíàåòñÿ ïîèñê íàèìåíüøåãî çíà÷åíèÿ
)
{
//----+
int index=startPos;
//---- ïðîâåðêà ñòàðòîâîãî èíäåêñà íà êîððåêòíîñòü
if(startPos<0)
{
Print("Íåâåðíîå çíà÷åíèå â ôóíêöèè iLowest, startPos = ",startPos);
return(0);
}
//---- ïðîâåðêà çíà÷åíèÿ startPos íà êîððåêòíîñòü
if(startPos-count<0)
count=startPos;
double min=array[startPos];
//---- ïîèñê èíäåêñà
for(int i=startPos; i>startPos-count; i--)
{
if(array[i]<min)
{
index=i;
min=array[i];
}
}
//----+ âîçâðàò èíäåêñà íàèìåíüøåãî áàðà
return(index);
}
//+------------------------------------------------------------------+
//| Donchian Channel indicator initialization function |
//+------------------------------------------------------------------+
void OnInit()
{
//---- Èíèöèàëèçàöèÿ ïåðåìåííûõ íà÷àëà îòñ÷¸òà äàííûõ
min_rates_total=int(DonchianPeriod)+1;
//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â èíäèêàòîðíûé áóôåð
SetIndexBuffer(0,ExtUp1Buffer,INDICATOR_DATA);
SetIndexBuffer(1,ExtUp2Buffer,INDICATOR_DATA);
//---- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷¸òà îòðèñîâêè èíäèêàòîðà
PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total);
//---- óñòàíîâêà çíà÷åíèé èíäèêàòîðà, êîòîðûå íå áóäóò âèäèìû íà ãðàôèêå
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//---- îñóùåñòâëåíèå ñäâèãà èíäèêàòîðà ïî ãîðèçîíòàëè
PlotIndexSetInteger(0,PLOT_SHIFT,Shift);
//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â èíäèêàòîðíûé áóôåð
SetIndexBuffer(2,ExtABuffer,INDICATOR_DATA);
//---- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷¸òà îòðèñîâêè èíäèêàòîðà
PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,min_rates_total);
//---- óñòàíîâêà çíà÷åíèé èíäèêàòîðà, êîòîðûå íå áóäóò âèäèìû íà ãðàôèêå
PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//---- îñóùåñòâëåíèå ñäâèãà èíäèêàòîðà ïî ãîðèçîíòàëè
PlotIndexSetInteger(1,PLOT_SHIFT,Shift);
//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â èíäèêàòîðíûé áóôåð
SetIndexBuffer(3,ExtBBuffer,INDICATOR_DATA);
//---- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷¸òà îòðèñîâêè èíäèêàòîðà
PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,min_rates_total);
//---- óñòàíîâêà çíà÷åíèé èíäèêàòîðà, êîòîðûå íå áóäóò âèäèìû íà ãðàôèêå
PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//---- îñóùåñòâëåíèå ñäâèãà èíäèêàòîðà ïî ãîðèçîíòàëè
PlotIndexSetInteger(2,PLOT_SHIFT,Shift);
//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â èíäèêàòîðíûé áóôåð
SetIndexBuffer(4,ExtCBuffer,INDICATOR_DATA);
//---- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷¸òà îòðèñîâêè èíäèêàòîðà
PlotIndexSetInteger(3,PLOT_DRAW_BEGIN,min_rates_total);
//---- óñòàíîâêà çíà÷åíèé èíäèêàòîðà, êîòîðûå íå áóäóò âèäèìû íà ãðàôèêå
PlotIndexSetDouble(3,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//---- îñóùåñòâëåíèå ñäâèãà èíäèêàòîðà ïî ãîðèçîíòàëè
PlotIndexSetInteger(3,PLOT_SHIFT,Shift);
//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â èíäèêàòîðíûé áóôåð
SetIndexBuffer(5,ExtDn1Buffer,INDICATOR_DATA);
SetIndexBuffer(6,ExtDn2Buffer,INDICATOR_DATA);
//---- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷¸òà îòðèñîâêè èíäèêàòîðà
PlotIndexSetInteger(4,PLOT_DRAW_BEGIN,min_rates_total);
//---- óñòàíîâêà çíà÷åíèé èíäèêàòîðà, êîòîðûå íå áóäóò âèäèìû íà ãðàôèêå
PlotIndexSetDouble(4,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//---- îñóùåñòâëåíèå ñäâèãà èíäèêàòîðà ïî ãîðèçîíòàëè
PlotIndexSetInteger(4,PLOT_SHIFT,Shift);
//---- èíèöèàëèçàöèè ïåðåìåííîé äëÿ êîðîòêîãî èìåíè èíäèêàòîðà
string shortname;
StringConcatenate(shortname,"Donchian( DonchianPeriod = ",DonchianPeriod,")");
//--- ñîçäàíèå èìåíè äëÿ îòîáðàæåíèÿ â îòäåëüíîì ïîäîêíå è âî âñïëûâàþùåé ïîäñêàçêå
IndicatorSetString(INDICATOR_SHORTNAME,shortname);
//--- îïðåäåëåíèå òî÷íîñòè îòîáðàæåíèÿ çíà÷åíèé èíäèêàòîðà
IndicatorSetInteger(INDICATOR_DIGITS,_Digits+1);
//---- çàâåðøåíèå èíèöèàëèçàöèè
}
//+------------------------------------------------------------------+
//| Donchian Channel iteration function |
//+------------------------------------------------------------------+
int OnCalculate(
const int rates_total, // êîëè÷åñòâî èñòîðèè â áàðàõ íà òåêóùåì òèêå
const int prev_calculated,// êîëè÷åñòâî èñòîðèè â áàðàõ íà ïðåäûäóùåì òèêå
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[]
)
{
//---- ïðîâåðêà êîëè÷åñòâà áàðîâ íà äîñòàòî÷íîñòü äëÿ ðàñ÷¸òà
if(rates_total<min_rates_total) return(0);
//---- Îáúÿâëåíèå ïåðåìåííûõ ñ ïëàâàþùåé òî÷êîé
double smin,smax,SsMax=0,SsMin=0;
//---- Îáúÿâëåíèå öåëûõ ïåðåìåííûõ
int first,bar;
//---- ðàñ÷¸ò ñòàðòîâîãî íîìåðà first äëÿ öèêëà ïåðåñ÷¸òà áàðîâ
if(prev_calculated==0) // ïðîâåðêà íà ïåðâûé ñòàðò ðàñ÷¸òà èíäèêàòîðà
{
first=min_rates_total-1; // ñòàðòîâûé íîìåð äëÿ ðàñ÷¸òà âñåõ áàðîâ
}
else
{
first=prev_calculated-1;// ñòàðòîâûé íîìåð äëÿ ðàñ÷¸òà íîâûõ áàðîâ
}
//---- Îñíîâíîé öèêë ðàñ÷¸òà êàíàëà
for(bar=first; bar<rates_total && !IsStopped(); bar++)
{
switch(Extremes)
{
case HIGH_LOW:
SsMax=high[iHighest(high,DonchianPeriod,bar)];
SsMin=low[iLowest(low,DonchianPeriod,bar)];
break;
case HIGH_LOW_OPEN:
SsMax=(open[iHighest(open,DonchianPeriod,bar)]+high[iHighest(high,DonchianPeriod,bar)])/2;
SsMin=(open[iLowest(open,DonchianPeriod,bar)]+low[iLowest(high,DonchianPeriod,bar)])/2;
break;
case HIGH_LOW_CLOSE:
SsMax=(close[iHighest(close,DonchianPeriod,bar)]+high[iHighest(high,DonchianPeriod,bar)])/2;
SsMin=(close[iLowest(close,DonchianPeriod,bar)]+low[iLowest(high,DonchianPeriod,bar)])/2;
break;
case OPEN_HIGH_LOW:
SsMax=open[iHighest(open,DonchianPeriod,bar)];
SsMin=open[iLowest(open,DonchianPeriod,bar)];
break;
case CLOSE_HIGH_LOW:
SsMax=close[iHighest(close,DonchianPeriod,bar)];
SsMin=close[iLowest(close,DonchianPeriod,bar)];
break;
}
smin=SsMin+(SsMax-SsMin)*Margins/100;
smax=SsMax-(SsMax-SsMin)*Margins/100;
ExtABuffer[bar]=smax;
ExtCBuffer[bar]=smin;
ExtBBuffer[bar]=(smax+smin)/2.0;
ExtUp1Buffer[bar]=ExtABuffer[bar];
ExtUp2Buffer[bar]=ExtBBuffer[bar];
ExtDn1Buffer[bar]=ExtBBuffer[bar];
ExtDn2Buffer[bar]=ExtCBuffer[bar];
}
//----
return(rates_total);
}
//+------------------------------------------------------------------+
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
---