Try to use rectangles: Insert - Shapes - Rectangle.
//+------------------------------------------------------------------+
//| ShadeNY.mq4 |
//| Copyright © 2006, sx ted |
//| Purpose: shade NY sessions |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, sx ted"
#property link ""
#property indicator_chart_window
//---- input parameters
extern color ShadeColor=Yellow;
/*
// 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 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
datetime prevTime=D'01.01.2006';
string obj[]; //array of object names
int iWidth;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
int in, i, io, ic, it, iStart=-1;
iWidth=(MAX_DAYS_TO_SHADE*PERIOD_D1)/Period();
// find start of first day to shade
in=iBars(NULL,0);
for(i=iWidth; i<in; i++)
{
in=TimeYear(Time[i])*PERIOD_MN1*12+TimeMonth(Time[i])*PERIOD_MN1+TimeDay(Time[i])*PERIOD_D1;
io=in+NY_OPEN_HH*60+NY_OPEN_MM;
ic=in+NY_CLOSE_HH*60+NY_CLOSE_MM;
it=in+TimeHour(Time[i])*60+TimeMinute(Time[i]);
if(it>=io && it<=ic)
{
iStart=i;
}
else if(iStart>-1) break;
}
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
int iaCount=ArraySize(obj);
for(int i=0; i<iaCount; i++)
{
if(ObjectFind(obj[i])>-1) ObjectDelete(obj[i]);
}
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int iStart=-1, iEnd, in, io, ic, it, i;
int iaCount=ArraySize(obj), iPrv=0;
double dLow, dHigh;
if(Period()>PERIOD_H4) return(0); // no shading
if(prevTime == Time[0]) return(0); // only start on complete bars
for(i=0; i<iaCount; i++)
{
if(ObjectFind(obj[i])>-1) ObjectDelete(obj[i]);
}
iaCount=0;
for(i=iWidth; i>0; i--)
{
in=TimeYear(Time[i])*PERIOD_MN1*12+TimeMonth(Time[i])*PERIOD_MN1+TimeDay(Time[i])*PERIOD_D1;
io=in+NY_OPEN_HH*60+NY_OPEN_MM;
ic=in+NY_CLOSE_HH*60+NY_CLOSE_MM;
it=in+TimeHour(Time[i])*60+TimeMinute(Time[i]);
if(it>=io && it<=ic)
{
if(in!=iPrv) // new NY session
{
dLow=Low[i];
dHigh=High[i];
iStart=i;
iPrv=in;
}
dLow =MathMin(dLow, Low[i]);
dHigh=MathMax(dHigh, High[i]);
iEnd=i;
}
else if(iStart>-1)
{
iaCount++;
iaCount=ArrayResize(obj, iaCount);
obj[iaCount-1]="ShadeNY_"+DoubleToStr(iPrv, 0); // name for the object
ObjectCreate(obj[iaCount-1],OBJ_RECTANGLE,0,Time[iStart],dLow-Point,Time[iEnd],dHigh+Point);
ObjectSet(obj[iaCount-1],OBJPROP_COLOR,ShadeColor);
iStart=-1;
}
}
if(iStart>-1)
{
iaCount++;
iaCount=ArrayResize(obj, iaCount);
obj[iaCount-1]="ShadeNY_"+DoubleToStr(iPrv, 0); // name for the object
ObjectCreate(obj[iaCount-1],OBJ_RECTANGLE,0,Time[iStart],dLow-Point,Time[iEnd],dHigh+Point);
ObjectSet(obj[iaCount-1],OBJPROP_COLOR,ShadeColor);
}
prevTime=Time[0];
return(0);
}
//+------------------------------------------------------------------+
Edit NY_OPEN_HH, NY_OPEN_MM, NY_CLOSE_HH and NY_CLOSE_MM to suit your local time, also MAX_DAYS_TO_SHADE can be changed. Take care.
//| ShadeNY.mq4 |
//| Copyright © 2006, sx ted |
//| Purpose: shade NY sessions |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, sx ted"
#property link ""
#property indicator_chart_window
//---- input parameters
extern color ShadeColor=Yellow;
/*
// 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 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
datetime prevTime=D'01.01.2006';
string obj[]; //array of object names
int iWidth;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
int in, i, io, ic, it, iStart=-1;
iWidth=(MAX_DAYS_TO_SHADE*PERIOD_D1)/Period();
// find start of first day to shade
in=iBars(NULL,0);
for(i=iWidth; i<in; i++)
{
in=TimeYear(Time[i])*PERIOD_MN1*12+TimeMonth(Time[i])*PERIOD_MN1+TimeDay(Time[i])*PERIOD_D1;
io=in+NY_OPEN_HH*60+NY_OPEN_MM;
ic=in+NY_CLOSE_HH*60+NY_CLOSE_MM;
it=in+TimeHour(Time[i])*60+TimeMinute(Time[i]);
if(it>=io && it<=ic)
{
iStart=i;
}
else if(iStart>-1) break;
}
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
int iaCount=ArraySize(obj);
for(int i=0; i<iaCount; i++)
{
if(ObjectFind(obj[i])>-1) ObjectDelete(obj[i]);
}
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int iStart=-1, iEnd, in, io, ic, it, i;
int iaCount=ArraySize(obj), iPrv=0;
double dLow, dHigh;
if(Period()>PERIOD_H4) return(0); // no shading
if(prevTime == Time[0]) return(0); // only start on complete bars
for(i=0; i<iaCount; i++)
{
if(ObjectFind(obj[i])>-1) ObjectDelete(obj[i]);
}
iaCount=0;
for(i=iWidth; i>0; i--)
{
in=TimeYear(Time[i])*PERIOD_MN1*12+TimeMonth(Time[i])*PERIOD_MN1+TimeDay(Time[i])*PERIOD_D1;
io=in+NY_OPEN_HH*60+NY_OPEN_MM;
ic=in+NY_CLOSE_HH*60+NY_CLOSE_MM;
it=in+TimeHour(Time[i])*60+TimeMinute(Time[i]);
if(it>=io && it<=ic)
{
if(in!=iPrv) // new NY session
{
dLow=Low[i];
dHigh=High[i];
iStart=i;
iPrv=in;
}
dLow =MathMin(dLow, Low[i]);
dHigh=MathMax(dHigh, High[i]);
iEnd=i;
}
else if(iStart>-1)
{
iaCount++;
iaCount=ArrayResize(obj, iaCount);
obj[iaCount-1]="ShadeNY_"+DoubleToStr(iPrv, 0); // name for the object
ObjectCreate(obj[iaCount-1],OBJ_RECTANGLE,0,Time[iStart],dLow-Point,Time[iEnd],dHigh+Point);
ObjectSet(obj[iaCount-1],OBJPROP_COLOR,ShadeColor);
iStart=-1;
}
}
if(iStart>-1)
{
iaCount++;
iaCount=ArrayResize(obj, iaCount);
obj[iaCount-1]="ShadeNY_"+DoubleToStr(iPrv, 0); // name for the object
ObjectCreate(obj[iaCount-1],OBJ_RECTANGLE,0,Time[iStart],dLow-Point,Time[iEnd],dHigh+Point);
ObjectSet(obj[iaCount-1],OBJPROP_COLOR,ShadeColor);
}
prevTime=Time[0];
return(0);
}
//+------------------------------------------------------------------+
Edit NY_OPEN_HH, NY_OPEN_MM, NY_CLOSE_HH and NY_CLOSE_MM to suit your local time, also MAX_DAYS_TO_SHADE can be changed. Take care.
it is not like I aligned it!
//+------------------------------------------------------------------+ //| ShadeNY.mq4 | //| Copyright © 2006, sx ted | //| Purpose: shade NY sessions | //+------------------------------------------------------------------+ #property copyright "Copyright © 2006, sx ted" #property link "" #property indicator_chart_window //---- input parameters extern color ShadeColor=Yellow; /* // 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 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 datetime prevTime=D'01.01.2006'; string obj[]; //array of object names int iWidth; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { int in, i, io, ic, it, iStart=-1; iWidth=(MAX_DAYS_TO_SHADE*PERIOD_D1)/Period(); // find start of first day to shade in=iBars(NULL,0); for(i=iWidth; i<in; i++) { in=TimeYear(Time[i])*PERIOD_MN1*12+TimeMonth(Time[i])*PERIOD_MN1+TimeDay(Time[i])*PERIOD_D1; io=in+NY_OPEN_HH*60+NY_OPEN_MM; ic=in+NY_CLOSE_HH*60+NY_CLOSE_MM; it=in+TimeHour(Time[i])*60+TimeMinute(Time[i]); if(it>=io && it<=ic) { iStart=i; } else if(iStart>-1) break; } return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { int iaCount=ArraySize(obj); for(int i=0; i<iaCount; i++) { if(ObjectFind(obj[i])>-1) ObjectDelete(obj[i]); } return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int iStart=-1, iEnd, in, io, ic, it, i; int iaCount=ArraySize(obj), iPrv=0; double dLow, dHigh; if(Period()>PERIOD_H4) return(0); // no shading if(prevTime == Time[0]) return(0); // only start on complete bars for(i=0; i<iaCount; i++) { if(ObjectFind(obj[i])>-1) ObjectDelete(obj[i]); } iaCount=0; for(i=iWidth; i>0; i--) { in=TimeYear(Time[i])*PERIOD_MN1*12+TimeMonth(Time[i])*PERIOD_MN1+TimeDay(Time[i])*PERIOD_D1; io=in+NY_OPEN_HH*60+NY_OPEN_MM; ic=in+NY_CLOSE_HH*60+NY_CLOSE_MM; it=in+TimeHour(Time[i])*60+TimeMinute(Time[i]); if(it>=io && it<=ic) { if(in!=iPrv) // new NY session { dLow=Low[i]; dHigh=High[i]; iStart=i; iPrv=in; } dLow =MathMin(dLow, Low[i]); dHigh=MathMax(dHigh, High[i]); iEnd=i; } else if(iStart>-1) { iaCount++; iaCount=ArrayResize(obj, iaCount); obj[iaCount-1]="ShadeNY_"+DoubleToStr(iPrv, 0); // name for the object ObjectCreate(obj[iaCount-1],OBJ_RECTANGLE,0,Time[iStart],dLow-Point,Time[iEnd],dHigh+Point); ObjectSet(obj[iaCount-1],OBJPROP_COLOR,ShadeColor); iStart=-1; } } if(iStart>-1) { iaCount++; iaCount=ArrayResize(obj, iaCount); obj[iaCount-1]="ShadeNY_"+DoubleToStr(iPrv, 0); // name for the object ObjectCreate(obj[iaCount-1],OBJ_RECTANGLE,0,Time[iStart],dLow-Point,Time[iEnd],dHigh+Point); ObjectSet(obj[iaCount-1],OBJPROP_COLOR,ShadeColor); } prevTime=Time[0]; return(0); } //+------------------------------------------------------------------+
I missed out iStart in init() function.
//+------------------------------------------------------------------+ //| ShadeNY.mq4 | //| Copyright © 2006, sx ted | //| Purpose: shade NY sessions | //+------------------------------------------------------------------+ #property copyright "Copyright © 2006, sx ted" #property link "" #property indicator_chart_window //---- input parameters extern color ShadeColor=Yellow; /* // 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 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 datetime prevTime=D'01.01.2006'; string obj[]; //array of object names int iWidth; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { int in, i, io, ic, it, iStart=-1; iWidth=(MAX_DAYS_TO_SHADE*PERIOD_D1)/Period(); // find start of first day to shade in=iBars(NULL,0); for(i=iWidth; i<in; i++) { in=TimeYear(Time[i])*PERIOD_MN1*12+TimeMonth(Time[i])*PERIOD_MN1+TimeDay(Time[i])*PERIOD_D1; io=in+NY_OPEN_HH*60+NY_OPEN_MM; ic=in+NY_CLOSE_HH*60+NY_CLOSE_MM; it=in+TimeHour(Time[i])*60+TimeMinute(Time[i]); if(it>=io && it<=ic) { iStart=i; } else if(iStart>-1) break; } if(iStart>-1) iWidth=iStart; return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { int iaCount=ArraySize(obj); for(int i=0; i<iaCount; i++) { if(ObjectFind(obj[i])>-1) ObjectDelete(obj[i]); } return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int iStart=-1, iEnd, in, io, ic, it, i; int iaCount=ArraySize(obj), iPrv=0; double dLow, dHigh; if(Period()>PERIOD_H4) return(0); // no shading if(prevTime == Time[0]) return(0); // only start on complete bars for(i=0; i<iaCount; i++) { if(ObjectFind(obj[i])>-1) ObjectDelete(obj[i]); } iaCount=0; for(i=iWidth; i>0; i--) { in=TimeYear(Time[i])*PERIOD_MN1*12+TimeMonth(Time[i])*PERIOD_MN1+TimeDay(Time[i])*PERIOD_D1; io=in+NY_OPEN_HH*60+NY_OPEN_MM; ic=in+NY_CLOSE_HH*60+NY_CLOSE_MM; it=in+TimeHour(Time[i])*60+TimeMinute(Time[i]); if(it>=io && it<=ic) { if(in!=iPrv) // new NY session { dLow=Low[i]; dHigh=High[i]; iStart=i; iPrv=in; } dLow =MathMin(dLow, Low[i]); dHigh=MathMax(dHigh, High[i]); iEnd=i; } else if(iStart>-1) { iaCount++; iaCount=ArrayResize(obj, iaCount); obj[iaCount-1]="ShadeNY_"+DoubleToStr(iPrv, 0); // name for the object ObjectCreate(obj[iaCount-1],OBJ_RECTANGLE,0,Time[iStart],dLow-Point,Time[iEnd],dHigh+Point); ObjectSet(obj[iaCount-1],OBJPROP_COLOR,ShadeColor); iStart=-1; } } if(iStart>-1) { iaCount++; iaCount=ArrayResize(obj, iaCount); obj[iaCount-1]="ShadeNY_"+DoubleToStr(iPrv, 0); // name for the object ObjectCreate(obj[iaCount-1],OBJ_RECTANGLE,0,Time[iStart],dLow-Point,Time[iEnd],dHigh+Point); ObjectSet(obj[iaCount-1],OBJPROP_COLOR,ShadeColor); } prevTime=Time[0]; return(0); } //+------------------------------------------------------------------+
Whoa...
Thats much more complicated than I thought it'd be! Thanks a lot. Gonna go play with it right now.
thanks,
Jack
Thats much more complicated than I thought it'd be! Thanks a lot. Gonna go play with it right now.
thanks,
Jack
Jack, in line 53 changed variable "in" to "ib" in init() function.
//+------------------------------------------------------------------+ //| ShadeNY.mq4 | //| Copyright © 2006, sx ted | //| Purpose: shade NY sessions | //+------------------------------------------------------------------+ #property copyright "Copyright © 2006, sx ted" #property link "" #property indicator_chart_window //---- input parameters extern color ShadeColor=Yellow; /* // 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 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 datetime prevTime=D'01.01.2006'; string obj[]; //array of object names int iWidth; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { int in, i, io, ic, it, iStart=-1, ib; iWidth=(MAX_DAYS_TO_SHADE*PERIOD_D1)/Period(); // find start of first day to shade ib=iBars(NULL,0); for(i=iWidth; i<ib; i++) { in=TimeYear(Time[i])*PERIOD_MN1*12+TimeMonth(Time[i])*PERIOD_MN1+TimeDay(Time[i])*PERIOD_D1; io=in+NY_OPEN_HH*60+NY_OPEN_MM; ic=in+NY_CLOSE_HH*60+NY_CLOSE_MM; it=in+TimeHour(Time[i])*60+TimeMinute(Time[i]); if(it>=io && it<=ic) { iStart=i; } else if(iStart>-1) break; } if(iStart>-1) iWidth=iStart; return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { int iaCount=ArraySize(obj); for(int i=0; i<iaCount; i++) { if(ObjectFind(obj[i])>-1) ObjectDelete(obj[i]); } return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int iStart=-1, iEnd, in, io, ic, it, i; int iaCount=ArraySize(obj), iPrv=0; double dLow, dHigh; if(Period()>PERIOD_H4) return(0); // no shading if(prevTime == Time[0]) return(0); // only start on complete bars for(i=0; i<iaCount; i++) { if(ObjectFind(obj[i])>-1) ObjectDelete(obj[i]); } iaCount=0; for(i=iWidth; i>0; i--) { in=TimeYear(Time[i])*PERIOD_MN1*12+TimeMonth(Time[i])*PERIOD_MN1+TimeDay(Time[i])*PERIOD_D1; io=in+NY_OPEN_HH*60+NY_OPEN_MM; ic=in+NY_CLOSE_HH*60+NY_CLOSE_MM; it=in+TimeHour(Time[i])*60+TimeMinute(Time[i]); if(it>=io && it<=ic) { if(in!=iPrv) // new NY session { dLow=Low[i]; dHigh=High[i]; iStart=i; iPrv=in; } dLow =MathMin(dLow, Low[i]); dHigh=MathMax(dHigh, High[i]); iEnd=i; } else if(iStart>-1) { iaCount++; iaCount=ArrayResize(obj, iaCount); obj[iaCount-1]="ShadeNY_"+DoubleToStr(iPrv, 0); // name for the object ObjectCreate(obj[iaCount-1],OBJ_RECTANGLE,0,Time[iStart],dLow-Point,Time[iEnd],dHigh+Point); ObjectSet(obj[iaCount-1],OBJPROP_COLOR,ShadeColor); iStart=-1; } } if(iStart>-1) { iaCount++; iaCount=ArrayResize(obj, iaCount); obj[iaCount-1]="ShadeNY_"+DoubleToStr(iPrv, 0); // name for the object ObjectCreate(obj[iaCount-1],OBJ_RECTANGLE,0,Time[iStart],dLow-Point,Time[iEnd],dHigh+Point); ObjectSet(obj[iaCount-1],OBJPROP_COLOR,ShadeColor); } prevTime=Time[0]; return(0); } //+------------------------------------------------------------------+
You are missing trading opportunities:
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
Registration
Log in
You agree to website policy and terms of use
If you do not have an account, please register
thanks,
Jack