StreamAmpZZ





//+--------------------------------------------------------------------------------+
//|                                                                     ang_Amp_ZZ |
//|                                                                StreamAmpZZ.mq4 |
//|                                                      Copyright © 2005, ANG3110 |
//|                                                           ANG3110@latchess.com |
//|                                                      ìàëåíüêàÿ äîðàáîòêà Titan |
//+--------------------------------------------------------------------------------+
#property copyright "Copyright © 2005, ANG3110"
#property link      "ANG3110@latchess.com"
//----
#property indicator_chart_window
#property indicator_buffers 7
#property indicator_color1  CornflowerBlue
#property indicator_color2  Orange
#property indicator_color3  Orange
#property indicator_color4  SteelBlue
#property indicator_color5  SteelBlue
#property indicator_color6  MediumSeaGreen
#property indicator_color7  Red
//---- input parameters
extern double Depth    =12.5;
extern int    Smooth   =6;
extern int    ñntBars  =600;
//---- Âêë/âûêë
extern bool   Sound    =false;
//---- buffers
double zz[], ha[], la[], hs[], ls[], hx[], lx[];
double tmp_ha[], tmp_la[];
//---- parameters
double hi, li, hm, lm;
int    f=0, f1, f0, ai, bi, aibar, bibar;
int    wait=0; //øîá íå òðåçâîíèëà íà òåêóùåé ñâå÷å
//+--------------------------------------------------------------------------------+
//| Custom indicator initialization function                                       |
//+--------------------------------------------------------------------------------+
int init()
  {
   Depth*=Point;
//---- Óñòàíàâëèâàåì íîâûé ðàçìåð ìàññèâîâ
   ArrayResize(tmp_ha, ñntBars);
   ArrayResize(tmp_la, ñntBars);
//---- Óñòàíîâêà ôîðìàòà òî÷íîñòè äëÿ âèçóàëèçàöèè èíäèêàòîðà
   IndicatorDigits(4);
//---- 7 additional buffers are used for counting.
   IndicatorBuffers(7);
//---- indicator buffers
   SetIndexBuffer(0, zz);
   SetIndexBuffer(1, ha);
   SetIndexBuffer(2, la);
   SetIndexBuffer(3, hs);
   SetIndexBuffer(4, ls);
   SetIndexBuffer(5, hx);
   SetIndexBuffer(6, lx);
//---- indicator lines
   SetIndexStyle(0, DRAW_LINE, STYLE_SOLID, 2);
   SetIndexStyle(1, DRAW_LINE);
   SetIndexStyle(2, DRAW_LINE);
   SetIndexStyle(3, DRAW_LINE, STYLE_DOT);
   SetIndexStyle(4, DRAW_LINE, STYLE_DOT);
   SetIndexStyle(5, DRAW_ARROW, 0, 2);
   SetIndexStyle(6, DRAW_ARROW, 0, 2);
//----
   SetIndexEmptyValue(5, EMPTY_VALUE);
   SetIndexEmptyValue(6, EMPTY_VALUE);
//----
   SetIndexArrow(5, 251);
   SetIndexArrow(6, 251);
   // Wingdings symbols:
   // ------------------
   // 4   - ÷åðòî÷êà
   // 119 - ðîìáèê
   // 158 - òî÷êà
   // 159 - æèðíàÿ òî÷êà
   // 167 - êâàäðàòèê
   // 169 - çâåçäà òðèóãîëüíàÿ
   // 170 - ïëþñ
   // 251 - êðåñòèê
//---- name for DataWindow and indicator subwindow label
   IndicatorShortName("StreamAmpZZ");
   SetIndexLabel(0, "ZZ");
   SetIndexLabel(1, "HA");
   SetIndexLabel(2, "LA");
   SetIndexLabel(3, "ZZHA");
   SetIndexLabel(4, "ZZLA");
   SetIndexLabel(5, "Upper");
   SetIndexLabel(6, "Lower");
//----
   int draw=Bars - ñntBars;
   SetIndexDrawBegin(0, draw);
   SetIndexDrawBegin(1, draw + Smooth);
   SetIndexDrawBegin(2, draw + Smooth);
   SetIndexDrawBegin(3, draw);
   SetIndexDrawBegin(4, draw);
   SetIndexDrawBegin(5, draw);
   SetIndexDrawBegin(6, draw);
//----
   return(0);
  }
