Indicators Used
Miscellaneous
0
Views
0
Downloads
0
Favorites
_MACD_Xtr
/*
iCustom(NULL,0,"_MACD_Xtr",FastMA,SlowMA,Source,SourcePeriod,FrontPeriod,xVolatility,Sens, N,i);
*/
#property indicator_separate_window // â îêíå èíäèêàòîðà
#property indicator_buffers 5
#property indicator_color1 Blue //
#property indicator_color2 Gray // óðîâåíü ÏÊ
#property indicator_color3 Gray // óðîâåíü ÏÏ
#property indicator_color4 Green // áàð â çîíå ÏÊ
#property indicator_color5 Red // áàð â çîíå ÏÏ
// âõîäíûå ïàðàìåòðû
// MACD
extern int FastMA=12; // ïåðèîä áûñòðîé EMA
extern int SlowMA=26; // ïåðèîä ìåäëåííîé EMA
// âîëàòèëüíîñòü
extern int Source=1; // èñòî÷íèê: 0 - îáúåì, 1 - ATR, 2 - ñò.äåâèàöèÿ
extern int SourcePeriod=5; // ïåðèîä èñòî÷íèêà
// ñèãíàëüíàÿ
double FrontPeriod=1; // ïåðèîä ñãëàæèâàíèÿ ôðîíòà; ì.á. <1
extern double BackPeriod=444; // ïåðèîä ñãëàæèâàíèÿ çàòóõàíèÿ; ì.á. <1
// óðîâíè ÏÊ/ÏÏ
extern double xVolatility=0.5;
extern double Sens=0; // ïîðîã ÷óâñòâèòåëüíîñòè â ïï. èëè â òèêàõ (äëÿ îáúåìà)
int History=0; // êîë-âî áàðîâ ïðåäûñòîðèè; 0 - âñå
// èíä.áóôåðû
double MACD[], // MACD
OB[], // óðîâåíü ÏÊ
OS[], // óðîâåíü ÏÏ
OBH[], // áàð â çîíå ÏÊ
OSH[]; // áàð â çîíå ÏÏ
// îáùèå (ãëîáàëüíûå) ïåðåìåííûå
bool first=1; // ôëàã ïåðâîãî çàïóñêà
double sens; // ïîðîã ÷óâñòâèòåëüíîñòè â öåíàõ
// èíèöèàëèçàöèÿ
int init()
{
first=1;
sens=Sens*Point; // ïîðîã ÷óâñòâèòåëüíîñòè â öåíàõ
string _md="MACD("+FastMA+","+SlowMA+")";
SetIndexBuffer(0,MACD);
SetIndexStyle(0,DRAW_HISTOGRAM,0);
SetIndexLabel(0,_md);
SetIndexBuffer(1,OB);
SetIndexStyle(1,DRAW_LINE,2);
SetIndexLabel(1,"OB");
SetIndexBuffer(2,OS);
SetIndexStyle(2,DRAW_LINE,2);
SetIndexLabel(2,"OS");
SetIndexBuffer(3,OBH);
SetIndexStyle(3,DRAW_HISTOGRAM,0,2);
SetIndexLabel(3,"Peak");
SetIndexBuffer(4,OSH);
SetIndexStyle(4,DRAW_HISTOGRAM,0,2);
SetIndexLabel(4,"Trough");
if(BackPeriod<1) string _bk=DoubleToStr(BackPeriod,3); else _bk=DoubleToStr(BackPeriod,0);
// ÷óâñòâèòåëüíîñòü
if(Sens>0) string _src=DoubleToStr(Sens,1)+" ";
// èñòî÷íèê
switch(Source) {
case 0: _src=_src+"Volume"; break; // îáúåì
case 1: _src=_src+"ATR"; break; // ATR
case 2: _src=_src+"StDev"; // ñò.äåâèàöèÿ
}
_src=_src+"("+SourcePeriod+","+_bk+")";
IndicatorShortName(_md+" "+_src);
return(0);
}
// ô-ÿ äîïîëíèòåëüíîé èíèöèàëèçàöèè
int reinit()
{
ArrayInitialize(MACD,0.0); // îáíóëåíèå ìàññèâà
ArrayInitialize(OB,0.0); // îáíóëåíèå ìàññèâà
ArrayInitialize(OS,0.0); // îáíóëåíèå ìàññèâà
ArrayInitialize(OBH,0.0); // îáíóëåíèå ìàññèâà
ArrayInitialize(OSH,0.0); // îáíóëåíèå ìàññèâà
return(0);
}
int start()
{
int ic=IndicatorCounted();
if(!first && Bars-ic-1>1) ic=reinit(); // åñëè åñòü ïðîïóùåííûå áàðû íå íà ïîäêëþ÷åíèè - ïåðåñ÷åò
bool ic0=ic==0; // ôëàã ïåðåñ÷åòà
int limit=Bars-ic-1; // êîë-âî ïåðåñ÷åòîâ
if(History!=0 && limit>History) limit=History-1; // êîë-âî ïåðåñ÷åòîâ ïî èñòîðèè
for(int i=limit; i>=0; i--) { // öèêë ïåðåñ÷åòà ïî ÂÑÅÌ áàðàì
double macd=iMACD(NULL,0,FastMA,SlowMA,1,0, 0,i);
MACD[i]=macd;
double vlt=xVolatility*iCustom(NULL,0,"_Volatility_FBA_NR",Source,SourcePeriod,FrontPeriod,BackPeriod,0, 1,i);
double lev=MathMax(sens,vlt);
OB[i]=lev; OS[i]=-lev;
if(macd> lev) OBH[i]=macd; else OBH[i]=0;
if(macd<-lev) OSH[i]=macd; else OSH[i]=0;
}
first=0; // ñáðîñ ôëàãà ïåðâîãî öèêëà
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
---