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