Indicators Used
Moving average indicatorStandard Deviation indicator
Miscellaneous
Implements a curve of type %1
0 Views
0 Downloads
0 Favorites
_BandsFBA
/* 
Bollinger Bands ñ ðàçëè÷íûìè ïàðàìåòðàìè ñãëàæèâàíèÿ ñò. äåâèàöèè äëÿ ôðîíòà è çàòóõàíèÿ

âûçîâ èç ïîëüçîâàòåëüñêèõ êîäîâ:
iCustom( string symbol, int timeframe, "_BandsFBA", int period, double deviation, int bands_shift, int applied_price, 
double FrontPeriod, double BackPeriod, int mode, int shift);

iCustom(NULL,0,"_BandsFBA",BandsPeriod,Deviation,BandsShift,PriceField,FrontPeriod,BackPeriod, 1,i); // âåðõíÿÿ ãð.
iCustom(NULL,0,"_BandsFBA",BandsPeriod,Deviation,BandsShift,PriceField,FrontPeriod,BackPeriod, 2,i); // íèæíÿÿ ãð.
iCustom(NULL,0,"_BandsFBA",BandsPeriod,Deviation,BandsShift,PriceField,FrontPeriod,BackPeriod, 4,i); // âåðõíÿÿ ñãëàæåííàÿ ãð.
iCustom(NULL,0,"_BandsFBA",BandsPeriod,Deviation,BandsShift,PriceField,FrontPeriod,BackPeriod, 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

 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 - ãëàäèì âñå!

int init()
  {
   first=1;

   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-=2;
   
   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); 
      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 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 ---