ipulsar_v3
Miscellaneous
Implements a curve of type %1It issuies visual alerts to the screen
0 Views
0 Downloads
0 Favorites
ipulsar_v3
//+------------------------------------------------------------------+
//|                                                   ipulsar_v3.mq4 |
//|                              Copyright 2012, 2015 Òàðàáàíîâ À.Â. |
//|                                                    alextar@bk.ru |
//+------------------------------------------------------------------+
/* iPulsar  Îòîáðàæàåò êîëè÷åñòâî ïåðèîäîâ ðàçìåðîì Scale(ïî óìîë÷àíèþ - äíåé), 
            íà ïðîòÿæåíèè êîòîðûõ íå áûëè ïðîáèòû òåêóùèå çíà÷åíèÿ High è Low. 
            Óñëîâíî, õàðàêòåðèçóåò "ñèëó" òåñòèðóåìûõ óðîâíåé. 
            Èñïîëüçóåìûå ôèëüòðû: 
            1. Ôèëüòð óðîâíÿ ãîðèçîíòà ðåòðîñïåêòèâû, LevelFilter . Ïðè ãîðèçîíòå, 
            ìåíüøåì çàäàííîãî ÷èñëà ïåðèîäîâ Scale, çíà÷åíèå èíäèêàòîðà íå îòîáðàæàåòñÿ.
            2. Ôèëüòð çíà÷èìîñòè ñèãíàëà (çíà÷åíèÿ èíäèêàòîðà),SignalFilter . 
            Îòîáðàæàþòñÿ òîëüêî òå çíà÷åíèÿ èíäèêàòîðà, êîòîðûå "çàãëÿäûâàþò" 
            â ïðîøëîå íå ìåíåå, ÷åì íà çàäàííîå ÷èñëî áàðîâ ãëóáæå, ÷åì ïðåäûäóùåå 
            îòîáðàæåííîå çíà÷åíèå. */
#property   copyright "Copyright 2012, 2015 Òàðàáàíîâ À.Â."
#property   link      "alextar@bk.ru"
#property   strict
#property   indicator_separate_window  // Àòðèáóòû èíäèêàòîðà
#property   indicator_buffers 2
#property   indicator_color1 Magenta   // Àòðèáóòû áóôåðîâ
#property   indicator_width1 2
#property   indicator_color2 Teal
#property   indicator_width2 2
#define     Version  "iPulsar_v3"      // Êîíñòàíòû
#define     Zero     0.00000001
bool        IsHighReported,            // Ôëàãè ñðàáàòûâàíèÿ àëåðòîâ
            IsLowReported;
int         Hval,Lval,                 // Ïðåäûäóùèå çíà÷åíèÿ
            Signals;                   // Êîëè÷åñòâî ñôîðìèðîâàííûõ ñèãíàëîâ
datetime    HT,LT,                     // Âðåìÿ ïðåäûäóùèõ çíà÷åíèé
            BarTime;                   // Âðåìÿ íà÷àëà òåêóùåãî áàðà
double      HP[],LP[],                 // Áóôåðû
            Periods;                   // ×èñëî áàðîâ â åäèíèöå øêàëû
