Cybron Fibo Pivot Bar v3 (Non-Repaint) MetaTrader 5 Indicator

The Cybron Fibo Pivot Bar v3 (Non-Repaint) is a technical analysis tool designed to help traders identify key price levels in the market using a combination of pivot points and Fibonacci retracement levels. This indicator focuses on marking areas of potential support and resistance based on previous price data. It features color-coded bars that reflect market trends, as well as additional integrations such as moving averages and the MACD for trend confirmation. Its non-repainting nature ensures that the signals remain static after they are generated, providing traders with clear reference points for analysis.

#property strict
#include <MovingAverages.mqh>
//--
#property indicator_chart_window
#property indicator_buffers  2
#property indicator_plots    2
#property indicator_type1    DRAW_NONE
//---
enum fonts
  {
    Arial_Black,
    Bodoni_MT_Black
  };
//--
enum YN
 {
   No,  // No
   Yes  // Yes
 };
//--
//---
input YN          MsgAlerts = Yes;               // Alert
input YN        eMailAlerts = No;                // Email Alert
input YN      UseSendnotify = No;                // Send Notification
input fonts     Fonts_Model = Bodoni_MT_Black;   // Fonts
input color      FontColors = clrSnow;;          // Font colors
input color           BarUp = clrSnow;           // color for Bull Candle
input color         BarDown = clrRed;            // color for Bear Candle
input color       LineGraph = clrYellow;         // color for Line Graph (if Price Close == Price Open)
input color        EmptyBar = clrLightSlateGray; // If the bar has not been passed by the price movement
//--
ENUM_BASE_CORNER corner=CORNER_RIGHT_LOWER;
int distance_x=157;
int distance_y=47;
int digit;
int csec,psec;
int prctick;
int prcpxl=170;
int arrpvt=22;
int font_size=8;
int font_size_OHLC=7;
color font_color;
string font_ohlc;
string font_face="Arial";
//--
double Pvt,
       PvtO,
       PvtL,
       PvtH,
       PvtC,
       PvtO1,
       PvtL1,
       PvtH1,
       PvtC1;
//--
double pivot[];
double fibolvl[]={0.0,23.6,38.2,50.0,61.8};
string label[]={"S8","S7","S6","S5","S4","S3","S2","SS1","S1","L20","L40","L60","L80","R1","SR1","R2","R3","R4","R5","R6","R7","R8"};
             //  0    1    2    3    4     5    6     7     8     9    10    11   12    13   14   15   16   17   18   19   20   21
//-- buffers indi
double Price_Up[],
       Price_Dn[];
//-- zigzag param
int depth=12;  // Depth
int devia=5;   // Deviation
int backs=3;   // Backstep
int level=3;   // recounting's depth of extremums
int zh,zl;
int barh=5;
int bars=110;
int HiLo=108;
//-- zigzag buffers
double 
   ExtZz[],
   ExtHi[],
   ExtLo[];
//-- ma buffers
double 
   EMA5e02[],
   SMA5s20[],
   MAONs10[],
   MAONs62[];
//-- macd buffers       
double 
   MACDM[],
   MACDS[];
//--    
ENUM_TIMEFRAMES
    prhh=PERIOD_M30,
    prh1=PERIOD_H1,
    prdp,
    prfb;
//--
int cral,
    pral,
    crmnt,
    prmnt;
//--
bool ArrUp,
     ArrDn;
//--
int h_iMa2,
    h_iMa20,
    h_Macd;
//--
long chart_id;
string short_name;
string alBase,alSubj,alMsg;
//---------//
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit(void)
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,Price_Up,INDICATOR_DATA);
   PlotIndexSetString(0,PLOT_LABEL,"Price_Up");
   PlotIndexSetInteger(0,PLOT_SHOW_DATA,true);
   SetIndexBuffer(1,Price_Dn,INDICATOR_DATA);
   PlotIndexSetString(1,PLOT_LABEL,"Price_Dn");
   PlotIndexSetInteger(1,PLOT_SHOW_DATA,true);
   //--
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0.0);
//---
   //-- Checking the Digits Point
   if(Digits()==3||Digits()==5)
      digit=Digits();
   else digit=Digits()+1;
   csec=0;
   psec=-1;
   //--
   chart_id=ChartID();
   font_ohlc=FontsModel(Fonts_Model);
   font_color=FontColors;
//---
   prctick=int(prcpxl/20*arrpvt);
   //--
   short_name="Cybron Fibo Pivot Bar";
   IndicatorSetString(INDICATOR_SHORTNAME,short_name+"_("+Symbol()+")");
   IndicatorSetInteger(INDICATOR_DIGITS,digit);
   //--
   if(Period()==PERIOD_MN1) {prdp=PERIOD_MN1; prfb=PERIOD_D1;}
   if(Period()==PERIOD_W1)  {prdp=PERIOD_W1; prfb=PERIOD_H4;}
   if(Period()<=PERIOD_D1)  {prdp=PERIOD_D1; prfb=PERIOD_H1;}
   //--
   h_iMa2=iMA(Symbol(),PERIOD_M15,2,0,MODE_EMA,PRICE_MEDIAN);
   if(h_iMa2==INVALID_HANDLE)
     {
       //--- tell about the failure and output the error code
       PrintFormat("Failed to create handle of the iMA PERIOD_M15 indicator period 2 for the symbol %s/%s, error code %d",
                   Symbol(),
                   EnumToString(Period()),
                   GetLastError());
       //--- the indicator is stopped early
       return(INIT_FAILED);
     }
   h_iMa20=iMA(Symbol(),PERIOD_M15,20,0,MODE_SMA,PRICE_MEDIAN);
   if(h_iMa20==INVALID_HANDLE)
     {
       //--- tell about the failure and output the error code
       PrintFormat("Failed to create handle of the iMA PERIOD_M15 indicator period 20 for the symbol %s/%s, error code %d",
                   Symbol(),
                   EnumToString(Period()),
                   GetLastError());
       //--- the indicator is stopped early
       return(INIT_FAILED);
     }
   //--
   h_Macd=iMACD(Symbol(),prh1,12,26,9,PRICE_CLOSE);
   if(h_Macd==INVALID_HANDLE)
     {
       //--- tell about the failure and output the error code
       PrintFormat("Failed to create handle of the iMACD indicator for the symbol %s/%s, error code %d",
                   Symbol(),
                   EnumToString(Period()),
                   GetLastError());
       //--- the indicator is stopped early
       return(INIT_FAILED);
     }
   //---
   return(INIT_SUCCEEDED);
