Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
//| 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
}
//+------------------------------------------------------------------+
Oder Sie können sie in eine eigene Funktion einfügen.
Ich habe sie in die OnTick() Funktion eingefügt, aber vielleicht möchten Sie sie in der Timer-Funktion ausführen, weil sie jetzt einen Tick empfangen muss, um den Status zu ändern, und wenn Sie die Bestellung aufgeben, bevor ein neuer Tick eintrifft, wird sie immer noch den alten Status haben, was unerwünscht sein kann, aber dann wiederum funktioniert der Timer nicht im Tester, so dass dies ist besser für Testzwecke, aber letztendlich wird das Umschalten des Zustands in der Timer-Funktion viel schneller sein und auch funktionieren, wenn der Markt geschlossen ist und keine Ticks eintreffen, denken Sie daran, denn Sie wollen sich nicht am Ende fragen, warum es nicht funktioniert, um zu entdecken, dass es nur daran liegt, dass keine Ticks eintreffen.
//| 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;
}
}
}
Oder Sie können sie in eine eigene Funktion einfügen.
Ich habe es in die OnTick() Funktion eingefügt, aber vielleicht möchten Sie es in der Timer-Funktion ausführen, weil es jetzt einen Tick empfangen muss, um den Status zu ändern, und wenn Sie die Bestellung aufgeben, bevor ein neuer Tick eintrifft, wird es immer noch den alten Status haben, was unerwünscht sein kann, aber dann wiederum funktioniert der Timer nicht im Tester, so dass dies ist besser für Testzwecke, aber letztendlich wird das Umschalten des Zustands in der Timer-Funktion viel schneller sein und auch funktionieren, wenn der Markt geschlossen ist und keine Ticks eintreffen, denken Sie daran, denn Sie wollen sich nicht am Ende fragen, warum es nicht funktioniert, um zu entdecken, dass es nur daran liegt, dass keine Ticks eintreffen.
Mann, ich nicht versuchen, noch, ich fühle mich Ihre 2 Kommentare werden meine fertig, dass ein Teil meiner EA-Code.
Riesigen Dank, Sie richtig verstehen mich.
Nochmals vielen Dank, ich habe mein Problem mit Ihrer großen Hilfe gelöst.
Kann ich OnChartEvent() anstelle von OnTick() verwenden, ist das möglich?
Ich habe es bereits versucht, ich sehe noch kein Problem, aber Sie haben die Funktion OnTick() verwendet, ich möchte nur sicher sein.
@Marco ich möchte nur fragen, gibt es etwas falsch über Bild Orte, denn wenn Off ( / False / 1 ) Stop Loss aktiv, und wenn On ( / True / 0 ) Stop Loss inaktiv. ( Nur ich möchte nichts ändern, diese Bitmap sehr gefährlich für mich, kein Scherz - ich sehe, es dauert immer noch lange Zeit von mir )
Auch muss ich fragen, bevor ich anfangen zu versuchen, gibt es irgendwelche spezifischen Dinge über globale Variablen für Bitmap Label Objekt zu verwenden ? (meine Frage Grund sehe ich nur Bitmap Label Objekt braucht etwas ganz anders als andere... und so weiter)
Vielen Dank im Voraus.
Nein, Sie können einfach der Dokumentation folgen.
Und ja, es ist möglich, es in der OnChartEvent() zu verwenden, aber denken Sie daran, dass Sie nicht enthalten können, zum Beispiel trailingstop Code, weil es nur einmal ausgeführt wird, wenn Sie darauf klicken.
Für das Bitmap-Problem gehen Sie in den Ordner und benennen Sie on in onOLD um, dann benennen Sie off in on um, und dann benennen Sie onOLD in off, das sollte Ihr Problem lösen, indem Sie einfach beide Dateien umbenennen.
Oder Sie können diese Schaltflächen unten verwenden.
Ich kann auch die Größe ändern, wenn Sie etwas Kleineres brauchen.
Umbenannt funktionierte für mich, aber ich glaube, ich werde es noch einmal überprüfen, weil in Ihrem Code es richtig funktioniert.
Globale Variablen: Ich habe es mit dem unten stehenden Code versucht, aber ich habe kein Ergebnis, auch wenn ich es im Fenster "Globale Variablen" sehe.
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 );
}
Sie haben viel für mich getan, vielen Dank, Mann.
//| 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);
}
//+------------------------------------------------------------------+
Es scheint zu funktionieren.
Marco vd Heijden:
Scheint zu funktionieren.
Aber es speichert die letzten Änderungen nicht.
Z.B.: Ich füge es zu einem Chart hinzu, dann schalte ich es ein und dann wechsle ich zu einem anderen Zeitrahmen, dann ist es wieder aus, das ist nicht normal.
Und ich verwende globale Variablen für andere Funktionen wie Lot, Stop Loss, Take Profit, die perfekt funktionieren, aber dieses Bitmap Label funktioniert nicht.
Bitte helfen Sie mir oder geben Sie mir einen Rat, wie ich dieses Problem mit dem Bitmap-Label lösen kann.
Vielen Dank, Mann.
Unten Code funktioniert perfekt, nachdem Sie mir geholfen, danke Mann.
Und ich umbenannt, wie Sie sagten, es funktioniert gut, aber nur ich frage mich, bin ich etwas falsch machen?
(Ich bin nur besorgt über)
void ordersell()
{
CheckStopLossState();
if ( use_stoploss == 0 )
{ sl = Bid + points_to_change( stoploss * 10 ); }
if ( use_stoploss == 1 )
{ sl = 0; }
OrderSend( ... sl, ... );
return;
}
Vielen Dank im Voraus.