Unbalaced parentheses!! Can someone help me fix it?

 
 //+------------------------------------------------------------------+
//|                                               Lucky Reversal.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window
#property indicator_chart_window
#property indicator_buffers 8
#property indicator_color1  White
#property indicator_width1 4
#property indicator_color2  Lime
#property indicator_width2 2
#property indicator_color3  Blue
#property indicator_color4  Blue
#property indicator_color5  Blue//C'0,128,255'
#property indicator_width5 7
#property indicator_color6  Red//C'192,0,192'
#property indicator_width6 7
#property indicator_color7  DodgerBlue//C'0,128,255'
#property indicator_width7 3
#property indicator_color8  MediumVioletRed//C'192,0,192'
#property indicator_width8 3
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+

int OnInit()
{

SR     =3;  // =3..4   Xard settings (3,21,20,21,3,false,0)
extern int    SRZZ   =60;//60;//36;//24;//13; // =4..12..20..12
int    MainRZZ=20;//20; // =12..20..54..20
int    FP     =21;
int    SMF    =3;  // =1..5
bool   DrawZZ =false;
int    PriceConst=0; // 0 - Close
                            // 1 - Open
                            // 2 - High
                            // 3 - Low
                            // 4 - (H+L)/2
                            // 5 - (H+L+C)/3
                            // 6 - (H+L+2*C)/4
//extern string Prefix="ArrZZx2"; 
extern bool AlertsMessage  = true; 
extern bool AlertsSound    = true;
extern bool AlertsEmail    = false;
extern bool AlertsMobile   = false;

datetime TimeBar;

//--------------------------------------------------------------------
double        Lmt[];
double        LZZ[];
double        SA[];
double        SM[];
double        Up[];
double        Dn[];
double        pUp[];
double        pDn[];
//---------------------------------------------------------------------
int LTF[6]={0,0,0,0,0,0},STF[5]={0,0,0,0,0}; 
int MaxBar, nSBZZ, nLBZZ, SBZZ, LBZZ;
bool First=true;
int prevBars=0;
//---------------------------------------------------------------------
void MainCalculation(int Pos) {
if((Bars-Pos)>(SR+1)) SACalc(Pos); else SA[Pos]=0; 
if((Bars-Pos)>(FP+SR+2)) SMCalc(Pos); else SM[Pos]=0; return; }
//---------------------------------------------------------------------
void SACalc(int Pos) { int sw, i, w, ww, Shift; double sum; 
switch(PriceConst) {
case  0: 
  SA[Pos]=iMA(NULL,0,SR+1,0,MODE_LWMA,PRICE_CLOSE,Pos);
  break;
case  1: 
  SA[Pos]=iMA(NULL,0,SR+1,0,MODE_LWMA,PRICE_OPEN,Pos);
  break;
/*case  2: 
  SA[Pos]=iMA(NULL,0,SR+1,0,MODE_LWMA,PRICE_HIGH,Pos);
  break;
case  3: 
  SA[Pos]=iMA(NULL,0,SR+1,0,MODE_LWMA,PRICE_LOW,Pos);
  break;*/
case  4: 
  SA[Pos]=iMA(NULL,0,SR+1,0,MODE_LWMA,PRICE_MEDIAN,Pos);
  break;
case  5: 
  SA[Pos]=iMA(NULL,0,SR+1,0,MODE_LWMA,PRICE_TYPICAL,Pos);
  break;
case  6: 
  SA[Pos]=iMA(NULL,0,SR+1,0,MODE_LWMA,PRICE_WEIGHTED,Pos);
  break;
default: 
  SA[Pos]=iMA(NULL,0,SR+1,0,MODE_LWMA,PRICE_OPEN,Pos);
  break; }
for(Shift=Pos+SR+2;Shift>Pos;Shift--) { sum=0.0; sw=0; i=0; w=Shift+SR;
ww=Shift-SR; if(ww<Pos) ww=Pos;
while(w>=Shift) {i++; sum=sum+i*SnakePrice(w); sw=sw+i; w--; }
while(w>=ww) { i--; sum=sum+i*SnakePrice(w); sw=sw+i; w--; }
SA[Shift]=sum/sw; } return; }
//----
double SnakePrice(int Shift) {
switch(PriceConst) {
   case  0: return(Close[Shift]);
   case  1: return(Open[Shift]);
   /*case  2: return(High[Shift]);
   case  3: return(Low[Shift]);*/
   case  4: return((High[Shift]+Low[Shift])/2);
   case  5: return((Close[Shift]+High[Shift]+Low[Shift])/3);
   case  6: return((2*Close[Shift]+High[Shift]+Low[Shift])/4);
   default: return(Open[Shift]); } }
//---------------------------------------------------------------------
void SMCalc(int i) { double t, b;
for(int Shift=i+SR+2;Shift>=i;Shift--) {
t=SA[ArrayMaximum(SA,FP,Shift)]; b=SA[ArrayMinimum(SA,FP,Shift)];
SM[Shift]=(2*(2+SMF)*SA[Shift]-(t+b))/2/(1+SMF); } return; }
//---------------------------------------------------------------------
void LZZCalc(int Pos) { 
int i,RBar,LBar,ZZ,NZZ,NZig,NZag; 
i=Pos-1; NZig=0; NZag=0;
while(i<MaxBar && ZZ==0) { i++; LZZ[i]=0; RBar=i-MainRZZ; 
if(RBar<Pos) RBar=Pos; LBar=i+MainRZZ;
if(i==ArrayMinimum(SM,LBar-RBar+1,RBar)) { ZZ=-1; NZig=i; }
if(i==ArrayMaximum(SM,LBar-RBar+1,RBar)) { ZZ=1;NZag=i; } }
if(ZZ==0) return; NZZ=0;
if(i>Pos) { if(SM[i]>SM[Pos]) { if(ZZ==1) {
if(i>=Pos+MainRZZ && NZZ<5) { NZZ++; LTF[NZZ]=i; } NZag=i; 
LZZ[i]=SM[i]; } }
else { if(ZZ==-1) { if(i>=Pos+MainRZZ && NZZ<5) { NZZ++; LTF[NZZ]=i; }
NZig=i; LZZ[i]=SM[i]; } } }
while(i<LBZZ || NZZ<5) {  LZZ[i]=0; RBar=i-MainRZZ; 
if(RBar<Pos) RBar=Pos; LBar=i+MainRZZ;
if(i==ArrayMinimum(SM,LBar-RBar+1,RBar)) {
if(ZZ==-1 && SM[i]<SM[NZig]) { 
if(i>=Pos+MainRZZ && NZZ<5) LTF[NZZ]=i; LZZ[NZig]=0; LZZ[i]=SM[i]; 
NZig=i; }
if(ZZ==1) { if(i>=Pos+MainRZZ && NZZ<5) { NZZ++; LTF[NZZ]=i; } 
LZZ[i]=SM[i]; ZZ=-1; NZig=i; } }
if(i==ArrayMaximum(SM,LBar-RBar+1,RBar)) {
if(ZZ==1 && SM[i]>SM[NZag]) { 
if(i>=Pos+MainRZZ && NZZ<5) LTF[NZZ]=i; LZZ[NZag]=0; LZZ[i]=SM[i]; 
NZag=i; }
if(ZZ==-1) { if(i>=Pos+MainRZZ && NZZ<5) { NZZ++; LTF[NZZ]=i; } 
LZZ[i]=SM[i]; ZZ=1; NZag=i; } } i++; if(i>MaxBar) return; } 
nLBZZ=Bars-LTF[5]; LZZ[Pos]=SM[Pos]; return; }
//----
void SZZCalc(int Pos) { 
int i,RBar,LBar,ZZ,NZZ,NZig,NZag; 
i=Pos-1; NZig=0; NZag=0;
while(i<=LBZZ && ZZ==0) { i++; pDn[i]=0; pUp[i]=0; Dn[i]=0; Up[i]=0; 
Lmt[i]=0; RBar=i-SRZZ; if(RBar<Pos) RBar=Pos; LBar=i+SRZZ;
if(i==ArrayMinimum(SM,LBar-RBar+1,RBar)) { ZZ=-1; NZig=i; }
if(i==ArrayMaximum(SM,LBar-RBar+1,RBar)) { ZZ=1; NZag=i; } }
if(ZZ==0) return; NZZ=0;
if(i>Pos) { if(SM[i]>SM[Pos]) { if(ZZ==1) {
if(i>=Pos+SRZZ && NZZ<4) { NZZ++; STF[NZZ]=i; } NZag=i; 
Dn[i-1]=Open[i-1]; } }
else { if(ZZ==-1) { if(i>=Pos+SRZZ && NZZ<4) { NZZ++; STF[NZZ]=i; }
NZig=i; Up[i-1]=Open[i-1]; } } }
while(i<=LBZZ || NZZ<4) { pDn[i]=0; pUp[i]=0; Dn[i]=0; Up[i]=0; 
Lmt[i]=0; RBar=i-SRZZ; if(RBar<Pos) RBar=Pos; LBar=i+SRZZ;
if(i==ArrayMinimum(SM,LBar-RBar+1,RBar)) {
if(ZZ==-1 && SM[i]<SM[NZig]) { 
if(i>=Pos+SRZZ && NZZ<4) STF[NZZ]=i; Up[NZig-1]=0; Up[i-1]=Open[i-1]; 
NZig=i; } if(ZZ==1) { if(i>=Pos+SRZZ && NZZ<4) { NZZ++; STF[NZZ]=i; } 
Up[i-1]=Open[i-1]; ZZ=-1; NZig=i;  } }
if(i==ArrayMaximum(SM,LBar-RBar+1,RBar)) {
if(ZZ==1 && SM[i]>SM[NZag]) { 
if(i>=Pos+SRZZ && NZZ<4) STF[NZZ]=i; Dn[NZag-1]=0; Dn[i-1]=Open[i-1]; 
NZag=i; } if(ZZ==-1) { if(i>=Pos+SRZZ && NZZ<4) { NZZ++; STF[NZZ]=i; } 
Dn[i-1]=Open[i-1]; ZZ=1; NZag=i; } } i++; if(i>LBZZ) return; } 
nSBZZ=Bars-STF[4]; return; }
//---------------------------------------------------------------------
void ArrCalc() { int i,j,k,n,z=0; double p, b;
i=LBZZ; while(LZZ[i]==0) i--; j=i; p=LZZ[i]; i--; while(LZZ[i]==0) i--; 
if(LZZ[i]>p) z=1; if(LZZ[i]>0 && LZZ[i]<p) z=-1; p=LZZ[j]; i=j-1;  
while(i>0) { if(LZZ[i]>p) { z=-1; p=LZZ[i]; }
if(LZZ[i]>0 && LZZ[i]<p) { z=1;  p=LZZ[i]; }
if(z>0 && Dn[i]>0) { Lmt[i]=Open[i]; Dn[i]=0; }
if(z<0 && Up[i]>0) { Lmt[i]=Open[i]; Up[i]=0; }
if(z>0 && Up[i]>0) { if(i>1) { j=i-1; k=j-SRZZ+1; if(k<0) k=0; 
n=j; while(n>=k && Dn[n]==0) { pUp[n]=Up[i]; pDn[n]=0; n--; } } 
if(i==1) pUp[0]=Up[i]; } 
if(z<0 && Dn[i]>0) { if(i>1) { j=i-1; k=j-SRZZ+1; if(k<0) k=0; 
n=j; while(n>=k && Up[n]==0) { pDn[n]=Dn[i]; pUp[n]=0; n--; } } 
if(i==1) pDn[0]=Dn[i]; } 
i--; } return; }
//---------------------------------------------------------------------
void deinit() { 
return; }
//---------------------------------------------------------------------
int init() { IndicatorBuffers(8);
SetIndexBuffer(0,Lmt);
SetIndexStyle(0,DRAW_ARROW,EMPTY,5); SetIndexArrow(0,167);
SetIndexEmptyValue(0,0.0);
SetIndexBuffer(1,LZZ);
if(DrawZZ) {
SetIndexStyle(1,DRAW_SECTION,EMPTY,2);
SetIndexEmptyValue(1,0.0); }
else SetIndexStyle(1,DRAW_NONE);
SetIndexBuffer(2,SA); SetIndexStyle(2,DRAW_NONE);
SetIndexBuffer(3,SM); SetIndexStyle(3,DRAW_NONE);
SetIndexBuffer(4,Up); SetIndexStyle(4,DRAW_ARROW,EMPTY,7);//Green up arrow
SetIndexArrow(4,233); SetIndexEmptyValue(4,0.0);
SetIndexBuffer(5,Dn); SetIndexStyle(5,DRAW_ARROW,EMPTY,7);//Red down arrow
SetIndexArrow(5,234); SetIndexEmptyValue(5,0.0);
SetIndexBuffer(6,pUp); SetIndexStyle(6,DRAW_ARROW,EMPTY,3);//Green up markers
SetIndexArrow(6,104); SetIndexEmptyValue(6,0.0);
SetIndexBuffer(7,pDn); SetIndexStyle(7,DRAW_ARROW,EMPTY,3);//Red down markers
SetIndexArrow(7,104); SetIndexEmptyValue(7,0.0); return(0); }//167
//---------------------------------------------------------------------
int start() { int counted_bars=IndicatorCounted(); int limit,i,j,n;
if(counted_bars<0) return(-1); if(counted_bars>0) counted_bars--;
if(First==true) { 
if(SR<2) SR=2; if(Bars<=2*(MainRZZ+FP+SR+2)) return(-1); 
if(SRZZ<=SR) SRZZ=SR+1; MaxBar=Bars-(MainRZZ+FP+SR+2);
LBZZ=MaxBar; SBZZ=LBZZ; prevBars=Bars; First=false; }
limit=Bars-counted_bars; for(i=limit;i>=0;i--) { MainCalculation(i); }
if(prevBars!=Bars) { SBZZ=Bars-nSBZZ; LBZZ=Bars-nLBZZ; prevBars=Bars; } 
SZZCalc(0); LZZCalc(0); ArrCalc(); 

/*//////////////////////////
      ObjectDelete("tx01");
      ObjectCreate("tx01", OBJ_LABEL, 0, 0, 0);
      ObjectSetText("tx01", DoubleToStr(pDn,2), 25, "Arial Bold", LimeGreen);
      ObjectSet("tx01", OBJPROP_CORNER, 1);
      ObjectSet("tx01", OBJPROP_BACK, true);
      ObjectSet("tx01", OBJPROP_XDISTANCE, 20);
      ObjectSet("tx01", OBJPROP_YDISTANCE, 200);
      *////////////////////////////////////////
//-------------------------------------------------------------------+   
 if(AlertsMessage || AlertsSound || AlertsEmail || AlertsMobile)
  { 
   string message1 = (WindowExpertName()+" - "+Symbol()+"  "+PeriodString()+" - Buy");
   string message2 = (WindowExpertName()+" - "+Symbol()+"  "+PeriodString()+" - Sell");
       
    if(TimeBar!=Time[0] && Up[0] != EMPTY_VALUE && Up[0] != 0)
     { 
        if (AlertsMessage) Alert(message1);
        if (AlertsSound)   PlaySound("alert.wav");
        if (AlertsEmail)   SendMail(Symbol()+" - "+WindowExpertName()+" - ",message1);
        if (AlertsMobile)  SendNotification(message1);
        TimeBar=Time[0];
     }
    if(TimeBar!=Time[0] && Dn[0] != EMPTY_VALUE && Dn[0] != 0)
     { 
        if (AlertsMessage) Alert(message2);
        if (AlertsSound)   PlaySound("alert.wav");
        if (AlertsEmail)   SendMail(Symbol()+" - "+WindowExpertName()+" - ",message2);
        if (AlertsMobile)  SendNotification(message2);
        TimeBar=Time[0];
    }
  }
//-------------------------------------------------------------------+
   return(0);
  }
//-------------------------------------------------------------------+ 
string PeriodString()
{
    switch (_Period) 
     {
        case PERIOD_M1:  return("M1");
        case PERIOD_M5:  return("M5");
        case PERIOD_M15: return("M15");
        case PERIOD_M30: return("M30");
        
        case PERIOD_H1:  return("H1");
        case PERIOD_H4:  return("H4");
        case PERIOD_D1:  return("D1");
        case PERIOD_W1:  return("W1");
        case PERIOD_MN1: return("MN1");
   
//---
   return(INIT_SUCCEEDED);
      }
}
//-------------------------------------------------------------------- 

Discover new MetaTrader 5 opportunities with MQL5 community and services
Discover new MetaTrader 5 opportunities with MQL5 community and services
  • www.mql5.com
Dozens of new automated trading applications appear in the MQL5 Market every day. Choose the right app among 10,000 products and forget about unnecessary routine operations of manual trading. Sell your algorithmic trading programs through the largest store of trading applications! One Click Close The script allows users to easily close...
 
//+------------------------------------------------------------------+
//|                                                      unknown.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window
#property indicator_chart_window
#property indicator_buffers 8
#property indicator_plots 8
input int SR=3;
input int SRZZ=60;
input int MainRZZ=20;
input int FP=21;
input int SMF=3;
input bool DrawZZ=false;
input ENUM_APPLIED_PRICE PriceConst=PRICE_OPEN;
input bool AlertsMessage=true;
input bool AlertsSound=true;
input bool AlertsEmail=false;
input bool AlertsMobile=false;

datetime TimeBar;

//--------------------------------------------------------------------
double        Lmt[];
double        LZZ[];
double        SA[];
double        SM[];
double        Up[];
double        Dn[];
double        pUp[];
double        pDn[];
int MABUFFER;
double copybuffer[];
//---------------------------------------------------------------------
int LTF[6]={0,0,0,0,0,0},STF[5]={0,0,0,0,0}; 
int MaxBar, nSBZZ, nLBZZ, SBZZ, LBZZ;
bool First=true;
int prevBars=0;
string MyIndicatorNameYouLazies="Name I Want User To See";
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
  MABUFFER=iMA(_Symbol,_Period,SR+1,0,MODE_LWMA,PriceConst);
  ArrayResize(copybuffer,1,0);
//--- indicator buffers mapping
  SetIndexBuffer(0,Lmt);
  SetIndexStyleMQL5(0,DRAW_ARROW,clrWhite,5,167);
  ArraySetAsSeries(Lmt,true);
  ArrayInitialize(Lmt,0);

  SetIndexBuffer(1,LZZ);
  if(DrawZZ){SetIndexStyleMQL5(1,DRAW_SECTION,clrLime,2,NULL);ArraySetAsSeries(LZZ,true);ArrayInitialize(LZZ,0);}
  if(!DrawZZ){SetIndexStyleMQL5(1,DRAW_NONE,clrNONE,NULL,NULL);ArraySetAsSeries(LZZ,true);ArrayInitialize(LZZ,0);}
  
  SetIndexBuffer(2,SA);
  SetIndexStyleMQL5(2,DRAW_NONE,clrNONE,NULL,NULL);ArraySetAsSeries(SA,true);
  
  SetIndexBuffer(3,SM);
  SetIndexStyleMQL5(3,DRAW_NONE,clrNONE,NULL,NULL);ArraySetAsSeries(SM,true);
  
  SetIndexBuffer(4,Up);
  SetIndexStyleMQL5(4,DRAW_ARROW,clrBlue,7,233);
  ArraySetAsSeries(Up,true);ArrayInitialize(Up,0);

  SetIndexBuffer(5,Dn);
  SetIndexStyleMQL5(5,DRAW_ARROW,clrRed,7,234);
  ArraySetAsSeries(Dn,true);ArrayInitialize(Dn,0);  

  SetIndexBuffer(6,pUp);
  SetIndexStyleMQL5(6,DRAW_ARROW,clrDodgerBlue,3,104);
  ArraySetAsSeries(pUp,true);ArrayInitialize(pUp,0);    
  
  SetIndexBuffer(7,pDn);
  SetIndexStyleMQL5(7,DRAW_ARROW,clrMediumVioletRed,3,104);
  ArraySetAsSeries(pDn,true);ArrayInitialize(pDn,0);      

//---
   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[])
  {
//---
int counted_bars=prev_calculated; int limit,i;
if(counted_bars>0) counted_bars--;
if(First==true) { 
if(Bars(_Symbol,_Period)<=2*(MainRZZ+FP+SR+2)) return(-1); 
MaxBar=Bars(_Symbol,_Period)-(MainRZZ+FP+SR+2);
LBZZ=MaxBar; SBZZ=LBZZ; prevBars=Bars(_Symbol,_Period); First=false; }
limit=Bars(_Symbol,_Period)-counted_bars; for(i=limit;i>=0;i--) { MainCalculation(i); }
if(prevBars!=Bars(_Symbol,_Period)) { SBZZ=Bars(_Symbol,_Period)-nSBZZ; LBZZ=Bars(_Symbol,_Period)-nLBZZ; prevBars=Bars(_Symbol,_Period); } 
SZZCalc(0); LZZCalc(0); ArrCalc(); 

//-------------------------------------------------------------------+   
 if(AlertsMessage || AlertsSound || AlertsEmail || AlertsMobile)
  { 
   string message1 = (MyIndicatorNameYouLazies+" - "+Symbol()+"  "+PeriodString()+" - Buy");
   string message2 = (MyIndicatorNameYouLazies+" - "+Symbol()+"  "+PeriodString()+" - Sell");
       
    if(TimeBar!=iTime(_Symbol,_Period,0) && Up[0] != EMPTY_VALUE && Up[0] != 0)
     { 
        if (AlertsMessage) Alert(message1);
        if (AlertsSound)   PlaySound("alert.wav");
        if (AlertsEmail)   SendMail(Symbol()+" - "+MyIndicatorNameYouLazies+" - ",message1);
        if (AlertsMobile)  SendNotification(message1);
        TimeBar=iTime(_Symbol,_Period,0);
     }
    if(TimeBar!=iTime(_Symbol,_Period,0) && Dn[0] != EMPTY_VALUE && Dn[0] != 0)
     { 
        if (AlertsMessage) Alert(message2);
        if (AlertsSound)   PlaySound("alert.wav");
        if (AlertsEmail)   SendMail(Symbol()+" - "+MyIndicatorNameYouLazies+" - ",message2);
        if (AlertsMobile)  SendNotification(message2);
        TimeBar=iTime(_Symbol,_Period,0);
    }
  }   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//---
   
  }
