Author: Copyright � 2009, piccioli@gmail.com
0 Views
0 Downloads
0 Favorites
i-var95_v1
//+------------------------------------------------------------------+
//|                                                      i-VaR95.mq5 |
//|                                       Copyright © 2009, piccioli | 
//|                                    http://piccstick.blogspot.com |
//+------------------------------------------------------------------+
//| Èíäèêàòîð îòîáðàæàåò çíà÷åíèå èñòîðè÷åñêîé âîëàòèëüíîñòè         |
//| Âîçìîæåí ðàñ÷åò âîëàòèëüíîñòè íåñêîëüêèìè ìåòîäàìè               |
//|  - Simple Historical Volatility                                  |
//|  - Exponential Historical Volatility                             |
//|  - High-Low Historical Volatility                                |
//|                                                                  |  
//| Íåñêîëüêî çàìå÷àíèé:                                             |
//| 1. Äàííûé èíäèêàòîð íå ïîêàçûâàåò òî÷åê âõîäà â ðûíîê            |
//|    è âûõîäà èç íåãî                                              |
//| 2. Êàðòèíêà èíäèêàòîðà ïîõîæà íà êàðòèíêó èçâåòíîãî ATR, îñîáåííî|
//|    ïðè ðàñ÷åòå ìåòîäîì Ïàðêèíñîíà, çíà÷åíèÿ, òåì íå ìåíåå, ðàçíûå|
//| 3. Äëÿ ðàñ÷åòà VaR èñïîëüçóåòñÿ 95-ïðîöåíòíàÿ âåðîÿòíîñòü,       |
//|    òî åñòü èíäèêàòîð îòîáðàæàåò çíà÷åíèå â ïóíêòàõ (áåç ó÷åòà    | 
//|    5-ãî ñèìâîëà), êîòîðîå ìîæåò áûòü äîñòèãíóòî öåíîé ñ          |
//|    âåðîÿòíîñòüþ 5% çà ïåðèîä, ðàâíûé èíâåñòèöèîííîìó             |
//|    ãîðèçîíòó (grznt)                                             |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, piccioli@gmail.com"
#property link      "http://piccstick.blogspot.com"
//----
#property description "Èíäèêàòîð îòîáðàæàåò çíà÷åíèå èñòîðè÷åñêîé âîëàòèëüíîñòè"
#property description "Íåñêîëüêî çàìå÷àíèé: "
#property description "1. Äàííûé èíäèêàòîð íå ïîêàçûâàåò òî÷åê âõîäà â ðûíîê è âûõîäà èç íåãî"
#property description "2. Êàðòèíêà èíäèêàòîðà ïîõîæà íà êàðòèíêó èçâåòíîãî ATR, îñîáåííî|"
#property description "   ïðè ðàñ÷åòå ìåòîäîì Ïàðêèíñîíà, çíà÷åíèÿ, òåì íå ìåíåå, ðàçíûå"
#property description "3. Äëÿ ðàñ÷åòà VaR èñïîëüçóåòñÿ 95-ïðîöåíòíàÿ âåðîÿòíîñòü,"
#property description "   òî åñòü èíäèêàòîð îòîáðàæàåò çíà÷åíèå â ïóíêòàõ, êîòîðîå ìîæåò áûòü äîñòèãíóòî öåíîé"
#property description "   ñ âåðîÿòíîñòüþ 5% çà ïåðèîä, ðàâíûé èíâåñòèöèîííîìó ãîðèçîíòó (grznt)"
//---- íîìåð âåðñèè èíäèêàòîðà
#property version   "1.00"
//---- îòðèñîâêà èíäèêàòîðà â îòäåëüíîì îêíå
#property indicator_separate_window
//---- êîëè÷åñòâî èíäèêàòîðíûõ áóôåðîâ
#property indicator_buffers 2 
//---- èñïîëüçîâàíî âñåãî îäíî ãðàôè÷åñêîå ïîñòðîåíèå
#property indicator_plots   1
//+-----------------------------------+
//| Ïàðàìåòðû îòðèñîâêè èíäèêàòîðà    |
//+-----------------------------------+
//---- îòðèñîâêà èíäèêàòîðà â âèäå òðåõöâåòíîé ãèñòîãðàììû
#property indicator_type1 DRAW_COLOR_HISTOGRAM
//---- â êà÷åñòâå öâåòîâ  èñïîëüçîâàíû
#property indicator_color1 clrGray,clrIndianRed,clrDodgerBlue
//---- ëèíèÿ èíäèêàòîðà - íåïðåðûâíàÿ êðèâàÿ
#property indicator_style1 STYLE_SOLID
//---- òîëùèíà ëèíèè èíäèêàòîðà ðàâíà 4
#property indicator_width1  2
//---- îòîáðàæåíèå ìåòêè èíäèêàòîðà
#property indicator_label1  "HistVolatility"
//+-----------------------------------+
//| Îáúÿâëåíèå ïåðå÷èñëåíèé           |
//+-----------------------------------+
enum MODE //òèï êîíñòàíòû
  {
   SHV = 1,     //Simple Historical Volatility
   EHV,         //Exponential Historical Volatility
   HLHV,        //High-Low Historical Volatility
   VaR95        //95-ïðîöåíòíûé VaR
  };
