Author: Copyright � 2007, KCBT
0 Views
0 Downloads
0 Favorites
hl_average
//+------------------------------------------------------------------+ 
//|                                                   HL_Average.mq5 | 
//|                                           Copyright © 2007, KCBT | 
//|                              http://www.kcbt.ru/forum/index.php? | 
//+------------------------------------------------------------------+ 
#property copyright "Copyright © 2007, KCBT"
#property link "http://www.kcbt.ru/forum/index.php?"
//---- íîìåð âåðñèè èíäèêàòîðà
#property version   "2.00"
#property description "Ëèíèè ñîïðîòèâëåíèé è ïîääåðæêè ïî ôèêñèðîâàííîìó òàéìôðåéìó"
//---- îòðèñîâêà èíäèêàòîðà â ãëàâíîì îêíå
#property indicator_chart_window
//---- êîëè÷åñòâî èíäèêàòîðíûõ áóôåðîâ 7
#property indicator_buffers 7 
//---- èñïîëüçîâàíî âñåãî ïÿòü ãðàôè÷åñêèõ ïîñòðîåíèé
#property indicator_plots   5
//+----------------------------------------------+
//| Îáúÿâëåíèå êîíñòàíò                          |
//+----------------------------------------------+
#define RESET 0                         // êîíñòàíòà äëÿ âîçâðàòà òåðìèíàëó êîìàíäû íà ïåðåñ÷åò èíäèêàòîðà
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè èíäèêàòîðà 1             |
//+----------------------------------------------+
//---- îòðèñîâêà èíäèêàòîðà 1 â âèäå ëèíèè
#property indicator_type1   DRAW_LINE
//---- â êà÷åñòâå öâåòà èíäèêàòîðà èñïîëüçîâàí
#property indicator_color1  clrLimeGreen
//---- òîëùèíà ëèíèè èíäèêàòîðà 1 ðàâíà 2
#property indicator_width1  2
//---- îòîáðàæåíèå ìåòêè èíäèêàòîðà
#property indicator_label1  "HL Up"
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè èíäèêàòîðà 2             |
//+----------------------------------------------+
//---- îòðèñîâêà èíäèêàòîðà 2 â âèäå ëèíèè
#property indicator_type2   DRAW_LINE
//---- â êà÷åñòâå öâåòà èíäèêàòîðà èñïîëüçîâàí
#property indicator_color2  clrDodgerBlue
//---- òîëùèíà ëèíèè èíäèêàòîðà 2 ðàâíà 2
#property indicator_width2  2
//---- îòîáðàæåíèå ìåòêè èíäèêàòîðà
#property indicator_label2  "HL Pivot"
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè èíäèêàòîðà 3             |
//+----------------------------------------------+
//---- îòðèñîâêà èíäèêàòîðà 3 â âèäå ëèíèè
#property indicator_type3   DRAW_LINE
//---- â êà÷åñòâå öâåòà èíäèêàòîðà èñïîëüçîâàí
#property indicator_color3  clrMagenta
//---- òîëùèíà ëèíèè èíäèêàòîðà 2 ðàâíà 2
#property indicator_width3  2
//---- îòîáðàæåíèå ìåòêè èíäèêàòîðà
#property indicator_label3  "HL Down"
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè îáëàêà  1                |
//+----------------------------------------------+
//---- îòðèñîâêà èíäèêàòîðà 4 â âèäå îáëàêà
#property indicator_type4   DRAW_FILLING
//---- â êà÷åñòâå öâåòà èíäèêàòîðà èñïîëüçîâàí öâåò PaleTurquoise
#property indicator_color4  clrPaleTurquoise
//---- îòîáðàæåíèå ìåòêè èíäèêàòîðà
#property indicator_label4  "HL Up Cloud"
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè îáëàêà  2                |
//+----------------------------------------------+
//---- îòðèñîâêà èíäèêàòîðà 5 â âèäå îáëàêà
#property indicator_type5   DRAW_FILLING
//---- â êà÷åñòâå öâåòà èíäèêàòîðà èñïîëüçîâàí öâåò MistyRose
#property indicator_color5  clrMistyRose
//---- îòîáðàæåíèå ìåòêè èíäèêàòîðà
#property indicator_label5  "HL Down Cloud"
//+----------------------------------------------+
//| Âõîäíûå ïàðàìåòðû èíäèêàòîðà                 |
//+----------------------------------------------+ 
input ENUM_TIMEFRAMES TimeFrame=PERIOD_D1;   // Ïåðèîä ãðàôèêà äëÿ ðàñ÷åòà óðîâíåé
input bool ShowComment=true;                 // Îòðèñîâêà êîììåíòàðèÿ
input int  Shift=0;                          // Ñäâèã èíäèêàòîðà ïî ãîðèçîíòàëè â áàðàõ
//+----------------------------------------------+
//---- îáúÿâëåíèå äèíàìè÷åñêèõ ìàññèâîâ, êîòîðûå áóäóò â 
//---- äàëüíåéøåì èñïîëüçîâàíû â êà÷åñòâå èíäèêàòîðíûõ áóôåðîâ
double Ind1Buffer[];
double Ind2Buffer[];
double Ind3Buffer[];
double Ind4Buffer[];
double Ind5Buffer[];
double Ind6Buffer[];
double Ind7Buffer[];
//---- îáúÿâëåíèå öåëî÷èñëåííûõ ïåðåìåííûõ íà÷àëà îòñ÷åòà äàííûõ
int min_rates_total;
//+------------------------------------------------------------------+    
//| Custom indicator initialization function                         | 
//+------------------------------------------------------------------+  
int OnInit()
  {
//---- ïðîâåðêà òàéìôðåéìà èíäèêàòîðà íà êîððåêòíîñòü
   if(!TimeFramesCheck("HL",TimeFrame,Period())) return(INIT_FAILED);
//---- èíèöèàëèçàöèÿ ïåðåìåííûõ 
   min_rates_total=2;
//---- èíèöèàëèçàöèÿ èíäèêàòîðíûõ áóôåðîâ
   BufInit(0,Ind1Buffer);
   BufInit(1,Ind2Buffer);
   BufInit(2,Ind3Buffer);
   BufInit(3,Ind4Buffer);
   BufInit(4,Ind5Buffer);
   BufInit(5,Ind6Buffer);
   BufInit(6,Ind7Buffer);
//----
   IndInit(0,0.0,min_rates_total,Shift);
   IndInit(1,0.0,min_rates_total,Shift);
   IndInit(2,0.0,min_rates_total,Shift);
   IndInit(3,EMPTY_VALUE,min_rates_total,Shift);
   IndInit(4,EMPTY_VALUE,min_rates_total,Shift);
//---- ñîçäàíèå èìåíè äëÿ îòîáðàæåíèÿ â îòäåëüíîì ïîäîêíå è âî âñïëûâàþùåé ïîäñêàçêå
   string shortname;
   StringConcatenate(shortname,"HL(",EnumToString(TimeFrame),")");
//----
   IndicatorSetString(INDICATOR_SHORTNAME,shortname);
//---- îïðåäåëåíèå òî÷íîñòè îòîáðàæåíèÿ çíà÷åíèé èíäèêàòîðà
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//---- çàâåðøåíèå èíèöèàëèçàöèè
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+    
void OnDeinit(const int reason)
  {
//----
   Comment("");
//----
  }
//+------------------------------------------------------------------+  
//| Custom 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(RESET);
//---- îáúÿâëåíèå öåëî÷èñëåííûõ ïåðåìåííûõ
   int limit,bar;
//---- îáúÿâëåíèå ïåðåìåííûõ ñ ïëàâàþùåé òî÷êîé  
   double last_close,last_high,last_low,P=0.0,R=0.0,S=0.0;
   datetime iTime[1];
   static uint LastCountBar;
   static double prev_low,prev_high;
//---- ðàñ÷åòû íåîáõîäèìîãî êîëè÷åñòâà êîïèðóåìûõ äàííûõ è
//---- ñòàðòîâîãî íîìåðà limit äëÿ öèêëà ïåðåñ÷åòà áàðîâ
   if(prev_calculated>rates_total || prev_calculated<=0)// ïðîâåðêà íà ïåðâûé ñòàðò ðàñ÷åòà èíäèêàòîðà
     {
      limit=rates_total-min_rates_total-1; // ñòàðòîâûé íîìåð äëÿ ðàñ÷åòà âñåõ áàðîâ
      LastCountBar=rates_total;
      prev_low=999999999;
      prev_high=0.0;
     }
   else limit=int(LastCountBar)+rates_total-prev_calculated; // ñòàðòîâûé íîìåð äëÿ ðàñ÷åòà íîâûõ áàðîâ 
//---- èíäåêñàöèÿ ýëåìåíòîâ â ìàññèâàõ êàê â òàéìñåðèÿõ  
   ArraySetAsSeries(time,true);
   ArraySetAsSeries(high,true);
   ArraySetAsSeries(low,true);
   ArraySetAsSeries(close,true);
//---- îñíîâíîé öèêë ðàñ÷åòà èíäèêàòîðà
   for(bar=limit; bar>=0 && !IsStopped(); bar--)
     {
      Ind1Buffer[bar]=0.0;
      Ind2Buffer[bar]=0.0;
      Ind3Buffer[bar]=0.0;
      Ind4Buffer[bar]=0.0;
      Ind5Buffer[bar]=0.0;
      Ind6Buffer[bar]=0.0;
      Ind7Buffer[bar]=0.0;
      //---- êîïèðóåì âíîâü ïîÿâèâøèåñÿ äàííûå â ìàññèâ
      if(CopyTime(Symbol(),TimeFrame,time[bar],1,iTime)<=0) return(RESET);
      //----
      if(time[bar]>=iTime[0] && time[bar+1]<iTime[0])
        {
         LastCountBar=bar;
         Ind1Buffer[bar+1]=0.0;
         Ind2Buffer[bar+1]=0.0;
         Ind3Buffer[bar+1]=0.0;
         Ind4Buffer[bar+1]=0.0;
         Ind5Buffer[bar+1]=0.0;
         Ind6Buffer[bar+1]=0.0;
         Ind7Buffer[bar+1]=0.0;
         //----
         last_close=close[bar+1];
         last_high=prev_high;
         last_low=prev_low;
         P=(last_high+last_low )/2;
         R=last_high;
         S=last_low;
         prev_high=high[bar];
         prev_low=low[bar];
        }
      //----
      prev_high=MathMax(prev_high,high[bar]);
      prev_low=MathMin(prev_low,low[bar]);
      //---- çàãðóçêà ïîëó÷åííûõ çíà÷åíèé â èíäèêàòîðíûå áóôåðû
      Ind4Buffer[bar]=Ind1Buffer[bar]=R;
      Ind6Buffer[bar]=Ind5Buffer[bar]=Ind2Buffer[bar]=P;
      Ind7Buffer[bar]=Ind3Buffer[bar]=S;
     }
//----
   if(ShowComment)
     {
      Comment("Current H=",DoubleToString(R,_Digits),
              ", L=",DoubleToString(S,_Digits),
              ", HL/2=",DoubleToString(P,_Digits),
              ", H-L=",DoubleToString((R-S)/_Point,0));
     }
//----     
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| Èíèöèàëèçàöèÿ èíäèêàòîðíîãî áóôåðà                               |
//+------------------------------------------------------------------+    
void BufInit(int Number,double &Buffer[])
  {
//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â èíäèêàòîðíûé áóôåð
   SetIndexBuffer(Number,Buffer,INDICATOR_DATA);
//---- èíäåêñàöèÿ ýëåìåíòîâ â áóôåðå êàê â òàéìñåðèè
   ArraySetAsSeries(Buffer,true);
//----
  }
//+------------------------------------------------------------------+
//| Èíèöèàëèçàöèÿ èíäèêàòîðíîãî áóôåðà                               |
//+------------------------------------------------------------------+    
void IndInit(int Number,double Empty_Value,int Draw_Begin,int nShift)
  {
//---- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷åòà îòðèñîâêè èíäèêàòîðà
   PlotIndexSetInteger(Number,PLOT_DRAW_BEGIN,Draw_Begin);
//---- óñòàíîâêà çíà÷åíèé èíäèêàòîðà, êîòîðûå íå áóäóò âèäèìû íà ãðàôèêå
   PlotIndexSetDouble(Number,PLOT_EMPTY_VALUE,Empty_Value);
//---- îñóùåñòâëåíèå ñäâèãà èíäèêàòîðà 2 ïî ãîðèçîíòàëè íà Shift
   PlotIndexSetInteger(Number,PLOT_SHIFT,nShift);
//----
  }
//+------------------------------------------------------------------+
//| TimeFramesCheck()                                                |
//+------------------------------------------------------------------+    
bool TimeFramesCheck(string IndName,
                     ENUM_TIMEFRAMES inTFrame, //Ïåðèîä ãðàôèêà ðàñ÷åòà èíäèêàòîðà
                     ENUM_TIMEFRAMES outTFrame)//Ïåðèîä ãðàôèêà èíäèêàòîðà
  {
//---- ïðîâåðêà ïåðèîäîâ ãðàôèêîâ íà êîððåêòíîñòü
   if(inTFrame<=outTFrame)
     {
      Print("Ïåðèîä ãðàôèêà äëÿ èíäèêàòîðà "+IndName+" íå ìîæåò áûòü ìåíüøå ",GetStringTimeframe(inTFrame));
      return(RESET);
     }
//----
   return(true);
  }
//+------------------------------------------------------------------+
//|  Ïîëó÷åíèå òàéìôðåéìà â âèäå ñòðîêè                              |
//+------------------------------------------------------------------+
string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
  {
//----
   return(StringSubstr(EnumToString(timeframe),7,-1));
//----
  }
//+------------------------------------------------------------------+

Comments