attention_level

Author: Pavel Trofimov
Price Data Components
Indicators Used
Indicator of the average true range
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 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 ---