Price Data Components
Indicators Used
Miscellaneous
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 Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---