FiboPiv_v3_004

Download script
Author: c. 2007-08, Kalenzo
FiboPiv_v3_004

This script is a financial analysis tool designed to automatically identify and visualize key price levels on a trading chart. It specifically utilizes a "Pivot Point" system combined with Fibonacci-inspired proportions to help traders understand potential areas of resistance (where prices may struggle to rise) and support (where prices may find a floor).

How the Logic Works

1. Data Collection The tool begins by analyzing historical price data from the previous trading session. It specifically looks for three primary values: the highest price reached, the lowest price reached, and the closing price. To ensure accuracy, the logic includes a specific check for weekends; if the market is closed on a Monday, it automatically scans back to find the most recent completed Friday of trading to use as the reference point.

2. Core Calculations Once the previous day's data is gathered, the script performs several mathematical operations to determine today's key levels:

  • The Range: It calculates the distance between yesterday’s high and low.
  • The Pivot Point: It establishes a "center" price by averaging the previous day's high, low, and closing prices.
  • Dynamic Levels: Using the range calculated above, it projects seven distinct levels. These are based on specific ratios (such as 0.382, 0.618, and 1.000) which are common in technical analysis to identify where price movements might pause or reverse.

3. Visual Representation The script then translates these numbers into visual elements directly on your chart:

  • Horizontal Lines: It draws seven horizontal lines representing the different support (S1, S2, S3) and resistance (R1, R2, R3) zones, along with the central Pivot line.
  • Dynamic Labels: Each line is accompanied by a text label that identifies the level. These labels also provide "directional hints," describing the relationship between the levels (for example, indicating whether a price is moving toward a specific resistance or away from a support level).
  • Automated Updates: The script is designed to automatically refresh these lines as new trading days begin, ensuring that the levels remain relevant to current market conditions.

Summary for the User

In essence, this tool takes the "noise" out of price action by instantly plotting a roadmap of where key structural boundaries are likely to exist today. By identifying these support and resistance zones based on yesterday's activity, it helps you visualize potential turning points in the market at a glance.

Price Data Components
Series array that contains open time of each bar
16 Views
0 Downloads
0 Favorites
FiboPiv_v3_004
//+------------------------------------------------------------------+
//|                                                   FiboPiv_v3.mq4 |
//|                                                          Kalenzo |
//|                                      bartlomiej.gorski@gmail.com |
//+------------------------------------------------------------------+
#property copyright "c. 2007-08, Kalenzo"
#property link      "bartlomiej.gorski@gmail.com"
#property indicator_buffers   7
#property indicator_color1 DimGray 
#property indicator_style1 1
#property indicator_color2 DimGray 
#property indicator_style2 2
#property indicator_color3 DimGray 
#property indicator_style3 0
#property indicator_color4 DimGray 
#property indicator_style4 1
#property indicator_color5 DimGray 
#property indicator_style5 0
#property indicator_color6 DimGray 
#property indicator_style6 2
#property indicator_color7 DimGray 
#property indicator_style7 1

/*extern color Resistance_3 = Sienna;
extern color Resistance_2 = Red;
extern color Resistance_1 = Magenta;
extern color Pivot = Goldenrod;
extern color Support_1 = Lime;
extern color Support_2 = Green;
extern color Support_3 = DarkGreen;
*/
#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("S1: go down S2 or up P");
   ObjectDelete("S2: go down S3 or up S1");
   ObjectDelete("Support 3");
   ObjectDelete("Pivot: go up R1 or down S1");
   ObjectDelete("R1: go up R2 or down P");
   ObjectDelete("R2: go up R3 or down R1");
   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);

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", indicator_color1,indicator_style1);
drawLabel("Resistance 3",r3,indicator_color1);
drawLine(r2,"R2", indicator_color2,indicator_style2);
drawLabel("R2: go up R3 or down R1",r2,indicator_color2);
drawLine(r1,"R1", indicator_color3,indicator_style3);
drawLabel("R1: go up R2 or down P",r1,indicator_color3);

drawLine(p,"PIVOT",indicator_color4,indicator_style4);
drawLabel("Pivot: go up R1 or down S1",p,indicator_color4);

drawLine(s1,"S1",indicator_color5,indicator_style5);
drawLabel("S1: go down S2 or up P",s1,indicator_color5);
drawLine(s2,"S2",indicator_color6,indicator_style6);
drawLabel("S2: go down S3 or up S1",s2,indicator_color6);
drawLine(s3,"S3",indicator_color7,indicator_style7);
drawLabel("Support 3",s3,indicator_color7);


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


void drawLine(double lvl,string name, color Col,int type)
{
         if(ObjectFind(name) != 0)
         {
            ObjectCreate(name, OBJ_HLINE, 0, Time[0], 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_HLINE, 0, Time[0], 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