//+-----------------------------------+
//| Âõîäíûå ïàðàìåòðû èíäèêàòîðà      |
//+-----------------------------------+
input int HV_Period = 21;     // Ïåðèîä ðàñ÷åòà èñòîðè÷åñêîé âîëàòèëüíîñòè
input MODE Mode=SHV;          // Ìåòîä ðàñ÷åòà      
input double decline=0.94;    // Êîýôôèöèåíò ñãëàæèâàíèÿ
                              // òðàäèöèîííî ïðèíèìàåòñÿ ðàâíûì 0.94
                              // äàííûé ïàðàìåòð âëèÿåò òîëüêî íà ýêñïîíåíöèàëüíî-âçâåøåííûé ìåòîä
input int grznt=3;            // Èíâåñòèöèîííûé ãîðèçîíò äëÿ âû÷èñëåíèÿ 95% VaR
input int Shift=0;            // Ñäâèã èíäèêàòîðà ïî ãîðèçîíòàëè â áàðàõ
//+-----------------------------------+
//---- èíäèêàòîðíûå áóôåðû
double LineBuffer[],ColorLineBuffer[];
//---- îáúÿâëåíèå öåëî÷èñëåííûõ ïåðåìåííûõ íà÷àëà îòñ÷åòà äàííûõ
int min_rates_total;
//+------------------------------------------------------------------+   
//| HistVolatility initialization function                           | 
//+------------------------------------------------------------------+ 
void OnInit()
  {
//---- èíèöèàëèçàöèÿ ïåðåìåííûõ íà÷àëà îòñ÷åòà äàííûõ
   min_rates_total=HV_Period+1;
//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â èíäèêàòîðíûé áóôåð
   SetIndexBuffer(0,LineBuffer,INDICATOR_DATA);
//---- îñóùåñòâëåíèå ñäâèãà èíäèêàòîðà 1 ïî ãîðèçîíòàëè
   PlotIndexSetInteger(0,PLOT_SHIFT,Shift);
//---- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷åòà îòðèñîâêè èíäèêàòîðà
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total+1);
//---- óñòàíîâêà çíà÷åíèé èíäèêàòîðà, êîòîðûå íå áóäóò âèäèìû íà ãðàôèêå
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//---- èíäåêñàöèÿ ýëåìåíòîâ â áóôåðå êàê â òàéìñåðèè
   ArraySetAsSeries(LineBuffer,true);
//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â öâåòîâîé, èíäåêñíûé áóôåð   
   SetIndexBuffer(1,ColorLineBuffer,INDICATOR_COLOR_INDEX);
//---- èíäåêñàöèÿ ýëåìåíòîâ â áóôåðå êàê â òàéìñåðèè
   ArraySetAsSeries(ColorLineBuffer,true);
//---- èíèöèàëèçàöèÿ ïåðåìåííîé äëÿ êîðîòêîãî èìåíè èíäèêàòîðà
   string shortname;
   StringConcatenate(shortname,"Historical Volatility(",HV_Period,")");
//--- ñîçäàíèå èìåíè äëÿ îòîáðàæåíèÿ â îòäåëüíîì ïîäîêíå è âî âñïëûâàþùåé ïîäñêàçêå
   IndicatorSetString(INDICATOR_SHORTNAME,shortname);
//--- îïðåäåëåíèå òî÷íîñòè îòîáðàæåíèÿ çíà÷åíèé èíäèêàòîðà
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits+1);
//---- çàâåðøåíèå èíèöèàëèçàöèè
  }
//+------------------------------------------------------------------+ 
//| HistVolatility iteration function                                | 
//+------------------------------------------------------------------+ 
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---- ïðîâåðêà êîëè÷åñòâà áàðîâ íà äîñòàòî÷íîñòü äëÿ ðàñ÷åòà
   if(rates_total<min_rates_total) return(0);
