|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
Zitat:
Ich hänge nochmal eine korrigierte Version an, sogar mit zwei Buttons.# Code:
string button1ID="Button1"; string button2ID="Button2"; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { CreateButton(button1ID, "Out1",100, 100); CreateButton(button2ID, "Out2",100, 400); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { ObjectDelete(0,button1ID); ObjectDelete(0,button2ID); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { } //+------------------------------------------------------------------+ //| ChartEvent function | //+------------------------------------------------------------------+ void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { //--- Check the event by pressing a mouse button if(id==CHARTEVENT_OBJECT_CLICK) { string clickedChartObject=sparam; if(clickedChartObject==button1ID) { bool selected=ObjectGetInteger(0,button1ID,OBJPROP_STATE); if(selected) { Alert("Button1 clicked"); ObjectSetInteger(0,button1ID,OBJPROP_STATE,0); } else { } } if(clickedChartObject==button2ID) { bool selected=ObjectGetInteger(0,button2ID,OBJPROP_STATE); if(selected) { Alert("Button2 clicked"); ObjectSetInteger(0,button2ID,OBJPROP_STATE,0); } else { } } ChartRedraw(); } } void CreateButton(string name, string text, int x, int y) { ObjectCreate(0,name,OBJ_BUTTON,0,100,100); ObjectSetInteger(0,name,OBJPROP_COLOR,clrWhite); ObjectSetInteger(0,name,OBJPROP_BGCOLOR,clrGray); ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x); ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y); ObjectSetInteger(0,name,OBJPROP_XSIZE,200); ObjectSetInteger(0,name,OBJPROP_YSIZE,50); ObjectSetString(0,name,OBJPROP_FONT,"Arial"); ObjectSetString(0,name,OBJPROP_TEXT,text); ObjectSetInteger(0,name,OBJPROP_FONTSIZE,10); ObjectSetInteger(0,name,OBJPROP_SELECTABLE,0); } traderdoc PS. Die Fehlermeldung im 1. Code kam aus clrGra y, welches aus irgendwelchen Gründen ein Freizeichnen bekommen hatte, wo keines hingehört.
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
schnell, schneller, und noch schneller...
Hallo Traderdoc,
zunächst vielen Dank für Deine Mühe. Super Vorlage. Jetzt habe ich noch ein wenig daran herumgeschraubt und es optisch so gemacht wie ich es mir vorstellte. Die Änderungen sind technisch bestimmt nicht einwandfrei (bin halt kein Programmierer), aber so würde es - lt. Alerte - funktionieren. Wenn, ja wenn ich irgendwo ein Beispiel gefunden hätte, mit welchen Befehlen ich einen EA ein- und ausschalten könnte. Dürfte ich dafür noch um eine Lösung oder einen Lösungsansatz bitten? Schon mal Dank im voraus. Code:
string button1ID="Button1"; string button2ID="Button2"; //???? #import "HD-Turbo.mq4"; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { CreateButton(button1ID, "Start",200, 16); // CreateButton(button2ID, "Stop",260, 16); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { ObjectDelete(0,button1ID); ObjectDelete(0,button2ID); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { } //+------------------------------------------------------------------+ //| ChartEvent function | //+------------------------------------------------------------------+ void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { //--- Check the event by pressing a mouse button if(id==CHARTEVENT_OBJECT_CLICK) { string clickedChartObject=sparam; if(clickedChartObject==button1ID) { bool selected=ObjectGetInteger(0,button1ID,OBJPROP_STATE); if(selected) { Alert("Button1 clicked"); //??? Start von EA= Experts/HD-Turbo.mq4 ObjectSetInteger(0,button1ID,OBJPROP_STATE,0); ObjectDelete(0,button1ID); CreateButton(button2ID, "Stop",200, 16); } else { } } if(clickedChartObject==button2ID) { bool selected2=ObjectGetInteger(0,button2ID,OBJPROP_STATE); if(selected2) { Alert("Button2 clicked"); //??? Stop von EA= Experts/HD-Turbo.mq4 ObjectSetInteger(0,button2ID,OBJPROP_STATE,0); ObjectDelete(0,button2ID); CreateButton(button1ID, "Start",200, 16); } else { } } ChartRedraw(); } } void CreateButton(string name, string text, int x, int y) { ObjectCreate(0,name,OBJ_BUTTON,0,100,100); ObjectSetInteger(0,name,OBJPROP_COLOR,clrWhite); ObjectSetInteger(0,button1ID,OBJPROP_BGCOLOR,clrGreen); ObjectSetInteger(0,button2ID,OBJPROP_BGCOLOR,clrRed); ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x); ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y); ObjectSetInteger(0,name,OBJPROP_XSIZE,50);//200); ObjectSetInteger(0,name,OBJPROP_YSIZE,25);//50); ObjectSetString(0,name,OBJPROP_FONT,"Arial"); ObjectSetString(0,name,OBJPROP_TEXT,text); ObjectSetInteger(0,name,OBJPROP_FONTSIZE,10); ObjectSetInteger(0,name,OBJPROP_SELECTABLE,0); } |
|
|||
Damit solltest Du über nur einen Button wechselseitig Starten und Stoppen können.
Code:
string button1ID="Button1"; //???? #import "HD-Turbo.mq4"; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { CreateButton(button1ID, "Start",200, 16); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { ObjectDelete(0,button1ID); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { } //+------------------------------------------------------------------+ //| ChartEvent function | //+------------------------------------------------------------------+ void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { //--- Check the event by pressing a mouse button if(id==CHARTEVENT_OBJECT_CLICK) { string clickedChartObject=sparam; if(clickedChartObject==button1ID) { bool selected=ObjectGetInteger(0,button1ID,OBJPROP_STATE); if(selected) { if (ObjectGetString(0,button1ID,OBJPROP_TEXT) == "Start") { Alert("Button1 Start"); //??? Start von EA= Experts/HD-Turbo.mq4 ObjectSetString(0,button1ID,OBJPROP_TEXT,"Stop"); ObjectSetInteger(0,button1ID,OBJPROP_STATE,0); } else { Alert("Button1 Stop"); //??? Stop von EA= Experts/HD-Turbo.mq4 ObjectSetString(0,button1ID,OBJPROP_TEXT,"Start"); ObjectSetInteger(0,button1ID,OBJPROP_STATE,0); } } } ChartRedraw(); } } void CreateButton(string name, string text, int x, int y) { ObjectCreate(0,name,OBJ_BUTTON,0,100,100); ObjectSetInteger(0,name,OBJPROP_COLOR,clrWhite); ObjectSetInteger(0,button1ID,OBJPROP_BGCOLOR,clrGreen); ObjectSetInteger(0,button2ID,OBJPROP_BGCOLOR,clrRed); ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x); ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y); ObjectSetInteger(0,name,OBJPROP_XSIZE,50);//200); ObjectSetInteger(0,name,OBJPROP_YSIZE,25);//50); ObjectSetString(0,name,OBJPROP_FONT,"Arial"); ObjectSetString(0,name,OBJPROP_TEXT,text); ObjectSetInteger(0,name,OBJPROP_FONTSIZE,10); ObjectSetInteger(0,name,OBJPROP_SELECTABLE,0); } traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Das war ja wieder sehr schnell umgesetzt.
Mein Ehrgeiz ist ja nun angestachelt und ich habe schon den ganzen morgen ein Beispiel zum starten und stoppen eines Programmes (EA) gesucht, aber leider nichts gefunden. OpenFile, CloseFile etc. scheinen dafür irgendwie nicht geeignet. Der Compiler hat immer was zu meckern. Ich verstehe nicht was der von mir will. Gibst Du mir bitte einen Tip? |
|
|||
So geht das!
Code:
string button1ID="Button1"; bool EAWorking = false; //???? #import "HD-Turbo.mq4"; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { CreateButton(button1ID, "Start",200, 16); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { ObjectDelete(0,button1ID); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { if (!EAWorking) return; //hier soll er arbeiten } //+------------------------------------------------------------------+ //| ChartEvent function | //+------------------------------------------------------------------+ void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { //--- Check the event by pressing a mouse button if(id==CHARTEVENT_OBJECT_CLICK) { string clickedChartObject=sparam; if(clickedChartObject==button1ID) { bool selected=ObjectGetInteger(0,button1ID,OBJPROP_STATE); if(selected) { if (ObjectGetString(0,button1ID,OBJPROP_TEXT) == "Start") { EAWorking = true; //??? Start von EA= Experts/HD-Turbo.mq4 ObjectSetString(0,button1ID,OBJPROP_TEXT,"Stop"); ObjectSetInteger(0,button1ID,OBJPROP_STATE,0); } else { EAWorking = false; //??? Stop von EA= Experts/HD-Turbo.mq4 ObjectSetString(0,button1ID,OBJPROP_TEXT,"Start"); ObjectSetInteger(0,button1ID,OBJPROP_STATE,0); } } } ChartRedraw(); } } void CreateButton(string name, string text, int x, int y) { ObjectCreate(0,name,OBJ_BUTTON,0,100,100); ObjectSetInteger(0,name,OBJPROP_COLOR,clrWhite); ObjectSetInteger(0,button1ID,OBJPROP_BGCOLOR,clrGreen); ObjectSetInteger(0,button2ID,OBJPROP_BGCOLOR,clrRed); ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x); ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y); ObjectSetInteger(0,name,OBJPROP_XSIZE,50);//200); ObjectSetInteger(0,name,OBJPROP_YSIZE,25);//50); ObjectSetString(0,name,OBJPROP_FONT,"Arial"); ObjectSetString(0,name,OBJPROP_TEXT,text); ObjectSetInteger(0,name,OBJPROP_FONTSIZE,10); ObjectSetInteger(0,name,OBJPROP_SELECTABLE,0); } traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Ist mir das jetzt aber peinlich....
Hallo,
void OnTick() { if (!EAWorking) return; //hier soll er arbeiten WER soll hier nun arbeiten. Muß ich den EA nicht irgendwo angeben? Das sind doch beides Experten, dieses Button-Programm und mein EA. Aber es kann doch nur 1 EA installiert werden. Wie wird das denn nun gelöst? |
|
|||
Der gesamte Code wird einfach in Deinen EA integriert.
Das EAWorking = false nach Drücken des Button mit dem Label Stop wird in der Funktion OnTick() verhindern, dass der EA arbeitet. traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Problem gelöst, Ziel erreicht
Hallo,
hiermit möchte ich mich nochmals für die Hilfe bedanken. |
|
|||
Hallo Traderdoc,
kann man ein Script schreiben, aus dem man einen offenen EA ausschaften kann? Ich möchte gerne über einen Hotkey einen EA ausschalten können. Es können auch alle offenen EAs geschlossen werden. Die offenen Indikatoren sollten aber bestehen bleiben. |
Lesezeichen |
Stichworte |
ea, ea aktivieren, ea auschalten, ea einschalten, expert advisor, expert advisor ausschalten, expert advisor einschalten, start stop ea, styrt stop expert advisor |
|
|