Author: Poul Trade Forum
PivotDaily

This script is a technical analysis tool designed for the MetaTrader 4 platform that automatically identifies and plots key price levels on your trading chart. It utilizes a classic "Pivot Point" methodology to help traders visualize potential areas of support and resistance based on historical price action.

Core Functionality

The primary purpose of this script is to calculate seven distinct price levels: one central Pivot Point (P), three Support levels (S1, S2, S3), and three Resistance levels (R1, R2, R3). By plotting these lines, the tool provides a visual map of where price might encounter "floors" (support) or "ceilings" (resistance) during a trading session.

How the Logic Works

The script operates by analyzing the price data from the previous trading day to project levels for the current day. Here is the step-by-step logic it follows:

  • Data Collection: The tool scans the preceding candles to identify the highest price reached (High) and the lowest price reached (Low). It also takes note of the closing price of that period.
  • Daily Transition Detection: The script is programmed to recognize when a new day begins on the chart. Every time the date changes, it triggers a recalculation of the levels.
  • Mathematical Projection: Once a new day is detected, it uses the previous day's High, Low, and Close prices to perform a series of calculations:
    • Pivot Point (P): The central equilibrium point is calculated by averaging the previous high, low, and close.
    • Support Levels (S1–S3): These represent downward price targets. They are calculated based on the distance between the Pivot Point and the previous day's extremes.
    • Resistance Levels (R1–R3): These represent upward price targets. They are similarly derived to show where upward momentum might exhaust.
  • Dynamic Updating: As new candles form, the script continuously updates these values in real-time, ensuring that the support and resistance lines remain accurate throughout the current trading session.

Visual Presentation

To make this information accessible at a glance:

  • Visual Labels: The script creates on-screen text labels (e.g., "R1", "S2") so you can immediately identify what each line represents.
  • Color Coding: Different colors are assigned to the various levels (such as Orange, Crimson, and YellowGreen) to help distinguish between support and resistance zones quickly.
  • Chart Integration: The levels are drawn directly onto your main price chart window, allowing for seamless integration with your existing trading strategy.

Summary for the Trader

Instead of manually calculating complex mathematical formulas every morning, this script automates that process. It looks at yesterday's "story"—where the price started, peaked, and ended—and uses that information to project a roadmap for today’s market movement.

Miscellaneous
Implements a curve of type %1
12 Views
0 Downloads
0 Favorites
PivotDaily
/*-----------------------------+
|			       |
| Shared by www.Aptrafx.com    |
|			       |
+------------------------------*/


//+------------------------------------------------------------------+
//|                                                        Pivot.mq4 |
//|                               Copyright © 2004, Poul_Trade_Forum |
//|                                                         Aborigen |
//|                                          http://forex.kbpauk.ru/ |
//+------------------------------------------------------------------+
#property copyright "Poul Trade Forum"
#property link      "http://forex.kbpauk.ru/"

#property indicator_chart_window
//#property indicator_separate_window
#property indicator_buffers 7
#property indicator_color1 Orange
#property indicator_color2 DarkTurquoise
#property indicator_color3 Crimson
#property indicator_color4 DarkTurquoise
#property indicator_color5 Crimson
#property indicator_color6 YellowGreen
#property indicator_color7 YellowGreen
//---- input parameters

//---- buffers
double PBuffer[];
double S1Buffer[];
double R1Buffer[];
double S2Buffer[];
double R2Buffer[];
double S3Buffer[];
double R3Buffer[];
string Pivot="Pivot Point",Sup1="S 1", Res1="R 1";
string Sup2="S 2", Res2="R 2", Sup3="S 3", Res3="R 3";
int fontsize=10;
double P,S1,R1,S2,R2,S3,R3;
double LastHigh,LastLow,x;

