FiboPiv_v4_mb_v1

Download script
Author: Kalenzo
FiboPiv_v4_mb_v1

This tool is designed to provide traders with a clear visual map of key price levels on their trading charts. It identifies specific "support" and "resistance" zones based on historical price action from the previous trading session. By automatically calculating these levels, it helps traders anticipate where the market might face pressure to move upward or downward.

How the Logic Works

1. Data Gathering The script begins by looking back at the previous day's performance. It specifically identifies three key pieces of information from that timeframe:

  • The High: The highest price reached.
  • The Low: The lowest price reached.
  • The Close: The final price when the previous session ended.

The script includes smart logic to handle weekends; if the market is open on a Monday, it intelligently scans backward to find the most recent Friday's data to ensure the calculations remain accurate and relevant.

2. Calculating Key Levels (The Math) Once the high, low, and close are identified, the script performs three main types of calculations:

  • The Pivot Point: This is the "center" of the previous day's price action. It is calculated by taking the average of the high, low, and closing prices. This acts as the baseline for the day’s trend.
  • Standard Support & Resistance: Using the total range of the previous day (the difference between the high and the low), the script projects specific levels above and below the Pivot Point.
  • Fibonacci-Inspired Levels: The script applies specific ratios to that price range to create additional layers of support and resistance. This allows traders to see deeper "zones" where price fluctuations might stall or reverse.

3. Visual Representation on the Chart Instead of just providing raw numbers, the script handles all the heavy lifting of drawing onto your screen:

  • Dynamic Lines: It draws horizontal lines across your current chart for each level (Support 1, 2, 3; Pivot; Resistance 1, 2, 3).
  • Style Differentiation: It uses different line styles (solid, dotted, and dash-dotted) to help you visually distinguish between primary and secondary levels at a glance.
  • Price Labels: It places text labels on the chart that clearly name the level and show its exact price value, making it easy to identify the zones quickly during fast market movements.

Summary for the Trader

In short, this script acts as an automated analyst. It looks at what happened yesterday, calculates the most significant "turning points" based on standard trading mathematics, and draws them on your chart today. This allows you to see exactly where the market might encounter "ceilings" (Resistance) or "floors" (Support) before you place your next trade.

Price Data Components
Series array that contains open time of each bar
10 Views
0 Downloads
0 Favorites
FiboPiv_v4_mb_v1
//+------------------------------------------------------------------+
//|                                                   FiboPiv_v1.mq4 |
//|                                                          Kalenzo |
//|                                      bartlomiej.gorski@gmail.com |
//+------------------------------------------------------------------+
//
// FiboPivot_v4_mb - new version from mibl, based on v3 from Kalenzo
// 
//
#property copyright "Kalenzo"
#property link      "bartlomiej.gorski@gmail.com"
extern color Resistance_3 = Green;
extern color Resistance_2 = Green;
extern color Resistance_1 = Green;
extern color Pivot = Blue;
extern color Support_1 = Red;
extern color Support_2 = Red;
extern color Support_3 = Red;
extern bool DrawPrice = true;

datetime todaysbegin; 
          
#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   ObjectDelete("S1");
   ObjectDelete("S2");
   ObjectDelete("S3");
   ObjectDelete("R1");
   ObjectDelete("R2");
   ObjectDelete("R3");
   ObjectDelete("PIVOT");
   ObjectDelete("Support 1");
   ObjectDelete("Support 2");
   ObjectDelete("Support 3");
   ObjectDelete("Pivot level");
   ObjectDelete("Resistance 1");
   ObjectDelete("Resistance 2");
   ObjectDelete("Resistance 3");
   Comment(" ");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   
//----
double rates[1][6],yesterday_close,yesterday_high,yesterday_low;
ArrayCopyRates(rates, Symbol(), PERIOD_D1);

todaysbegin = StrToTime("0:00");