//---
  } //-end OnInit()
//-------//
//+------------------------------------------------------------------+ 
//| Indicator deinitialization function                              | 
//+------------------------------------------------------------------+ 
void OnDeinit(const int reason) 
  { 
//---
    ObjectsDeleteAll(chart_id,-1,-1);
    //--
    if(h_iMa2!=INVALID_HANDLE) 
       IndicatorRelease(h_iMa2);
    if(h_iMa20!=INVALID_HANDLE) 
       IndicatorRelease(h_iMa20);
    if(h_Macd!=INVALID_HANDLE) 
       IndicatorRelease(h_Macd); 
//--- clear the chart after deleting the indicator 
    Comment(""); 
   //--
   return;
//---
  } //-end OnDeinit()
//---------//
//+------------------------------------------------------------------+
//| 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[])
  {
//---
//--- Set Last error value to Zero
   ResetLastError();
   int limit;
   cral=0;
//--- check for rates total
   if(rates_total<bars)
      return(0);
   limit=rates_total-prev_calculated+5;
   if(prev_calculated==0) limit=bars;
   if(prev_calculated>0) limit++;
   if(limit>bars) limit=bars;
   //--
   ArrayResize(EMA5e02,limit);
   ArrayResize(SMA5s20,limit);
   ArrayResize(MAONs10,limit);
   ArrayResize(MAONs62,limit);
   ArrayResize(MACDM,limit);
   ArrayResize(MACDS,limit);
   ArrayResize(Price_Up,limit);
   ArrayResize(Price_Dn,limit);
   ArraySetAsSeries(Price_Up,true);
   ArraySetAsSeries(Price_Dn,true);
   ArraySetAsSeries(EMA5e02,true);
   ArraySetAsSeries(SMA5s20,true);
   ArraySetAsSeries(MAONs10,true);
   ArraySetAsSeries(MAONs62,true);
   ArraySetAsSeries(MACDM,true);
   ArraySetAsSeries(MACDS,true);
   ArraySetAsSeries(open,true);
   ArraySetAsSeries(high,true);
   ArraySetAsSeries(low,true);
   ArraySetAsSeries(close,true);
   //---
   int ob=0,
       ot=0,
       tb=0,
       tt=0,
       bb=0,
       bt=0,
       cb=0,
       ct=0,
       hb=0,
       ht=0,
       lb=0,
       lt=0;
   //--
   int pso=0;
   int psh=0;
   int psl=0;
   int psc=0;
   int stax=0;
   int cprz=5;
   int dlvl=5;
   int fstp=4;
   int pstep=0;
   int pvtup=0,
       pvtdn=0;
   //--
   double himax=0,
          lomin=0;
   //--
   color opsclr=0;
   color clrmove=0;
   color colordir=0;
   color fbarup=BarUp;
   color fbardn=BarDown;
   color fbarnt=LineGraph;
   color color_fbar=EmptyBar;
   //--
   string stdir;
   //--
   bool opsup=false,
        opsdn=false,
        opsnt=false;
   //--
   double dfl=61.8;
   double barlvl[],przlvl[];
   //--
   ArrayResize(barlvl,dlvl);
   ArrayResize(przlvl,dlvl);
   ArrayResize(pivot,arrpvt);
   ArraySetAsSeries(barlvl,false);
   ArraySetAsSeries(przlvl,false);
   ArraySetAsSeries(pivot,false);
   //---
   //--
   PvtO=iOpen(Symbol(),prdp,0);  
   PvtH=iHigh(Symbol(),prdp,0); 
   PvtL=iLow(Symbol(),prdp,0);
   PvtC=iClose(Symbol(),prdp,0);
   PvtO1=iOpen(Symbol(),prdp,1);
   PvtH1=iHigh(Symbol(),prdp,1);
   PvtL1=iLow(Symbol(),prdp,1);
   PvtC1=iClose(Symbol(),prdp,1);
   //--
   Pvt=(PvtH1+PvtL1+PvtC1)/3;
   //--
   double sup1=((Pvt*2)-PvtH1);          // support_1
   double res1=((Pvt*2)-PvtL1);          // resistance_1
   double disr=res1-sup1;                // distance R1 - S1
   double disl=disr*0.20;                // distance line
   //-
   pivot[21]=(Pvt*7)+(PvtH1)-(PvtL1*7);  // resistance_8
   pivot[20]=(Pvt*6)+(PvtH1)-(PvtL1*6);  // resistance_7
   pivot[19]=(Pvt*5)+(PvtH1)-(PvtL1*5);  // resistance_6
   pivot[18]=(Pvt*4)+(PvtH1)-(PvtL1*4);  // resistance_5
   pivot[17]=(Pvt*3)+(PvtH1)-(PvtL1*3);  // resistance_4
   pivot[16]=(Pvt*2)+(PvtH1)-(PvtL1*2);  // resistance_3
   pivot[15]=(Pvt+PvtH1-PvtL1);          // resistance_2
   pivot[14]=res1+(disl*0.618);          // strong_resistance_1
   pivot[13]=res1;                       // resistance_1
   pivot[12]=(sup1+(disr*0.8));          // point_80
   pivot[11]=(sup1+(disr*0.6));          // point_60
   pivot[10] =(sup1+(disr*0.4));          // point_40
   pivot[9] =(sup1+(disr*0.2));          // point_20
   pivot[8] =sup1;                       // support_1
   pivot[7]=sup1-(disl*0.618);           // strong_suppot_1
   pivot[6]=(Pvt-PvtH1+PvtL1);           // support_2
   pivot[5]=(Pvt*2)-((PvtH1*2)-(PvtL1)); // support_3
   pivot[4]=(Pvt*3)-((PvtH1*3)-(PvtL1)); // support_4
   pivot[3]=(Pvt*4)-((PvtH1*4)-(PvtL1)); // support_5
   pivot[2]=(Pvt*5)-((PvtH1*5)-(PvtL1)); // support_6
   pivot[1]=(Pvt*6)-((PvtH1*6)-(PvtL1)); // support_7
   pivot[0]=(Pvt*7)-((PvtH1*7)-(PvtL1)); // support_8
   //---
   csec=Seconds();
   if(csec!=psec) IndicatorsCondition(limit);
   psec=csec;
   //--
   int zzM1=ZigZagDir(prhh);
   int zzH1=ZigZagDir(prh1);
   int ma5mv=MA5Trend(limit);
   //--
   double mcdm0=MACDM[0];
   double mcdm1=MACDM[1];
   double mcds0=MACDS[0];
   double mcds1=MACDS[1];
   double macd0=mcdm0-mcds0;
   double macd1=mcdm1-mcds1;
   //--
   if(((zzH1==1)&&(zzM1==1))||((macd0>macd1)&&(mcdm0>mcdm1))) {ArrUp=true; ArrDn=false;}
   if(((zzH1==-1)&&(zzM1==-1))||((macd0<macd1)&&(mcdm0<mcdm1))) {ArrDn=true; ArrUp=false;}
   if(((ArrUp==true)&&(zzH1==2))||((mcdm0<mcdm1)&&(macd0<macd1))) {ArrDn=true; ArrUp=false;}
   if(((ArrDn==true)&&(zzH1==-2))||((mcdm0>mcdm1)&&(macd0>macd1))) {ArrUp=true; ArrDn=false;}
   if((mcdm0>=mcdm1)&&(mcdm0>mcds0)&&(mcds0>mcds1)) {ArrUp=true; ArrDn=false;}
   if((mcdm0<=mcdm1)&&(mcdm0<mcds0)&&(mcds0<mcds1)) {ArrDn=true; ArrUp=false;}
   if(ma5mv==1) {ArrUp=true; ArrDn=false;}
   if(ma5mv==-1) {ArrDn=true; ArrUp=false;}
   //--
   double fpCls0=(iHigh(Symbol(),prh1,0)+iLow(Symbol(),prh1,0)+iClose(Symbol(),prh1,0)+iClose(Symbol(),prh1,0))/4;
   double fpCls1=(iHigh(Symbol(),prh1,1)+iLow(Symbol(),prh1,1)+iClose(Symbol(),prh1,1)+iClose(Symbol(),prh1,1))/4;
   double hlcc0=fpCls0-SMA5s20[0];
   double hlcc1=fpCls1-SMA5s20[1];
   //--
   //- prepare the braking movement
   //--
   if((ArrUp==true)&&(hlcc0>hlcc1))
     {opsup=true; opsdn=false; opsnt=false; stax=24; stdir="BUY"; opsclr=fbarup; 
      Price_Up[0]=NormalizeDouble(iLow(Symbol(),Period(),0),Digits()); Price_Dn[0]=0.0;}
   if((ArrDn==true)&&(hlcc0<hlcc1))
     {opsdn=true; opsup=false; opsnt=false; stax=21; stdir="SELL"; opsclr=fbardn; 
      Price_Dn[0]=NormalizeDouble(iHigh(Symbol(),Period(),0),Digits()); Price_Up[0]=0.0;}
   if((!opsup)&&(!opsdn))
     {opsnt=true; opsup=false; opsdn=false; opsclr=fbarnt; Price_Up[0]=0.0; Price_Dn[0]=0.0;}
   //-
   //-- prepare the Fibo Highest and Lowest Price
   int inH=iHighest(Symbol(),prfb,MODE_HIGH,HiLo,0);
   int inL=iLowest(Symbol(),prfb,MODE_LOW,HiLo,0);
   if(inH!=-1) himax=iHigh(Symbol(),prfb,inH);
   if(inL!=-1) lomin=iLow(Symbol(),prfb,inL);
   if((PvtH<=pivot[12])&&(PvtL>=pivot[7])) {himax=pivot[12]; lomin=pivot[7];}
   double dayHi=PvtH;
   double dayLo=PvtL;
   //--
   for(int g=0; g<dlvl; g++) 
     {
       //--
       barlvl[g]=prctick/dfl*fibolvl[g];
       przlvl[g]=lomin+(((himax-lomin)/dfl)*fibolvl[g]);
       //--
     }   
   //--
   PvtO=iOpen(Symbol(),prdp,0);  
   PvtH=iHigh(Symbol(),prdp,0); 
   PvtL=iLow(Symbol(),prdp,0);
   PvtC=iClose(Symbol(),prdp,0);
   //-
   double sumfbar=int(barlvl[4]-barlvl[0]);
   int fbajs=int(prctick-sumfbar);
   //--
   double przHL=przlvl[4]-przlvl[0];
   pso=int(NotZeroDiv((PvtO-przlvl[0]),przHL)*prctick)+fbajs;
   psh=int(NotZeroDiv((PvtH-przlvl[0]),przHL)*prctick)+fbajs;
   psl=int(NotZeroDiv((PvtL-przlvl[0]),przHL)*prctick)+fbajs;
   psc=int(NotZeroDiv((PvtC-przlvl[0]),przHL)*prctick)+fbajs;
   //--
   int fbbar=psh-psl+1;
   int fcbar=fabs(psc-pso)+1;
   int fcbhi=psh-psc+1;
   int fcblo=fabs(psl-psc)+1;
   //--
   for(int b=0; b<arrpvt-1; b++)
     {
       //--
       if((PvtO>=pivot[b])&&(PvtO<pivot[b+1])) {ob=b; ot=b+1;}
       if((PvtH>=pivot[b])&&(PvtH<pivot[b+1])) {tb=b; tt=b+1;}
       if((PvtL>=pivot[b])&&(PvtL<pivot[b+1])) {bb=b; bt=b+1;}
       if((PvtC>=pivot[b])&&(PvtC<pivot[b+1])) {cb=b; ct=b+1;}
       //--
       ht=tt; lb=bb;
     }
   //--
   if(ht-lb<5) {ht=lb+5;}
   pstep=ht-lb;
   int pvtlvl=prctick/pstep;
   //--
   double barop=(NotZeroDiv((PvtO-pivot[ob]),(pivot[ot]-pivot[ob]))*pvtlvl)+((ob-lb)*pvtlvl);
   double barhi=(NotZeroDiv((PvtH-pivot[tb]),(pivot[tt]-pivot[tb]))*pvtlvl)+((tb-lb)*pvtlvl);
   double barlo=(NotZeroDiv((PvtL-pivot[bb]),(pivot[bt]-pivot[bb]))*pvtlvl)+((bb-lb)*pvtlvl);
   double barcl=(NotZeroDiv((PvtC-pivot[cb]),(pivot[ct]-pivot[cb]))*pvtlvl)+((cb-lb)*pvtlvl);
   //--
   int pvop=int(barop)+1;
   int pvhi=int(barhi)+1;
   int pvlo=int(barlo);
   int pvcl=int(barcl);
   int pvbar=pvhi-pvlo;
   int pvthi=fabs(pvhi-pvcl);
   int pvtlo=fabs(pvcl-pvlo);
   pvtup=fabs(pvcl-pvop);
   pvtdn=fabs(pvop-pvcl);
   if(PvtC>PvtO) {clrmove=fbarup;}
   if(PvtC<PvtO) {clrmove=fbardn;}
   if(PvtC==PvtO) {clrmove=fbarnt;}
   //---
   string bar45=CharToString(45);
   string barcnd=CharToString(151)+CharToString(151)+CharToString(151);
   //--
   for(int d=0; d<arrpvt-1; d++) 
     {
       ObjectDelete(chart_id,"PivotLevel_"+string(d));
       ObjectDelete(chart_id,"PivotLableLevel_"+string(d));
     }
   for(int n=0; n<dlvl; n++)
     {
       //--
       ObjectDelete(chart_id,"FiboBarLevel_"+string(n));
       ObjectDelete(chart_id,"FiboBar_"+string(n));
       //--
     }
   //--
   for(int s=0; s<=prctick+1; s++) 
     {
       ObjectDelete(chart_id,"PivotBar"+string(s));
       ObjectDelete(chart_id,"CloseBar"+string(s));
       ObjectDelete(chart_id,"PivotBarNt"+string(s));
       ObjectDelete(chart_id,"FiboBar"+string(s));
       ObjectDelete(chart_id,"FiboBar_cu"+string(s));
       ObjectDelete(chart_id,"FiboBar_cd"+string(s));
       ObjectDelete(chart_id,"FiboBarUph"+string(s));
       ObjectDelete(chart_id,"FiboBarDnl"+string(s));
       ObjectDelete(chart_id,"FiboBar_clu"+string(s));
       ObjectDelete(chart_id,"FiboBar_cld"+string(s));
       ObjectDelete(chart_id,"FiboBar"+string(s));
       ObjectDelete(chart_id,"FiboBar_nt"+string(s));
       ObjectDelete(chart_id,"FiboBar_cln"+string(s));
       ObjectDelete(chart_id,"CloseBarUp"+string(s));
       ObjectDelete(chart_id,"CloseBarDn"+string(s));
       ObjectDelete(chart_id,"CloseBarNt"+string(s));
     }
   //--
   //-- Draw Fibo Pivot Candle Bar
   for(int r=0; r<=pstep; r++)
     {
       //-- Create Pivot Bar Levels
       string plevel=bar45+DoubleToString(pivot[lb+r],digit);
       CreateSetLable(chart_id,"PivotLevel_"+string(r),font_face,font_size,font_color,plevel,
                      corner,distance_x-109,distance_y+r*pvtlvl,true);
       //--
       string llevel=label[lb+r]+bar45; 
       int disc=StringLen(llevel)>3?0:5;
       CreateSetLable(chart_id,"PivotLableLevel_"+string(r),font_face,font_size,font_color,llevel,
                      corner,distance_x-52-disc,distance_y+r*pvtlvl,true);     
     }               
   //--
   for(int pv=0; pv<prctick; pv++)
     {
       //--
       CreateSetLable(chart_id,"PivotBarNt"+string(pv),font_face,font_size,color_fbar,bar45,
                      corner,distance_x-89,distance_y+1+pv,true);
                      
       CreateSetLable(chart_id,"FiboBar"+string(pv),font_face,font_size,color_fbar,bar45,
                      corner,distance_x+12,distance_y+1+fbajs+pv,true);
       //--
     }
   //--
   for(int i=0; i<pvbar; i++)
     {
       //--
       CreateSetLable(chart_id,"PivotBar"+string(i),font_face,font_size,clrmove,bar45,
                      corner,distance_x-89,distance_y+pvlo+i,true);
       //--
     }
   //--
   for(int n=0; n<dlvl; n++)
     {
       //--
       string fibbar=bar45+DoubleToString(przlvl[n],digit);
       CreateSetLable(chart_id,"FiboBar_"+string(n),font_face,font_size,font_color,fibbar,
                      corner,distance_x-7,distance_y+fbajs+(int)barlvl[n],true);
       //--
       string fiblevel=DoubleToString(fibolvl[n],1)+bar45;
       CreateSetLable(chart_id,"FiboBarLevel_"+string(n),font_face,font_size,font_color,fiblevel,
                      corner,distance_x+51,distance_y+fbajs+(int)barlvl[n],true);
     }
   //--
   if(PvtC>PvtO)
     {
       //--
       for(int v=0; v<pvtup; v++)
         {
           //--    
           CreateSetLable(chart_id,"CloseBar"+string(v),font_face,font_size,clrmove,barcnd,
                          corner,distance_x-75,distance_y+pvop+v,true);
          //--
        }        
      for(int l=0; l<=psh-psl; l++)
        {
          //--
          CreateSetLable(chart_id,"FiboBar_cu"+string(l),font_face,font_size,clrmove,bar45,
                         corner,distance_x+12,distance_y+fbajs+psl+l,true);
          //--
        }       
      //-
      for(int fl=0; fl<psc-pso+1; fl++)
        {
          //--
          CreateSetLable(chart_id,"FiboBar_clu"+string(fl),font_face,font_size,fbarup,barcnd,
                         corner,distance_x+26,distance_y+fbajs+pso+fl,true);
          //--
        }                 
      //--        
     }
   //--
   if(PvtC<PvtO)
     {
       //--
       for(int v=0; v<pvtdn; v++)
         {
           //--
           CreateSetLable(chart_id,"CloseBar"+string(v),font_face,font_size,clrmove,barcnd,
                          corner,distance_x-75,distance_y+pvcl+v,true);
          //--
         }
       for(int l=0; l<=psh-psl; l++)
         {
           //--
           CreateSetLable(chart_id,"FiboBar_cd"+string(l),font_face,font_size,clrmove,bar45,
                          corner,distance_x+12,distance_y+fbajs+psl+l-1,true);
           //--
         }
       //-
       for(int fl=0; fl<pso-psc; fl++)
         {
           //--
           CreateSetLable(chart_id,"FiboBar_cld"+string(fl),font_face,font_size,fbardn,barcnd,
                          corner,distance_x+26,distance_y+fbajs+psc+fl-1,true);
           //--
         }              
       //--     
     }
   //--
   if(PvtC==PvtO)
     {
       //--
       for(int v=0; v<2; v++)
         {
           //--
           CreateSetLable(chart_id,"CloseBar"+string(v),font_face,font_size,clrmove,barcnd,
                          corner,distance_x-75,distance_y+pvop+v,true);              
           //--
         }
       //--
       for(int l=0; l<=psh-psl; l++)
         {
            //--
            CreateSetLable(chart_id,"FiboBar_nt"+string(l),font_face,font_size,fbarnt,bar45,
                           corner,distance_x+12,distance_y+fbajs+psl+l,true);
            //--
         }
       //-
       for(int fl=0; fl<2; fl++)
         {
           //--
           CreateSetLable(chart_id,"FiboBar_cln"+string(fl),font_face,font_size,fbarnt,barcnd,
                          corner,distance_x+26,distance_y+fbajs+pso+fl,true);
           //--
         }
       //--        
     }
   //---
   //--
   for(int db=0; db<prctick; db++)
     {
       ObjectDelete(chart_id,"FiboBarUph"+string(db));
       ObjectDelete(chart_id,"FiboBarDnl"+string(db));
     }
   //--
   if(ArrUp==true)
     {
       //--
       if((PvtL==dayLo)&&(PvtC>dayLo) && (PvtC<PvtO))
         {
           //--
           cral=-2;
           for(int bd=0; bd<fcblo; bd++)
             {
               CreateSetLable(chart_id,"FiboBarDnl"+string(bd),font_face,font_size,fbarup,bar45,
                              corner,distance_x+12,distance_y+fbajs+psl+bd-1,true);
             }
           //--
         }
       //--
       if(opsup==true) cral=1;
       //--
     }
   //--
   if(ArrDn==true)
     {
       //--
       if((PvtH==dayHi)&&(PvtC<dayHi) && (PvtC>PvtO))
         {
           //--
           cral=2;
           for(int bu=0; bu<fcbhi; bu++)
             {
               CreateSetLable(chart_id,"FiboBarUph"+string(bu),font_face,font_size,fbardn,bar45,
                              corner,distance_x+12,distance_y+fbajs+psc+bu+1,true);
             }
           //--
         }
       //--
       if(opsdn==true) cral=-1;
       //--
     }
   //---
   ObjectDelete(chart_id,"FiboDir");
   ObjectDelete(chart_id,"PivotDir");
   ObjectDelete(chart_id,"PivotStr");
   //--
   if(ArrUp==true)
     {     
       //--
       if((ArrUp==true)&&(opsup==true)) colordir=fbarup;
       else colordir=fbarnt;
       CreateSetLable(chart_id,"PivotDir","Wingdings",20,colordir,CharToString(217),
                      corner,distance_x-80,distance_y-17,true);
       CreateSetLable(chart_id,"FiboDir","Wingdings",20,colordir,CharToString(217),
                      corner,distance_x+23,distance_y-17,true);
       if(opsup==true)
         {               
           CreateSetLable(chart_id,"PivotStr",font_ohlc,12,opsclr,stdir,
                      corner,distance_x-stax,distance_y-22,true);
         }
       else
         {
           CreateSetLable(chart_id,"PivotStr",font_ohlc,11,fbarnt,"WAIT",
                      corner,distance_x-18,distance_y-22,true);
         }
       //--
     }
   //--
   else if(ArrDn==true)
     {
       //--
       if((ArrDn==true)&&(opsdn==true)) colordir=fbardn;
       else colordir=fbarnt;
       CreateSetLable(chart_id,"PivotDir","Wingdings",20,colordir,CharToString(218),
                      corner,distance_x-80,distance_y-17,true);
       CreateSetLable(chart_id,"FiboDir","Wingdings",20,colordir,CharToString(218),
                      corner,distance_x+23,distance_y-17,true);
       if(opsdn==true)
         {              
           CreateSetLable(chart_id,"PivotStr",font_ohlc,12,opsclr,stdir,
                      corner,distance_x-stax,distance_y-22,true);
         }
       else
         {
           CreateSetLable(chart_id,"PivotStr",font_ohlc,11,fbarnt,"WAIT",
                      corner,distance_x-18,distance_y-22,true);
         }
       //--
     }
   //--
   else
     {
       //--
       colordir=fbarnt;
       CreateSetLable(chart_id,"PivotDir","Wingdings",20,colordir,CharToString(108),
                      corner,distance_x-82,distance_y-17,true);
       CreateSetLable(chart_id,"FiboDir","Wingdings",20,colordir,CharToString(108),
                      corner,distance_x+20,distance_y-17,true);
                      
       CreateSetLable(chart_id,"PivotStr",font_ohlc,11,fbarnt,"WAIT",
                      corner,distance_x-18,distance_y-22,true);
       //--
     }
   //--
   pos_alerts(cral);
   ChartRedraw(0);
   //---
//--- return value of prev_calculated for next call
   return(rates_total);
//---
  } //-end OnCalculate()
