Pivot_Monday Fixed
Download scriptThis technical tool is designed to identify key price levels on a trading chart by calculating Pivot Points. Pivot points are standard technical analysis markers used by traders to determine the overall trend of the market and to identify potential areas of support and resistance.
Core Functionality
The script automatically scans historical price data to project three primary levels for each trading day:
- Pivot Point (P): The central equilibrium line of the price action.
- Resistance Levels (R1, R2, R3): These act as "ceilings," representing price points where the market may face difficulty moving higher and might potentially push back down.
- Support Levels (S1, S2, S3): These act as "floors," representing price points where the market may find a base and potentially bounce back upward.
How the Logic Works
To provide these levels, the script follows a specific mathematical sequence based on the previous day's price movement:
- Data Gathering: The tool looks at the high, low, and closing prices of the previous trading session.
- Daily Calculation: Whenever the date changes (signaling a new trading day), the script performs a calculation to generate the current day's levels. It uses the previous day's extremes to project where price might move next.
- Monday Correction: The logic includes a specific refinement to handle Mondays correctly, ensuring that the transition from the weekend into the first trading day of the week provides accurate data without being skewed by non-trading hours.
- Visual Mapping: Once these numbers are calculated, the script draws them directly on your chart as distinct lines. This allows you to see at a glance where the "magnetic" levels for the current day are located.
Key Features for the User
- Dynamic Updating: As new price data arrives and the market moves, the indicator maintains these levels to help you visualize the boundaries of the current session.
- Clear Labeling: The script includes on-screen text labels (Pivot, S1, R1, etc.) so that users can immediately identify which line corresponds to which level without guessing.
- Timeframe Compatibility: While it works across various views, it is optimized for standard trading timeframes to ensure the "daily" logic remains consistent and readable.
In summary, this script automates the manual task of calculating daily price boundaries, providing a visual roadmap of where the market might stall or reverse based on previous price history.
//+------------------------------------------------------------------+
//| Pivot.mq4 |
//| Monday Fixed by TaXiRaN |
//| 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 DarkBlue
#property indicator_color3 Maroon
#property indicator_color4 DarkBlue
#property indicator_color5 Maroon
#property indicator_color6 Green
#property indicator_color7 Green
//---- 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()
{
//---- TODO: add your code here
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;
//---- indicator line
SetIndexStyle(0,DRAW_LINE,0,2,Orange);
SetIndexStyle(1,DRAW_LINE,0,2,DarkBlue);
SetIndexStyle(2,DRAW_LINE,0,2,Maroon);
SetIndexStyle(3,DRAW_LINE,0,2,DarkBlue);
SetIndexStyle(4,DRAW_LINE,0,2,Maroon);
SetIndexStyle(5,DRAW_LINE,0,2,Green);
SetIndexStyle(6,DRAW_LINE,0,2,Green);
SetIndexBuffer(0,PBuffer);
SetIndexBuffer(1,S1Buffer);
SetIndexBuffer(2,R1Buffer);
SetIndexBuffer(3,S2Buffer);
SetIndexBuffer(4,R2Buffer);
SetIndexBuffer(5,S3Buffer);
SetIndexBuffer(6,R3Buffer);
//---- name for DataWindow and indicator subwindow label
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);
//---- last counted bar will be recounted
// if(counted_bars>0) counted_bars--;
limit=(Bars-counted_bars)-1;
for (i=limit; i>=0;i--) {
if (TimeDayOfWeek(Time[i+1])!=0){ // This if fix mondays.
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