assessor especializado - perguntas diversas - página 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
  }
//+------------------------------------------------------------------+

Ou você pode colocá-lo em uma função por si só.

Eu o coloco na função OnTick() mas você pode querer executá-lo na função timer eventualmente porque agora ele tem que receber um tick para mudar de estado e se você colocar o pedido antes que um novo tick chegue ele ainda terá o estado antigo que pode ser indesejável mas então novamente o timer não funciona no testador então isto é melhor para fins de teste, mas eventualmente a troca de estados na função timer será muito mais rápida e também funcionará quando o mercado estiver fechado e não houver ticks de entrada, basta lembrar disso porque você não quer acabar se perguntando por que não está funcionando para descobrir que é apenas porque não há ticks de entrada.

 
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;
        }
     }
  }

Ou você pode colocá-lo em uma função por si só.

Eu o coloco na função OnTick() mas você pode querer executá-lo na função timer eventualmente porque agora ele tem que receber um tick para mudar de estado e se você colocar o pedido antes que um novo tick chegue ele ainda terá o estado antigo que pode ser indesejável mas então novamente o timer não funciona no testador então isto é melhor para fins de teste, mas eventualmente a troca de estados na função timer será muito mais rápida e também funcionará quando o mercado estiver fechado e não houver ticks de entrada, basta lembrar disso porque você não quer acabar se perguntando por que não está funcionando para descobrir que é apenas porque não há ticks de entrada.

Cara, ainda não tentei, sinto que seus dois comentários terminarão minha parte do código da minha EA.
Muito obrigado, você me entendeu corretamente.

 

Mais um muito obrigado homem, eu resolvo meu problema com sua grande ajuda.


Posso usar OnChartEvent() ao invés de OnTick(), é possível?
Eu já tentei, não vejo nenhum problema ainda, mas você usou a função OnTick() , só quero ter certeza disso.

@Marco só quero perguntar se há algum erro sobre os lugares de imagem, porque quando desligado ( / Falso / 1 ) Stop Loss ativo, e quando ligado ( / Verdadeiro / 0 ) Stop Loss inativo. ( Só que eu não gostaria de mudar nada, este bitmap é muito perigoso para mim, não brinca - vejo que ainda leva muito tempo de minha parte )
Também preciso perguntar antes de começar a tentar, há alguma coisa específica a ser usada sobre Variáveis Globais para Objeto de Rótulo Bitmap? ( minha pergunta é porque eu só vejo que o objeto Bitmap Label precisa de algo bem diferente dos outros... e assim por diante )

Obrigado de antemão.

 

Não, você pode simplesmente seguir a documentação.

E sim é possível utilizá-la no OnChartEvent() mas lembre-se que você não pode incluir, por exemplo, o código do trailingstop porque ele só funcionará uma vez quando você clicar nele.

Para a questão do bitmap vá para a pasta e renomeie on para onOLD, depois renomeie off para on, e depois renomeie onOLD para off isto deve resolver seu problema apenas renomeando ambos os arquivos.

Ou você pode usar estes botões abaixo.

Também posso redimensioná-los se você precisar de algo menor.

Arquivos anexados:
onoff.zip  1 kb
 
Marco vd Heijden:

Renomeado funcionou para mim, mas sinto que vou verificar mais uma vez, porque em seu código funciona corretamente.

Variáveis Globais: Eu tentei como o código abaixo para ele, mas nenhum resultado mesmo eu o vejo na Janela de Variáveis Globais.

//---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 );
}

Você fez muito por mim, muito obrigado.

 
//+------------------------------------------------------------------+
//| 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);
  }
//+------------------------------------------------------------------+


Parece que está funcionando.

 

Marco vd Heijden: 

Parece que está funcionando.

Mas não poupa as últimas mudanças.
Por exemplo: eu o adiciono ao gráfico, depois o mudo para 'ligar' e depois mudo para outro intervalo de tempo, ele retorna 'desligado', não é normal.

E estou usando Variáveis Globais para outras funções 'Lot, Stop Loss, Take Profit' que funcionam perfeitamente, mas este Bitmap Label não funciona.
Por favor, ajude-me ou dê conselhos sobre como posso resolver esta questão do Rótulo Bitmap.

Muito obrigado, cara.

 

O código abaixo funciona perfeitamente depois que você me ajudou, obrigado homem.

E eu renomeei como você disse, funciona bem, mas só estou me perguntando, estou fazendo algo errado?
( só estou me preocupando)

// 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;
}

Obrigado de antemão.

 
É simples se funcionar como projetado, você não faz nada de errado, caso contrário, simplesmente não funciona.