//-------//
//----------------------------------------------------------------------//

void IndicatorsCondition(int barCount)
  {
//---
    //- Fill Indicators Arrays From Buffers
    //Print("bar to copied = "+string(barCount));
    CopyBuffer(h_iMa2,0,0,barCount,EMA5e02);
    //--
    CopyBuffer(h_iMa20,0,0,barCount,SMA5s20);
    //--
    CopyBuffer(h_Macd,0,0,barCount,MACDM);
    //--
    CopyBuffer(h_Macd,1,0,barCount,MACDS);
   //--
   return;
//---
  } //-end IndicatorsCondition()
//---------//
 
int ZigZagDir(ENUM_TIMEFRAMES ztf)
  {
//---
    //--
    int i,lmt,counterZ,whatlookfor=0;
    int back,pos,lasthighpos=0,lastlowpos=0,zz=0;
    double extremum;
    double curlow=0.0,curhigh=0.0,lasthigh=0.0,lastlow=0.0;
//---
    ArrayResize(ExtZz,bars);
    ArrayResize(ExtHi,bars);
    ArrayResize(ExtLo,bars);
    ArraySetAsSeries(ExtZz,true);
    ArraySetAsSeries(ExtHi,true);
    ArraySetAsSeries(ExtLo,true);
    //---
    lmt=Initialize();
    //--
    i=counterZ=zh=zl=0;
    while(counterZ<level && i<bars)
      {
        if(ExtZz[i]!=0.0)
           counterZ++;
        i++;
      }
    //---
    if(counterZ==0)
       lmt=Initialize();
//--- first counting position       
    else
      {
       //---
       lmt=i-1;
       //---
       if(ExtLo[i]!=0.0) 
         {
          //---
          curlow=ExtLo[i];
          //---
          whatlookfor=1;
         }
       else
         {
          //---
          curhigh=ExtHi[i];
          //---
          whatlookfor=-1;
         }
       //---
       for(i=lmt-1; i>=0; i--)  
         {
           ExtZz[i]=0.0;  
           ExtLo[i]=0.0;
           ExtHi[i]=0.0;
         }
      }
//---- main loop
    //--
    for(i=lmt; i>=0; i--)
      {
        //---
        extremum=iLow(Symbol(),ztf,iLowest(Symbol(),ztf,MODE_LOW,depth,i));
        //---
        if(extremum==lastlow)
          extremum=0.0;
        else 
         { 
           //---
           lastlow=extremum; 
           //---
           if(iLow(Symbol(),ztf,i)-extremum>devia*Point())
             extremum=0.0;
           else
             {
               //---
               for(back=1; back<=backs; back++)
                 {
                   pos=i+back;
                   if(ExtLo[pos]!=0 && ExtLo[pos]>extremum)
                     ExtLo[pos]=0.0; 
                 }
             }
         } 
        //---
        if(iLow(Symbol(),ztf,i)==extremum)
          {
            ExtLo[i]=extremum;
            zl=i;
          }
        else
          ExtLo[i]=0.0;
        //---
        extremum=iHigh(Symbol(),ztf,iHighest(Symbol(),ztf,MODE_HIGH,depth,i));
        //--- this highest has been found previously
        if(extremum==lasthigh)
          extremum=0.0;
        else 
          {
            //---
            lasthigh=extremum;
            //---
            if(extremum-iHigh(Symbol(),ztf,i)>devia*Point())
              extremum=0.0;
            else
              {
                //---
                for(back=1; back<=backs; back++)
                  {
                    pos=i+back;
                    if(ExtHi[pos]!=0 && ExtHi[pos]<extremum)
                      ExtHi[pos]=0.0; 
                  } 
              }
          }
        //--- found extremum is current high
        if(iHigh(Symbol(),ztf,i)==extremum)
          {
            ExtHi[i]=extremum;
            zh=i;
          }
        else
          ExtHi[i]=0.0;
      }
//--- main loop end
//--- final cutting 
    if(whatlookfor==0)
      {
        lastlow=0.0;
        lasthigh=0.0;  
      }
    else
      {
        lastlow=curlow;
        lasthigh=curhigh;
      }
    for(i=lmt; i>=0; i--)
      {
        switch(whatlookfor)
          {
            case 0: // look for peak or lawn 
            if(lastlow==0.0 && lasthigh==0.0)
              {
               if(ExtHi[i]!=0.0)
                 {
                  lasthigh=iHigh(Symbol(),ztf,i); 
                  lasthighpos=i;
                  whatlookfor=-1;
                  ExtZz[i]=lasthigh;
                  zh=lasthighpos;
                 }
               if(ExtLo[i]!=0.0)
                 {
                  lastlow=iLow(Symbol(),ztf,i);
                  lastlowpos=i;
                  whatlookfor=1;
                  ExtZz[i]=lastlow;
                  zl=lastlowpos;
                 }
              }
            break;
            //---
            case 1: // look for peak
            if(ExtLo[i]!=0.0 && ExtLo[i]<lastlow && ExtHi[i]==0.0)
              {
               ExtZz[lastlowpos]=0.0;
               lastlowpos=i;
               lastlow=ExtLo[i];
               ExtZz[i]=lastlow;
               zl=lastlowpos;
              }
            if(ExtHi[i]!=0.0 && ExtLo[i]==0.0)
              {
               lasthigh=ExtHi[i];
               lasthighpos=i;
               ExtZz[i]=lasthigh;
               whatlookfor=-1;
               zh=lasthighpos;
              }   
            break;
            //---             
            case -1: // look for lawn
            if(ExtHi[i]!=0.0 && ExtHi[i]>lasthigh && ExtLo[i]==0.0)
              {
               ExtZz[lasthighpos]=0.0;
               lasthighpos=i;
               lasthigh=ExtHi[i];
               ExtZz[i]=lasthigh;
               zh=lasthighpos;
              }
            if(ExtLo[i]!=0.0 && ExtHi[i]==0.0)
              {
               lastlow=ExtLo[i];
               lastlowpos=i;
               ExtZz[i]=lastlow;
               whatlookfor=1;
               zl=lastlowpos;
              }   
            break;               
          }
      }
    //--
    //---
    if(ztf==PERIOD_H1)
      {
        if((zl<zh)&&(zl>0)&&(zl<4)) zz=1;
        if((zh<zl)&&(zh>0)&&(zh<4)) zz=-1;
        if((zl<zh)&&(zl>4)) zz=2;
        if((zh<zl)&&(zh>4)) zz=-2;
      }
    if(ztf==PERIOD_M30)
      {
        if(zl<zh) zz=1;
        if(zh<zl) zz=-1;
      }
    //--
    return(zz);
//---
  } //-end ZigZagDir()
