expert advisor - miscellaneous questions - page 10

 
//+------------------------------------------------------------------+
//|                                                     Stoploss.mq4 |
//|      Copyright 2016, Marco vd Heijden, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Marco vd Heijden, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create object
   BitmapLabelCreate(
                     0,                     // chart's ID
                     "BmpLabel",            // label name
                     0,                     // subwindow index
                     20,                    // X coordinate
                     20,                    // Y coordinate
                     "\\Images\\on.bmp",    // image in On mode
                     "\\Images\\off.bmp",   // image in Off mode
                     0,                     // visibility scope X coordinate
                     0,                     // visibility scope Y coordinate
                     0,                     // visibility scope shift by X axis
                     0,                     // visibility scope shift by Y axis
                     0,                     // pressed/released
                     CORNER_LEFT_UPPER,     // chart corner for anchoring
                     ANCHOR_LEFT_UPPER,     // anchor type
                     clrRed,                // border color when highlighted
                     STYLE_SOLID,           // line style when highlighted
                     1,                     // move point size
                     false,                 // in the background
                     false,                 // highlight to move
                     true,                  // hidden in the object list
                     0);                    // priority for mouse click

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(ObjectGetInteger(0,"BmpLabel",OBJPROP_STATE)==true)
     {
      Print("Stoploss active");
      // Do Something...
     }

   if(ObjectGetInteger(0,"BmpLabel",OBJPROP_STATE)==false)
     {
      Print("Stoploss inactive");
      // Do Something...
     }
  }
//+------------------------------------------------------------------+
//| Create Bitmap Label object                                       |
//+------------------------------------------------------------------+
bool BitmapLabelCreate(const long              chart_ID=0,               // chart's ID
                       const string            name="BmpLabel",          // label name
                       const int               sub_window=0,             // subwindow index
                       const int               x=0,                      // X coordinate
                       const int               y=0,                      // Y coordinate
                       const string            file_on="",               // image in On mode
                       const string            file_off="",              // image in Off mode
                       const int               width=0,                  // visibility scope X coordinate
                       const int               height=0,                 // visibility scope Y coordinate
                       const int               x_offset=10,              // visibility scope shift by X axis
                       const int               y_offset=10,              // visibility scope shift by Y axis
                       const bool              state=false,              // pressed/released
                       const ENUM_BASE_CORNER  corner=CORNER_LEFT_UPPER, // chart corner for anchoring
                       const ENUM_ANCHOR_POINT anchor=ANCHOR_LEFT_UPPER, // anchor type
                       const color             clr=clrRed,               // border color when highlighted
                       const ENUM_LINE_STYLE   style=STYLE_SOLID,        // line style when highlighted
                       const int               point_width=1,            // move point size
                       const bool              back=false,               // in the background
                       const bool              selection=false,          // highlight to move
                       const bool              hidden=true,              // hidden in the object list
                       const long              z_order=0)                // priority for mouse click
  {
//--- reset the error value
   ResetLastError();
//--- create a bitmap label
   if(!ObjectCreate(chart_ID,name,OBJ_BITMAP_LABEL,sub_window,0,0))
     {
      Print(__FUNCTION__,
            ": failed to create \"Bitmap Label\" object! Error code = ",GetLastError());
      return(false);
     }
//--- set the images for On and Off modes
   if(!ObjectSetString(chart_ID,name,OBJPROP_BMPFILE,0,file_on))
     {
      Print(__FUNCTION__,
            ": failed to load the image for On mode! Error code = ",GetLastError());
      return(false);
     }
   if(!ObjectSetString(chart_ID,name,OBJPROP_BMPFILE,1,file_off))
     {
      Print(__FUNCTION__,
            ": failed to load the image for Off mode! Error code = ",GetLastError());
      return(false);
     }

   ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);         //--- set label coordinates
   ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
   ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);         //--- set visibility scope for the image; if width or height values
   ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
   ObjectSetInteger(chart_ID,name,OBJPROP_XOFFSET,x_offset);    //--- set the part of an image that is to be displayed in the visibility scope
   ObjectSetInteger(chart_ID,name,OBJPROP_YOFFSET,y_offset);
   ObjectSetInteger(chart_ID,name,OBJPROP_STATE,state);         //--- define the label's status (pressed or released)
   ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);       //--- set the chart's corner, relative to which point coordinates are defined
   ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);       //--- set anchor type
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);           //--- set the border color when object highlighting mode is enabled
   ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);         //--- set the border line style when object highlighting mode is enabled
   ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,point_width);   //--- set a size of the anchor point for moving an object
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);           //--- display in the foreground (false) or background (true)
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);//--- enable (true) or disable (false) the mode of moving the label by mouse
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);       //--- hide (true) or display (false) graphical object name in the object list
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);      //--- set the priority for receiving the event of a mouse click in the chart
   return(true);                                                //--- successful execution
  }
//+------------------------------------------------------------------+
 
//+------------------------------------------------------------------+
//|                                                     Stoploss.mq4 |
//|      Copyright 2016, Marco vd Heijden, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Marco vd Heijden, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

