//+------------------------------------------------------------------+ //| 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 && ihm) hm=h; if(liLow(_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 && iiihm) {j1=-1;break;} if ( iHigh(_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 && ihm) hm=h; if(liHigh(_Symbol,_Period,i+1)) { j1=i; j2=-1; ii=i+1; while(j2<0 && iih || j1<0) {j1=-1;break;} if ( iHigh(_Symbol,_Period,ii)iLow(_Symbol,_Period,ii+1) ) {ii++; continue;} //--- if(iLow(_Symbol,_Period,ii)h) {j1=-1;break;} if(BreakOnly && iLow(_Symbol,_Period,iii)iLow(_Symbol,_Period,iii+1) ) {iii++; continue;} //--- if(iLow(_Symbol,_Period,iii)DnValues[3]) {DnBars[0]=BH; DnValues[0]=h;} // Паттерн вниз пробит if(l