//+------------------------------------------------------------------+

void SetIndexStyleMQL5(int level,
                       ENUM_DRAW_TYPE draw_type,
                       color draw_color,
                       int draw_width,
                       int arrow_code)
{
IndicatorSetInteger(INDICATOR_LEVELSTYLE,level,draw_type);
IndicatorSetInteger(INDICATOR_LEVELWIDTH,level,draw_width);
IndicatorSetInteger(INDICATOR_LEVELCOLOR,level,draw_color);
if(draw_type==DRAW_ARROW) PlotIndexSetInteger(level,PLOT_ARROW,0,arrow_code);
}

string PeriodString()
{
    switch (_Period) 
     {
        case PERIOD_M1:  return("M1");
        case PERIOD_M5:  return("M5");
        case PERIOD_M15: return("M15");
        case PERIOD_M30: return("M30");
        
        case PERIOD_H1:  return("H1");
        case PERIOD_H4:  return("H4");
        case PERIOD_D1:  return("D1");
        case PERIOD_W1:  return("W1");
        case PERIOD_MN1: return("MN1");
      }
return("X");
}
//-------------------------------------------------------------------- 


void LZZCalc(int Pos) { 
int i,RBar,LBar,ZZ=0,NZZ,NZig,NZag; 
i=Pos-1; NZig=0; NZag=0;
while(i<MaxBar && ZZ==0) { i++; LZZ[i]=0; RBar=i-MainRZZ; 
if(RBar<Pos) RBar=Pos; LBar=i+MainRZZ;
if(i==ArrayMinimum(SM,LBar-RBar+1,RBar)) { ZZ=-1; NZig=i; }
if(i==ArrayMaximum(SM,LBar-RBar+1,RBar)) { ZZ=1;NZag=i; } }
if(ZZ==0) return; NZZ=0;
if(i>Pos) { if(SM[i]>SM[Pos]) { if(ZZ==1) {
if(i>=Pos+MainRZZ && NZZ<5) { NZZ++; LTF[NZZ]=i; } NZag=i; 
LZZ[i]=SM[i]; } }
else { if(ZZ==-1) { if(i>=Pos+MainRZZ && NZZ<5) { NZZ++; LTF[NZZ]=i; }
NZig=i; LZZ[i]=SM[i]; } } }
while(i<LBZZ || NZZ<5) {  LZZ[i]=0; RBar=i-MainRZZ; 
if(RBar<Pos) RBar=Pos; LBar=i+MainRZZ;
if(i==ArrayMinimum(SM,LBar-RBar+1,RBar)) {
if(ZZ==-1 && SM[i]<SM[NZig]) { 
if(i>=Pos+MainRZZ && NZZ<5) LTF[NZZ]=i; LZZ[NZig]=0; LZZ[i]=SM[i]; 
NZig=i; }
if(ZZ==1) { if(i>=Pos+MainRZZ && NZZ<5) { NZZ++; LTF[NZZ]=i; } 
LZZ[i]=SM[i]; ZZ=-1; NZig=i; } }
if(i==ArrayMaximum(SM,LBar-RBar+1,RBar)) {
if(ZZ==1 && SM[i]>SM[NZag]) { 
if(i>=Pos+MainRZZ && NZZ<5) LTF[NZZ]=i; LZZ[NZag]=0; LZZ[i]=SM[i]; 
NZag=i; }
if(ZZ==-1) { if(i>=Pos+MainRZZ && NZZ<5) { NZZ++; LTF[NZZ]=i; } 
LZZ[i]=SM[i]; ZZ=1; NZag=i; } } i++; if(i>MaxBar) return; } 
nLBZZ=Bars(_Symbol,_Period)-LTF[5]; LZZ[Pos]=SM[Pos]; return; }

