Vertical line Indicator For MT5
The Vertical line Indicator For MT5 draws a vertical line at a specific time of the actual day. If the day changes then a new line will be drawn for the actual day. You can use the line for several purposes like a warning for upcoming news or any other use ase where you need to see a specific time on the chart (think of weekends).
Installing the Vertical line Indicator For MT5
After you downloaded the indicator via the form above you need to unzip the zip-file. Then you need to copy the file Vertical_line.mq5 into the folder MQL5\Indicators of your MT5 installation. After that please restart MT5 and then you will be able to see the indicator in the list of indicators.
Parameters of the Vertical line Indicator For MT5
The Vertical line Indicator For MT5 has 5 parameters to configure.
input datetime InpTime = D 2017.05.22 18:40:00 ; // Use only Hours and minutes
input string InpName = "Vertical line"; // Line name
input color InpColor = clrRed; // Line color
input ENUM_LINE_STYLE InpStyle = STYLE_DASH; // Line style
input int InpWidth = 3; // Line width
Buffers of the Vertical line Indicator For MT5
The Vertical line Indicator For MT5 provides 0 buffers.
Main Parts Of The Code
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//---
MqlDateTime str_to_draw;
TimeToStruct(TimeCurrent(),str_to_draw);
if(prev_date==0) // first start
{
MqlDateTime str_input;
TimeToStruct(InpTime,str_input);
str_to_draw.hour=str_input.hour;
str_to_draw.min=str_input.min;
str_to_draw.sec=0;
prev_date=StructToTime(str_to_draw);
VLineMove(0,InpName,prev_date);
return(rates_total);
}
MqlDateTime str_prev_date;
TimeToStruct(prev_date,str_prev_date);
if(str_to_draw.day==str_prev_date.day) // today the vertical line has already been drawn
return(rates_total);
else
{
MqlDateTime str_input;
TimeToStruct(InpTime,str_input);
str_to_draw.hour=str_input.hour;
str_to_draw.min=str_input.min;
str_to_draw.sec=0;
prev_date=StructToTime(str_to_draw);
VLineMove(0,InpName,prev_date);
}
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+
//| Timer function |
//+------------------------------------------------------------------+
void OnTimer()
{
//--- protection against unauthorized deletion
if(ObjectFind(0,InpName) lt 0)
{
prev_date=0;
VLineCreate(0,InpName,0,0.0,InpColor,InpStyle,InpWidth);
}
}
//+------------------------------------------------------------------+
//| Create the vertical line |
//+------------------------------------------------------------------+
bool VLineCreate(const long chart_ID=0, // chart s ID
const string name="VLine", // line name
const int sub_window=0, // subwindow index
datetime time=0, // line time
const color clr=clrRed, // line color
const ENUM_LINE_STYLE style=STYLE_SOLID, // line style
const int width=1/*, // line width
const bool back=false, // in the background
const bool selection=true, // highlight to move
const bool ray=true, // line s continuation down
const bool hidden=true, // hidden in the object list
const long z_order=0*/) // priority for mouse click
{
//--- if the line time is not set, draw it via the last bar
if(!time)
time=TimeCurrent();
//--- reset the error value
ResetLastError();
//--- create a vertical line
if(!ObjectCreate(chart_ID,name,OBJ_VLINE,sub_window,time,0))
{
Print(__FUNCTION__,
": failed to create a vertical line! Error code = ",GetLastError());
return(false);
}
//--- set line color
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- set line display style
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- set line width
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Move the vertical line |
//+------------------------------------------------------------------+
bool VLineMove(const long chart_ID=0, // chart s ID
const string name="VLine", // line name
datetime time=0) // line time
{
//--- if line time is not set, move the line to the last bar
if(!time)
time=TimeCurrent();
//--- reset the error value
ResetLastError();
//--- move the vertical line
if(!ObjectMove(chart_ID,name,0,time,0))
{
Print(__FUNCTION__,
": failed to move the vertical line! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Delete the vertical line |
//+------------------------------------------------------------------+
bool VLineDelete(const long chart_ID=0, // chart s ID
const string name="VLine") // line name
{
//--- reset the error value
ResetLastError();
//--- delete the vertical line
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": failed to delete the vertical line! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+