//---------//

int Initialize()
  {
//---
    ArrayInitialize(ExtZz,0.0);
    ArrayInitialize(ExtHi,0.0);
    ArrayInitialize(ExtLo,0.0);
   //--- first counting position
   return(bars-depth);
//---
  } //-end Initialize()
//---------//

int MA5Trend(int bar)
  {
    //---
    int m5t=0;
    //--
    ArrayResize(EMA5e02,bar);
    ArrayResize(SMA5s20,bar);
    ArrayResize(MAONs10,bar);
    ArrayResize(MAONs62,bar);
    ArraySetAsSeries(EMA5e02,true);
    ArraySetAsSeries(SMA5s20,true);
    ArraySetAsSeries(MAONs10,true);
    ArraySetAsSeries(MAONs62,true);
    //--
    SimpleMAOnBuffer(bar,0,0,10,SMA5s20,MAONs10);
    SimpleMAOnBuffer(bar,0,0,62,SMA5s20,MAONs62);
    //--
    double ma10620=MAONs10[0]-MAONs62[0];
    double ma10621=MAONs10[1]-MAONs62[1];
    double ma20100=SMA5s20[0]-MAONs10[0];
    double ma20101=SMA5s20[1]-MAONs10[1];
    //--
    bool ma5xupn=(EMA5e02[0]>EMA5e02[1])&&(SMA5s20[0]>SMA5s20[1])&&(ma10620>=ma10621)&&((MAONs10[2]<MAONs62[2])&&(MAONs10[0]>MAONs62[0]));
    bool ma5xupc=(EMA5e02[0]>EMA5e02[1])&&(SMA5s20[0]>SMA5s20[1])&&(ma10620>=ma10621)&&(MAONs10[0]>MAONs62[0])&&(MAONs10[0]>MAONs10[1]);
    bool ma5xupb=(EMA5e02[0]>EMA5e02[1])&&(SMA5s20[0]>SMA5s20[1])&&(ma20100>ma20101)&&(MAONs62[0]>MAONs62[1])&&(SMA5s20[0]>MAONs10[0]);
    bool ma5xdnn=(EMA5e02[0]<EMA5e02[1])&&(SMA5s20[0]<SMA5s20[1])&&(ma10620<=ma10621)&&((MAONs10[2]>MAONs62[2])&&(MAONs10[0]<MAONs62[0]));
    bool ma5xdnc=(EMA5e02[0]<EMA5e02[1])&&(SMA5s20[0]<SMA5s20[1])&&(ma10620<=ma10621)&&(MAONs10[0]<MAONs62[0])&&(MAONs10[0]<MAONs10[1]);
    bool ma5xdna=(EMA5e02[0]<EMA5e02[1])&&(SMA5s20[0]<SMA5s20[1])&&(ma20100<ma20101)&&(MAONs62[0]<MAONs62[1])&&(SMA5s20[0]<MAONs10[0]);
    //--
    if(ma5xupn||ma5xupc||ma5xupb) {m5t=1;}
    if(ma5xdnn||ma5xdnc||ma5xdna) {m5t=-1;}
    //--
    return(m5t);
//----
  } //-end MA5Trend()