if(DayOfWeek() == 1)
{
   if(TimeDayOfWeek(iTime(Symbol(),PERIOD_D1,1)) == 5)
   {
       yesterday_close = rates[1][4];
       yesterday_high = rates[1][3];
       yesterday_low = rates[1][2];
   }
   else
   {
      for(int d = 5;d>=0;d--)
      {
         if(TimeDayOfWeek(iTime(Symbol(),PERIOD_D1,d)) == 5)
         {
             yesterday_close = rates[d][4];
             yesterday_high = rates[d][3];
             yesterday_low = rates[d][2];
         }
         
      }  
      
   }
}
else
{
    yesterday_close = rates[1][4];
    yesterday_high = rates[1][3];
    yesterday_low = rates[1][2];
}


//---- Calculate Pivots

Comment("\nYesterday quotations:\nH ",yesterday_high,"\nL ",yesterday_low, "\nC ",yesterday_close);
double R = yesterday_high - yesterday_low;//range
double p = (yesterday_high + yesterday_low + yesterday_close)/3;// Standard Pivot
double r3 = p + (R * 1.000);
double r2 = p + (R * 0.618);
double r1 = p + (R * 0.382);
double s1 = p - (R * 0.382);
double s2 = p - (R * 0.618);
double s3 = p - (R * 1.000);

drawLine(r3,"R3", Resistance_3,1);
drawLabel("Resistance 3",r3,Resistance_3);
drawLine(r2,"R2", Resistance_2,2);
drawLabel("Resistance 2",r2,Resistance_2);
drawLine(r1,"R1", Resistance_1,0);
drawLabel("Resistance 1",r1,Resistance_1);

drawLine(p,"PIVOT",Pivot,1);
drawLabel("Pivot level",p,Pivot);

drawLine(s1,"S1",Support_1,0);
drawLabel("Support 1",s1,Support_1);
drawLine(s2,"S2",Support_2,2);
drawLabel("Support 2",s2,Support_2);
drawLine(s3,"S3",Support_3,1);
drawLabel("Support 3",s3,Support_3);

//----
   return(0);
  }
//+------------------------------------------------------------------+
void drawLabel(string name,double lvl,color Color)
{
    if(ObjectFind(name) != 0)
    {
        ObjectCreate(name, OBJ_TEXT, 0, todaysbegin, lvl);
        if (DrawPrice) 
        {
           ObjectSetText(name, name + " (" + DoubleToStr(lvl, Digits) + ")", 8, "Arial", EMPTY);
        } 
        else
        {
           ObjectSetText(name, name, 8, "Arial", EMPTY);
        }
        ObjectSet(name, OBJPROP_COLOR, Color);
    }
    else
    {
        ObjectMove(name, 0, todaysbegin, lvl);
    }
}


void drawLine(double lvl,string name, color Col,int type)
{
          
         if(ObjectFind(name)!= 0)
         {
            ObjectCreate(name, OBJ_TREND, 0, todaysbegin, lvl,Time[0],lvl);
            
            if(type == 1)
            ObjectSet(name, OBJPROP_STYLE, STYLE_SOLID);
            else if(type == 2)
            ObjectSet(name, OBJPROP_STYLE, STYLE_DASHDOTDOT);
            else
            ObjectSet(name, OBJPROP_STYLE, STYLE_DOT);
            
            ObjectSet(name, OBJPROP_COLOR, Col);
            ObjectSet(name,OBJPROP_WIDTH,1);
            
         }
         else
         {
            ObjectDelete(name);
            ObjectCreate(name, OBJ_TREND, 0, todaysbegin, lvl,Time[0],lvl);
            
            if(type == 1)
            ObjectSet(name, OBJPROP_STYLE, STYLE_SOLID);
            else if(type == 2)
            ObjectSet(name, OBJPROP_STYLE, STYLE_DASHDOTDOT);
            else
            ObjectSet(name, OBJPROP_STYLE, STYLE_DOT);
            
            ObjectSet(name, OBJPROP_COLOR, Col);        
            ObjectSet(name,OBJPROP_WIDTH,1);
          
         }
}

Comments