Indicators Used
Miscellaneous
0
Views
0
Downloads
0
Favorites
_BandsFBA_NR
/*
Bollinger Bands ñ ðàçëè÷íûìè ïàðàìåòðàìè ñãëàæèâàíèÿ ñò. äåâèàöèè äëÿ ôðîíòà è çàòóõàíèÿ
âûçîâ èç ïîëüçîâàòåëüñêèõ êîäîâ:
iCustom( string symbol, int timeframe, "_BandsFBA_NR", int period, double deviation, int bands_shift, int applied_price,
double FrontPeriod, double BackPeriod, int mode, double Sens, int shift);
iCustom(NULL,0,"_BandsFBA_NR",BandsPeriod,Deviation,BandsShift,PriceField,FrontPeriod,BackPeriod,Sens, 1,i); // âåðõíÿÿ ãð.
iCustom(NULL,0,"_BandsFBA_NR",BandsPeriod,Deviation,BandsShift,PriceField,FrontPeriod,BackPeriod,Sens, 2,i); // íèæíÿÿ ãð.
iCustom(NULL,0,"_BandsFBA_NR",BandsPeriod,Deviation,BandsShift,PriceField,FrontPeriod,BackPeriod,Sens, 4,i); // âåðõíÿÿ ñãëàæåííàÿ ãð.
iCustom(NULL,0,"_BandsFBA_NR",BandsPeriod,Deviation,BandsShift,PriceField,FrontPeriod,BackPeriod,Sens, 5,i); // íèæíÿÿ ñãëàæåííàÿ ãð.
*/
#property indicator_chart_window
#property indicator_buffers 6
#property indicator_color1 MediumSeaGreen // MA
#property indicator_color2 MediumSeaGreen // âåðõíÿÿ ëèíèÿ
#property indicator_color3 MediumSeaGreen // íèæíÿÿ ëèíèÿ
#property indicator_color4 Red // MA ñèãíàëüíàÿ
#property indicator_color5 Red // âåðõíÿÿ ñèãíàëüíàÿ
#property indicator_color6 Red // íèæíÿÿ ñèãíàëüíàÿ
// âõîäíûå ïàðàìåòðû
// Bollinger Bands
extern int BandsPeriod=20; // ïåðèîä ñò.äåâèàöèè
extern double Deviation=2; // äåâèàöèÿ
extern int BandsShift=0; // ñäâèã èíäèêàòîðà
extern int PriceField=0; // òèï öåíû (ñòàíä. çíà÷åíèÿ)
// ñèãíàëüíàÿ
extern double FrontPeriod=1; // ïåðèîä ñãëàæèâàíèÿ ôðîíòà; ì.á. <1
extern double BackPeriod=55; // ïåðèîä ñãëàæèâàíèÿ çàòóõàíèÿ; ì.á. <1
extern double Sens=0; // ïîðîã ÷óâñòâèòåëüíîñòè â ïï.
int History=0; // êîë-âî ïåðåñ÷åòîâ; 0 - âñå áàðû
// èíä.áóôåðû
double SMA[], // SMA
TopB[], // âåðõíÿÿ ëèíèÿ
BotB[], // íèæíÿÿ ëèíèÿ
SMAS[], // âåðõíÿÿ ñèãíàëüíàÿ
TopS[], // âåðõíÿÿ ñèãíàëüíàÿ
BotS[]; // íèæíÿÿ ñèãíàëüíàÿ
// îáùèå ïåðåìåííûå
bool first=1; // ôëàã ïåðâîãî çàïóñêà
double per0,per1; // êîýôô-òû EMA
int FBA=0; // 1 - ñãëàæèâàíèå ôðîíòà, -1 - ñãëàæèâàíèå çàòóõàíèÿ, 0 - îáû÷íàÿ MA - ãëàäèì âñå!
double sens; // ïîðîã ÷óâñòâèòåëüíîñòè â öåíàõ
int init()
{
first=1;
sens=Sens*Point; // ïîðîã ÷óâñòâèòåëüíîñòè â öåíàõ
int fdg,bdg,ddg; // ðàçðÿäíîñòü îòîáðàæåíèÿ ïåðèîäîâ
if(FrontPeriod<1) fdg=2; if(BackPeriod<1) bdg=2; if(Deviation-MathRound(Deviation)!=0) ddg=2;
string _fr=DoubleToStr(FrontPeriod,fdg);
string _bk=DoubleToStr(BackPeriod,bdg);
string _dv=DoubleToStr(Deviation,ddg);
if(FrontPeriod>1) FrontPeriod=2.0/(1+FrontPeriod); // êîýôô. ïðåäâàðèòåëüíîé EMA
if(BackPeriod>1) BackPeriod=2.0/(1+BackPeriod); // êîýôô. ðàçäåëüíîé EMA
while(true) {
if(FrontPeriod==BackPeriod) {
per0=FrontPeriod; per1=1; string _sg=_fr; break;
}
if(FrontPeriod>BackPeriod) {
FBA=-1; per0=FrontPeriod; per1=BackPeriod; _sg=_fr;
}
else {
FBA= 1; per0=BackPeriod; per1=FrontPeriod; _sg=_bk;
}
break;
}
// èíä. áóôåðû
// SMA - ìåäèàíà Bollinger Bands
SetIndexBuffer(0,SMA);
SetIndexStyle(0,DRAW_LINE);
SetIndexLabel(0,"SMA("+BandsPeriod+")");
// âåðõíÿÿ ëèíèÿ
SetIndexBuffer(1,TopB);
SetIndexStyle(1,DRAW_LINE);
SetIndexLabel(1,"TopB(+"+_dv+")");
// íèæíÿÿ ëèíèÿ
SetIndexBuffer(2,BotB);
SetIndexStyle(2,DRAW_LINE);
SetIndexLabel(2,"BotB(-"+_dv+")");
// SMA - ìåäèàíà Bollinger Bands ñèãíàëüíàÿ
SetIndexBuffer(3,SMAS);
SetIndexStyle(3,DRAW_LINE);
SetIndexLabel(3,"SMAS("+_sg+")");
// âåðõíÿÿ ñèãíàëüíàÿ ëèíèÿ
SetIndexBuffer(4,TopS);
SetIndexStyle(4,DRAW_LINE);
SetIndexLabel(4,"TopS("+_fr+","+_bk+")");
// íèæíÿÿ ñèãíàëüíàÿ ëèíèÿ
SetIndexBuffer(5,BotS);
SetIndexStyle(5,DRAW_LINE);
SetIndexLabel(5,"BotS("+_fr+","+_bk+")");
return(0);
}
int reinit() // ô-ÿ äîïîëíèòåëüíîé èíèöèàëèçàöèè
{
ArrayInitialize(SMA,0.0);
ArrayInitialize(TopB,0.0);
ArrayInitialize(BotB,0.0);
ArrayInitialize(TopS,0.0);
ArrayInitialize(BotS,0.0);
return(0);
}
int start()
{
int ic=IndicatorCounted();
//if(!first && Bars-ic-1>1) ic=reinit();
//int limit=Bars-ic-1; // êîë-âî ïåðåñ÷åòîâ
//if(History!=0 && limit>History) limit=History-1; // êîë-âî ïåðåñ÷åòîâ ïî èñòîðèè
int counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
int limit=Bars-counted_bars;
if(counted_bars==0) limit--;
for(int i=limit; i>=0; i--) { // öèêë ïåðåñ÷åòà ïî ÂÑÅÌ áàðàì
bool reset=i==limit && ic==0; // ñáðîñ íà ïåðâîé èòåðàöèè öèêëà ïåðåñ÷åòà
if(reset) {
static double MA0prev=0,MA1prev=0,sma0prev=0;
static int BarsPrev=0;
}
int sh=i+BandsShift; // ñäâèã
// ìåäèàíà Bollinger Bands
double sma=iMA(NULL,0,BandsPeriod,0,0,PriceField, sh);
SMA[i]=sma;
// ñòàíäàðòíàÿ äåâèàöèÿ
double st=iStdDev(NULL,0,BandsPeriod,0,0,PriceField, sh);
st=MathMax(st,sens); // ó÷åò ïîðîãà ÷óâñòâòèòåëüíîñòè
double std=Deviation*st;
// ëèíèè Bollinger Bands
TopB[i]=sma+std; // âåðõíÿÿ ëèíèÿ
BotB[i]=sma-std; // íèæíÿÿ ëèíèÿ
// ïðåäâàðèòåëüíîå ñãëàæèâàíèå
double MA0=EMA_FBA(st,MA0prev,per0,0,i);
double sma0=EMA_FBA(sma,sma0prev,per0,0,i);
SMAS[i]=sma0;
// ñãëàæèâàíèå (ñèãíàëüíàÿ)
double MA1=EMA_FBA(MA0,MA1prev,per1,FBA,i);
// äåâèàöèÿ ñèãíàëüíûõ
std=Deviation*MA1;
// ñèãíàëüíûå ëèíèè
TopS[i]=sma0+std; // âåðõíÿÿ ëèíèÿ
BotS[i]=sma0-std; // íèæíÿÿ ëèíèÿ
// ñèíõðîíèçàöèÿ
if(first || BarsPrev!=Bars) {BarsPrev=Bars; MA0prev=MA0; MA1prev=MA1; sma0prev=sma0;}
}
first=0; // ñáðîñ ôëàãà ïåðâîãî çàïóñêà
return(0);
}
// EMA ñ ðàçëè÷íûìè ïàðàìåòðàìè ñãëàæèâàíèÿ äëÿ ôðîíòà è çàòóõàíèÿ
double EMA_FBA(double C, double MA1, double period, int FBA, int i) {
if(period==1) return(C);
// êîýôô. EMA
if(period>1) period=2.0/(1+period);
// EMA
double ma=period*C+(1-period)*MA1;
// ðàçäåëåíèå ôðîíòà è çàòóõàíèÿ
switch(FBA) {
case 0: // îáû÷íàÿ MA
if(FBA==0) return(ma);
case 1: // ñãëàæèâàíèå ôðîíòà
if(C>MA1) return(ma); else return(C);
case -1: // ñãëàæèâàíèå çàòóõàíèÿ
if(C<MA1) return(ma); else return(C);
}
}
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
---