Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
//| 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
}
//+------------------------------------------------------------------+
O puedes ponerlo en una función por sí misma.
Lo puse en la función OnTick() pero es posible que desee ejecutarlo en la función del temporizador eventualmente porque ahora tiene que recibir una garrapata con el fin de cambiar el estado y si usted pone la orden antes de que llegue una nueva garrapata todavía tendrá el estado anterior que puede ser indeseable, pero entonces el temporizador no funciona en el probador por lo que este es mejor para propósitos de prueba, pero eventualmente el cambio de estado en la función del temporizador será mucho más rápido y también funcionará cuando el mercado esté cerrado y no haya ticks entrantes, sólo recuerda esto porque no quieres terminar preguntándote por qué no está funcionando para descubrir que es sólo porque no hay ticks entrantes.
//| 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;
}
}
}
O puedes ponerlo en una función por sí misma.
Lo puse en la función OnTick() pero es posible que desee ejecutarlo en la función del temporizador eventualmente porque ahora tiene que recibir una garrapata con el fin de cambiar el estado y si usted pone la orden antes de que llegue una nueva garrapata todavía tendrá el estado anterior que puede ser indeseable, pero entonces el temporizador no funciona en el probador por lo que este es mejor para propósitos de prueba, pero eventualmente el cambio de estado en la función del temporizador será mucho más rápido y también funcionará cuando el mercado esté cerrado y no haya ticks entrantes, sólo recuerda esto porque no quieres terminar preguntándote por qué no está funcionando para descubrir que es sólo porque no hay ticks entrantes.
Hombre, no lo pruebo todavía, siento que tus 2 comentarios terminarán mi esa parte del código de mi EA.
Enormes gracias, me has entendido correctamente.
Una vez más muchas gracias hombre, resuelvo mi problema con tu gran ayuda.
¿Puedo usar OnChartEvent() en lugar de OnTick(), es posible?
Ya lo he intentado, aún no veo ningún problema, pero has utilizado la función OnTick (), sólo quiero estar seguro de ello.
@Marco sólo quiero preguntar si hay algún problema con los lugares de la imagen, porque cuando Off ( / False / 1 ) Stop Loss activo, y cuando On ( / True / 0 ) Stop Loss inactivo. ( Sólo no me gustaría cambiar nada, este mapa de bits muy peligroso para mí, no es broma - Veo que todavía toma mucho tiempo de mí )
También tengo que preguntar antes de empezar a probar, ¿hay alguna cosa específica para usar sobre las variables globales para el objeto de etiqueta de mapa de bits ? ( mi pregunta es porque veo que el objeto de etiqueta de mapa de bits necesita algo muy diferente a los demás... y así sucesivamente )
Gracias de antemano.
No, puedes seguir la documentación.
Y sí es posible usarlo en el OnChartEvent() pero recuerda que no puedes incluir por ejemplo el código trailingstop porque sólo se ejecutará una vez al hacer clic.
Para el tema del mapa de bits ve a la carpeta y renombra on a onOLD, luego renombra off a on, y luego renombra onOLD a off esto debería resolver tu problema con solo renombrar ambos archivos.
O puedes usar estos botones de abajo.
También puedo cambiar su tamaño si necesitas algo más pequeño.
El cambio de nombre me ha funcionado, pero creo que voy a comprobarlo una vez más, porque en tu código funciona correctamente.
Variables Globales: Intenté como el código de abajo para ello pero no hay resultados incluso lo veo en la ventana de variables globales.
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 );
}
Me has ayudado mucho, muchas gracias.
//| 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 funciona.
Marco vd Heijden:
Parece que funciona.
Pero no guarda los últimos cambios.
Por ejemplo: lo agrego al gráfico, luego lo cambio para que se active y luego cambio a otro marco de tiempo, vuelve a estar desactivado, no es normal.
Y estoy usando Variables Globales para otras funciones 'Lote, Stop Loss, Take Profit' que funciona perfectamente, pero esta Etiqueta Bitmap no funciona.
Por favor, ayúdenme o denme un consejo sobre cómo puedo resolver este problema de la etiqueta de mapa de bits.
Muchas gracias.
El siguiente código funciona perfectamente después de que me ayudaste, gracias hombre.
Y he cambiado el nombre como usted dijo, funciona bien, pero sólo me pregunto, estoy haciendo algo mal?
( solo me preocupa)
void ordersell()
{
CheckStopLossState();
if ( use_stoploss == 0 )
{ sl = Bid + points_to_change( stoploss * 10 ); }
if ( use_stoploss == 1 )
{ sl = 0; }
OrderSend( ... sl, ... );
return;
}
Gracias de antemano.