Pivot_Support_Historical
Download scriptThis tool is designed to help traders visualize key historical support levels on their trading charts. By identifying specific price points where the market has shown a tendency to stabilize or react, it helps in navigating market trends with more clarity.
Core Functionality
The script automatically calculates and plots three distinct support levels (S1, S2, and S3) based on daily price action. These levels are derived from the high, low, and closing prices of the previous trading day. By using these historical benchmarks, the tool allows you to see where "floors" in the market might have formed during past sessions.
How the Logic Works
The script follows a systematic process to generate these lines:
- Daily Data Tracking: It scans through historical data to identify each new trading day. It keeps track of the highest price reached, the lowest price hit, and where the market closed for every 24-hour cycle.
- Pivot Calculation: Once a new day begins, the script takes the high, low, and close from the completed previous day and applies a mathematical formula to determine the current day's pivot points:
- S1: The first primary support level.
- S2: The second, deeper support level.
- S3: A third, more significant support boundary.
- Dynamic Visualization: These levels are drawn as distinct lines on your chart (using different styles like dots and dashes) so they can be easily distinguished from one another.
- Smart Labeling: To ensure the chart remains readable, the script includes a labeling system that identifies each line (S1, S2, and S3) automatically, moving them to keep the visual information clear as price fluctuates.
Important Usage Notes
- Timeframe Compatibility: To ensure accuracy in calculations, the tool is designed to work best on timeframes of 4 hours or less. If a larger timeframe is selected, the system will provide an alert to notify the user.
- Customization: Users can adjust visual elements such as the color of the lines and the size of the text labels to fit their specific workspace preferences.
//+------------------------------------------------------------------+
//| Pivot Support Historical_V1.mq4 |
//| Copyright © 2005, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//| Modified to chart historical camarilla pivots by MrPip |
//| 3/28/06 Fixed problem of Sunday/Monday pivots |
//| and added some ideas from goodtiding5 (Kenneth Z.) |
//| Modified 4/14/07 to chart historical Pivot supports by Traden4x |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Magenta
#property indicator_color2 Magenta
#property indicator_color3 Magenta
//---- input parameters
extern int GMTshift=0;
extern color LColor = Magenta;
extern int fontsize=12;
extern int LabelShift=40;
double S1Buffer[];
double S2Buffer[];
double S3Buffer[];
double S1, S2, S3, P, Q, D;
double prev_high=0;
double prev_low=0;
double prev_close=0;
double cur_day=0;
double prev_day=0;
double day_high=0;
double day_low=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
IndicatorBuffers(3);
//---- indicators
SetIndexStyle(0,DRAW_LINE, STYLE_DASH);
SetIndexBuffer(0,S1Buffer);
SetIndexStyle(1,DRAW_LINE, STYLE_DASHDOT);
SetIndexBuffer(1,S2Buffer);
SetIndexStyle(2,DRAW_LINE, STYLE_DOT);
SetIndexBuffer(2,S3Buffer);
SetIndexLabel(0,"S1");
SetIndexLabel(1,"S2");
SetIndexLabel(2,"S3");
//----
// IndicatorShortName("Support Pivots");
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//---- TODO: add your code here
ObjectDelete("SupS3");
ObjectDelete("SupS2");
ObjectDelete("SupS3");
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted();
int cnt, limit;
//---- exit if period is greater than 4 hr charts
if(Period() > 240)
{
Alert("Error - Chart period is greater than 4 Hr.");
return(-1); // then exit
}
if(counted_bars<0) return(-1);
//---- last counted bar will be recounted
// if(counted_bars>0) counted_bars--;
// limit=(Bars-counted_bars)-1;
limit=counted_bars;
//---- Get new daily prices & calculate pivots
for (cnt=limit;cnt >=0;cnt--)
{
if (TimeDayOfWeek(Time[cnt]) == 0)
{
cur_day = prev_day;
}
else
{
cur_day = TimeDay(Time[cnt]- (GMTshift*3600));
}
if (prev_day != cur_day)
{
prev_close = Close[cnt+1];
prev_high = day_high;
prev_low = day_low;
day_high = High[cnt];
day_low = Low[cnt];
P = (prev_high+prev_low+prev_close)/3;
S1 = (2*P)-prev_high;
S2 = P-(prev_high-prev_low);
S3 = (2*P)-((2*prev_high)-prev_low);
prev_day = cur_day;
}
if (High[cnt]>day_high)
{
day_high = High[cnt];
}
if (Low[cnt]<day_low)
{
day_low = Low[cnt];
}
// day_low=Open[cnt]; day_high=Open[cnt];
//--- Draw Pivot lines on chart
S1Buffer[cnt]=S1;
S2Buffer[cnt]=S2;
S3Buffer[cnt]=S3;
}
if (cur_day == TimeDay(CurTime())) DisplayLabels();
//----
return(0);
}
void DisplayLabels()
{
if(ObjectFind("SupS1") != 0)
{
ObjectCreate("SupS1", OBJ_TEXT, 0, 0, 0);
ObjectSetText("SupS1", " S 1",fontsize,"Arial",LColor);
}
else
{
ObjectMove("SupS1", 0, Time[60],S1);
}
if(ObjectFind("SupS2") != 0)
{
ObjectCreate("SupS2", OBJ_TEXT, 0, 0, 0);
ObjectSetText("SupS2", " S 2",fontsize,"Arial",LColor);
}
else
{
ObjectMove("SupS2", 0, Time[60],S2);
}
if(ObjectFind("SupS3") != 0)
{
ObjectCreate("SupS3", OBJ_TEXT, 0, 0, 0);
ObjectSetText("SupS3", " S 3",fontsize,"Arial",LColor);
}
else
{
ObjectMove("SupS3", 0, Time[60],S3);
}
}
//+------------------------------------------------------------------+
Comments