Author: Copyright � 2010, Nikolay Kositsin
Price Data Components
Miscellaneous
It issuies visual alerts to the screen
0 Views
0 Downloads
0 Favorites
M2_MA_HTF
//+---------------------------------------------------------------------+ 
//|                                                       M2_MA_HTF.mq5 | 
//|                                  Copyright © 2016, Nikolay Kositsin | 
//|                                 Khabarovsk,   farria@mail.redcom.ru | 
//+---------------------------------------------------------------------+ 
//| Äëÿ ðàáîòû  èíäèêàòîðà  ñëåäóåò  ïîëîæèòü ôàéë SmoothAlgorithms.mqh |
//| â ïàïêó (äèðåêòîðèþ): êàòàëîã_äàííûõ_òåðìèíàëà\MQL5\Include         |
//+---------------------------------------------------------------------+ 
#property copyright "Copyright © 2010, Nikolay Kositsin"
#property link "farria@mail.redcom.ru"
//---- íîìåð âåðñèè èíäèêàòîðà
#property version   "1.60"
//---- îòðèñîâêà èíäèêàòîðà â ãëàâíîì îêíå
#property indicator_chart_window
//---- êîëè÷åñòâî èíäèêàòîðíûõ áóôåðîâ 2
#property indicator_buffers 2 
//---- èñïîëüçîâàíî âñåãî îäíî ãðàôè÷åñêîå ïîñòðîåíèå
#property indicator_plots   1
//+----------------------------------------------+
//|  îáúÿâëåíèå êîíñòàíò                         |
//+----------------------------------------------+
#define RESET 0                // Êîíñòàíòà äëÿ âîçâðàòà òåðìèíàëó êîìàíäû íà ïåðåñ÷¸ò èíäèêàòîðà
#define INDICATOR_NAME "M2_MA" // Êîíñòàíòà äëÿ èìåíè èíäèêàòîðà
//+----------------------------------------------+
//|  Ïàðàìåòðû îòðèñîâêè èíäèêàòîðà              |
//+----------------------------------------------+
//---- îòðèñîâêà èíäèêàòîðà 1 â âèäå ñèìâîëà
#property indicator_type1   DRAW_COLOR_ARROW
//---- â êà÷åñòâå öâåòîâ èíäèêàòîðà èñïîëüçîâàíû
#property indicator_color1  clrGray,clrMagenta,clrBlue
//---- òîëùèíà ëèíèè èíäèêàòîðà 1 ðàâíà 4
#property indicator_width1  4
//---- îòîáðàæåíèå áû÷åé ëýéáû èíäèêàòîðà
#property indicator_label1  INDICATOR_NAME
//+----------------------------------------------+
//|  îáúÿâëåíèå ïåðå÷èñëåíèé                     |
//+----------------------------------------------+
enum Smooth_Method
  {
   MODE_SMA_,  //SMA
   MODE_EMA_,  //EMA
   MODE_SMMA_, //SMMA
   MODE_LWMA_, //LWMA
   MODE_JJMA,  //JJMA
   MODE_JurX,  //JurX
   MODE_ParMA, //ParMA
   MODE_T3,    //T3
   MODE_VIDYA, //VIDYA
   MODE_AMA,   //AMA
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
enum Applied_price_ //Òèï êîíñòàíòû
  {
   PRICE_CLOSE_ = 1,     //PRICE_CLOSE
   PRICE_OPEN_,          //PRICE_OPEN
   PRICE_HIGH_,          //PRICE_HIGH
   PRICE_LOW_,           //PRICE_LOW
   PRICE_MEDIAN_,        //PRICE_MEDIAN
   PRICE_TYPICAL_,       //PRICE_TYPICAL
   PRICE_WEIGHTED_,      //PRICE_WEIGHTED
   PRICE_SIMPL_,         //PRICE_SIMPL_
   PRICE_QUARTER_,       //PRICE_QUARTER_
   PRICE_TRENDFOLLOW0_, //PRICE_TRENDFOLLOW0_
   PRICE_TRENDFOLLOW1_  //PRICE_TRENDFOLLOW1_
  };
//+-------------------------------------+
//|  ÂÕÎÄÍÛÅ ÏÀÐÀÌÅÒÐÛ ÈÍÄÈÊÀÒÎÐÀ       |
//+-------------------------------------+ 
input ENUM_TIMEFRAMES TimeFrame=PERIOD_H4;//Ïåðèîä ãðàôèêà
input uint AlertCount=0;//êîëè÷åñòâî ïîäàâàåìûõ àëåðòîâ
input uint SignalBar=1;//íîìåð áàðà äëÿ ñèãíàëà, 0-òåêóùèé áàð
//+-------------------------------------+
//|  ÂÕÎÄÍÛÅ ÏÀÐÀÌÅÒÐÛ ÈÍÄÈÊÀÒÎÐÀ       |
//+-------------------------------------+
input Smooth_Method XMA_Method=MODE_SMA_; // ìåòîä óñðåäíåíèÿ
input uint MPeriod=6;                     // ãëóáèíà ñãëàæèâàíèÿ 
input int XPhase=15;                      // ïàðàìåòð ñãëàæèâàíèÿ,
//---- äëÿ JJMA èçìåíÿþùèéñÿ â ïðåäåëàõ -100 ... +100, âëèÿåò íà êà÷åñòâî ïåðåõîäíîãî ïðîöåññà;
//---- Äëÿ VIDIA ýòî ïåðèîä CMO, äëÿ AMA ýòî ïåðèîä ìåäëåííîé ñêîëüçÿùåé                  
input Applied_price_ IPC=PRICE_CLOSE_;    // öåíîâàÿ êîíñòàíòà
input int Shift=0;                        // ñäâèã èíäèêàòîðà ïî ãîðèçîíòàëè â áàðàõ
input int PriceShift=0;                   // cäâèã èíäèêàòîðà ïî âåðòèêàëè â ïóíêòàõ
//+-------------------------------------+
//---- îáúÿâëåíèå äèíàìè÷åñêèõ ìàññèâîâ, êîòîðûå áóäóò â 
// äàëüíåéøåì èñïîëüçîâàíû â êà÷åñòâå èíäèêàòîðíûõ áóôåðîâ
double IndBuffer[],ColorIndBuffer[];
//---- Îáúÿâëåíèå ñòðèíãîâ
string Symbol_,Word;
//---- Îáúÿâëåíèå öåëûõ ïåðåìåííûõ íà÷àëà îòñ÷¸òà äàííûõ
int min_rates_total;
//---- Îáúÿâëåíèå öåëûõ ïåðåìåííûõ äëÿ õåíäëîâ èíäèêàòîðîâ
int M2_MA_Handle;
//+------------------------------------------------------------------+    
//| Custom indicator initialization function                         | 
//+------------------------------------------------------------------+  
int OnInit()
  {
//---- ïðîâåðêà ïåðèîäîâ ãðàôèêîâ íà êîððåêòíîñòü
   if(TimeFrame<Period() && TimeFrame!=PERIOD_CURRENT)
     {
      Print("Ïåðèîä ãðàôèêà äëÿ èíäèêàòîðà M2_MA íå ìîæåò áûòü ìåíüøå ïåðèîäà òåêóùåãî ãðàôèêà");
      return(INIT_FAILED);
     }

//---- Èíèöèàëèçàöèÿ ïåðåìåííûõ 
   min_rates_total=2;
   Symbol_=Symbol();
   Word=INDICATOR_NAME+" èíäèêàòîð: "+Symbol_+StringSubstr(EnumToString(_Period),7,-1);

//---- ïîëó÷åíèå õåíäëà èíäèêàòîðà M2_MA
   M2_MA_Handle=iCustom(Symbol_,TimeFrame,"M2_MA",XMA_Method,MPeriod,XPhase,IPC,0,PriceShift);
   if(M2_MA_Handle==INVALID_HANDLE)
    {
     Print(" Íå óäàëîñü ïîëó÷èòü õåíäë èíäèêàòîðà M2_MA");
     return(INIT_FAILED);
    }

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

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

//--- ñîçäàíèå èìåíè äëÿ îòîáðàæåíèÿ â îòäåëüíîì ïîäîêíå è âî âñïëûâàþùåé ïîäñêàçêå
   IndicatorSetString(INDICATOR_SHORTNAME,INDICATOR_NAME);
//--- îïðåäåëåíèå òî÷íîñòè îòîáðàæåíèÿ çíà÷åíèé èíäèêàòîðà
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//---- çàâåðøåíèå èíèöèàëèçàöèè
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+  
//| 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);
   if(BarsCalculated(M2_MA_Handle)<Bars(Symbol(),TimeFrame)) return(prev_calculated);

//---- îáúÿâëåíèÿ ëîêàëüíûõ ïåðåìåííûõ 
   double M2_MA[1];
   int limit,bar;
   datetime M2_MATime[1];
   static uint UpCount,DnCount;
   static uint UpCount_,DnCount_;
   static double LastM2_MA=0.0;
   static uint LastCountBar;

//---- ðàñ÷¸òû íåîáõîäèìîãî êîëè÷åñòâà êîïèðóåìûõ äàííûõ è
//ñòàðòîâîãî íîìåðà limit äëÿ öèêëà ïåðåñ÷¸òà áàðîâ
   if(prev_calculated>rates_total || prev_calculated<=0)// ïðîâåðêà íà ïåðâûé ñòàðò ðàñ÷¸òà èíäèêàòîðà
     {
      limit=rates_total-min_rates_total-1; // ñòàðòîâûé íîìåð äëÿ ðàñ÷¸òà âñåõ áàðîâ
      LastCountBar=rates_total;
     }
   else limit=int(LastCountBar)+rates_total-prev_calculated; // ñòàðòîâûé íîìåð äëÿ ðàñ÷¸òà íîâûõ áàðîâ 

//---- èíäåêñàöèÿ ýëåìåíòîâ â ìàññèâàõ êàê â òàéìñåðèÿõ  
   ArraySetAsSeries(time,true);

//---- îñíîâíîé öèêë ðàñ÷¸òà èíäèêàòîðà
   for(bar=limit; bar>=0 && !IsStopped(); bar--)
     {
      //---- îáíóëèì ñîäåðæèìîå èíäèêàòîðíûõ áóôåðîâ äî ðàñ÷¸òà
      IndBuffer[bar]=0.0;

      //---- êîïèðóåì âíîâü ïîÿâèâøèåñÿ äàííûå â ìàññèâ M2_MATime
      if(CopyTime(Symbol_,TimeFrame,time[bar],1,M2_MATime)<=0) return(RESET);
      
      if(time[bar]>=M2_MATime[0] && time[bar+1]<M2_MATime[0])
        {
         LastCountBar=bar;
         
         //---- êîïèðóåì âíîâü ïîÿâèâøèåñÿ äàííûå â ìàññèâ M2_MA
         if(CopyBuffer(M2_MA_Handle,0,time[bar],1,M2_MA)<=0) return(RESET);
         
         IndBuffer[bar]=M2_MA[0];
        }
     }

//---- êîððåêòèðîâêà ñòàðòîâîãî íîìåðà
   if(prev_calculated>rates_total || prev_calculated<=0)// ïðîâåðêà íà ïåðâûé ñòàðò ðàñ÷¸òà èíäèêàòîðà
      limit--; // ñòàðòîâûé íîìåð äëÿ ðàñ÷¸òà âñåõ áàðîâ

//---- Îñíîâíîé öèêë ðàñêðàñêè ñèãíàëüíîé ëèíèè
   for(bar=limit; bar>=0 && !IsStopped(); bar--)
     {
      ColorIndBuffer[bar]=0;

      if(IndBuffer[bar])
        {
         if(LastM2_MA)
           {
            if(LastM2_MA<IndBuffer[bar]) ColorIndBuffer[bar]=2;
            if(LastM2_MA>IndBuffer[bar]) ColorIndBuffer[bar]=1;
           }

         if(bar>0) LastM2_MA=IndBuffer[bar];
        }

     }

//---- ñáðîñ ñ÷¸ò÷èêîâ àëåðòîâ â íóëè
   if(rates_total!=prev_calculated)
     {
      UpCount=0;
      DnCount=0;
      UpCount_=0;
      DnCount_=0;
     }

//---- ïîäà÷à àëåðòà äëÿ ïîêóïêè
   if(UpCount<AlertCount && ColorIndBuffer[SignalBar]==2)
     {
      UpCount++;
      Alert(Word+": Ñèãíàë íà ïîêóïêó ïî "+Symbol_);
     }

//---- ïîäà÷à àëåðòà äëÿ ïðîäàæè
   if(DnCount<AlertCount && ColorIndBuffer[SignalBar]==1)
     {
      DnCount++;
      Alert(Word+": Ñèãíàë íà ïðîäàæó ïî "+Symbol_);
     }
//----     
   return(rates_total);
  }
//+------------------------------------------------------------------+

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