Indicators Used
Standard Deviation indicator
Miscellaneous
Implements a curve of type %1
0 Views
0 Downloads
0 Favorites
_StDevFBA
//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
/*
âûçîâ èç ïîëüçîâàòåëüñêèõ êîäîâ:
iCustom(string symbol, int timeframe, "_StDevFBA", int ma_period, int ma_shift, 
int ma_method, int applied_price, double FrontPeriod, double BackPeriod, int shift)

iCustom(NULL,0,"_StDevFBA",StDperiod,StDshift,StDmethod,PriceField,FrontPeriod,BackPeriod, 0,i); // ñò.äåâèàöèÿ
iCustom(NULL,0,"_StDevFBA",StDperiod,StDshift,StDmethod,PriceField,FrontPeriod,BackPeriod, 1,i); // ñèãíàëüíàÿ
*/
#property indicator_separate_window 
#property indicator_buffers 2
#property indicator_color1 Green // ñòàíäàðòíàÿ äåâèàöèÿ
#property indicator_color2 Red // ñèãíàëüíàÿ

// âõîäíûå ïàðàìåòðû
extern int StDperiod=20; // ïåðèîä ñò.äåâèàöèè
extern int StDshift=0; // ñäâèã
extern int StDmethod=0; // ìåòîä ñãëàæèâàíèÿ
extern int PriceField=0; // òèï öåíû
extern double FrontPeriod=1; // ïåðèîä ïðåäâàðèòåëüíîãî ñãëàæèâàíèÿ; ì.á. <1
extern double BackPeriod=55; // ïåðèîä ðàçäåëüíîãî ñãëàæèâàíèÿ; ì.á. <1

int History=0; // êîë-âî ïåðåñ÷åòîâ; 0 - âñå áàðû

               // èíä.áóôåðû
double   StD[], // ñòàíäàðòíàÿ äåâèàöèÿ
EMA[]; // ñèãíàëüíàÿ

       // îáùèå ïåðåìåííûå
bool first=1; // ôëàã ïåðâîãî çàïóñêà
double per0,per1; // êîýôô-òû EMA
int FBA=0; // 1 - ñãëàæèâàíèå ôðîíòà, -1 - ñãëàæèâàíèå çàòóõàíèÿ, 0 - îáû÷íàÿ MA - ãëàäèì âñå!
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
// êîðîòêîå èìÿ
   int fdg,bdg;
   if(FrontPeriod<1) fdg=2; if(BackPeriod<1) bdg=2;
   string _fr=DoubleToStr(FrontPeriod,fdg);
   string _bk=DoubleToStr(BackPeriod,bdg);
   string ShortName="StDev("+StDperiod+") ";
   if(FrontPeriod!=1 || BackPeriod!=1) 
     {
      if(FrontPeriod==BackPeriod) ShortName=ShortName+"("+_fr+")";
      else 
        {
         if(FrontPeriod!=1) ShortName=ShortName+"Front("+_fr+") ";
         if(BackPeriod!=1) ShortName=ShortName+"Back("+_bk+")";
        }
     }
   IndicatorShortName(ShortName);

   first=1;
   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; break;
        }
      if(FrontPeriod>BackPeriod) 
        {
         FBA=-1; per0=FrontPeriod; per1=BackPeriod;
        }
      else 
        {
         FBA=1; per0=BackPeriod; per1=FrontPeriod;
        }
      break;
     }

// èíä. áóôåðû   
// ñòàíäàðòíàÿ äåâèàöèÿ
   SetIndexBuffer(0,StD);
   SetIndexStyle(0,DRAW_LINE,0);
   SetIndexLabel(0,"StDev("+StDperiod+")");
// ñèãíàëüíàÿ
   SetIndexBuffer(1,EMA);
   SetIndexStyle(1,DRAW_LINE,0);
   SetIndexLabel(1,"EMA("+_fr+","+_bk+")");

   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int reinit() // ô-ÿ äîïîëíèòåëüíîé èíèöèàëèçàöèè
  {
   ArrayInitialize(StD,0.0);
   ArrayInitialize(EMA,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; static int BarsPrev=0;}

      // ñòàíäàðòíàÿ äåâèàöèÿ
      StD[i]=iStdDev(NULL,0,StDperiod,StDshift,StDmethod,PriceField,i);

      // ïðåäâàðèòåëüíîå ñãëàæèâàíèå
      double MA0=EMA_FBA(StD[i],MA0prev,per0,0,i);

      // ðàçäåëüíîå ñãëàæèâàíèå (ñèãíàëüíàÿ)
      EMA[i]=EMA_FBA(MA0,EMA[i+1],per1,FBA,i);

      // ñèíõðîíèçàöèÿ
      if(first || BarsPrev!=Bars) {BarsPrev=Bars; MA0prev=MA0;}
     }

   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 ---