VolatilityLevels

Author: ��������� ��������
Price Data Components
Series array that contains the lowest prices of each barSeries array that contains the highest prices of each barSeries array that contains open time of each bar
Indicators Used
Indicator of the average true range
Miscellaneous
It issuies visual alerts to the screen
0 Views
0 Downloads
0 Favorites
VolatilityLevels
#property copyright "Âëàäèñëàâ Âàñèëüåâ"
#property link      "http://www.mql4.com/ru/users/incognitos"
// v1.1

//----------------------------------------------------------------------------------------------------------------------------------+
// Ðèñóåò âíóòðè äíÿ óðîâíè âîëàòèëüíîñòè (ñðåäíåäíåâ. è ìàêñ. çà íåñêîëüêî äíåé) äîêóäà ìîæåò äîéòè öåíà.                          |
// Äàëüøå íèõ ñåãîäíÿ öåíà íå ïîéä¸ò ñ >95% ñòåïåíüþ âåðîÿòíîñòè.                                                                   |
// (Ïî÷åìó óêàçûâàþ òàêîé ïðîöåíò? Ïðîñòî 90% - ýòî 1 ðàç èç 10, à âîëàòèëüíîñòü âûøå ìàêñèìàëüíîé çà 10 äíåé áûâàåò âåñüìà ðåäêî.) |
// Àëãîðèòì: Âîëàòèëüíîñòü ïðåäûäóùèõ äíåé (çà PeriodDays) äîáàâëÿåòñÿ ê ìèí/ìàêñ. ýòîãî äíÿ - ïîëó÷àåì óðîâíè ñ êàæäîé ñòîðîíû.    |
//  òå÷åíèè äíÿ ïîÿâëÿþòñÿ íîâûå ýêñòðåìóìû, ïîýòîìó ê ñåðåäèíå äíÿ ãðàíèöû èíäèêàòîðà ñìåùàþòñÿ.                                  | 
// Óðîâíè ðèñóþòñÿ ñ íà÷àëà òåêóùèõ ñóòîê (00:00).                                                                                  |                                                                                                                  
// 2 âàðèàíòà ðèñîâàíèÿ: êâàäðàòîì èëè ëèíèÿìè.                                                                                     |
//----------------------------------------------------------------------------------------------------------------------------------+
#property indicator_chart_window

   extern   int   PeriodDays=20;  // ïåðèîä äíåé.  1 = â÷åðà, 20 = ÷åòûðå ðàáî÷èå íåäåëè (ìåñÿö)

// ðèñîâàòü êâàäðàò. íèæíÿÿ è âåðõíÿÿ ãðàíèöû - ñðåäíåäíåâ. è ìàêñ. âîëàòèëüíîñòè, ïðàâî-ëåâî - ãðàíèöû ñóòîê   
   extern   bool  ShowRectangle = true;  
// ðèñîâàòü ëèíèè 
   extern   bool  ShowLinesAvrDaysVol = false;  // ðèñîâàòü ëèíèè ñðåäíåäíåâíîé âîë.
   extern   bool  ShowLinesMaxDaysVol = false;  // ðèñîâàòü ëèíèè ìàêñ.äíåâíîé âîë.
// öâåò è ñòèëü ëèíèè
   extern   color Color = LightBlue;     // ïî óìîë÷àíèþ öâåò LightBlue, ñèìâîëèç. îñòûâàíèå òðýíäà, âîçìîæíûé îòñêîê êàê îò ëüäà
   extern   int   Style = STYLE_DASH;  

   extern   bool  ShowVolsInComment=false;  // Ïîêàçûâàòü êîììåíòàðèåì çíà÷åíèÿ âîëàòèëüíîñòè


//+------------------------------------------------------------------+
int init()
{
   // Åñëè âêë.îòîáðàæåíèå êâàäðàòà, âêëþ÷àòåëè îòîáðàæåíèÿ ëèíèÿìè íå ïðèíèìàòü âî âíèìàíèå
   //if (ShowRectangle) {ShowLinesAvrDaysVol=false; ShowLinesMaxDaysVol=false;} 
    
   ObjectDelete ("âîëàòèëüíîñòü ââåðõ");
   ObjectDelete ("âîëàòèëüíîñòü âíèç"); 
   ObjectDelete ("ñðåäíåäíåâ.âîëàòèëüíîñòü ââåðõ");
   ObjectDelete ("ñðåäíåäíåâ.âîëàòèëüíîñòü âíèç");
   ObjectDelete ("ìàêñ.äíåâ.âîëàòèëüíîñòü ââåðõ");
   ObjectDelete ("ìàêñ.äíåâ.âîëàòèëüíîñòü âíèç");
}

