_Volatility_FBA_NR

Indicators Used
Indicator of the average true rangeStandard Deviation indicator
Miscellaneous
Implements a curve of type %1
0 Views
0 Downloads
0 Favorites
_Volatility_FBA_NR
/*
âûçîâ èç ïîëüçîâàòåëüñêèõ êîäîâ:

iCustom(NULL,0,"_Volatility_FBA_NR",Source,SourcePeriod,FrontPeriod,BackPeriod,Sens, 0,i); // âîëàòèëüíîñòü
iCustom(NULL,0,"_Volatility_FBA_NR",Source,SourcePeriod,FrontPeriod,BackPeriod,Sens, 1,i); // ñèãíàëüíàÿ
*/
#property indicator_separate_window 
#property indicator_buffers 2
#property indicator_color1 Green // VLT
#property indicator_color2 Red // ñèãíàëüíàÿ
#property indicator_minimum 0

// âõîäíûå ïàðàìåòðû
   // VLT
extern int Source=1; // èñòî÷íèê: 0 - îáúåì, 1 - ATR, 2 - ñò.äåâèàöèÿ
extern int SourcePeriod=22; // ïåðèîä èñòî÷íèêà
   // ñèãíàëüíàÿ
extern double FrontPeriod=1; // ïåðèîä ñãëàæèâàíèÿ ôðîíòà; ì.á. <1
extern double BackPeriod=444; // ïåðèîä ñãëàæèâàíèÿ çàòóõàíèÿ; ì.á. <1
   // ïîðîã
extern int Sens=0; // ïîðîã ÷óâñòâèòåëüíîñòè â ïï. èëè â òèêàõ (äëÿ îáúåìà)

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

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

// îáùèå ïåðåìåííûå
bool first=1; // ôëàã ïåðâîãî çàïóñêà
double per0,per1; // êîýôô-òû EMA
int FBA=0; // 1 - ñãëàæèâàíèå ôðîíòà, -1 - ñãëàæèâàíèå çàòóõàíèÿ, 0 - îáû÷íàÿ MA - ãëàäèì âñå!
double sens; // ïîðîã ÷óâñòâèòåëüíîñòè â öåíàõ

int init()
  {
   first=1;
   
   // êîðîòêîå èìÿ
      // ðàçðÿäíîñòè êîýôôèöèåíòîâ äëÿ EMA
   int fdg,bdg; 
   if(FrontPeriod<1) fdg=2; if(BackPeriod<1) bdg=2;
   string _fr=DoubleToStr(FrontPeriod,fdg);
   string _bk=DoubleToStr(BackPeriod,bdg);
      // ÷óâñòâèòåëüíîñòü
   if(Sens>0) string ShortName=Sens+" "; 
      // èñòî÷íèê
   string _src;
   switch(Source) {
      case 0: _src="Volume"; break; // îáúåì
      case 1: _src="ATR"; break; // ATR
      case 2: _src="StDev"; // ñò.äåâèàöèÿ
     }
   _src=_src+"(";
   ShortName=ShortName+_src+SourcePeriod+")";
      // ôðîíò è çàòóõàíèå
   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); 

   //
   if(Source>0) sens=Sens*Point; // ïîðîã ÷óâñòâèòåëüíîñòè â öåíàõ
   else sens=Sens; // â òèêàõ

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

   // èíä. áóôåðû   
   // VLT
   SetIndexBuffer(0,VLT);
   SetIndexStyle(0,DRAW_LINE,0);
   SetIndexLabel(0,_src+SourcePeriod+")");
   // ñèãíàëüíàÿ
   SetIndexBuffer(1,EMA);
   SetIndexStyle(1,DRAW_LINE,0);
   SetIndexLabel(1,"EMA("+_fr+","+_bk+")");

   // ïîðîã ÷óâñòâèòåëüíîñòè
   SetLevelValue(0,sens);

   return(0);
  }


int reinit() // ô-ÿ äîïîëíèòåëüíîé èíèöèàëèçàöèè
  {
   ArrayInitialize(VLT,0.0);
   ArrayInitialize(EMA,0.0);
   first=1;

   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; // êîë-âî ïåðåñ÷åòîâ ïî èñòîðèè

   for(int i=limit; i>=0; i--) { // öèêë ïåðåñ÷åòà ïî ÂÑÅÌ áàðàì
      bool reset=i==limit && ic==0; // ñáðîñ íà ïåðâîé èòåðàöèè öèêëà ïåðåñ÷åòà

      if(reset) {static double MA0prev=0,MA1prev=0; static int BarsPrev=0;}
      
      // VLT
      switch(Source) {
         case 0: 
            double ma=VLT[i+1]*SourcePeriod-Volume[i+SourcePeriod];
            VLT[i]=(ma+Volume[i])/SourcePeriod;
            break;
         case 1: VLT[i]=iATR(NULL,0,SourcePeriod, i); break; // ATR
         case 2: VLT[i]=iStdDev(NULL,0,SourcePeriod,0,0,0, i);  // ñò.äåâèàöèÿ
        }
      double vlt=VLT[i];

      // ïðåäâàðèòåëüíîå ñãëàæèâàíèå
      double MA0=EMA_FBA(vlt,MA0prev,per0,0,i);
      
      // ðàçäåëüíîå ñãëàæèâàíèå (ñèãíàëüíàÿ)
      double MA1=EMA_FBA(MA0,MA1prev,per1,FBA,i); 

      // ó÷åò ïîðîãà
      EMA[i]=MathMax(MA1,sens);
      
      // ñèíõðîíèçàöèÿ
      if(first || BarsPrev!=Bars) {BarsPrev=Bars; MA0prev=MA0; MA1prev=MA1;}

     }   

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