//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {

   ObjectDelete("Pivot");
   ObjectDelete("Sup1");
   ObjectDelete("Res1");
   ObjectDelete("Sup2");
   ObjectDelete("Res2");
   ObjectDelete("Sup3");
   ObjectDelete("Res3");   

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   string short_name;


   SetIndexStyle(0,DRAW_LINE,0,1,Orange);
   SetIndexStyle(1,DRAW_LINE,0,1,DarkTurquoise);
   SetIndexStyle(2,DRAW_LINE,0,1,Crimson);
   SetIndexStyle(3,DRAW_LINE,0,1,DarkTurquoise);
   SetIndexStyle(4,DRAW_LINE,0,1,Crimson);
   SetIndexStyle(5,DRAW_LINE,0,1,YellowGreen);
   SetIndexStyle(6,DRAW_LINE,0,1,YellowGreen);
   SetIndexBuffer(0,PBuffer);
   SetIndexBuffer(1,S1Buffer);
   SetIndexBuffer(2,R1Buffer);
   SetIndexBuffer(3,S2Buffer);
   SetIndexBuffer(4,R2Buffer);
   SetIndexBuffer(5,S3Buffer);
   SetIndexBuffer(6,R3Buffer);


   short_name="Pivot Point";
   IndicatorShortName(short_name);
   SetIndexLabel(0,short_name);

   SetIndexDrawBegin(0,1);


   return(0);
  }

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()

  {
   int    counted_bars=IndicatorCounted();

   int limit, i;
//---- indicator calculation
if (counted_bars==0)
{
   x=Period();
   if (x>240) return(-1);
   ObjectCreate("Pivot", OBJ_TEXT, 0, 0,0);
   ObjectSetText("Pivot", "                 Pivot Point",fontsize,"Arial",Red);
   ObjectCreate("Sup1", OBJ_TEXT, 0, 0, 0);
   ObjectSetText("Sup1", "      S 1",fontsize,"Arial",Red);
   ObjectCreate("Res1", OBJ_TEXT, 0, 0, 0);
   ObjectSetText("Res1", "      R 1",fontsize,"Arial",Red);
   ObjectCreate("Sup2", OBJ_TEXT, 0, 0, 0);
   ObjectSetText("Sup2", "      S 2",fontsize,"Arial",Red);
   ObjectCreate("Res2", OBJ_TEXT, 0, 0, 0);
   ObjectSetText("Res2", "      R 2",fontsize,"Arial",Red);
   ObjectCreate("Sup3", OBJ_TEXT, 0, 0, 0);
   ObjectSetText("Sup3", "      S 3",fontsize,"Arial",Red);
   ObjectCreate("Res3", OBJ_TEXT, 0, 0, 0);
   ObjectSetText("Res3", "      R 3",fontsize,"Arial",Red);
}
   if(counted_bars<0) return(-1);
   limit=(Bars-counted_bars)-1;



for (i=limit; i>=0;i--)
{ 

if (High[i+1]>LastHigh) LastHigh=High[i+1];
if (Low[i+1]<LastLow) LastLow=Low[i+1];

if (TimeDay(Time[i])!=TimeDay(Time[i+1]))
   { 
   P=(LastHigh+LastLow+Close[i+1])/3;
   R1 = (2*P)-LastLow;
   S1 = (2*P)-LastHigh;
   R2 = P+(LastHigh - LastLow);
   S2 = P-(LastHigh - LastLow);
   R3 = (2*P)+(LastHigh-(2*LastLow));
   S3 = (2*P)-((2* LastHigh)-LastLow); 
   LastLow=Open[i]; LastHigh=Open[i];

   ObjectMove("Pivot", 0, Time[i],P);
   ObjectMove("Sup1", 0, Time[i],S1);
   ObjectMove("Res1", 0, Time[i],R1);
   ObjectMove("Sup2", 0, Time[i],S2);
   ObjectMove("Res2", 0, Time[i],R2);
   ObjectMove("Sup3", 0, Time[i],S3);
   ObjectMove("Res3", 0, Time[i],R3);

   }
   
    PBuffer[i]=P;
    S1Buffer[i]=S1;
    R1Buffer[i]=R1;
    S2Buffer[i]=S2;
    R2Buffer[i]=R2;
    S3Buffer[i]=S3;
    R3Buffer[i]=R3;

}

   return(0);
  }


Comments