Indicators Used
MACD Histogram
Miscellaneous
Implements a curve of type %1
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 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 ---