//--- Âíåøíèå ïåðåìåííûå: 
extern bool    SetSignalFilter=true;   // Ôèëüòðîâàòü ñèãíàë?
extern double  LevelFilter    =5,      // Ãîðèçîíò ðåòðîñïåêòèâû, Scales
SignalFilter   =0;                     // Çíà÷èìîñòü ñèãíàëà, Bars/Scales ïðè<0
extern int     Scale          =1440,   // Ìèíèìàëüíûé èíòåðâàë ñèãíàëîâ
ScaleDigits=0;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
   IndicatorShortName(Version);        // Àòðèáóòû èíäèêàòîðà
   IndicatorDigits(ScaleDigits);
   SetIndexLabel(0,"High");            // Àòðèáóòû áóôåðîâ
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0,HP);
   SetIndexLabel(1,"Low");
   SetIndexStyle(1,DRAW_HISTOGRAM);
   SetIndexBuffer(1,LP);
   if(Scale<0) Scale=-Scale;           // Êîíòðîëü âíåøíèõ ïåðåìåííûõ
   if(Scale==0) Scale=Period();
   if(ScaleDigits<0) ScaleDigits=-ScaleDigits;
   if(ScaleDigits>Digits()) ScaleDigits=Digits();
   Periods=Scale/Period();             // Èíèöèàëèçàöèÿ ãëîáàëüíûõ ïåðåìåííûõ
   IsHighReported=false;
   IsLowReported =false;
   HT     =0;
   LT     =0;
   BarTime=0;
   Hval   =0;
   Lval   =0;
   Signals=0;
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   double H,L,HB,LB,dSF,
   dLF=LevelFilter*Periods+0.5;
   bool HD,LD;
   int LF=(int)dLF,                    // Ãîðèçîíò ðåòðîñïåêòèâû, Bars
   SF,                                 // Çíà÷èìîñòü ñèãíàëà, Bars
   i,k,Hbar,Lbar,History=Bars-1;
   if(SignalFilter>-Zero) dSF=SignalFilter+0.5;
   else dSF=-SignalFilter*Periods+0.5;
   SF=(int)dSF;
   if( HT > 0 ) Hbar=iBarShift(NULL,0,HT);
   if( LT > 0 ) Lbar=iBarShift(NULL,0,LT);
   int j=History-IndicatorCounted();   // Ðàññìàòðèâàåìûå áàðû
   while(j>=0)
     {
      H=High[j];
      L=Low[j];
      HD=false;                        // Ôëàãè îáíàðóæåíèÿ ïðîáîåâ
      LD=false;
      HB=0;                            // ×èñëî áàðîâ äî ïðîáîÿ High
      LB=0;                            // ×èñëî áàðîâ äî ïðîáîÿ Low
      i=j;
      //--- Ïîèñê ïðîáîåâ
      while(i<History)
        {              
         if(HD && LD) break;           // Ïðîáîè íàéäåíû
         i++;
         k=i-j-1;                      // Òåêóùàÿ ãëóáèíà ïîèñêà
         if(!HD && High[i]-H>Zero)
           {
            HD=true;                   // Ïðîáîé High
            //--- Ôèëüòðàöèÿ óðîâíÿ
            if(k-LF>-Zero)
              {        
               if(!SetSignalFilter)
                 {
                  HB=k;
                  Signals++;
                 }
               else HB=Signal(j,k,SF,Hbar,Hval,HT,Lbar,Lval,LT);
              }
           }
         if(!LD && L-Low[i]>Zero)
           {
            LD=true;                   // Ïðîáîé Low
            //--- Ôèëüòðàöèÿ óðîâíÿ
            if(k-LF>-Zero)
              {        
               if(!SetSignalFilter)
                 {
                  LB=k;
                  Signals++;
                 }
               else LB=Signal(j,k,SF,Lbar,Lval,LT,Hbar,Hval,HT);
              }
           }
        }
      //--- Êîíòðîëü îáíàðóæåíèÿ ïðîáîåâ
      if(!SetSignalFilter)
        {          
         if(!HD)
           {
            HB=History-j-2;
            Signals++;
           }
         if(!LD)
           {
            LB=History-j-2;
            Signals++;
           }
        }
      //--- Ïðèâåäåíèå ê çàäàííîé øêàëå è îòîáðàæåíèå:
      HP[j]= NormalizeDouble(HB/Periods,ScaleDigits);
      LP[j]=-NormalizeDouble(LB/Periods,ScaleDigits);
      if(!j)             // Òîëüêî â ðåàëüíîì âðåìåíè
        {                        
         if(IsNewBar())
           {             // Òîëüêî íà ïåðâîì òèêå áàðà
            IsHighReported=false;
            IsLowReported =false;
            Comment(Version,": ñôîðìèðîâàíî ",Signals," ñèãíàëîâ äëÿ ",Symbol(),", ",Period());
           }
         //--- Íå áîëåå, ÷åì ïî îäíîìó àëåðòó äëÿ êàæäîãî íàïðàâëåíèÿ çà áàð:
         if(!IsHighReported && HP[j]>Zero)
           {
            IsHighReported=true;
            Alert(Symbol(),", ",Period(),": ïðîáèò ìàêñèìóì çà ",DoubleToStr(HP[j],ScaleDigits),"*",Scale);
           }
         if(!IsLowReported && LP[j]<-Zero)
           {
            IsLowReported=true;
            Alert(Symbol(),", ",Period(),": ïðîáèò ìèíèìóì  çà ",DoubleToStr(-LP[j],ScaleDigits),"*",Scale);
           }
        }
      j--;
     }
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Signal(int       Bar1,          // Òåêóùèé áàð
              int       Val1,          // Òåêóùåå çíà÷åíèå, Bars
              int       F,             // Çíà÷èìîñòü ñèãíàëà, Bars
              int&      Bar0,          // Ïðåäûäóùèé áàð
              int&      Val0,          // Ïðåäûäóùåå çíà÷åíèå, Bars
              datetime& T,             // Ïðåäûäóùåå âðåìÿ
              int&      contrBar,      // Ïðåäûäóùèé îïïîçèòíûé áàð
              int&      contrVal,      // Ïðåäûäóùåå îïïîçèòíîå çíà÷åíèå
              datetime &contrT)        // Ïðåäûäóùåå îïïîçèòíîå âðåìÿ
  {
   double S=0;                         // Çíà÷åíèå òåêóùåãî ñèãíàëà
   int I=Val1-Val0-Bar0+Bar1;          // Ïðåîáëàäàíèå òåêóùåãî ñèãíàëà
   if(I>= F)                           // Åñòü ïðåîáëàäàþùèé ñèãíàë
     {                       
      Signals++;
      S=Val1;                          // Çàïîìíèòü ïàðàìåòðû ñèãíàëà
      Bar0    =Bar1;
      Val0    =Val1;
      T       =Time[Bar1];
      if(Bar1<contrBar)
        {
         contrBar=0;                   // Çàáûòü ïðåäûäóùèé îïïîçèòíûé ñèãíàë
         contrVal=0;
         contrT  =0;
        }
     }
   return(S);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool IsNewBar()                        // Ðåãèñòðàöèÿ íîâîãî áàðà
  {                       
   bool NewBar=false;                  // Íîâîãî áàðà íåò
   if(BarTime!=Time[0])
     {
      BarTime=Time[0];                 // Òåïåðü âðåìÿ òàêîå
      NewBar =true;                    // Ïîéìàëñÿ íîâûé áàð
     }
   return(NewBar);
  }
//+------------------------------------------------------------------+

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