//---------------------------------------------------------------------
void ArrCalc() { int i,j,k,n,z=0; double p;
i=LBZZ; while(LZZ[i]==0) i--; j=i; p=LZZ[i]; i--; while(LZZ[i]==0) i--; 
if(LZZ[i]>p) z=1; if(LZZ[i]>0 && LZZ[i]<p) z=-1; p=LZZ[j]; i=j-1;  
while(i>0) { if(LZZ[i]>p) { z=-1; p=LZZ[i]; }
if(LZZ[i]>0 && LZZ[i]<p) { z=1;  p=LZZ[i]; }
if(z>0 && Dn[i]>0) { Lmt[i]=iOpen(_Symbol,_Period,i); Dn[i]=0; }
if(z<0 && Up[i]>0) { Lmt[i]=iOpen(_Symbol,_Period,i); Up[i]=0; }
if(z>0 && Up[i]>0) { if(i>1) { j=i-1; k=j-SRZZ+1; if(k<0) k=0; 
n=j; while(n>=k && Dn[n]==0) { pUp[n]=Up[i]; pDn[n]=0; n--; } } 
if(i==1) pUp[0]=Up[i]; } 
if(z<0 && Dn[i]>0) { if(i>1) { j=i-1; k=j-SRZZ+1; if(k<0) k=0; 
n=j; while(n>=k && Up[n]==0) { pDn[n]=Dn[i]; pUp[n]=0; n--; } } 
if(i==1) pDn[0]=Dn[i]; } 
i--; } return; }