//---------//

bool CreateSetLable(long   chartid,
                    string _name, 
                    string _font_model,
                    int    _font_size,
                    color  _color,
                    string _obj_text,
                    int    _corner,
                    int    _xdist,
                    int    _ydist,
                    bool   _hidden)  
  { 
//--- 
    //--
    if(ObjectCreate(chart_id,_name,OBJ_LABEL,0,0,0,0,0))
      {
        //--
        ObjectSetString(chartid,_name,OBJPROP_TEXT,_obj_text);
        ObjectSetString(chartid,_name,OBJPROP_FONT,_font_model); 
        ObjectSetInteger(chartid,_name,OBJPROP_FONTSIZE,_font_size);
        ObjectSetInteger(chartid,_name,OBJPROP_COLOR,_color);
        ObjectSetInteger(chartid,_name,OBJPROP_CORNER,_corner);
        ObjectSetInteger(chartid,_name,OBJPROP_XDISTANCE,_xdist);
        ObjectSetInteger(chartid,_name,OBJPROP_YDISTANCE,_ydist);
        ObjectSetInteger(chartid,_name,OBJPROP_HIDDEN,_hidden);
      }
    else return(false);
    //--- successful execution 
    return(true);
    //--
  } //-end CreateSetLable()
//---------//

string FontsModel(int mode)
  { 
   string str_font;
   switch(mode) 
     { 
      case 0: str_font="Arial Black"; break;
      case 1: str_font="Bodoni MT Black"; break; 
     }
   //--
   return(str_font);
//----
  } //-end FontsModel()
