Price Data Components
Indicators Used
0
Views
0
Downloads
0
Favorites
attention_level
//+------------------------------------------------------------------+
//| Attention Level.mq5 |
//| Pavel Trofimov |
//| https://vk.com/trofimovpp |
//+------------------------------------------------------------------+
#property copyright "Pavel Trofimov"
#property link "https://vk.com/trofimovpp"
#property version "1.00"
#property description "Èíäèêàòîð ðàçìåùàåò íà ãðàôèêå ãîðèçîíòàëüíûé íå òîðãîâûé óðîâåíü, ïîìîãàþùèé âíóòðåäíåâíûì òðåéäåðàì îöåíèòü èçìåíåíèå äíåâíîé òåíäåíöèè â ïîâåäåíèè öåíû."
#property description "Indicator places in the chart do not trade horizontal level, which helps intraday traders to estimate the change in the daily trend in the behavior of prices."
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots 1
//--- include section
#include <ChartObjects\ChartObjectsLines.mqh>//èñïîëüçóåì êëàññû ñòàíäàðòíîé áèáëèîòåêè äëÿ ðàáîòû ñ ãðàôè÷åñêèìè îáúåêòàìè
#include <Arrays\List.mqh>
//--- plot A_L
#property indicator_label1 "A_L"
#property indicator_type1 DRAW_NONE
//--- input section
input int ATR_maPeriod=10; //ATR averaging period \ Ïåðèîä óñðåäíåíèÿ ATR
input color LevelColor=clrRed; //Color line level \ Öâåò ëèíèè óðîâíÿ
input ENUM_LINE_STYLE LevelStyle=STYLE_SOLID; //Style line level \ Ñòèëü ëèíèè óðîâíÿ
input int LevelWidth=1; //Width line level \ Òîëùèíà ëèíèè óðîâíÿ
//--- indicator buffers
double A_LBuffer[];
//--- global variable
MqlRates rates_array[];//ìàññèâ ñ äíåâíûìè êîòèðîâêàìè ñèìâîëà
double ATR_values[];//ìàññèâ çíà÷åíèå èíäèêàòîðà ATR;
int handle;//õåíäë èíäèêàòîðà
string symbol;//ñèìâîë èíñòðóìåíòà
CList m_List_line;//÷ëåí êëàññà CList äëÿ õðàíåíèÿ ãðàôè÷åñêèõ îáúåêòîâ èíäèêàòîðà
CChartObjectHLine *m_HLine;//ïåðåìåííàÿ äëÿ ãðàôè÷åñêèõ îáúåêòîâ Hline
string obj_name="Attention_level";//èìÿ îáúåêòà
int DayCount;//ñ÷åò÷èê äíåâíûõ áàðîâ
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
ArraySetAsSeries(A_LBuffer,true);
SetIndexBuffer(0,A_LBuffer,INDICATOR_CALCULATIONS);
symbol=Symbol();
//--- çàäàåì íàïðàâëåíèå èíäåêñàöèè
ArraySetAsSeries(rates_array,true);
ArraySetAsSeries(ATR_values,true);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator 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[])
{
//--- local variable
int iCod=0;//êîëè÷åñòâî ýëåìåíòîâ ìàññèâà äíåâíûõ êîòèðîâîê
DayCount=Bars(symbol,PERIOD_D1);//ïîëó÷àåì êîëè÷åñòâî äíåâîê â èñòîðèè
if(DayCount==-1) return(0);//åñëè äíåâêè íå ïîëó÷èëè óõîäèì íà îáðàáîòêó íîâîãî ñîáûòèÿ OnCalculate
//--- îòñëåæèâàåì òîëüêî ïåðâîå îáðàùåíèå ê èíäèêàòîðó, â êîòîðîì è ïðîèçâîäèì âñå âû÷èñëåíèÿ
if(prev_calculated==0)
{
if(ATR_Calculation()==-1)return(0);//åñëè íå ñìîãëè ïîëó÷èòü áóôåð ATR óõîäèì íà îáðàáîòêó íîâîãî ñîáûòèÿ OnCalculate
ArrayInitialize(A_LBuffer,0);//èíèöèàëèçèðóåì áóôåð èíäèêàòîðà íóëåâûìè çíà÷åíèÿìè
iCod=CopyRates(symbol,PERIOD_D1,0,DayCount,rates_array);//êîïèðóåì ìàññèâ äíåâíûõ êîòèðîâîê
Level_Calculation(rates_array);//ðàññ÷èòûâàåì è îòðèñîâûâàåì óðîâåíü
};
//--- åñëè â ïðîöåññå òîðãîâ ïîÿâèëñÿ åùå îäèí äíåâíîé áàð (íó òàì âå÷åðêó êòî òîðãóåò)
if(DayCount>iCod)
{
if(ATR_Calculation()==-1)return(rates_total);//åñëè íå ñìîãëè ïîëó÷èòü áóôåð ATR óõîäèì íà îáðàáîòêó íîâîãî ñîáûòèÿ OnCalculate
ArrayInitialize(A_LBuffer,0);//îáíóëÿåì áóôåð çíà÷åíèé èíäèêàòîðà
iCod=CopyRates(symbol,PERIOD_D1,0,DayCount,rates_array);//êîïèðóåì çàíîâî ìàññèâ äíåâíûõ êîòèðîâîê
Level_Calculation(rates_array);//ðàññ÷èòûâàåì è îòðèñîâûâàåì óðîâåíü
};
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+
//| Custom function for calculation and drawing Attention Level |
//+------------------------------------------------------------------+
void Level_Calculation(const MqlRates &rates[])
{
//--- ëîêàëüíûå ïåðåìåííûå
double d_open;//öåíà îòêðûòèÿ äíÿ
double d_close;//öåíà çàêðûòèÿ äíÿ
double d_high;//ìàêñèìóì äíÿ
double d_low;//ìèíèìóì äíÿ
bool end_flag=false;//ôëàã îêîí÷àíèÿ ðàñ÷åòîâ
int k=1;//ñ÷åò÷èê öèêëà
while((k<DayCount) && (!end_flag))
{
//--- ïðèñâîåíèå çíà÷åíèèé äíåâíûõ êîòèðîâîê çà ïðåäûäóùèé äåíü
d_open=rates_array[k].open;
d_close=rates_array[k].close;
d_high=rates_array[k].high;
d_low=rates_array[k].low;
if(d_close<d_open)//ìåäâåæüÿ ñâå÷à
{
A_LBuffer[0]=d_low+ATR_values[k];//çàíîñèì çíà÷åíèå â áóôåð
end_flag=true;
};
if(d_open<d_close)//áû÷üÿ ñâå÷à
{
A_LBuffer[0]=d_high-ATR_values[k];//çàíîñèì çíà÷åíèå â áóôåð
end_flag=true;
};
if(d_open==d_close)//ñóïåð äîäæ - çíà÷èò íè÷åãî îò ïðåäûäóùåãî äíÿ íå èçìåíèëîñü
{
//îáñ÷èòûâàåì åùå îäèí äåíü íàçàä
end_flag=false;
k++;
};
if(end_flag)
{
Comment("Attention level: "+DoubleToString(A_LBuffer[0]));
//--- îòðèñîâêà óðîâíÿ
m_HLine=new CChartObjectHLine();
m_HLine.Create(0,obj_name,0,A_LBuffer[0]);
m_HLine.Color(LevelColor);
m_HLine.Style(LevelStyle);
m_HLine.Width(LevelWidth);
m_List_line.Add(m_HLine);
};
}
}
//+------------------------------------------------------------------+
//| Custom function obtaining buffer values of indicator ATR |
//+------------------------------------------------------------------+
int ATR_Calculation(void)
{
ResetLastError();//îáíóëÿåì ïîñëåäíþþ îøèáêó
handle=iATR(symbol,PERIOD_D1,ATR_maPeriod);//ïîëó÷àåì õåíäë èíäèêàòîðà
int BufSize=CopyBuffer(handle,0,0,ATR_maPeriod,ATR_values);//êîïèðóåì áóôôåð äàííûõ èíäèêàòîðà
if(BufSize==-1)//äàííûå èñòîðèè íå äîñòóïíû â òåðìèíàëå, òåðìèíàëîì îòïðàâëåí çàïðîñ íà èõ ïîëó÷åíèå
{
Print("Error ATR calculation. No day data available. Check the connection to the server");
return(-1);
};
if(DayCount<(ATR_maPeriod+1))//êîëè÷åñòâî äîñòóïíûõ äíåâíûõ áàðîâ ìåíüøå ïåðèîäà îêðóãëåíèÿ
{
Print("Error ATR calculation. Too few historical data uploaded! Try reduce ATR_maPeriod.");
return(-1);
};
return(BufSize);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
m_List_line.Clear();//óäàëåíèå îáúåêòîâ ñïèñêà
//--- åñëè íå ïîëó÷èëîñü óäàëÿåì "âðó÷íóþ"
if(ObjectFind(0,obj_name)>0) ObjectDelete(0,obj_name);
Comment("");
}
//+------------------------------------------------------------------+
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
---