ShadeNY Indicator For MT4
The ShadeNY Indicator For MT4 is an indicator for those traders who like to trade during the New York session. It has a default yellow color which labels the New York session via a shaded rectangular so that traders can clearly see whether or not they are trading in the New York session. For some of you this might not seem such a big of a deal however there are plenty of traders across the globe who need a useful indicator such as this one to help them automatically identify the New York session.
Installing the ShadeNY Indicator For MT4
After you downloaded the indicator via the form above you need to unzip the zip-file. Then you need to copy the file Shade_NY_07__13_GMT.mq4 into the folder MQL4\Indicators of your MT4 installation. After that please restart MT4 and then you will be able to see the indicator in the list of indicators.
Parameters of the ShadeNY Indicator For MT4
The ShadeNY Indicator For MT4 has 1 parameters to configure.
extern color ShadeColor=clrYellow;
Buffers of the ShadeNY Indicator For MT4
The ShadeNY Indicator For MT4 provides 0 buffers.
Main Parts Of The Code
//| is widened in the start() in lieu of repainting all.|
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, sx ted"
#property link ""
//----
#property indicator_chart_window
//---- input parameters
extern color ShadeColor=clrYellow;
/*
// if in Moscow
#define NY_OPEN_HH 17 // NY session open hour
#define NY_OPEN_MM 30 // NY session open minutes
#define NY_CLOSE_HH 00 // NY session close hour
#define NY_CLOSE_MM 05 // NY session close minutes
*/
// if in 07:00 - 13:00 GMT
#define NY_OPEN_HH 07 // NY session open hour
#define NY_OPEN_MM 00 // NY session open minutes
#define NY_CLOSE_HH 13 // NY session close hour
#define NY_CLOSE_MM 00 // NY session close minutes
/*
// if in London
#define NY_OPEN_HH 14 // NY session open hour
#define NY_OPEN_MM 30 // NY session open minutes
#define NY_CLOSE_HH 21 // NY session close hour
#define NY_CLOSE_MM 05 // NY session close minutes
*/
/*
// if in New York
#define NY_OPEN_HH 08 // NY session open hour
#define NY_OPEN_MM 30 // NY session open minutes
#define NY_CLOSE_HH 14 // NY session close hour
#define NY_CLOSE_MM 05 // NY session close minutes
*/
#define MAX_DAYS_TO_SHADE 5 // maximum number of days back from last chart date to be shaded
//---- global variables to program
string obj[]; //array of object names
int iPrevious=0,iStart=-1,iEnd;
double dLow,dHigh;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
if(Period() gt PERIOD_H4) return(0); // no shading required
int iMaxBarsOnChart=iBars(NULL,0),i,iBarDay,iBarTime;
// find approximate start of first day to shade
int iBarsToDo=MathMin((MAX_DAYS_TO_SHADE*PERIOD_D1)/Period(),iMaxBarsOnChart);
// find start of first day to shade
for(i=iBarsToDo; i lt iMaxBarsOnChart; i++)
{
iBarDay=TimeYear(Time[i])*PERIOD_MN1*12+TimeMonth(Time[i])*PERIOD_MN1+TimeDay(Time[i])*PERIOD_D1;
iBarTime=iBarDay+TimeHour(Time[i])*60+TimeMinute(Time[i]);
if(iBarTime gt =iBarDay+NY_OPEN_HH*60+NY_OPEN_MM && iBarTime lt =iBarDay+NY_CLOSE_HH*60+NY_CLOSE_MM)
iStart=i;
else if(iStart gt -1)
break;
}
if(iStart gt -1) iBarsToDo=iStart;
iStart=-1;
// shade previous sessions and current session if started
for(i=iBarsToDo; i gt =0; i--)
{
iBarDay=TimeYear(Time[i])*PERIOD_MN1*12+TimeMonth(Time[i])*PERIOD_MN1+TimeDay(Time[i])*PERIOD_D1;
iBarTime=iBarDay+TimeHour(Time[i])*60+TimeMinute(Time[i]);
if(iBarTime gt =iBarDay+NY_OPEN_HH*60+NY_OPEN_MM && iBarTime lt =iBarDay+NY_CLOSE_HH*60+NY_CLOSE_MM)
{
if(iBarDay==iPrevious) // current NY session
{
dLow =MathMin(dLow, Low[i]);
dHigh=MathMax(dHigh, High[i]);
}
else // new NY session
{
dLow=Low[i];
dHigh=High[i];
iStart=i;
iPrevious=iBarDay;
}
iEnd=i;
}
else if(iStart gt -1)
{
PaintRectangle();
iStart=-1;
}
}
if(iStart gt -1) PaintRectangle(); // paint the last one if session not closed
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
int iaCount=ArraySize(obj);
for(int i=0; i lt iaCount; i++)
{
if(ObjectFind(obj[i]) gt -1) ObjectDelete(obj[i]);
}
ArrayResize(obj,0);
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int i=0,iBarDay,iBarTime;
iBarDay=TimeYear(Time[i])*PERIOD_MN1*12+TimeMonth(Time[i])*PERIOD_MN1+TimeDay(Time[i])*PERIOD_D1;
iBarTime=iBarDay+TimeHour(Time[i])*60+TimeMinute(Time[i]);
if(iBarTime gt =iBarDay+NY_OPEN_HH*60+NY_OPEN_MM && iBarTime lt =iBarDay+NY_CLOSE_HH*60+NY_CLOSE_MM)
{
if(iBarDay==iPrevious) // current NY session
{
dLow =MathMin(dLow, Low[i]);
dHigh=MathMax(dHigh, High[i]);
}
else // new NY session
{
dLow=Low[i];
dHigh=High[i];
iStart=i;
iPrevious=iBarDay;
}
iEnd=i;
if(iStart gt -1)
{
PaintRectangle();
}
}
return(0);
}
//+------------------------------------------------------------------+
//| Paint rectangle |
//+------------------------------------------------------------------+
void PaintRectangle()
{
string sObj="ShadeNY_"+DoubleToStr(iPrevious,0); // name for the object
if(ObjectFind(sObj) gt -1)
{
// current session object found, so just widen it
ObjectSet(sObj,OBJPROP_PRICE1,dLow-Point);
ObjectSet(sObj,OBJPROP_TIME2,Time[iEnd]);
ObjectSet(sObj,OBJPROP_PRICE2,dHigh+Point);
}
else
{
// otherwise create new object for the session
int iaCount=ArraySize(obj);
ArrayResize(obj,iaCount+1);
obj[iaCount]=sObj;
ObjectCreate(sObj,OBJ_RECTANGLE,0,Time[iStart],dLow-Point,Time[iEnd],dHigh+Point);
ObjectSet(sObj,OBJPROP_COLOR,ShadeColor);
}
}
//+------------------------------------------------------------------+