0
Views
0
Downloads
0
Favorites
PriceChannel_Stop_v1
//+------------------------------------------------------------------+
//| PriceChannel_Stop.mq5 |
//| Copyright © 2005, TrendLaboratory Ltd. |
//| E-mail: igorad2004@list.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, TrendLaboratory Ltd."
//---- ññûëêà íà ñàéò àâòîðà
#property link "E-mail: igorad2004@list.ru"
//---- íîìåð âåðñèè èíäèêàòîðà
#property version "1.00"
//---- îòðèñîâêà èíäèêàòîðà â ãëàâíîì îêíå
#property indicator_chart_window
//---- äëÿ ðàñ÷åòà è îòðèñîâêè èíäèêàòîðà èñïîëüçîâàíî øåñòü áóôåðîâ
#property indicator_buffers 6
//---- èñïîëüçîâàíî âñåãî øåñòü ãðàôè÷åñêèõ ïîñòðîåíèé
#property indicator_plots 6
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè ìåäâåæüåãî èíäèêàòîðà |
//+----------------------------------------------+
//---- îòðèñîâêà èíäèêàòîðà 1 â âèäå ñèìâîëà
#property indicator_type1 DRAW_ARROW
//---- â êà÷åñòâå öâåòà ñèìâîëà âõîäà èñïîëüçîâàí ðîçîâûé öâåò
#property indicator_color1 Magenta
//---- òîëùèíà ëèíèè èíäèêàòîðà 1 ðàâíà 1
#property indicator_width1 1
//---- îòîáðàæåíèå ìåòêè èíäèêàòîðà 1
#property indicator_label1 "SellSignal"
//---- îòðèñîâêà èíäèêàòîðà 2 â âèäå ñèìâîëà
#property indicator_type2 DRAW_ARROW
//---- â êà÷åñòâå öâåòà ñèìâîëîâ ñòîïëîññîâ èñïîëüçîâàí ðîçîâûé öâåò
#property indicator_color2 Magenta
//---- òîëùèíà ëèíèè èíäèêàòîðà 2 ðàâíà 1
#property indicator_width2 1
//---- îòîáðàæåíèå ìåòêè èíäèêàòîðà 2
#property indicator_label2 "SellStopSignal"
//---- îòðèñîâêà èíäèêàòîðà 3 â âèäå ñèìâîëà
#property indicator_type3 DRAW_LINE
//---- â êà÷åñòâå öâåòà ëèíèè ñòîïëîññîâ èñïîëüçîâàí ðîçîâûé öâåò
#property indicator_color3 Magenta
//---- òîëùèíà ëèíèè èíäèêàòîðà 3 ðàâíà 1
#property indicator_width3 1
//---- îòîáðàæåíèå ìåòêè èíäèêàòîðà 3
#property indicator_label3 "SellStopLine"
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè áû÷üåãî èíäèêàòîðà |
//+----------------------------------------------+
//---- îòðèñîâêà èíäèêàòîðà 4 â âèäå ñèìâîëà
#property indicator_type4 DRAW_ARROW
//---- â êà÷åñòâå öâåòà ñèìâîëà âõîäà èñïîëüçîâàí ñâåòëî-çåëåíûé öâåò
#property indicator_color4 Lime
//---- òîëùèíà ëèíèè èíäèêàòîðà 4 ðàâíà 1
#property indicator_width4 1
//---- îòîáðàæåíèå ìåòêè èíäèêàòîðà 4
#property indicator_label4 "BuySignal"
//---- îòðèñîâêà èíäèêàòîðà 5 â âèäå ñèìâîëà
#property indicator_type5 DRAW_ARROW
//---- â êà÷åñòâå öâåòà ñèìâîëîâ ñòîïëîññîâ èñïîëüçîâàí ñâåòëî-çåëåíûé öâåò
#property indicator_color5 Lime
//---- òîëùèíà ëèíèè èíäèêàòîðà 5 ðàâíà 1
#property indicator_width5 1
//---- îòîáðàæåíèå ìåòêè èíäèêàòîðà 5
#property indicator_label5 "BuyStopSignal"
//---- îòðèñîâêà èíäèêàòîðà 6 â âèäå ñèìâîëà
#property indicator_type6 DRAW_LINE
//---- â êà÷åñòâå öâåòà ëèíèè ñòîïëîññîâ èñïîëüçîâàí ñâåòëî-çåëåíûé öâåò
#property indicator_color6 Lime
//---- òîëùèíà ëèíèè èíäèêàòîðà 6 ðàâíà 1
#property indicator_width6 1
//---- îòîáðàæåíèå ìåòêè èíäèêàòîðà 6
#property indicator_label6 "BuyStopLine"
//+----------------------------------------------+
//| Âõîäíûå ïàðàìåòðû èíäèêàòîðà |
//+----------------------------------------------+
input int ChannelPeriod=5;
input double Risk=0.10;
input bool Signal=true;
input bool Line=true;
//+----------------------------------------------+
//---- îáúÿâëåíèå äèíàìè÷åñêèõ ìàññèâîâ, êîòîðûå â äàëüíåéøåì
//---- áóäóò èñïîëüçîâàíû â êà÷åñòâå èíäèêàòîðíûõ áóôåðîâ
double DownTrendSignal[];
double DownTrendBuffer[];
double DownTrendLine[];
double UpTrendSignal[];
double UpTrendBuffer[];
double UpTrendLine[];
//----
int StartBars;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
void OnInit()
{
//---- èíèöèàëèçàöèÿ ãëîáàëüíûõ ïåðåìåííûõ
StartBars=ChannelPeriod+1;
//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â èíäèêàòîðíûé áóôåð
SetIndexBuffer(0,DownTrendSignal,INDICATOR_DATA);
//---- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷åòà îòðèñîâêè èíäèêàòîðà 1
PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,StartBars);
//--- ñîçäàíèå ìåòêè äëÿ îòîáðàæåíèÿ â DataWindow
PlotIndexSetString(0,PLOT_LABEL,"SellSignal");
//---- ñèìâîë äëÿ èíäèêàòîðà
PlotIndexSetInteger(0,PLOT_ARROW,108);
//---- èíäåêñàöèÿ ýëåìåíòîâ â áóôåðå êàê â òàéìñåðèè
ArraySetAsSeries(DownTrendSignal,true);
//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â èíäèêàòîðíûé áóôåð
SetIndexBuffer(1,DownTrendBuffer,INDICATOR_DATA);
//---- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷åòà îòðèñîâêè èíäèêàòîðà 2
PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,StartBars);
//--- ñîçäàíèå ìåòêè äëÿ îòîáðàæåíèÿ â DataWindow
PlotIndexSetString(1,PLOT_LABEL,"SellStopSignal");
//---- ñèìâîë äëÿ èíäèêàòîðà
PlotIndexSetInteger(1,PLOT_ARROW,159);
//---- èíäåêñàöèÿ ýëåìåíòîâ â áóôåðå êàê â òàéìñåðèè
ArraySetAsSeries(DownTrendBuffer,true);
//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â èíäèêàòîðíûé áóôåð
SetIndexBuffer(2,DownTrendLine,INDICATOR_DATA);
//---- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷åòà îòðèñîâêè èíäèêàòîðà 3
PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,StartBars);
//--- ñîçäàíèå ìåòêè äëÿ îòîáðàæåíèÿ â DataWindow
PlotIndexSetString(2,PLOT_LABEL,"SellStopLine");
//---- èíäåêñàöèÿ ýëåìåíòîâ â áóôåðå êàê â òàéìñåðèè
ArraySetAsSeries(DownTrendLine,true);
//---- çàïðåò íà îòðèñîâêó èíäèêàòîðîì ïóñòûõ çíà÷åíèé
PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,0.0);
//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â èíäèêàòîðíûé áóôåð
SetIndexBuffer(3,UpTrendSignal,INDICATOR_DATA);
//---- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷åòà îòðèñîâêè èíäèêàòîðà 4
PlotIndexSetInteger(3,PLOT_DRAW_BEGIN,StartBars);
//--- ñîçäàíèå ìåòêè äëÿ îòîáðàæåíèÿ â DataWindow
PlotIndexSetString(3,PLOT_LABEL,"BuySignal");
//---- ñèìâîë äëÿ èíäèêàòîðà
PlotIndexSetInteger(3,PLOT_ARROW,108);
//---- èíäåêñàöèÿ ýëåìåíòîâ â áóôåðå êàê â òàéìñåðèè
ArraySetAsSeries(UpTrendSignal,true);
//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â èíäèêàòîðíûé áóôåð
SetIndexBuffer(4,UpTrendBuffer,INDICATOR_DATA);
//---- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷åòà îòðèñîâêè èíäèêàòîðà 5
PlotIndexSetInteger(4,PLOT_DRAW_BEGIN,StartBars);
//--- ñîçäàíèå ìåòêè äëÿ îòîáðàæåíèÿ â DataWindow
PlotIndexSetString(4,PLOT_LABEL,"BuyStopSignal");
//---- ñèìâîë äëÿ èíäèêàòîðà
PlotIndexSetInteger(4,PLOT_ARROW,159);
//---- èíäåêñàöèÿ ýëåìåíòîâ â áóôåðå êàê â òàéìñåðèè
ArraySetAsSeries(UpTrendBuffer,true);
//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â èíäèêàòîðíûé áóôåð
SetIndexBuffer(5,UpTrendLine,INDICATOR_DATA);
//---- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷åòà îòðèñîâêè èíäèêàòîðà 6
PlotIndexSetInteger(5,PLOT_DRAW_BEGIN,StartBars);
//--- ñîçäàíèå ìåòêè äëÿ îòîáðàæåíèÿ â DataWindow
PlotIndexSetString(5,PLOT_LABEL,"BuyStopLine");
//---- èíäåêñàöèÿ ýëåìåíòîâ â áóôåðå êàê â òàéìñåðèè
ArraySetAsSeries(UpTrendLine,true);
//---- çàïðåò íà îòðèñîâêó èíäèêàòîðîì ïóñòûõ çíà÷åíèé
PlotIndexSetDouble(5,PLOT_EMPTY_VALUE,0.0);
//---- Óñòàíîâêà ôîðìàòà òî÷íîñòè îòîáðàæåíèÿ èíäèêàòîðà
IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//---- èìÿ äëÿ îêîí äàííûõ è ìåòêà äëÿ ïîäîêîí
string short_name="PriceChannel_Stop";
IndicatorSetString(INDICATOR_SHORTNAME,short_name);
//----
}
//+------------------------------------------------------------------+
//| Custom indicator 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<StartBars) return(0);
//---- îáúÿâëåíèÿ ëîêàëüíûõ ïåðåìåííûõ
int limit,bar,iii,trend;
double bsmax[],bsmin[],High,Low,Price,dPrice;
//---- îáúÿâëåíèÿ ïåðåìåííûõ ïàìÿòè
static int trend_;
static double bsmax_,bsmin_;
//---- ðàñ÷åòû ñòàðòîâîãî íîìåðà limit äëÿ öèêëà ïåðåñ÷åòà áàðîâ
if(prev_calculated>rates_total || prev_calculated<=0)// ïðîâåðêà íà ïåðâûé ñòàðò ðàñ÷åòà èíäèêàòîðà
{
limit=rates_total-StartBars; // ñòàðòîâûé íîìåð äëÿ ðàñ÷åòà âñåõ áàðîâ
}
else
{
limit=rates_total-prev_calculated; // ñòàðòîâûé íîìåð äëÿ ðàñ÷åòà íîâûõ áàðîâ
}
//---- èíäåêñàöèÿ ýëåìåíòîâ â ìàññèâàõ êàê â òàéìñåðèÿõ
ArraySetAsSeries(high,true);
ArraySetAsSeries(low,true);
ArraySetAsSeries(close,true);
//---- èçìåíåíèå ðàçìåðîâ âðåìåííûõ ìàññèâîâ
if(ArrayResize(bsmax,limit+2)!=limit+2) return(0);
if(ArrayResize(bsmin,limit+2)!=limit+2) return(0);
//---- ïðåäâàðèòåëüíûé öèêë ðàñ÷åòà âðåìåííûõ ìàññèâîâ
for(bar=limit; bar>=0; bar--)
{
High=high[bar];
Low =low [bar];
iii=bar-1+ChannelPeriod;
while(iii>=bar)
{
Price=high[iii];
if(High<Price)High=Price;
Price=low[iii];
if(Low>Price) Low=Price;
iii--;
}
dPrice=(High-Low)*Risk;
bsmax[bar]=High-dPrice;
bsmin[bar]=Low +dPrice;
}
//---- âîññòàíàâëèâàåì çíà÷åíèÿ ïåðåìåííûõ
bsmax[limit+1]=bsmax_;
bsmin[limit+1]=bsmin_;
trend=trend_;
//---- îñíîâíîé öèêë ðàñ÷åòà èíäèêàòîðà
for(bar=limit; bar>=0; bar--)
{
//---- çàïîìèíàåì çíà÷åíèÿ ïåðåìåííûõ ïåðåä ïðîãîíàìè íà òåêóùåì áàðå
if(rates_total!=prev_calculated && bar==0)
{
bsmax_=bsmax[1];
bsmin_=bsmin[1];
trend_=trend;
}
//----
UpTrendBuffer [bar]=0.0;
DownTrendBuffer[bar]=0.0;
UpTrendSignal [bar]=0.0;
DownTrendSignal[bar]=0.0;
UpTrendLine [bar]=0.0;
DownTrendLine [bar]=0.0;
//----
if(close[bar]>bsmax[bar+1]) trend= 1;
if(close[bar]<bsmin[bar+1]) trend=-1;
//----
if(trend>0 && bsmin[bar]<bsmin[bar+1]) bsmin[bar]=bsmin[bar+1];
if(trend<0 && bsmax[bar]>bsmax[bar+1]) bsmax[bar]=bsmax[bar+1];
//----
if(trend>0)
{
Price=bsmin[bar];
if(Signal && DownTrendBuffer[bar+1]>0)
{
UpTrendSignal[bar]=Price;
if(Line) UpTrendLine[bar]=Price;
}
else
{
UpTrendBuffer[bar]=Price;
if(Line) UpTrendLine[bar]=Price;
}
}
//----
if(trend<0)
{
Price=bsmax[bar];
if(Signal && UpTrendBuffer[bar+1]>0)
{
DownTrendSignal[bar]=Price;
if(Line) DownTrendLine[bar]=Price;
}
else
{
DownTrendBuffer[bar]=Price;
if(Line) DownTrendLine[bar]=Price;
}
}
}
//----
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
---