bool use_stoploss; // stoploss flag
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create object
   BitmapLabelCreate(
                     0,                     // chart's ID
                     "BmpLabel",            // label name
                     0,                     // subwindow index
                     20,                    // X coordinate
                     20,                    // Y coordinate
                     "\\Images\\on.bmp",    // image in On mode
                     "\\Images\\off.bmp",   // image in Off mode
                     0,                     // visibility scope X coordinate
                     0,                     // visibility scope Y coordinate
                     0,                     // visibility scope shift by X axis
                     0,                     // visibility scope shift by Y axis
                     0,                     // pressed/released
                     CORNER_LEFT_UPPER,     // chart corner for anchoring
                     ANCHOR_LEFT_UPPER,     // anchor type
                     clrRed,                // border color when highlighted
                     STYLE_SOLID,           // line style when highlighted
                     1,                     // move point size
                     false,                 // in the background
                     false,                 // highlight to move
                     true,                  // hidden in the object list
                     0);                    // priority for mouse click

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- check stoploss
   CheckStoplossState();
  
   if(use_stoploss==0)
    {
     // Do something...
    }
  
   if(use_stoploss==1)
    {
     // Do Something else...
    }
  }
//+------------------------------------------------------------------+
//| Check Stoploss state                                             |
//+------------------------------------------------------------------+
void CheckStoplossState()
  {
   if(ObjectGetInteger(0,"BmpLabel",OBJPROP_STATE)==true)
     {
      if(use_stoploss==0)
        {
         Alert("Stoploss active");
         use_stoploss=1;
        }
     }
   if(ObjectGetInteger(0,"BmpLabel",OBJPROP_STATE)==false)
     {
      if(use_stoploss==1)
        {
         Alert("Stoploss inactive");
         use_stoploss=0;
        }
     }
  }
//+------------------------------------------------------------------+
//| Create Bitmap Label object                                       |
//+------------------------------------------------------------------+
bool BitmapLabelCreate(const long              chart_ID=0,               // chart's ID
                       const string            name="BmpLabel",          // label name
                       const int               sub_window=0,             // subwindow index
                       const int               x=0,                      // X coordinate
                       const int               y=0,                      // Y coordinate
                       const string            file_on="",               // image in On mode
                       const string            file_off="",              // image in Off mode
                       const int               width=0,                  // visibility scope X coordinate
                       const int               height=0,                 // visibility scope Y coordinate
                       const int               x_offset=10,              // visibility scope shift by X axis
                       const int               y_offset=10,              // visibility scope shift by Y axis
                       const bool              state=false,              // pressed/released
                       const ENUM_BASE_CORNER  corner=CORNER_LEFT_UPPER, // chart corner for anchoring
                       const ENUM_ANCHOR_POINT anchor=ANCHOR_LEFT_UPPER, // anchor type
                       const color             clr=clrRed,               // border color when highlighted
                       const ENUM_LINE_STYLE   style=STYLE_SOLID,        // line style when highlighted
                       const int               point_width=1,            // move point size
                       const bool              back=false,               // in the background
                       const bool              selection=false,          // highlight to move
                       const bool              hidden=true,              // hidden in the object list
                       const long              z_order=0)                // priority for mouse click
  {
//--- reset the error value
   ResetLastError();
//--- create a bitmap label
   if(!ObjectCreate(chart_ID,name,OBJ_BITMAP_LABEL,sub_window,0,0))
     {
      Print(__FUNCTION__,
            ": failed to create \"Bitmap Label\" object! Error code = ",GetLastError());
      return(false);
     }
//--- set the images for On and Off modes
   if(!ObjectSetString(chart_ID,name,OBJPROP_BMPFILE,0,file_on))
     {
      Print(__FUNCTION__,
            ": failed to load the image for On mode! Error code = ",GetLastError());
      return(false);
     }
   if(!ObjectSetString(chart_ID,name,OBJPROP_BMPFILE,1,file_off))
     {
      Print(__FUNCTION__,
            ": failed to load the image for Off mode! Error code = ",GetLastError());
      return(false);
     }

   ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);         //--- set label coordinates
   ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
   ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);         //--- set visibility scope for the image; if width or height values
   ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
   ObjectSetInteger(chart_ID,name,OBJPROP_XOFFSET,x_offset);    //--- set the part of an image that is to be displayed in the visibility scope
   ObjectSetInteger(chart_ID,name,OBJPROP_YOFFSET,y_offset);
   ObjectSetInteger(chart_ID,name,OBJPROP_STATE,state);         //--- define the label's status (pressed or released)
   ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);       //--- set the chart's corner, relative to which point coordinates are defined
   ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);       //--- set anchor type
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);           //--- set the border color when object highlighting mode is enabled
   ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);         //--- set the border line style when object highlighting mode is enabled
   ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,point_width);   //--- set a size of the anchor point for moving an object
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);           //--- display in the foreground (false) or background (true)
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);//--- enable (true) or disable (false) the mode of moving the label by mouse
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);       //--- hide (true) or display (false) graphical object name in the object list
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);      //--- set the priority for receiving the event of a mouse click in the chart
   return(true);                                                //--- successful execution
  }
