Indicators Used
Miscellaneous
0
Views
0
Downloads
0
Favorites
iMACD_ATR
/*
âûçîâ èç êîäîâ; âìåñòî ïîëÿ ñèãíàëüíîé - ATR
double iCustom(
string symbol, // ñèìâîëüíîå èìÿ èíñòðóìåíòà (NULL- òåêóùèé)
int timeframe, // òàéì-ôðåéì (0- òåêóùèé)
"iMACD±ATR", // èìÿ ýòîãî èíäèêàòîðà
// âõîäíûå ïàðàìåòðû
double fast_ema_period, // ïåðèîä áûñòðîé EMA; ì.á.äðîáíûì (>1) è â âèäå êîýôô-òà (<1)
double slow_ema_period, // ïåðèîä ìåäëåííîé EMA; ì.á.äðîáíûì (>1) è â âèäå êîýôô-òà (<1)
int atr_period, // ïåðèîä ATR, åñëè =0, òî atr_period=slow_ema_period
int applied_price, // òèï öåíû:
// 0 - PRICE_CLOSE - öåíà çàêðûòèÿ
// 1 - PRICE_OPEN - öåíà îòêðûòèÿ
// 2 - PRICE_HIGH - ìàêñ.öåíà
// 3 - PRICE_LOW - ìèí.öåíà
// 4 - PRICE_MEDIAN - ñðåäíÿÿ öåíà,(high+low)/2
// 5 - PRICE_TYPICAL - òèïè÷íàÿ öåíà,(high+low+close)/3
// 6 - PRICE_WEIGHTED - âçâåøåííàÿ öåíà çàêðûòèÿ,(high+low+close+close)/4
// áóôåðû
mode, // mode - íîìåð áóôåðà èíäèêàòîðà:
// 0 - ãëàâíàÿ
// 1 - ãëàâíàÿ +/- ATR
// 2 - ïèê
// 3 - âïàäèíà
//
int shift // ñäâèã
)
==============
iCustom(NULL,0,"iMACD±ATR",FastEMA,SlowEMA,ATR,Price, 0,i);
*/
#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color1 Gray // MACD
#property indicator_color2 Blue // MACD±ATR
#property indicator_color3 Green // ïèê
#property indicator_color4 Red // âïàäèíà
// âõîäíûå ïàðàìåòðû
extern double FastEMA=12; // ïåðèîä áûñòðîé EMA; ì.á.äðîáíûì (>1) è â âèäå êîýôô-òà (<1)
double f0;
extern double SlowEMA=26; // ïåðèîä ìåäëåííîé EMA; ì.á.äðîáíûì (>1) è â âèäå êîýôô-òà (<1)
double s0;
extern int ATR=0; // ïåðèîä ATR, åñëè =0, òî ATR=SlowEMA
double kATR=1; // ìàñøòàáèðóþùèé ìíîæèòåëü
double ATRmin=0; // øóìîâîé ïîðîã çíà÷åíèÿ ATR â ïï.
extern int Price=0; // òèï öåíû:
int History=0; // 0- âñå áàðû
double MACD[], // MACD
TR[], // MACD±ATR
UP[],DN[]; // ýêñòðåìóìû
double fper,sper; // ïðîèçâîäíûé ïåðèîä
void init() {
if(FastEMA>1) {f0=2/(1+FastEMA); fper=FastEMA;}
else {f0=FastEMA; fper=(2-FastEMA)/FastEMA;}
if(SlowEMA>1) {s0=2/(1+SlowEMA); sper=SlowEMA;}
else {s0=SlowEMA; sper=(2-SlowEMA)/SlowEMA;}
if(ATR==0) ATR=SlowEMA;
string _atrmin=DoubleToStr(ATRmin,1);
ATRmin*=Point; // øóìîâîé ïîðîã çíà÷åíèÿ ATR â öåíàõ
IndicatorDigits(5);
// MACD
string _macd="MACD("+DoubleToStr(fper,2)+","+DoubleToStr(sper,2);
SetIndexBuffer(0,MACD);
SetIndexStyle(0,DRAW_HISTOGRAM);
SetIndexLabel(0,_macd+")");
SetIndexEmptyValue(0,0.0);
// MACD±ATR
string _tr="±"+ATR+")";
SetIndexBuffer(1,TR);
SetIndexStyle(1,DRAW_LINE);
SetIndexLabel(1,"TR("+_tr);
SetIndexEmptyValue(1,0.0);
// ïèêè
SetIndexBuffer(2,UP);
SetIndexStyle(2,DRAW_HISTOGRAM,1,2);
SetIndexLabel(2,"Peak");
// âïàäèíû
SetIndexBuffer(3,DN);
SetIndexStyle(3,DRAW_HISTOGRAM,1,2);
SetIndexLabel(3,"Trough");
if(ATRmin>0) _macd=_atrmin+" "+_macd;
IndicatorShortName(_macd+","+_tr);
}
void start() {
int limit=Bars-IndicatorCounted()-1;
if(limit>1) limit=MathMin(Bars,History+(History==0)*Bars)-1;
// öèêë ïåðåñ÷åòà
for(int i=limit; i>=0; i--) {
// MACD
double c=iMA(NULL,0,1,0,0,Price, i); // öåíà
static double fm1,sm1; // EMAs previous
if(i==limit && i>1) {fm1=c;sm1=c;} // íà÷àëüíûå çíà÷åíèå
double fm0=f0*c+(1-f0)*fm1; // fast MA
double sm0=s0*c+(1-s0)*sm1; // slow MA
MACD[i]=fm0-sm0; // MACD
// MACD±ATR
double atr=kATR*iATR(NULL,0,ATR, i); // ATR
atr=MathMax(atr,ATRmin); // øóìîâîé ïîðîã
if(MACD[i]>0) TR[i]=MACD[i]-atr; // äëÿ ïîëîæèòåëüíûõ çíà÷åíèé MACD
if(MACD[i]<0) TR[i]=MACD[i]+atr; // äëÿ îòðèöàòåëüíûõ çíà÷åíèé MACD
// ýêñòðåìóìû
if(MACD[i]>0 && MACD[i+1]<MACD[i] && TR[i]>=0) UP[i]=MACD[i]; // ïèêè
if(MACD[i]<0 && MACD[i+1]>MACD[i] && TR[i]<=0) DN[i]=MACD[i]; // âïàäèíû
// ñèíõðîíèçàöèÿ
if(i>0) {fm1=fm0; sm1=sm0;}
}
}
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
---