
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
//| 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
}
//+------------------------------------------------------------------+
Oppure puoi metterlo in una funzione da solo.
Io l'ho messo nella funzione OnTick() ma potresti volerlo eseguire nella funzione timer alla fine perché ora deve ricevere un tick per cambiare stato e se piazzi l'ordine prima che arrivi un nuovo tick avrà ancora il vecchio stato il che può essere indesiderabile ma poi di nuovo il timer non funziona nel tester quindi questo è meglio per scopi di test ma alla fine cambiare stato nella funzione timer sarà molto più veloce e funzionerà anche quando il mercato è chiuso e non ci sono tick in arrivo, ricordatelo perché non volete finire per chiedervi perché non funziona e scoprire che è solo perché non ci sono tick in arrivo.
//| 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;
}
}
}
Oppure puoi metterlo in una funzione da solo.
Io l'ho messo nella funzione OnTick() ma potresti volerlo eseguire nella funzione timer alla fine perché ora deve ricevere un tick per cambiare stato e se piazzi l'ordine prima che arrivi un nuovo tick avrà ancora il vecchio stato il che può essere indesiderabile ma poi di nuovo il timer non funziona nel tester quindi questo è meglio per scopi di test ma alla fine cambiare stato nella funzione timer sarà molto più veloce e funzionerà anche quando il mercato è chiuso e non ci sono tick in arrivo, ricordatelo perché non volete finire per chiedervi perché non funziona e scoprire che è solo perché non ci sono tick in arrivo.
Amico, non provo ancora, sento che i tuoi 2 commenti finiranno la mia parte del codice del mio EA.
Grazie mille, mi hai capito bene.
Ancora una volta grazie mille amico, ho risolto il mio problema con il tuo grande aiuto.
Posso usare OnChartEvent() invece di OnTick(), è possibile?
Ho già provato, non vedo ancora alcun problema, ma hai usato la funzione OnTick() , voglio solo essere sicuro.
@Marco voglio solo chiedere se c'è qualcosa di sbagliato sui posti immagine, perché quando Off ( / False / 1 ) Stop Loss attivo, e quando On ( / True / 0 ) Stop Loss inattivo. ( Proprio non vorrei cambiare nulla, questa bitmap molto pericolosa per me, non scherzo - vedo che ci vuole ancora molto tempo da me )
Inoltre ho bisogno di chiedere prima di iniziare a provare, c'è qualche cosa di specifico da usare sulle variabili globali per l'oggetto Bitmap Label? (il motivo della mia domanda è che vedo che l'oggetto Bitmap Label ha bisogno di qualcosa di molto diverso dagli altri... e così via)
Grazie in anticipo.
No, puoi semplicemente seguire la documentazione.
E sì, è possibile usarlo nell'OnChartEvent() ma ricorda che non puoi includere per esempio il codice trailingstop perché verrà eseguito solo una volta quando lo clicchi.
Per il problema della bitmap vai nella cartella e rinomina on in onOLD, poi rinomina off in on, e poi rinomina onOLD in off questo dovrebbe risolvere il tuo problema semplicemente rinominando entrambi i file.
Oppure puoi usare questi pulsanti qui sotto.
Posso anche ridimensionarli se hai bisogno di qualcosa di più piccolo.
Rinominato ha funzionato per me, ma mi sento di controllarlo ancora una volta, perché nel tuo codice funziona correttamente.
Variabili globali: Ho provato come il codice qui sotto, ma nessun risultato anche se lo vedo nella finestra delle variabili globali.
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 );
}
Hai fatto molto per me, grazie mille amico.
//| 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);
}
//+------------------------------------------------------------------+
Sembra funzionare.
Marco vd Heijden:
Sembra funzionare.
Ma non salva le ultime modifiche.
Per esempio: la aggiungo al grafico, poi la accendo per attivarla e poi passo a un altro timeframe, ritorna "Off", non è normale.
E sto usando variabili globali per altre funzioni 'Lot, Stop Loss, Take Profit' che funzionano perfettamente, ma questa etichetta Bitmap non funziona.
Per favore, aiutatemi o date un consiglio su come posso risolvere questo problema dell'etichetta Bitmap.
Grazie mille amico.
Il codice qui sotto funziona perfettamente dopo che mi hai aiutato, grazie amico.
E ho rinominato come hai detto tu, funziona bene, ma mi sto solo chiedendo, sto facendo qualcosa di sbagliato?
(solo io sono preoccupato)
void ordersell()
{
CheckStopLossState();
if ( use_stoploss == 0 )
{ sl = Bid + points_to_change( stoploss * 10 ); }
if ( use_stoploss == 1 )
{ sl = 0; }
OrderSend( ... sl, ... );
return;
}
Grazie in anticipo.