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...
- Elite indicators :)
- Indicator won't update on new bar.
- Arrow Spacing
//+------------------------------------------------------------------+ //| 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?
-
//| 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.
-
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. - '}' - unexpected end of program t.mq4 279 1You know what line is the problem. You know the open count doesn't equal the closed count. Fix it. What is the problem?
'{' - unbalanced parentheses t.mq4 31 1
- Why do you have these two lines here, when you have a complete int init(){…} on lines 195-213
int OnInit() // line 30 {
You are missing trading opportunities:
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
Registration
Log in
You agree to website policy and terms of use
If you do not have an account, please register