//---------//

int Hours(void)
  {
//---
    return(MqlReturnDateTime(TimeCurrent(),TimeReturn(hour)));
//---
  } //-end Hours()
//---------//

int Minutes(void)
  {
//---
    return(MqlReturnDateTime(TimeCurrent(),TimeReturn(min)));
//---
  } //-end Minutes()
//---------//

int Seconds(void)
  {
//---
    return(MqlReturnDateTime(TimeCurrent(),TimeReturn(sec)));
//---
  } //-end Seconds()
//---------//

enum TimeReturn
  {
//---
    year        = 0,   // Year 
    mon         = 1,   // Month 
    day         = 2,   // Day 
    hour        = 3,   // Hour 
    min         = 4,   // Minutes 
    sec         = 5,   // Seconds 
    day_of_week = 6,   // Day of week (0-Sunday, 1-Monday, ... ,6-Saturday) 
    day_of_year = 7    // Day number of the year (January 1st is assigned the number value of zero) 
//---
  };
//---------//

int MqlReturnDateTime(datetime reqtime,
                      const int mode) 
  {
//---
    MqlDateTime mqltm;
    TimeToStruct(reqtime,mqltm);
    int valdate=0;
    //--
    switch(mode)
      {
        case 0: valdate=mqltm.year; break;        // Return Year 
        case 1: valdate=mqltm.mon;  break;        // Return Month 
        case 2: valdate=mqltm.day;  break;        // Return Day 
        case 3: valdate=mqltm.hour; break;        // Return Hour 
        case 4: valdate=mqltm.min;  break;        // Return Minutes 
        case 5: valdate=mqltm.sec;  break;        // Return Seconds 
        case 6: valdate=mqltm.day_of_week; break; // Return Day of week (0-Sunday, 1-Monday, ... ,6-Saturday) 
        case 7: valdate=mqltm.day_of_year; break; // Return Day number of the year (January 1st is assigned the number value of zero) 
      }
    return(valdate);
//---
  } //-end MqlReturnDateTime()
