_BZ_everyhour_History
Download scriptThis script is designed to work as a visual overlay on your trading chart, specifically helping traders identify and visualize price zones based on the opening price of new hours. It serves as an automated "mapping" tool that marks specific boundaries to help navigate market sessions more clearly.
Core Functionality
The logic follows a straightforward process: it scans the historical price data and detects every time the clock moves to a new hour. Once a new hour is identified, the script captures the exact opening price of that period.
Based on that opening price, the tool automatically calculates and draws four distinct levels (lines) on your chart:
- Upper Buy Zones: It establishes two upper boundaries relative to the opening price. These represent a primary zone and an extended secondary zone, determined by the "straddle width" and "channel" settings you choose.
- Lower Sell Zones: Similarly, it calculates two lower boundaries below the opening price. These provide a visual reference for downward price movement relative to where the hour began.
Visual Representation
Rather than just providing raw numbers, the script translates these calculations into visible lines on your trading window. It uses specific styles (such as dots or solid lines) and unique symbols (Wingdings) to ensure that these "Buy" and "Sell" zones are easily distinguishable at a glance.
By automating this, the tool removes the need for manual calculation; every time a new hour begins, the script instantly updates the chart with the relevant zones, allowing you to see the market's "playing field" based on current session dynamics.
//+------------------------------------------------------------------+
//| MTC.mq4 |
//| Copyright © 2007, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
/*
Constant Value Description
DRAW_LINE 0 Drawing line.
DRAW_SECTION 1 Drawing sections.
DRAW_HISTOGRAM 2 Drawing histogram.
DRAW_ARROW 3 Drawing arrows (symbols).
DRAW_ZIGZAG 4 Drawing sections between even and odd indicator buffers.
DRAW_NONE 12 No drawing.
Drawing style. Valid when width=1. It can be any of the following values:
Constant Value Description
STYLE_SOLID 0 The pen is solid.
STYLE_DASH 1 The pen is dashed.
STYLE_DOT 2 The pen is dotted.
STYLE_DASHDOT 3 The pen has alternating dashes and dots.
STYLE_DASHDOTDOT 4 The pen has alternating dashes and double dots.
*/
#property indicator_chart_window
#property indicator_buffers 5
#property indicator_color1 Blue
#property indicator_color2 Blue
#property indicator_color3 White
#property indicator_color4 Red
#property indicator_color5 Red
//---- input parameters
extern int myWingDingL = 250 ;
extern int myWingDingO = 250 ;
extern int myWingDingS = 250 ;
extern int myLine = DRAW_LINE ;
extern int myStyle = STYLE_DOT ;
extern string session_name = "Hour open";
extern int straddle_width=3;
extern int channel=1;
double lgt[];
double lgb[];
double opn[];
double sht[];
double shb[];
double open_price;
double rates_h1[2][6];
string OP, BZ, BZW, SZ, SZW;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
SetIndexBuffer(0, lgt);
SetIndexBuffer(1, lgb);
SetIndexBuffer(2, opn);
SetIndexBuffer(3, sht);
SetIndexBuffer(4, shb);
//---- indicators
SetIndexStyle(0,myLine, myStyle);
SetIndexArrow(0,myWingDingL);
SetIndexBuffer(0,lgt);
SetIndexEmptyValue(0,0.0);
SetIndexStyle(1,myLine, myStyle);
SetIndexArrow(1,myWingDingL);
SetIndexBuffer(1,lgb);
SetIndexEmptyValue(1,0.0);
SetIndexStyle(2,myLine, myStyle);
SetIndexArrow(2,myWingDingO);
SetIndexBuffer(2,opn);
SetIndexEmptyValue(2,0.0);
SetIndexStyle(3,myLine, myStyle);
SetIndexArrow(3,myWingDingS);
SetIndexBuffer(3,sht);
SetIndexEmptyValue(3,0.0);
SetIndexStyle(4,myLine, myStyle);
SetIndexArrow(4,myWingDingS);
SetIndexBuffer(4,shb);
SetIndexEmptyValue(4,0.0);
//----
//---- indicators
OP = "Open " + session_name;
BZ = "Buy zone " + session_name;
BZW = "Buy zone width " + session_name;
SZ = "Sell zone " + session_name;
SZW = "Sell zone width " + session_name;
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
//----
int i, dayi, counted_bars = IndicatorCounted();
//---- check for possible errors
if(counted_bars < 0)
return(-1);
//---- last counted bar will be recounted
if(counted_bars > 0)
counted_bars--;
int limit = Bars - counted_bars;
//----
for(i = limit - 1; i >= 0; i--)
{
if( TimeHour(Time[i]) != TimeHour(Time[i+1]) ) { int t = i ; }
opn[i] = iOpen(NULL,0,t);
lgt[i] = opn[i]+straddle_width*Point ;
lgb[i] = opn[i]+(straddle_width+channel)*Point ;
sht[i] = opn[i]-straddle_width*Point ;
shb[i] = opn[i]-(straddle_width+channel)*Point ;
}
//----
return(0);
}
//+------------------------------------------------------------------+
Comments