Indicators Used
Moving average indicatorIndicator of the average true range
Miscellaneous
Implements a curve of type %1
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 supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---