int deinit()
{
 if (ShowRectangle){
   ObjectDelete ("âîëàòèëüíîñòü ââåðõ");
   ObjectDelete ("âîëàòèëüíîñòü âíèç"); 
 } else {
   ObjectDelete ("ñðåäíåäíåâ.âîëàòèëüíîñòü ââåðõ");
   ObjectDelete ("ñðåäíåäíåâ.âîëàòèëüíîñòü âíèç");
   ObjectDelete ("ìàêñ.äíåâ.âîëàòèëüíîñòü ââåðõ");
   ObjectDelete ("ìàêñ.äíåâ.âîëàòèëüíîñòü âíèç");}
 if (ShowVolsInComment)  Comment("");  
}


//+------------------------------------------------------------------+
int start()
{   
   if (!IsNewBarM1()) return;   // çàïóñê ðàç â ìèíóòó, ÷òîá íå òðàòèòü çðÿ âðåìÿ ïðîöåññîðà; ïðîâåðêà ïîÿâëåíèÿ íîâîãî áàðà M1
   
   string volcomment = LevelsDayVolatility (PeriodDays, ShowRectangle, ShowLinesAvrDaysVol,ShowLinesMaxDaysVol, Color,Style);

   if (ShowVolsInComment)  Comment(volcomment);     
   
}
//+------------------------------------------------------------------+



//---------------------------------------------------------------------------------------------------+
// Àâòîð:  Âëàäèñëàâ Âàñèëüåâ,  http://www.mql4.com/ru/users/incognitos                              |
// --------------------------------------------------------------------------------------------------|
// Ðèñóåò âíóòðè äíÿ óðîâíè ñðåäíåäíåâíîé (çà DayVlt äíåé) âîëàòèëüíîñòè, äîêóäà ìîæåò äîéòè öåíà    |
//---------------------------------------------------------------------------------------------------+ 
#define SEKUNDvSUTKAH 86400   // ÷èñëî ñåêóíä â ñóòêàõ = 60*60*24
string LevelsDayVolatility (int DayVlt = 5, //  DayVlt - êîë-âî äíåé çà êîòîðûå âû÷èñëÿåòñÿ ñðåäíåäíåâíàÿ âîëàòèëüíîñòü
         bool ShowRectangle=true, bool ShowLinesAvrDaysVol=false, bool ShowLinesMaxDaysVol=false, 
         int Color=Black, int Style=STYLE_DASH)   
{  
   datetime timeDayBegin = iTime(NULL,PERIOD_D1,0);    // âðåìÿ íà÷àëà òåêóùèõ ñóòîê
   int ibarM1DayBegin = iBarShift(NULL,PERIOD_M1,timeDayBegin);   // íîìåð áàðà íà÷àëà ýòèõ ñóòîê (M1 - íàèìåíüøèé òàéìôðåéì ïî êîòîðîìó ìîäåëèðóþòñÿ âñå òèêè) 
   double DayMin = iLow(NULL,PERIOD_M1, iLowest(NULL,PERIOD_M1,MODE_LOW,ibarM1DayBegin));   // ïëàâàþùèé äíåâíîé ìèí
   double DayMax = iHigh(NULL,PERIOD_M1,iHighest(NULL,PERIOD_M1,MODE_HIGH,ibarM1DayBegin)); // ïëàâàþùèé äíåâíîé ìàêñ
   double avgDaysVltPts = iATR(NULL,PERIOD_D1,DayVlt,1);   // ñðåäíåäíåâ.âîëàòèëüíîñòü
   double maxDaysVltPts=MaxDaysVolatility(DayVlt);         // ìàêñ.äíåâ.âîëàòèëüíîñòü
      
   if (ShowRectangle){
      rectangle("âîëàòèëüíîñòü ââåðõ", timeDayBegin, DayMin+avgDaysVltPts, timeDayBegin+SEKUNDvSUTKAH, DayMin+maxDaysVltPts, Color, Style, 1);
      rectangle("âîëàòèëüíîñòü âíèç",  timeDayBegin, DayMax-avgDaysVltPts, timeDayBegin+SEKUNDvSUTKAH, DayMax-maxDaysVltPts, Color, Style, 1);
      }

   if (ShowLinesAvrDaysVol){
      writeline ("ñðåäíåäíåâ.âîëàòèëüíîñòü ââåðõ", DayMin + avgDaysVltPts, Color, Style, 1);  // âîçìîæ.äíåâ.âîëàòèëüíîñòü ââåðõ
      writeline ("ñðåäíåäíåâ.âîëàòèëüíîñòü âíèç",  DayMax - avgDaysVltPts, Color, Style, 1);  // âîçìîæ.äíåâ.âîëàòèëüíîñòü âíèç  
      }   
   if (ShowLinesMaxDaysVol){
      writeline ("ìàêñ.äíåâ.âîëàòèëüíîñòü ââåðõ", DayMin + maxDaysVltPts, Color, Style, 1);  // âîçìîæ.äíåâ.âîëàòèëüíîñòü ââåðõ
      writeline ("ìàêñ.äíåâ.âîëàòèëüíîñòü âíèç",  DayMax - maxDaysVltPts, Color, Style, 1);  // âîçìîæ.äíåâ.âîëàòèëüíîñòü âíèç   
      }
   
   // îòëàäêà
   /*Print (
   " maxDaysVltPts=",DS(maxDaysVltPts),    
   " avgDaysVltPts=",DS(avgDaysVltPts),
   " ThisDayMin=",DS(DayMin),
   " ThisDayMax=",DS(DayMax),
   " ibarlow=",ibarlow," time=",TimeToString(iTime(NULL,PERIOD_M1,ibarlow)),
   " ibarhi=",ibarhi," time=",TimeToString(iTime(NULL,PERIOD_M1,ibarhi)),
   " ibarM1DayBegin=",ibarM1DayBegin,
   " timeDayBegin=",TimeToString(timeDayBegin),
   " MaxDaysVolatility =",DS(MaxDaysVolatility(5))
   );*/
   
   if (ShowVolsInComment)  
      string comment = StringConcatenate("Ñðåäíåäíåâ.âîëàòèëüíîñòü =",DS(avgDaysVltPts)," ïï, ìàêñ.äíåâ.âîëàòèëüíîñòü =",DS(maxDaysVltPts)," ïï");
   return(comment);
}

