dailysize_v1

Author: Tapochun
0 Views
0 Downloads
0 Favorites
dailysize_v1
//+------------------------------------------------------------------+
//|                                                   DailyRange.mq5 |
//|                                                         Tapochun |
//|                         https://login.mql5.com/ru/users/tapochun |
//+------------------------------------------------------------------+
#property copyright "Tapochun"
#property link      "https://login.mql5.com/ru/users/tapochun"
#property version   "1.00"
#property indicator_separate_window
#property indicator_minimum 0
#property indicator_plots 1
#property indicator_buffers 1
//---
#property indicator_type1 DRAW_HISTOGRAM
#property indicator_color1 clrRed
#property indicator_label1 "DailyRange"
//+------------------------------------------------------------------+
//| Ãëîáàëüíûå ïåðåìåííûå															|
//+------------------------------------------------------------------+
double bufRange[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- Âûïîëíÿåì ïðîâåðêó äîïóñòèìîãî ÒÔ
   bool answer=CheckTimeframe();
   if( !answer ) return( INIT_PARAMETERS_INCORRECT );
//--- Ïðèñâàèâàåì èíäåêñ èíäèêàòîðíîìó áóôåðó
   SetIndexBuffer(0,bufRange);
//--- Óñòàíàâëèâàåì òî÷íîñòü çíà÷åíèé èíäèêàòîðà
   IndicatorSetInteger(INDICATOR_DIGITS,0);
//--- Óñòàíàâëèâàåì íà÷àëüíûå çíà÷åíèÿ èíäèêàòîðíîãî áóôåðà
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);
//---
   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[])
  {
//--- Åñëè íåò ïðîñ÷èòàííûõ äàííûõ - âûõîäèì
   if( rates_total <= 0 ) return( 0 );
//---
   static int dNum;               // Íîìåð ïðîâåðÿåìîãî äíÿ
   static double dHigh = 0.0;   // Ìàêñèìóì ïðîâåðÿåìîãî äíÿ
   static double dLow = DBL_MAX;// Ìèíèìóì ïðîâåðÿåìîãî äíÿ
//---
   if(prev_calculated!=0) // Åñëè íå ïåðâûé ðàñ÷åò
     {
      //--- Ðàññ÷èòûâàåì èíäèêàòîð íà ïåðâîé ñâå÷å
      Calculation(rates_total-1,dNum,dHigh,dLow,rates_total,time,high,low);
     }
   else                         // Åñëè ïåðâûé ðàñ÷åò èíäèêàòîðà
     {
      //--- Èíèöèàëèçèðóåì èíäèêàòîðíûé áóôåð íà÷àëüíûìè çíà÷åíèÿìè
      ArrayInitialize(bufRange,0.0);
      //--- Îïðåäåëÿåì íîìåð áàðà ïåðâîãî ïîëíîñòüþ äîñòóïíîãî äíÿ
      int firstBar = GetFirstBar( time, rates_total, dNum );
      if( firstBar == 0 ) return( 0 );
      //--- Ðàññ÷èòûâàåì èíäèêàòîð ñ áàðà firstBar
      Calculation(firstBar,dNum,dHigh,dLow,rates_total,time,high,low);
     }
//---
   return( rates_total );
  }
//+------------------------------------------------------------------+
//| Ïðîâåðêà äîïóñòèìîñòè ðàçìåðà ÒÔ											|
//+------------------------------------------------------------------+
bool CheckTimeframe()
  {
   if(_Period>PERIOD_D1) // Åñëè òåêóùèé ÒÔ áîëüøå Ä1
     {
      Print(__FUNCTION__,": Èíäèêàòîð ïðåäíàçíà÷åí äëÿ çàïóñêà íà ÒÔ äî D1. Óìåíüøèòå ÒÔ!");
      return(false);            // Âûõîäèì ñ îøèáêîé
     }
   else return(true);         // Åñëè äîïóñòèìûé ÒÔ - âîçâðàùàåì èñòèíó
  }
//+------------------------------------------------------------------+
//| Ïîëó÷àåì íîìåð ïåðâîãî áàðà ïîëíîñòüþ äîñòóïíîãî äíÿ					|
//+------------------------------------------------------------------+
int GetFirstBar(const datetime &time[],// Ìàññèâ âðåìåí îòêðûòèÿ áàðîâ ïî òåêóùåìó ÒÔ
                const int rates_total,// Êîëè÷åñòâî ïðîñ÷èòàííûõ áàðîâ
                int &dayNum) // Íîìåð ïðîâåðÿåìîãî äíÿ (out)
  {
   int prev = GetDayNumber(time[ 0 ] );      // Íîìåð äíÿ íà ïðåäûäóùåì áàðå
   int curr;                                 // Íîìåð äíÿ íà òåêóùåì áàðå
   for(int i=1; i<rates_total; i++) // Öèêë ïî ïðîñ÷èòàííûõ áàðàì
     {
      curr=GetDayNumber(time[i]);      // Îïðåäåëÿåì íîìåð äíÿ íà òåêóùåì áàðå
      if(curr==prev) continue;            // Åñëè íîìåðà ñîâïàäàþþò - ïåðåõîäèì ê ñëåä. áàðó
      else                                  // Åñëè íîìåðà íå ñîâïàäàþò
        {
         dayNum = curr;                     // Çàïîìèíàåì íîìåð ïåðâîãî ïðîâåðÿåìîãî äíÿ
         return(i );                        // Âîçâðàùàåì íîìåð áàðà ïåðâîãî ïîëíîãî äíÿ
        }
     }
//---
   Print(__FUNCTION__,": Îæèäàåì áîëüøå äàííûõ..");
   return(0);                              // Âîçâðàùàåì 0
  }
//+------------------------------------------------------------------+
//| Îïðåäåëÿåì íîìåð äíÿ ïî âðåìåíè	áàðà										|
//+------------------------------------------------------------------+
int GetDayNumber(const datetime time) // Âðåìÿ áàðà
  {
   MqlDateTime tStr;                        // Ñòðóêòóðà âðåìåíè
   TimeToStruct( time,tStr );               // Âðåìÿ â ñòðóêòóðó
   return(tStr.day);                        // Âîçâðàùàåì íîìåð òåêóùåãî äíÿ
  }
//+------------------------------------------------------------------+
//| Ôóíêöèÿ ðàñ÷åòà èíäèêàòîðà													|
//+------------------------------------------------------------------+
void Calculation(const int firstBar,// Íîìåð ïåðâîãî áàðà äëÿ ðàñ÷åòà
                 int &dNum,// Íîìåð ïðîâåðÿåìîãî äíÿ (out)
                 double &dHigh,// Ìàêñèìóì ïðîâåðÿåìîãî äíÿ (out)
                 double &dLow,// Ìèíèìóì ïðîâåðÿåìîãî äíÿ (out)
                 const int rates_total,// Êîëè÷åñòâî ïðîñ÷èòàííûõ áàðîâ
                 const datetime &time[],// Ìàññèâ âðåìåí îòêðûòèÿ ïðîñ÷èòàííûõ áàðîâ
                 const double &high[],// Ìàññèâ ìàêñèìóìîâ ïðîñ÷èòàííûõ áàðîâ
                 const double &low[])// Ìàññèâ ìèíèìóìîâ ïðîñ÷èòàííûõ áàðîâ
  {
   int iNum;                                 // Íîìåð äíÿ íà i áàðå
   for(int i = firstBar; i<rates_total; i++) // Öèêë ñôîðìèðîâàííûì áàðàì
     {
      iNum = GetDayNumber( time[ i ] );      // Ïîëó÷àåì íîìåð äíÿ íà i áàðå
      if( dNum != iNum )                     // Åñëè ñ÷èòàåòñÿ íîâûé äåíü
        {
         //--- Ñáðàñûâàåì ïàðàìåòðû äíÿ
         dNum = iNum;                        // Çàïîìèíàåì íîâûé íîìåð ïðîâåðÿåìîãî äíÿ
         dHigh = high[ i ];                  // Çàïîìèíàåì ìàêñèìóì i ñâå÷è
         dLow= low[ i ];                     // Çàïîìèíàåì ìèíèìóì i ñâå÷è
        }
      else                                  // Åñëè ñ÷èòàåòñÿ òåêóùèé äåíü
        {
         //--- Ïðîâåðÿåì îáðàçîâàíèå íîâîãî ìèíèìóìà/ìàêñèìóìà äíÿ
         if(high[i]>dHigh) // Åñëè ìàêñèìóì íà i ñâå÷å áîëüøå ñîõðàíåííîãî
            dHigh=high[i];               // Çàïîìèíàåì íîâîå çíà÷åíèå ìàêñèìóìà òåêóùåãî äíÿ
         //---
         if(low[i]<dLow) // Åñëè ìèíèìóì íà i ñâå÷å ìåíüøå ñîõðàíåííîãî
            dLow=low[i];                  // Çàïîìèíàåì íîâîå çíà÷åíèå ìèíèìóìà òåêóùåãî äíÿ
        }
      //--- Ðàññ÷èòûâàåì çíà÷åíèå èíäèêàòîðà - ðàçíîñòü ìàêñèìóìà è ìèíèìóìà òåêóùåãî äíÿ
      bufRange[i]=MathRound(( dHigh-dLow)/_Point);
     }
  }
//+------------------------------------------------------------------+

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