//----
void SZZCalc(int Pos) { 
int i,RBar,LBar,ZZ=0,NZZ,NZig,NZag; 
i=Pos-1; NZig=0; NZag=0;
while(i<=LBZZ && ZZ==0) { i++; pDn[i]=0; pUp[i]=0; Dn[i]=0; Up[i]=0; 
Lmt[i]=0; RBar=i-SRZZ; if(RBar<Pos) RBar=Pos; LBar=i+SRZZ;
if(i==ArrayMinimum(SM,LBar-RBar+1,RBar)) { ZZ=-1; NZig=i; }
if(i==ArrayMaximum(SM,LBar-RBar+1,RBar)) { ZZ=1; NZag=i; } }
if(ZZ==0) return; NZZ=0;
if(i>Pos) { if(SM[i]>SM[Pos]) { if(ZZ==1) {
if(i>=Pos+SRZZ && NZZ<4) { NZZ++; STF[NZZ]=i; } NZag=i; 
Dn[i-1]=iOpen(_Symbol,_Period,i-1); } }
else { if(ZZ==-1) { if(i>=Pos+SRZZ && NZZ<4) { NZZ++; STF[NZZ]=i; }
NZig=i; Up[i-1]=iOpen(_Symbol,_Period,i-1); } } }
while(i<=LBZZ || NZZ<4) { pDn[i]=0; pUp[i]=0; Dn[i]=0; Up[i]=0; 
Lmt[i]=0; RBar=i-SRZZ; if(RBar<Pos) RBar=Pos; LBar=i+SRZZ;
if(i==ArrayMinimum(SM,LBar-RBar+1,RBar)) {
if(ZZ==-1 && SM[i]<SM[NZig]) { 
if(i>=Pos+SRZZ && NZZ<4) STF[NZZ]=i; Up[NZig-1]=0; Up[i-1]=iOpen(_Symbol,_Period,i-1); 
NZig=i; } if(ZZ==1) { if(i>=Pos+SRZZ && NZZ<4) { NZZ++; STF[NZZ]=i; } 
Up[i-1]=iOpen(_Symbol,_Period,i-1); ZZ=-1; NZig=i;  } }
if(i==ArrayMaximum(SM,LBar-RBar+1,RBar)) {
if(ZZ==1 && SM[i]>SM[NZag]) { 
if(i>=Pos+SRZZ && NZZ<4) STF[NZZ]=i; Dn[NZag-1]=0; Dn[i-1]=iOpen(_Symbol,_Period,i-1); 
NZag=i; } if(ZZ==-1) { if(i>=Pos+SRZZ && NZZ<4) { NZZ++; STF[NZZ]=i; } 
Dn[i-1]=iOpen(_Symbol,_Period,i-1); ZZ=1; NZag=i; } } i++; if(i>LBZZ) return; } 
nSBZZ=Bars(_Symbol,_Period)-STF[4]; return; }

