Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4973
Beiträge: 43868
Benutzer: 7.221
Aktive Benutzer: 81
Links: 84
Wir begrüßen unseren neuesten Benutzer: Thomas75
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 5 Stunden
- Thomas75
vor 18 Stunden
- JosephTK
vor 2 Tagen
- Hopfen&Mal...
vor 3 Tagen
- frankmicha...
vor einer Woche
- DFeck

Onlineuser
'Wer ist online' anzeigen Benutzer: 0
Gäste: 784
Gesamt: 784
Team: 0
Team:  
Benutzer:  
Freunde anzeigen

Empfehlungen

Like Tree3Likes
Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #11 (permalink)  
Alt 19.08.14
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von gehtdoch Beitrag anzeigen
Hallo zusammen, habe von dem regen Austausch hier noch garnichts mitbekommen. Aber ich habe evtl. für alle Beteiligten etwas interessantes gefunden.

Gibt nur eigentlich nur zwei Möglichkeiten: 1.kennt keiner, 2.taugt nichts

Es geht um die Seite MT4GUI
Es lohnt sich bestimmt einmal aufmerksamer zu lesen. Ein Kommentar dazu würde mich freuen.

Da werden jede Menge Möglichkeiten mit Button gezeigt und erklärt.
Selbstverständlich habe ich auch nach Anleitung runtergeladen. Bekomme aber bisher kein Ding zum Laufen.

Vielleicht schaut ihr Fachleute dort mal nach und helft mir damit evtl. weiter.

Ich möchte einen Button mit "Start(grün) und Stop(rot)" (Farbwechsel) im Chart haben, mit dem ich einen EA steuern kann. Das hört sich so einfach an.
Warum möchte ich auch erklären: Z.B. einen EA in 2 Stück 1min-Charts nutzen. Erkennbare Umschaltgrenzen die flattern(long/short/long/short) könnten, durch zeitweises abschalten ruhigstellen. Jetzt kommt vielleicht die Frage: Wer will schon so traden? Einfache Antwort: Ich.

Was für mich erschwerend hinzu kommt. Ich habe zwei kleinere MT4-Livekonten und zwei MT4-Demokonten. Da ist die Zuordnung der Ordner unter Win7 schnell mal durcheinander (und funktioniert nicht)

Allen MT4lern einen schönen Abend.

PS: Der abgebildete Code sollte sicher nur ein Code-Beispiel sein, hat bei mir leider 3 Fehlermeldungen.
MT4GUI war früher eine nützliche Sache, als man noch nicht per MQL Button setzen und verwalten konnte, da mußte man auf die WinAPI zurückgreifen. Das hat sich mittlerweile überholt.
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);
}
Viele Spaß!

traderdoc

PS. Die Fehlermeldung im 1. Code kam aus clrGra y, welches aus irgendwelchen Gründen ein Freizeichnen bekommen hatte, wo keines hingehört.
phidi likes this.
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #12 (permalink)  
Alt 20.08.14
Neues Mitglied
 
Registriert seit: Feb 2013
Beiträge: 15
gehtdoch befindet sich auf einem aufstrebenden Ast
Smile 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);
}
  #13 (permalink)  
Alt 20.08.14
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

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);
}
Viel Spaß

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #14 (permalink)  
Alt 20.08.14
Neues Mitglied
 
Registriert seit: Feb 2013
Beiträge: 15
gehtdoch befindet sich auf einem aufstrebenden Ast
Standard

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?
  #15 (permalink)  
Alt 20.08.14
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

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);
}
Viel Spaß

traderdoc
shurka likes this.
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #16 (permalink)  
Alt 20.08.14
Neues Mitglied
 
Registriert seit: Feb 2013
Beiträge: 15
gehtdoch befindet sich auf einem aufstrebenden Ast
Red face 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?
  #17 (permalink)  
Alt 20.08.14
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

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.
  #18 (permalink)  
Alt 21.08.14
Neues Mitglied
 
Registriert seit: Feb 2013
Beiträge: 15
gehtdoch befindet sich auf einem aufstrebenden Ast
Thumbs up Problem gelöst, Ziel erreicht

Hallo,

hiermit möchte ich mich nochmals für die Hilfe bedanken.
  #19 (permalink)  
Alt 19.05.15
Mitglied
 
Registriert seit: Feb 2015
Beiträge: 31
nobtrade befindet sich auf einem aufstrebenden Ast
Standard

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.
Thema geschlossen

Lesezeichen

Stichworte
ea, ea aktivieren, ea auschalten, ea einschalten, expert advisor, expert advisor ausschalten, expert advisor einschalten, start stop ea, styrt stop expert advisor

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +1. Es ist jetzt 16:56 Uhr.





Suchmaschine - Reisen - Wavesnode - Facebook Forum - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------