//---------//
//+------------------------------------------------------------------+
//|                      Switch Time Frames                          |   
//+------------------------------------------------------------------+  
ENUM_TIMEFRAMES TF(int tf)
  {
//----
    switch(tf)
     {
      case 0:     return(PERIOD_CURRENT);
      case 1:     return(PERIOD_M1);
      case 5:     return(PERIOD_M5);
      case 15:    return(PERIOD_M15);
      case 30:    return(PERIOD_M30);
      case 60:    return(PERIOD_H1);
      case 240:   return(PERIOD_H4);
      case 1440:  return(PERIOD_D1);
      case 10080: return(PERIOD_W1);
      case 43200: return(PERIOD_MN1);
      default:    return(PERIOD_CURRENT);
     }
//----
  } //-end ENUM_TIMEFRAMES()
//---------//

void doAlerts(string msgText,string eMailSub)
  {
//---
    //--
    Print(msgText);
    //--
    if(MsgAlerts) Alert(msgText);
    //--
    if(eMailAlerts==Yes) 
      SendMail(eMailSub,msgText);
    //--
    if(UseSendnotify==Yes) 
      SendNotification(msgText);
    //--
    return;
    //--
//---
  } //-end doAlerts()
//---------//

string strTF(ENUM_TIMEFRAMES tf)
  {
//---
   switch(tf)
     {
        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("MN");
     }
   //--
   return(EnumToString(tf));
//---
  } //-end strTF()