double MaxDaysVolatility (int DayVlt = 5)   //  DayVlt - êîë-âî äíåé çà êîòîðûå âû÷èñëÿåòñÿ max.äíåâíàÿ âîëàòèëüíîñòü
{  
   if (DayVlt<=0) {Alert("Èíäèêàòîð âîëàòèëüíîñòè: DayVlt äîëæíî áûòü >= 0");}
   double  maxdayvol;
   for (int iday=1; iday<=DayVlt; iday++) { 
      double maxofday=0, minofday=0;
      double dayvol = iHigh(NULL,PERIOD_D1,iday) - iLow(NULL,PERIOD_D1,iday);  
      if (dayvol > maxdayvol) maxdayvol=dayvol;} // int ibarmaxvol=iday;}
   return (maxdayvol);
}


//---------------------------------------------------------------------------------------------/
// îòðèñîâêà ïðÿìîóãîëüíèêà â îñíîâíîì îêíå:
//---------------------------------------------------------------------------------------------/
void rectangle (string name, datetime time1, double Price1, datetime time2, double Price2, color Color, int Style, int Width)
{
 ObjectDelete(name);
 ObjectCreate (name, OBJ_RECTANGLE, 0, time1, Price1, time2, Price2);
 ObjectSet(name, OBJPROP_COLOR, Color);
 ObjectSet(name, OBJPROP_STYLE, Style);
 ObjectSet(name, OBJPROP_WIDTH, Width);
}

//---------------------------------------------------------------------------------------------/
// îòðèñîâêà ãîðèçîíò. ëèíèè â îñíîâíîì îêíå:
//---------------------------------------------------------------------------------------------/
void writeline (string Linename, double Price, color Color, int Style, int Width)
{
 ObjectDelete(Linename);
 ObjectCreate(Linename, OBJ_HLINE, 0, 0, Price);
 ObjectSet(Linename, OBJPROP_COLOR, Color);
 ObjectSet(Linename, OBJPROP_STYLE, Style);
 ObjectSet(Linename, OBJPROP_WIDTH, Width);
}
//---------------------------------------------------------------------------------------------/


//+-------------------------------------------------------------------------------------+
//| Ïðèâåäåíèå äåñÿòè÷íîãî òèïà â ñòðîêîâûé ñ ÷èñëîì çíàêîâ Digits
//+-------------------------------------------------------------------------------------+
string DS(double x) {return(DoubleToStr(x,Digits));}  


// ----------------------------------------------------------------------------|
// Çàïóñê âûçâàâøåé ôóíêöèè ðàç â ìèíóòó, ÷òîá íå òðàòèòü çðÿ âðåìÿ ïðîöåññîðà |
// Èñïîëüçîâàíèå:  if (!RunOnceMinute()) return;                               |
//-----------------------------------------------------------------------------+
bool IsNewBarM1() {   
   static datetime dPrevtime;  
   if (dPrevtime==0  ||  dPrevtime!=iTime(NULL,PERIOD_M1,0)) 
      {dPrevtime=iTime(NULL,PERIOD_M1,0);  
      return (true);}
   else return (false);  
}

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