Search code examples
mql4

Is it possible to draw an indicator using EA


Say when using EA, and when I detect the current bar has the lowest price I have seen so far, I will draw a horizontal line below it, is it possible to achieve with EA rather than custom indicator?


Solution

  • yes, if your conditions are met - you can draw a horizontal line or trend line or update its price parameters. in order to draw a line, use the following function, for moving - ObjectSetDouble():

    bool HLineCreate(const long            chart_ID=0,        // chart's ID
                 const string          name="HLine",      // line name
                 const int             sub_window=0,      // subwindow index
                 double                price=0,           // line price
                 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            hidden=true,       // hidden in the object list
                 const long            z_order=0)         // priority for mouse click
     {
    //--- if the price is not set, set it at the current Bid price level
     if(!price)
        price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
    //--- reset the error value
      ResetLastError();
    //--- create a horizontal line
     if(!ObjectCreate(chart_ID,name,OBJ_HLINE,sub_window,0,price))
     {
      Print(__FUNCTION__,
            ": failed to create a horizontal 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);
    //--- display in the foreground (false) or background (true)
     ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
    //--- enable (true) or disable (false) the mode of moving the line by mouse    
     ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
     ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
    //--- hide (true) or display (false) graphical object name in the object list
     ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
    //--- set the priority for receiving the event of a mouse click in the chart
     ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
    //--- successful execution
     return(true);
    }