Author: Copyright 2014, Murad Ismayilov
0 Views
0 Downloads
0 Favorites
wmivol_v1
//+---------------------------------------------------------------------+ 
//|                                                          WmiVol.mq5 | 
//|                                     Copyright 2014, Murad Ismayilov | 
//|                                  http://www.mql4.com/ru/users/wmlab | 
//+---------------------------------------------------------------------+ 
#property copyright "Copyright 2014, Murad Ismayilov"
#property link      "http://www.mql4.com/ru/users/wmlab" 
//---- íîìåð âåðñèè èíäèêàòîðà
#property version   "1.00"
//---- îòðèñîâêà èíäèêàòîðà â îòäåëüíîì îêíå
#property indicator_separate_window 
//---- êîëè÷åñòâî èíäèêàòîðíûõ áóôåðîâ 2
#property indicator_buffers 2 
//---- èñïîëüçîâàíî âñåãî îäíî ãðàôè÷åñêîå ïîñòðîåíèå
#property indicator_plots   1
//+-----------------------------------+
//|  Ïàðàìåòðû îòðèñîâêè èíäèêàòîðà   |
//+-----------------------------------+
//---- îòðèñîâêà èíäèêàòîðà â âèäå ÷åòûð¸õöâåòíîé ãèñòîãðàììû
#property indicator_type1 DRAW_COLOR_HISTOGRAM
//---- â êà÷åñòâå öâåòîâ ÷åòûð¸õöâåòíîé ãèñòîãðàììû èñïîëüçîâàíû
#property indicator_color1 clrDodgerBlue,clrMagenta
//---- ëèíèÿ èíäèêàòîðà - ñïëîøíàÿ
#property indicator_style1 STYLE_SOLID
//---- òîëùèíà ëèíèè èíäèêàòîðà ðàâíà 2
#property indicator_width1 2
//---- îòîáðàæåíèå ìåòêè èíäèêàòîðà
#property indicator_label1 "WmiVol"

#property indicator_maximum    1.1
#property indicator_minimum    0.0
//+-----------------------------------+
//|  ÂÕÎÄÍÛÅ ÏÀÐÀÌÅÒÐÛ ÈÍÄÈÊÀÒÎÐÀ     |
//+-----------------------------------+

//+-----------------------------------+
//---- Îáúÿâëåíèå öåëûõ ïåðåìåííûõ íà÷àëà îòñ÷¸òà äàííûõ
int min_rates_total;
//---- îáúÿâëåíèå äèíàìè÷åñêèõ ìàññèâîâ, êîòîðûå áóäóò â 
// äàëüíåéøåì èñïîëüçîâàíû â êà÷åñòâå èíäèêàòîðíûõ áóôåðîâ
double IndBuffer[],ColorIndBuffer[];
double barVols[],avgVol;
int barsInDay,barCounts[];
//+------------------------------------------------------------------+    
//| WmiVolA indicator initialization function                        | 
//+------------------------------------------------------------------+  
int OnInit()
  {
//---- Èíèöèàëèçàöèÿ ïåðåìåííûõ íà÷àëà îòñ÷¸òà äàííûõ
   if(Period()>PERIOD_H12) {Print("Ïåðèîä ãðàôèêà íå ìîæåò áûòü áîëüøå H12!"); return(INIT_FAILED);}
   barsInDay=1440/(PeriodSeconds(PERIOD_CURRENT)/60);
   if(!barsInDay) return(INIT_FAILED);
   min_rates_total=barsInDay;

//---- Ðàñïðåäåëåíèå ïàìÿòè ïîä ìàññèâû ïåðåìåííûõ  
   if(ArrayResize(barCounts,barsInDay)<barsInDay) {Print("Íå óäàëîñü ðàñïðåäåëèòü ïàìÿòü ïîä ìàññèâ barCounts[]"); return(INIT_FAILED);}
   if(ArrayResize(barVols,barsInDay)<barsInDay) {Print("Íå óäàëîñü ðàñïðåäåëèòü ïàìÿòü ïîä ìàññèâ barVols[]"); return(INIT_FAILED);}
//---- Èíèöèàëèçàöèÿ ìàññèâîâ ïåðåìåííûõ
   ArrayInitialize(barCounts,0);
   ArrayInitialize(barVols,0.0);

//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà IndBuffer â èíäèêàòîðíûé áóôåð
   SetIndexBuffer(0,IndBuffer,INDICATOR_DATA);
//---- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷¸òà îòðèñîâêè èíäèêàòîðà
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total);
//---- óñòàíîâêà çíà÷åíèé èíäèêàòîðà, êîòîðûå íå áóäóò âèäèìû íà ãðàôèêå
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);

//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â öâåòîâîé, èíäåêñíûé áóôåð   
   SetIndexBuffer(1,ColorIndBuffer,INDICATOR_COLOR_INDEX);

//--- îïðåäåëåíèå òî÷íîñòè îòîáðàæåíèÿ çíà÷åíèé èíäèêàòîðà
   IndicatorSetInteger(INDICATOR_DIGITS,2);
//--- çàâåðøåíèå èíèöèàëèçàöèè
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+  
//| WmiVolA 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<min_rates_total) return(0);

///---- îáúÿâëåíèÿ ëîêàëüíûõ ïåðåìåííûõ 
   int first,bar;
   double;

//---- ðàñ÷¸ò ñòàðòîâîãî íîìåðà first äëÿ öèêëà ïåðåñ÷¸òà áàðîâ è èíèöèàëèçàöèÿ ïåðåìåííûõ â áëîêå OnCalculate 
   if(prev_calculated>rates_total || prev_calculated<=0) // ïðîâåðêà íà ïåðâûé ñòàðò ðàñ÷¸òà èíäèêàòîðà
     {
      first=0;
      for(bar=rates_total-1; bar>0; bar--)
        {
         int barOfDay=iBarOfDay(time[bar]);
         barVols[barOfDay]+=high[bar]-low[bar];
         barCounts[barOfDay]++;
        }
      for(bar=0; bar<barsInDay; bar++) if(barCounts[bar]) barVols[bar]/=barCounts[bar];
      double minVol=barVols[ArrayMinimum(barVols)];
      double maxVol=barVols[ArrayMaximum(barVols)];
      avgVol=0.0;
      for(bar=0; bar<barsInDay; bar++) if(maxVol>minVol) avgVol+=barVols[bar]=(barVols[bar]-minVol)/(maxVol-minVol);
      avgVol/=barsInDay;  
     }
   else first=prev_calculated-1; // ñòàðòîâûé íîìåð äëÿ ðàñ÷¸òà íîâûõ áàðîâ

//---- Îñíîâíîé öèêë ðàñ÷¸òà èíäèêàòîðà
   for(bar=first; bar<rates_total && !IsStopped(); bar++)
     {
      int barOfDay=iBarOfDay(time[bar]);
      double vol=barVols[barOfDay];
      IndBuffer[bar]=vol;
      if(vol>=avgVol) ColorIndBuffer[bar]=0;
      else ColorIndBuffer[bar]=1;
     }
//----     
   return(rates_total);
  }
//+------------------------------------------------------------------+
//|  iBarOfDay()                                                     |
//+------------------------------------------------------------------+
int iBarOfDay(datetime timeOpenBar) 
  {
//----
   int minutesInPeriod=PeriodSeconds()/60;
   double minutesSinceMidnight=MathMod(timeOpenBar/60,1440);
   int barsSinceMidnight=(int)MathFloor(minutesSinceMidnight/minutesInPeriod);
//----
   return (barsSinceMidnight);
  }
//+------------------------------------------------------------------+

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