//---------//

void pos_alerts(int alert)
  {
//---
    //--
    crmnt=Minutes();
    if(crmnt!=prmnt)
      {
        //--
        if((cral!=pral)&&(alert==2))
           {     
             alBase=short_name+": "+Symbol()+", TF: "+strTF(Period())+" @ "+TimeToString(TimeLocal());
             alSubj=alBase+". The Price Began to Down,";
             alMsg=alSubj+" Action: Wait and See.!!";
             prmnt=crmnt;
             pral=cral;
             doAlerts(alMsg,alSubj);
           }
        //--
        if((cral!=pral)&&(alert==1))
          {     
            alBase=short_name+": "+Symbol()+", TF: "+strTF(Period())+" @ "+TimeToString(TimeLocal());
            alSubj=alBase+". The Price Goes Up,";
            alMsg=alSubj+" Action: Open BUY.!!";
            prmnt=crmnt;
            pral=cral;
             doAlerts(alMsg,alSubj);
          }
        //--
        if((cral!=pral)&&(alert==-2))
          {     
            alBase=short_name+": "+Symbol()+", TF: "+strTF(Period())+" @ "+TimeToString(TimeLocal());
            alSubj=alBase+". The Price Began to Up,";
            alMsg=alSubj+" Action: Wait and See.!!";
            prmnt=crmnt;
            pral=cral;
            doAlerts(alMsg,alSubj);
          }
        //--
        if((cral!=pral)&&(alert==-1))
          {     
            alBase=short_name+": "+Symbol()+", TF: "+strTF(Period())+" @ "+TimeToString(TimeLocal());
            alSubj=alBase+". The Price Goes Down,";
            alMsg=alSubj+" Action: Open SELL.!!";
            prmnt=crmnt;
            pral=cral;
            doAlerts(alMsg,alSubj);
          }
       //--
      }
    //--
    return;
//---
   } //-end pos_alerts()
//--------//

double NotZeroDiv(double val1,double val2)
  {
//----
   double resval=0;
   
   if(val1==0 || val2==0) resval=0.00;
   else
   resval=val1/val2;
   //--
   return(resval);
//----
  } //-end NotZeroDiv()
//---------//
//+------------------------------------------------------------------+

Key Components of the Cybron Fibo Pivot Bar

Pivot Points

At the core of the Cybron Fibo Pivot Bar are pivot points. These are calculated using the previous period’s high, low, and close prices. Pivot points are widely used by traders to determine potential turning points in the market. The formula for the main pivot point (P) is:

See also  Xenith Stochastic V1.3 (Non-Repaint) MetaTrader 5 Expert Advisor

P=(High+Low+Close)3P = \frac{(High + Low + Close)}{3}P=3(High+Low+Close)​

Based on this central pivot point, the indicator calculates various levels of support and resistance, labeled S1, S2, S3, etc., for support, and R1, R2, R3, etc., for resistance. These levels act as potential barriers that prices may bounce off or break through during the trading day.

Fibonacci Retracement Levels

The indicator incorporates Fibonacci levels (0.0%, 23.6%, 38.2%, 50.0%, and 61.8%) into its pivot point calculations. Fibonacci retracement levels are derived from the Fibonacci sequence and are widely used in trading to predict potential areas where price may reverse. The use of these levels helps refine support and resistance areas beyond traditional pivot point calculations.

How the Indicator Works

Price Action and Signals

The Cybron Fibo Pivot Bar detects changes in price action by using a combination of pivot point levels and Fibonacci retracements. The indicator identifies key support and resistance areas and determines if the price is trending upward or downward.

  • Uptrend Signal: If price action breaks above a resistance level, this can be interpreted as a signal that the market is moving higher.
  • Downtrend Signal: Conversely, if the price breaks below a support level, it can be an indication of a downtrend.

Color-Coded Bars

The indicator uses color-coded bars to represent market trends:

  • Bullish Bars (Uptrend) are marked in a specific color (e.g., white for upward movement).
  • Bearish Bars (Downtrend) are represented with another color (e.g., red for downward movement).
  • Neutral Bars represent periods when the market is indecisive, where the price open equals the price close.

These visual aids are designed to make it easier for traders to understand the current market direction and adjust their strategies accordingly.

See also  Dynix Double Stochastic RSI (Non-Repaint) MetaTrader 5 Indicator

ZigZag Pattern Recognition

A zigzag pattern helps the indicator smooth out market noise and detect trend changes. The zigzag feature filters out smaller price movements and focuses on larger, more significant changes in price. This can help in identifying market tops and bottoms more effectively, giving traders a clearer picture of when reversals might occur.

Additional Functionalities

Moving Averages

The Cybron Fibo Pivot Bar incorporates Exponential Moving Averages (EMA) and Simple Moving Averages (SMA) to further refine its trend detection. By comparing short-term and long-term moving averages, the indicator helps to confirm whether the market is in an uptrend or downtrend.

MACD Integration

The indicator also integrates the Moving Average Convergence Divergence (MACD) to provide additional confirmation on the strength and direction of the trend. MACD is a momentum indicator that shows the relationship between two moving averages of a security’s price, helping to identify potential buy or sell signals.

Alerts System

The Cybron Fibo Pivot Bar is equipped with an alert system that notifies the trader when certain market conditions are met. Alerts can be customized based on the user’s preferences, including message alerts, email alerts, and notifications.

Practical Application of the Cybron Fibo Pivot Bar

The Cybron Fibo Pivot Bar can be applied across different time frames and asset classes. Traders often use this tool to:

  • Identify entry and exit points in the market.
  • Detect trend reversals by observing breakouts at key pivot or Fibonacci levels.
  • Understand market momentum through color-coded signals and the integration of MACD and moving averages.

Conclusion

While the Cybron Fibo Pivot Bar offers a sophisticated approach to analyzing the market using pivot points and Fibonacci retracements, its simplicity lies in the clear visual representation of key market levels and trends. Traders benefit from the combination of mathematical calculations with easily interpretable charts, allowing for better decision-making based on objective data. By using this indicator, traders can gain insights into potential support and resistance zones, which can be pivotal in making informed trading decisions.

See also  Babylon TrendValue Arrow (Non-Repaint) MetaTrader 5 Indicator

Leave a Comment