//---------------------------------------------------------------------
void SMCalc(int i) { double t, b;
for(int Shift=i+SR+2;Shift>=i;Shift--) {
t=SA[ArrayMaximum(SA,FP,Shift)]; b=SA[ArrayMinimum(SA,FP,Shift)];
SM[Shift]=(2*(2+SMF)*SA[Shift]-(t+b))/2/(1+SMF); } return; }

//---------------------------------------------------------------------
void SACalc(int Pos) { int sw, i, w, ww, Shift; double sum; 
  int cp=CopyBuffer(MABUFFER,0,Pos,1,copybuffer);
  SA[Pos]=copybuffer[0];
for(Shift=Pos+SR+2;Shift>Pos;Shift--) { sum=0.0; sw=0; i=0; w=Shift+SR;
ww=Shift-SR; if(ww<Pos) ww=Pos;
while(w>=Shift) {i++; sum=sum+i*SnakePrice(w); sw=sw+i; w--; }
while(w>=ww) { i--; sum=sum+i*SnakePrice(w); sw=sw+i; w--; }
SA[Shift]=sum/sw; } return; }
//----
double SnakePrice(int Shift) {
switch(PriceConst) {
   case  PRICE_CLOSE: return(iClose(_Symbol,_Period,Shift));
   case  PRICE_OPEN: return(iOpen(_Symbol,_Period,Shift));
   case  PRICE_HIGH: return(iHigh(_Symbol,_Period,Shift));
   case  PRICE_LOW: return(iLow(_Symbol,_Period,Shift));
   case  PRICE_MEDIAN: return((iHigh(_Symbol,_Period,Shift)+iLow(_Symbol,_Period,Shift))/2);
   case  PRICE_TYPICAL: return((iClose(_Symbol,_Period,Shift)+iHigh(_Symbol,_Period,Shift)+iLow(_Symbol,_Period,Shift))/3);
   case  PRICE_WEIGHTED: return((2*iClose(_Symbol,_Period,Shift)+iHigh(_Symbol,_Period,Shift)+iLow(_Symbol,_Period,Shift))/4);
   default: return(iOpen(_Symbol,_Period,Shift)); } }
   
   //---------------------------------------------------------------------
void MainCalculation(int Pos) {
if((Bars(_Symbol,_Period)-Pos)>(SR+1)) SACalc(Pos); else SA[Pos]=0; 
if((Bars(_Symbol,_Period)-Pos)>(FP+SR+2)) SMCalc(Pos); else SM[Pos]=0; return; }
 
FrenchPrince: Unbalaced parentheses!! Can someone help me fix it?
  1. //|                                               Lucky Reversal.mq5 |
    The posted code is not MQL5. If you want it on 5 you will have to have it rewrote. Don't bother trying, you can't even figure out this problem.

  2. Why did you post your MT4 question in the MT5 General section instead of the MQL4 section, (bottom of the Root page?)
              General rules and best pratices of the Forum. - General - MQL5 programming forum?
    Next time post in the correct place. The moderators will likely move this thread there soon.

  3. '}' - unexpected end of program    t.mq4    279    1
    '{' - unbalanced parentheses       t.mq4     31    1
    You know what line is the problem. You know the open count doesn't equal the closed count. Fix it.  What is the problem?

  4. Why do you have these two lines here, when you have a complete int init(){…} on lines 195-213
    int OnInit() // line 30
    {