Author: Copyright 2015, MetaQuotes Software Corp.
3cline
Price Data Components
Series array that contains the highest prices of each barSeries array that contains the lowest prices of each bar
Miscellaneous
Implements a curve of type %1
0 Views
0 Downloads
0 Favorites
3cline
//+------------------------------------------------------------------+
//|                                                      3CLineX.mq4 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 4
//---
double DnBars[],UpBars[],DnValues[],UpValues[];
int m1,m2,m3,n1,n2,n3;
int d;
//input int _Period=0;
int BBar=0;
bool Help=false;
input bool BreakOnly=true;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,DnBars);
   SetIndexBuffer(1,UpBars);
   SetIndexBuffer(2,DnValues);
   SetIndexBuffer(3,UpValues);

   SetIndexStyle(0,DRAW_NONE);
   SetIndexStyle(1,DRAW_NONE);
   SetIndexStyle(2,DRAW_NONE);
   SetIndexStyle(3,DRAW_NONE);
//---
   d=(int)MarketInfo(_Symbol,MODE_DIGITS);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator 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[])
  {
//---
   ArrayInitialize(UpBars,EMPTY_VALUE);
   ArrayInitialize(DnBars,EMPTY_VALUE);
   ArrayInitialize(UpValues,EMPTY_VALUE);
   ArrayInitialize(DnValues,EMPTY_VALUE);
//---
   int i=0,ii=0,iii=0;
   int j1=0,j2=0,j3=0;
   int mm=-1,nn=-1,k2=-1;
   double hm=0,lm=999999;
   string sss="";
//--- Óðîâåíü ðàçâîðîòà ââåðõ      
   i=BBar; j1=-1;k2=-1;
   while(j1<0 && i<Bars-2)
     {
      double h=iHigh(_Symbol,_Period,i); double l=iLow(_Symbol,_Period,i);
      if(h>hm) hm=h; if(l<lm) lm=l;
      //---
      if(iLow(_Symbol,_Period,i)<iLow(_Symbol,_Period,i+1))
        {
         j1=i; j2=-1; ii=i+1;
         while(j2<0 && ii<Bars-2)
           {
            if(iLow(_Symbol,_Period,ii)<l || j1<0) {j1=-1;break;}
            if
            (
             iHigh(_Symbol,_Period,ii)<iHigh(_Symbol,_Period,ii+1) && 
             iLow(_Symbol,_Period,ii)>iLow(_Symbol,_Period,ii+1)
             )
              {ii++; continue;}
            if(iHigh(_Symbol,_Period,ii)>h)
              {
               j2=ii; j3=-1; iii=ii+1; double hh=iHigh(_Symbol,_Period,ii); double ll=iLow(_Symbol,_Period,ii);
               if(k2<1) k2=j2;
               while(j3<0 && iii<Bars-2)
                 {
                  if(iLow(_Symbol,_Period,iii)<l) {j1=-1;break;}
                  if(BreakOnly && iHigh(_Symbol,_Period,iii)>hm) {j1=-1;break;}
                  if
                  (
                   iHigh(_Symbol,_Period,iii)<iHigh(_Symbol,_Period,iii+1) && 
                   iLow(_Symbol,_Period,iii)>iLow(_Symbol,_Period,iii+1)
                   )
                    {iii++; continue;}

                  if(iHigh(_Symbol,_Period,iii)>hh) j3=iii;
                  iii++;
                 }
              }
            ii++;
           }
        }
      i++;
     }
   m1=j1;m2=j2;m3=j3;mm=k2;
//---
   hm=0;lm=999999;
//--- Óðîâåíü ðàçâîðîòà âíèç      
   i=BBar; j1=-1;k2=-1;
   while(j1<0 && i<Bars-2)
     {
      double h=iHigh(_Symbol,_Period,i); double l=iLow(_Symbol,_Period,i);
      if(h>hm) hm=h; if(l<lm) lm=l;
      if(iHigh(_Symbol,_Period,i)>iHigh(_Symbol,_Period,i+1))
        {
         j1=i; j2=-1; ii=i+1;
         while(j2<0 && ii<Bars-2)
           {
            if(iHigh(_Symbol,_Period,ii)>h || j1<0) {j1=-1;break;}
            if
            (
             iHigh(_Symbol,_Period,ii)<iHigh(_Symbol,_Period,ii+1) && 
             iLow(_Symbol,_Period,ii)>iLow(_Symbol,_Period,ii+1)
             )
              {ii++; continue;}
            //---
            if(iLow(_Symbol,_Period,ii)<l)
              {
               j2=ii; j3=-1; iii=ii+1; double hh=iHigh(_Symbol,_Period,ii); double ll=iLow(_Symbol,_Period,ii);
               if(k2<1) k2=j2;
               while(j3<0 && iii<Bars-2)
                 {
                  if(iHigh(_Symbol,_Period,iii)>h) {j1=-1;break;}
                  if(BreakOnly && iLow(_Symbol,_Period,iii)<lm) {j1=-1;break;}
                  if
                  (
                   iHigh(_Symbol,_Period,iii)<iHigh(_Symbol,_Period,iii+1) && 
                   iLow(_Symbol,_Period,iii)>iLow(_Symbol,_Period,iii+1)
                   )
                    {iii++; continue;}
                  //---
                  if(iLow(_Symbol,_Period,iii)<ll) j3=iii;
                  iii++;
                 }
              }
            ii++;
           }
        }
      i++;
     }
   n1=j1;n2=j2;n3=j3;nn=k2;
//---
   DnBars[1]=m1;                           // Íîìåð 1-ãî áàðà, ïàòòåðí âíèç
   DnBars[2]=m2;                           // Íîìåð 2-ãî áàðà, ïàòòåðí âíèç
   DnBars[3]=m3;                           // Íîìåð 3-ãî áàðà, ïàòòåðí âíèç
//---
   UpBars[1]=n1;                           // Íîìåð 1-ãî áàðà, ïàòòåðí ââåðõ
   UpBars[2]=n2;                           // Íîìåð 2-ãî áàðà, ïàòòåðí ââåðõ
   UpBars[3]=n3;                           // Íîìåð 3-ãî áàðà, ïàòòåðí ââåðõ
//---
   DnValues[1]=iLow(_Symbol,_Period,m1);   // Low 1-ãî áàðà, ïàòòåðí âíèç, ñòîï äëÿ Buy
   DnValues[2]=iHigh(_Symbol,_Period,m2);  // High 2-ãî áàðà, ïàòòåðí âíèç
   DnValues[3]=iHigh(_Symbol,_Period,m3);  // High 3-ãî áàðà, ïàòòåðí âíèç, âõîä íà Buy, ñòîï äëÿ Sell
//---
   UpValues[1]=iHigh(_Symbol,_Period,n1);   // High 1-ãî áàðà, ïàòòåðí ââåðõ, ñòîï äëÿ Sell
   UpValues[2]=iLow(_Symbol,_Period,n2);    // Low 2-ãî áàðà, ïàòòåðí ââåðõ
   UpValues[3]=iLow(_Symbol,_Period,n3);    // Low 3-ãî áàðà, ïàòòåðí ââåðõ, âõîä íà Sell, ñòîï äëÿ Buy
//---
   int BH=iHighest(_Symbol,_Period,MODE_HIGH,m3,0);
   int BL=iLowest(_Symbol,_Period,MODE_LOW,n3,0);
//--- Èíäèêàöèÿ ïðîáîÿ ëèíèè
   double h=iHigh(_Symbol,_Period,BH);
   double l=iLow(_Symbol,_Period,BL);
//---
   if(h>DnValues[3]) {DnBars[0]=BH; DnValues[0]=h;} // Ïàòòåðí âíèç ïðîáèò
   if(l<UpValues[3]) {UpBars[0]=BL; UpValues[0]=l;} // Ïàòòåðí ââåðõ ïðîáèò
                                                    //      Help=true;
//---
   if(Help)
     {
      string s="\n"+(string)_Period+" - Òàéìôðåéì";
      s=s+"\n"+(string)BBar+" - Íà÷àëüíûé áàð äëÿ ïîèñêà ïàòòåðíîâ"+"\n";
//---
      s=s+"\n"+DoubleToStr(DnBars[1],0)+" - Íîìåð 1-ãî áàðà, ïàòòåðí âíèç"+
        "\n"+DoubleToStr(DnBars[2],0)+" - Íîìåð 2-ãî áàðà, ïàòòåðí âíèç"+
        "\n"+DoubleToStr(DnBars[3],0)+" - Íîìåð 3-ãî áàðà, ïàòòåðí âíèç"+
        "\n"+DoubleToStr(DnValues[1],d)+" - Low 1-ãî áàðà, ïàòòåðí âíèç, ñòîï äëÿ Buy"+
        "\n"+DoubleToStr(DnValues[2],d)+" - High 2-ãî áàðà, ïàòòåðí âíèç"+
        "\n"+DoubleToStr(DnValues[3],d)+" - High 3-ãî áàðà, ïàòòåðí âíèç, âõîä íà Buy, ñòîï äëÿ Sell";
      if(DnBars[0]!=EMPTY_VALUE) s=s+"\n"+"Ïàòòåðí âíèç îòìåíåí";
//---
      s=s+"\n";
      s=s+     "\n"+DoubleToStr(UpBars[1],0) +" - Íîìåð 1-ãî áàðà, ïàòòåðí ââåðõ"+
        "\n"+DoubleToStr(UpBars[2],0)+" - Íîìåð 2-ãî áàðà, ïàòòåðí ââåðõ"+
        "\n"+DoubleToStr(UpBars[3],0)+" - Íîìåð 3-ãî áàðà, ïàòòåðí ââåðõ"+
        "\n"+DoubleToStr(UpValues[1],d)+" - High 1-ãî áàðà, ïàòòåðí ââåðõ, ñòîï äëÿ Sell"+
        "\n"+DoubleToStr(UpValues[2],d)+" - Low 2-ãî áàðà, ïàòòåðí ââåðõ"+
        "\n"+DoubleToStr(UpValues[3],d)+" - Low 3-ãî áàðà, ïàòòåðí ââåðõ, âõîä íà Sell, ñòîï äëÿ Buy";
      if(UpBars[0]!=EMPTY_VALUE) s=s+"\n"+"Ïàòòåðí ââåðõ îòìåíåí";
//---
      Comment(s);
     }
//--- return value of prev_calculated for next call
   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 ---