//+--------------------------------------------------------------------------------+
//| StreamAmpZZ                                                                    |
//+--------------------------------------------------------------------------------+
int start()
  {
   double cum, sum;
   int bars =Bars - IndicatorCounted(), i, j;
   if (bars > 1) bars=ñntBars; //ïåðåðèñîâêà ïî âñåì ñntBars ïðè êàæäîì íîâîì áàðå
//----
   for(i=bars-1; i>=0; i--)
     {
      if (i>=ñntBars) {hi=High[i]; li=Low[i];}
      if (Low [i] > hi) {hi=Low [i]; if (hi>=li+Depth) li=hi - Depth;}
      if (High[i] < li) {li=High[i]; if (li<=hi-Depth) hi=li + Depth;}
      //----
      if (High[i] > hi && Low[i] < li) if (High[i]-hi > li-Low[i]) f1=1; else f1=2; else f1=0;
      //----
      if (f==0)
        {
         if (High[i] > hi) {hm=High[i]; ai=i; f=1;}
         if (Low [i] < li) {lm=Low [i]; bi=i; f=2;}
        }
      //----
      if (f1!=2)
        {
         if (f==2 && High[i] > hi)
           {
            hm=High[i]; f=1; f0=0;
            if (ai!=bi) for(j=ai; j>=bi; j--) zz[j]=High[ai]*(j - bi)/(ai - bi) + Low[bi]*(j - ai)/(bi - ai);
            ai=i;
           }
         if (f==1 && High[i] > hm) {hm=High[i]; ai=i; f0=0;}
        }
      //----
      if (f1!=1)
        {
         if (f==1 && Low[i] < li)
           {
            lm=Low[i]; f=2; f0=0;
            if (ai!=bi) for(j=bi; j>=ai; j--) zz[j]=High[ai]*(j - bi)/(ai - bi) + Low[bi]*(j - ai)/(bi - ai);
            bi=i;
           }
         if (f==2 && Low[i] < lm) {lm=Low[i]; bi=i; f0=0;}
        }
      //----
      if (f0==0 && i==0) {aibar=Bars - ai; bibar=Bars - bi; f0=1;}
      if (f0==1) {ai=Bars - aibar; bi=Bars - bibar;}
      //----
      if (i==0)
        {
         if (ai > bi) for(j=ai; j>=bi; j--) zz[j]=High[ai]*(j - bi)/(ai - bi) + Low[bi]*(j - ai)/(bi - ai);
         if (ai < bi) for(j=bi; j>=ai; j--) zz[j]=High[ai]*(j - bi)/(ai - bi) + Low[bi]*(j - ai)/(bi - ai);
         //----
         if (f ==1 && ai!=0) for(j=ai; j>=0; j--) zz[j]=Close[0]*(j - ai)/(0 - ai) + High[ai]*(j - 0)/(ai - 0);
         if (f ==2 && bi!=0) for(j=bi; j>=0; j--) zz[j]=Close[0]*(j - bi)/(0 - bi) + Low [bi]*(j - 0)/(bi - 0);
         if (bi==0 && ai!=0) for(j=ai; j>=0; j--) zz[j]=Low  [0]*(j - ai)/(0 - ai) + High[ai]*(j - 0)/(ai - 0);
         if (ai==0 && bi!=0) for(j=bi; j>=0; j--) zz[j]=High [0]*(j - bi)/(0 - bi) + Low [bi]*(j - 0)/(bi - 0);
        }
      //----
      tmp_ha[i]=hi;
      tmp_la[i]=li;
      //Ñãëàæèâàíèå (çàìåäëåíèå)
      if (i<=ñntBars-Smooth && Smooth > 1)
        {
         for(j=i, cum=0, sum=0; j<i+Smooth; j++) {cum+=tmp_ha[j]; sum+=tmp_la[j];}
         ha[i]=cum/Smooth;
         la[i]=sum/Smooth;
        }
      else {ha[i]=tmp_ha[i]; la[i]=tmp_la[i];}
     }
//---- Ñðåäíÿÿ ìåæäó zz è ha/la
   for(i=bars-1; i>=0; i--)
     {
      hs[i]=(zz[i] + ha[i])/2;
      ls[i]=(zz[i] + la[i])/2;
     }
//---- Ýêñòðåìóìû
   if (bars>=Bars) bars=ñntBars - 1;
   for(i=bars; i>0; i--)
     {
      hx[i]=EMPTY_VALUE;
      lx[i]=EMPTY_VALUE;
//----
      if (zz[i-1] < zz[i] && zz[i] > zz[i+1]) {hx[i]=zz[i]; if (wait!=Time[0] && i==1 && Sound) {PlaySound("alert.wav");  wait=Time[0];}}
      if (zz[i-1] > zz[i] && zz[i] < zz[i+1]) {lx[i]=zz[i]; if (wait!=Time[0] && i==1 && Sound) {PlaySound("alert2.wav"); wait=Time[0];}}
     }
//----
   return(0);
  }
//+------------------------------------------------------------------+



Sample





Analysis



Market Information Used:

Series array that contains the highest prices of each bar
Series array that contains the lowest prices of each bar
Series array that contains close prices for each bar
Series array that contains open time of each bar


Indicator Curves created:


Implements a curve of type DRAW_LINE
Implements a curve of type DRAW_ARROW

Indicators Used:



Custom Indicators Used:

Order Management characteristics:

Other Features:

It plays sound alerts