//+------------------------------------------------------------------+

Or you can put it in a function by itself.

I put it in OnTick() function but you might want to run it in the timer function eventually because now it has to receive a tick in order to change state and if you place the order before a new tick arrives it will still have the old state which can be undesirable but then again the timer does not work in the tester so this is better for testing purposes but eventually switching states in the timer function will be a lot faster and will also work when market's closed and there are no incoming ticks just remember that because you don't want to end up asking yourself why it isn't working to discover it's only because there are no incoming ticks.

 
Marco vd Heijden:
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- check stoploss
   CheckStoplossState();
  
   if(use_stoploss==0)
    {
     // Do something...
    }
  
   if(use_stoploss==1)
    {
     // Do Something else...
    }
  }
//+------------------------------------------------------------------+
//| Check Stoploss state                                             |
//+------------------------------------------------------------------+
void CheckStoplossState()
  {
   if(ObjectGetInteger(0,"BmpLabel",OBJPROP_STATE)==true)
     {
      if(use_stoploss==0)
        {
         Alert("Stoploss active");
         use_stoploss=1;
        }
     }
   if(ObjectGetInteger(0,"BmpLabel",OBJPROP_STATE)==false)
     {
      if(use_stoploss==1)
        {
         Alert("Stoploss inactive");
         use_stoploss=0;
        }
     }
  }

Or you can put it in a function by itself.

I put it in OnTick() function but you might want to run it in the timer function eventually because now it has to receive a tick in order to change state and if you place the order before a new tick arrives it will still have the old state which can be undesirable but then again the timer does not work in the tester so this is better for testing purposes but eventually switching states in the timer function will be a lot faster and will also work when market's closed and there are no incoming ticks just remember that because you don't want to end up asking yourself why it isn't working to discover it's only because there are no incoming ticks.

Man, I do not try yet, I feel your 2 comments will finished my that part of my EA's code.
Huge thanks, you correctly understand me. 

 

One more thanks a lot man, I solve my issue with your great help.


Can I use OnChartEvent() instead of OnTick(), is it possible?
I already tried, I do not see any problem yet, but you used OnTick() function, just I want to be sure about.

@Marco just I want to ask is there any wrong about image places, because when Off ( / False / 1 ) Stop Loss active, and when On ( / True / 0 ) Stop Loss inactive. ( Just I would not like to change anything, this bitmap very dangerous for me, no kidding - I see it still takes long time from me )
Also I need to ask before I start to try, is there any specific things to use about Global Variables for Bitmap Label Object? ( my ask reason I just see Bitmap Label Object needs something quite different then others... and so on )

Thanks in advance.

 

No you can just follow the documentation.

And yes it is possible to use it in the OnChartEvent() but remember that you can not include for example trailingstop code because it will only run one time when you click it.

For the bitmap issue go to the folder and rename on to onOLD, then rename off to on, and then rename onOLD to off this should solve your problem by just renaming both files.

Or you can use these buttons below.

I can also resize them if you need something smaller.

Files:
onoff.zip  1 kb
 
Marco vd Heijden:

Renamed worked for me, but I feel I will check it once again, because in your code it works correctly.

Global Variables: I tried like below code for it but no results even I see it in the Global Variable Window.

//---Global Variables
use_stoploss_gv = _Symbol + "test BmpLabel GV";

if ( GlobalVariableCheck( use_stoploss_gv ) == true )
{
    use_stoploss = GlobalVariableGet( use_stoploss_gv );
}
else
{
    GlobalVariableSet( use_stoploss_gv, use_stoploss );
}

You made a lot for me, big thanks man.

 
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {

//---Global Variables
   string use_stoploss_gv=_Symbol+"test BmpLabel GV";

   if(GlobalVariableCheck(use_stoploss_gv)==true)
     {
      use_stoploss=GlobalVariableGet(use_stoploss_gv);
      Print(use_stoploss_gv," Exists");
     }
   else
     {
      GlobalVariableSet(use_stoploss_gv,use_stoploss);
      Print(use_stoploss_gv," Created");
     }

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+


Seems to be working.

 

Marco vd Heijden: 

Seems to be working.

But it does not save last changes.
e.g: I add it to chart, then I switch it to turn 'On' and then switch to another timeframes, it return 'Off', it is not normal.

And I am using Global Variables for another functions 'Lot, Stop Loss, Take Profit' that works perfectly, but this Bitmap Label does not work.
Please, help me or give advice for how can I solve this Bitmap Label issue.

Thanks a lot man.

 

Below code works perfectly after you helped me, thanks man.

And I renamed as you said, it works good, but just I am wondering, am I doing something wrong?
( just I am Worry about )

// function order sell
void ordersell()
{
    CheckStopLossState();

    if ( use_stoploss == 0 )
    { sl = Bid + points_to_change( stoploss * 10 ); }

    if ( use_stoploss == 1 )
    { sl = 0; }

    OrderSend( ... sl, ... );
    return;
}

Thanks in advance.

 
It's simple if it works as designed your not doing anything wrong otherwise it simply doesn't work.
Reason: