This tool is designed for traders who use the Thomas DeMark methodology to identify key price levels on a trading chart. Its primary purpose is to automatically calculate and display specific "Pivot Points"—mathematical price benchmarks that help traders determine whether the market trend is likely to move upward or downward during a single day of trading.
How the Logic Works
The script functions by analyzing historical price data from the previous trading day to project key levels for the current day. It specifically looks at three core pieces of information from the preceding day:
- The High: The highest price reached.
- The Low: The lowest price reached.
- The Close: The final price at the end of the day.
Key Calculations
Once the script gathers these three values, it performs a series of mathematical calculations to generate five distinct visual lines on your chart:
- The Pivot Point: This is the central balance point. It is calculated by taking the average of yesterday’s High, Low, and Close. It serves as the "equilibrium" for the day; if the price stays above it, the sentiment is generally bullish; if below, it is generally bearish.
- Support Levels (S1 & S2): These represent potential "floors." The script calculates these points to show where the price might find buying interest or stop falling.
- Resistance Levels (R1 & R2): These represent potential "ceilings." The script calculates these points to highlight areas where the price may encounter selling pressure and struggle to move higher.
User Experience on the Chart
The script automatically scans through the history of your chart and identifies whenever a new day begins. Every time a new day starts, it instantly updates all five lines based on the data from the day that just finished. This allows you to see a clear visual map of "zones" for the current session, helping you identify where the market might react, stabilize, or reverse without having to perform any manual calculations.
//+------------------------------------------------------------------+
//| DialyPivot.mq4 |
//| These are the main pivots used by Thomas DeMark |
//| Written by: Ice |
//| |
//+------------------------------------------------------------------+
#property copyright "2005 Free software for trader"
#property indicator_chart_window
#property indicator_buffers 7
#property indicator_color1 Blue
#property indicator_color2 Yellow
#property indicator_color3 Red
#property indicator_color4 Green
#property indicator_color5 Lime
//---- input parameters\
datetime BT[];
double YesterdayHigh[50];
double YesterdayLow[50];
double YesterdayClose[50];
//---- buffers
double PivotArray[];
double R1Array[];
double S1Array[];
double R2Array[];
double S2Array[];
double R3Array[];
double S3Array[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
// Pivot
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,PivotArray);
IndicatorShortName("TDPivot");
SetIndexLabel(0,"Pivot");
// Resistance 1
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,R1Array);
SetIndexLabel(1,"R1");
// Support 1
SetIndexStyle(2,DRAW_LINE);
SetIndexBuffer(2,S1Array);
SetIndexLabel(2,"R1");
// Resistance 2
SetIndexStyle(3,DRAW_LINE);
SetIndexBuffer(3,R2Array);
SetIndexLabel(3,"R2");
// Support 2
SetIndexStyle(4,DRAW_LINE);
SetIndexBuffer(4,S2Array);
SetIndexLabel(4,"S2");
return(0);
}
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted();
//ArrayResize(BT, Bars); Print("Bars = " + Bars);
// Fill BT with bar open TIME
ArrayCopySeries(BT, MODE_TIME);
// Fill temp arrays with High, Low and Close prices per day
ArrayCopySeries(YesterdayHigh, MODE_HIGH, Symbol(), PERIOD_D1);
ArrayCopySeries(YesterdayLow, MODE_LOW, Symbol(), PERIOD_D1);
ArrayCopySeries(YesterdayClose, MODE_CLOSE, Symbol(), PERIOD_D1);
int od = 0;
int dd = 0;
double Pivot;
double R1;
double S1;
double R2;
double S2;
//Cycle through all the bars and fill the indicator bars with the Pivot point values
for (int i = 0; i <= Bars; i++) {
if (TimeDay(BT[i]) != od) {
dd++;
Pivot = (YesterdayHigh[dd] + YesterdayLow[dd] + YesterdayClose[dd])/3;
R1 = (2*Pivot)-YesterdayLow[dd];
S1 = (2*Pivot)-YesterdayHigh[dd];
R2 = Pivot-S1+R1;
S2 = Pivot-R1+S1;
od = TimeDay(BT[i]);
}
PivotArray[i] = Pivot;
R1Array[i]=R1;
S1Array[i]=S1;
R2Array[i]=R2;
S2Array[i]=S2;
}
//----
return(0);
}
//+------------------------------------------------------------------+
Comments