//---- îáúÿâëåíèå öåëî÷èñëåííûõ ïåðåìåííûõ è ïîëó÷åíèå óæå ïîñ÷èòàííûõ áàðîâ
   int limit,bar;
//---- ðàñ÷åòû íåîáõîäèìîãî êîëè÷åñòâà êîïèðóåìûõ äàííûõ è
//---- ñòàðòîâîãî íîìåðà limit äëÿ öèêëà ïåðåñ÷åòà áàðîâ
   if(prev_calculated>rates_total || prev_calculated<=0)// ïðîâåðêà íà ïåðâûé ñòàðò ðàñ÷åòà èíäèêàòîðà
     {
      limit=rates_total-1-min_rates_total; // ñòàðòîâûé íîìåð äëÿ ðàñ÷åòà âñåõ áàðîâ
     }
   else
     {
      limit=rates_total-prev_calculated; // ñòàðòîâûé íîìåð äëÿ ðàñ÷åòà íîâûõ áàðîâ
     }
//---- èíäåêñàöèÿ ýëåìåíòîâ â ìàññèâàõ êàê â òàéìñåðèÿõ  
   ArraySetAsSeries(low,true);
   ArraySetAsSeries(high,true);
   ArraySetAsSeries(close,true);
   ArraySetAsSeries(spread,true);
//---- îñíîâíîé öèêë ðàñ÷åòà èíäèêàòîðà
   for(bar=limit; bar>=0 && !IsStopped(); bar--)LineBuffer[bar]=HistoricalVolatility(Mode,low,high,close,spread,bar);
//----
   if(prev_calculated>rates_total || prev_calculated<=0) limit--;
//---- îñíîâíîé öèêë ðàñêðàñêè èíäèêàòîðà
   for(bar=limit; bar>=0 && !IsStopped(); bar--)
     {
      ColorLineBuffer[bar]=0;
      if(LineBuffer[bar]>LineBuffer[bar+1]) ColorLineBuffer[bar]=2;
      if(LineBuffer[bar]<LineBuffer[bar+1]) ColorLineBuffer[bar]=1;
     }
//----     
   return(rates_total);
  }
//+------------------------------------------------------------------+  
//| Custom iteration function                                        | 
//+------------------------------------------------------------------+
double HistoricalVolatility(MODE mode,const double &Low[],const double &High[],const double &Close[],const int &Spread[],int index)
  {
//----
   int start=int(HV_Period+index-1);
//----
   switch(mode)
     {
      case SHV:
        {
         double tshv=0;
         for(int i=start; i>=index; i--) tshv+=MathLog(Close[i+1]/Close[i+1]);
         tshv/=HV_Period;

         double shv=0;
         for(int i=start; i>=index; i--) shv+=(tshv -(MathLog(Close[i]/Close[i+1])))*(tshv -(MathLog(Close[i]/Close[i+1])));
         return(MathSqrt(shv/(HV_Period-1)));
        }
      //----
      case EHV:
        {
         double tshv=0;
         for(int i=start; i>=index; i--) tshv+=MathLog(Close[i+1]/Close[i+1]);
         tshv/=HV_Period;

         double shv=0;
         for(int i=start; i>=index; i--) shv+=(tshv -(MathLog(Close[i]/Close[i+1])))*(tshv -(MathLog(Close[i]/Close[i+1])));
         shv=MathSqrt(shv/(HV_Period-1));
         double ehv=MathSqrt((1-decline)*shv);
        }
      //----
      case HLHV:
        {
         double hlhv=0;
         for(int i=start; i>=index; i--) hlhv+=(MathLog(High[i]/Low[i])*MathLog(High[i]/Low[i]))/(4*MathLog(2));
         return(MathSqrt(hlhv/HV_Period));
        }
      //----
      case VaR95:
        {
         double tshv=0;
         for(int i=start; i>=index; i--) tshv+=MathLog(Close[i+1]/Close[i+1]);
         tshv/=HV_Period;
         //----
         double shv=0;
         for(int i=start; i>=index; i--) shv+=(tshv -(MathLog(Close[i]/Close[i+1])))*(tshv -(MathLog(Close[i]/Close[i+1])));
         shv=MathSqrt(shv/(HV_Period-1));
         return(1.65 *(shv)*10000*MathSqrt(grznt)+2*Spread[index]);
        }
     }
//----
   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 ---