//+------------------------------------------------------------------+
//| levelsEA.mq4 |
//| Copyright 2024, MetaQuotes Ltd. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2024, MetaQuotes Ltd."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
//--- input parameters
extern double trigger; // starting level
extern double spacing ; // number of points between levels
//--- global variables
string L1name = " Trigger level";
string L2name = " level above";
string L3name = " level below";
//calculations
double distance = spacing / 100000; // for EURUSD 5 digits plateform
double L1 = trigger;
double L2 = L1 + distance;
double L3 = L1 - distance;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//draw lines
//--- create a horizontal line L1
ObjectCreate(0,L1name,OBJ_HLINE,0,0,L1);
//--- set line color
ObjectSetInteger(0,L1name,OBJPROP_COLOR,clrWhite);
//--- set line display style
ObjectSetInteger(0,L1name,OBJPROP_STYLE,STYLE_DASH);
//--- set line width
ObjectSetInteger(0,L1name,OBJPROP_WIDTH,1);
//--- create a horizontal line L2
ObjectCreate(0,L2name,OBJ_HLINE,0,0,L2);
//--- set line color
ObjectSetInteger(0,L2name,OBJPROP_COLOR,clrWhite);
//--- set line display style
ObjectSetInteger(0,L2name,OBJPROP_STYLE,STYLE_DASH);
//--- set line width
ObjectSetInteger(0,L2name,OBJPROP_WIDTH,1);
//--- create a horizontal line L3
ObjectCreate(0,L3name,OBJ_HLINE,0,0,L3);
//--- set line color
ObjectSetInteger(0,L3name,OBJPROP_COLOR,clrWhite);
//--- set line display style
ObjectSetInteger(0,L3name,OBJPROP_STYLE,STYLE_DASH);
//--- set line width
ObjectSetInteger(0,L3name,OBJPROP_WIDTH,1);
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- delete a horizontal line
ObjectDelete(0,L1name);
ObjectDelete(0,L2name);
ObjectDelete(0,L3name);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//------------------------------------------------
// Check if the price reached level above
if(Bid == L2)
{
// change levels to above
// calculations
L1 = L2;
L2 = L1 + distance;
L3 = L1 - distance;
// move levels on chart
ObjectMove(0,L1name,0,0,L1); // move L1
ObjectMove(0,L2name,0,0,L2); // move L2
ObjectMove(0,L3name,0,0,L3); // move L3
}
//-------------------------------------------------
// Check if the price reached level below
if(Bid == L3)
{
// change levels to below
// move levels on chart
L1 = L3;
L2 = L1 + distance;
L3 = L1 - distance;
// move levels on chart
ObjectMove(0,L1name,0,0,L1); // move L1
ObjectMove(0,L2name,0,0,L2); // move L2
ObjectMove(0,L3name,0,0,L3); // move L3
}
}
//+------------------------------------------------------------------+