ParkinsonHistVolatility

Author: Copyright � 2008, Victor Umnyashkin
Miscellaneous
It issuies visual alerts to the screenImplements a curve of type %1
0 Views
0 Downloads
0 Favorites
ParkinsonHistVolatility
//+------------------------------------------------------------------+
//|                                            Victor Umnyashkin.mq4 |
//|                      Copyright © 2008, MetaQuotes Software Corp. |
//|  ver 1.0                               http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, Victor Umnyashkin"
#property link      "v354@hotbox.ru"
//---------
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 MediumSeaGreen
#property indicator_width1 1
//------parameters
extern int HI_Vol_Period=21;
extern int Trading_Day_In_Year=365;
extern bool Volatility_In_Percent=true;
int Is_Use_Log_Scale = 1;
extern int Number_Of_Bars=1000;
extern double Coeff_Impl_Vol=1;
//--------------common arrays--------------------------
double HiVol[];
double Hi[],Lo[];
//----------common  variables
int Nbar,Per,YearBase,IsLog;
double Percent,Coeff;
//--------------------------
int init()
{  
  //------åñëè íå çàäàíî êîëè÷åñòâî áàðîâ áåðåì âñþ èñòîðèþ
  if( Number_Of_Bars == 0 ) Number_Of_Bars=Bars;
  //------reassign parameters
  IsLog=Is_Use_Log_Scale;
  Per=HI_Vol_Period;
  Coeff=Coeff_Impl_Vol; 
  //------ïåðèîä äîëæåí áûòü >=2
  if( Per <= 1 ) Per=2;
  //-----íåëüçÿ ïîñ÷èòàòü çà ïðåäåëàìè äîñòóïíîé èñòîðèè
  if( Number_Of_Bars > Bars) Number_Of_Bars=Bars;  
  //------
  Nbar=Number_Of_Bars-Per-1;  
  //---------------check enough history
  if( Nbar <= 1 ) Alert("Íåäîñòàòî÷íî èñòîðèè äëÿ ðàñ÷åòà èíäèêàòîðà. Äîñòóïíî  áàðîâ ", Bars," Íàäî ",Per+1);
  //------type of measurement unit
  Percent=1;
  if( Volatility_In_Percent ) Percent=100;
  //--------âû÷èñëÿåì ãîäîâóþ áàçó òåêóùåãî òàéìôðåéìà
  //-------ò.å. êîëè÷åñòâî áàðîâ òåêóùåãî òàéìôðåéìà â êîëè÷åñòâå òîðãîâûõ äíåé ãîäà( êîë-âî áàðîâ â ãîäó)
  YearBase=Trading_Day_In_Year;
  YearBase=YearBase*PERIOD_D1/Period();
  //--------åñëè ÷èñëî òîðãîâûõ äíåé â ãîäó íå óêàçàíî òî âû÷èñëÿåì ïðîñòî âîëàòèëüíîñòü çà N bar
  if( YearBase == 0 ) YearBase=Per;   
  //---- indicators
  int dig = MathMax(Digits,4);
  if( Volatility_In_Percent ) dig=4;
  IndicatorDigits(dig);
  IndicatorBuffers(1);  
  SetIndexBuffer(0,HiVol);
  //----òèï ëèíèè
  SetIndexStyle(0, DRAW_LINE);
  //------------------íå ðèñîâàòü íóëè  
  SetIndexEmptyValue(0,0);
  //-----------ôîðìèðóåì èìÿ èíäèêàòîðíîé ëèíèè
  string shortname,fullname;
  shortname ="PHV("+Per+")";
  if (Volatility_In_Percent) shortname=shortname+" % ";
  SetIndexLabel(0,shortname);
  //ôîðìèðóåì íàçâàíèå èíäèêàòîðà
  fullname="Parkinson Hi Vol ";
  if(IsLog != 1 ) fullname="Hist.Vol.No Log scale";
  //--------äîáàâëÿåì çíà÷åíèå ãîäîâîé áàçû â áàðàõ åñëè íàäî
  if( YearBase != Per ) fullname=fullname+" taken on "+YearBase+ " bars year base";
  fullname=fullname+" "+shortname;    
  //Print(fullname);
  IndicatorShortName(fullname);
  //-----------ôîðìèðóåì ìàññèâ öåí ïå÷àòàì êîëè÷åñòâî áàðîâ
  //ArraySetAsSeries(Price,true);  
  int TMP;//=ArrayResize(Price,Per);
  ArraySetAsSeries(Hi,true);
  TMP=ArrayResize(Hi,Per);
  ArraySetAsSeries(Lo,true);
  TMP=ArrayResize(Lo,Per);
  
  //int TMP2=ArraySize(HiVol);
  Print(shortname+" Bars used for calculation ", TMP," All History Bars ", Bars,
        " Used history bars ",Number_Of_Bars," Result array lenght Bars ",Nbar);

  return(0);

}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
{
   int limit;
   int    counted_bars=IndicatorCounted();
   
   //----initial zero
   if( counted_bars < 1 )for(int i2=Bars-1; i2<Nbar;i2--) HiVol[i2]=0.0;   
   
   //limit=Bars-counted_bars;
   limit=Nbar+1;
   if(counted_bars>Bars-Nbar) limit=Bars-counted_bars+1;
//----calculat indicator
    //limit=3;
    for( int i = 0 ; i< limit ; i++)
       {
       //------form price array
       for( int j=0;j<Per;j++)
         { 
         Hi[j]=High[i+j];Lo[j]=Low[i+j];       
         }
       //---------call function of calculate N-Bar volatility
       double Volatility= WVHiVolParkinson(Per,Hi,Lo);       
       //------take volatility to year base
       //------& multiply on approx coeff of implyed voatility
       HiVol[i]=Volatility*MathSqrt(1.0*YearBase/Per)*Percent*Coeff;
       //HiVol[i]=Volatility;
       }   
   return(0);
}

double WVHiVolParkinson(int N,double Hi[],double Lo[])
{
   double Log2=MathLog(2.0);
   double sum=0;
   for( int i =0 ; i<N ; i++ )
      {
      sum = sum + MathPow( MathLog( Hi[i]/Lo[i] ) ,2 )/(4*Log2);
      }
   
   sum=MathSqrt(sum/*/N*/);
   return(sum);
}

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