Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   EA im Chart ein/ausschalten (http://www.expert-advisor.com/forum/showthread.php?t=3809)

gehtdoch 16.08.14 15:37

EA im Chart ein/ausschalten
 
Hallo,
gibt es vielleicht bereits eine Lösung für folgendes "Problem"?

Ich würde gern einen laufenden EA mit einem Klick (im Chart) stoppen und mit einem weiteren Klick wieder in starten.

Dank im voraus.

traderdoc 16.08.14 16:42

Einfach mal auf den Button "AutoTrading" auf Rot klicken.

traderdoc

gehtdoch 17.08.14 13:13

EA im Chart ein/ausschalten
 
Hallo Traderdoc,

das kenne ich bereits:
-MT4/ obere Leiste "AutoTrading" schaltet generell alle EA´s ein oder aus

-MT4/ F7 oder rechte Maustaste im Chart "Expert Advisors->Eigenschaften->bis zu Live Trading zulassen".
Dort kann ich für jeden Chart einen EA ein/ausschalten. (Nachteil: mehrere Klicks / ich sehe nicht ob der EA nun ein- oder ausgeschaltet ist.)

Sowas kenn ich noch nicht:
Ich dachte an etwas noch einfacheres, ein "Start/Stop-Knopf" zum Klicken, in jedem Chart.

traderdoc 17.08.14 13:46

Nun, dann muß der Programmierer ran. Inzwischen ist es zwar relativ einfach geworden, Buttons zu programmieren, aber immer noch nicht möglich für Jedermann.

traderdoc

FXClicks 17.08.14 14:39

Wozu ein Programmierer Traderdoc?? :D

Man speichert es als Template ab und schmeißt den EA erstmal raus.
Später Template wieder laden.
Einfacher gehts nun wirklich nicht.

traderdoc 17.08.14 15:27

Zitat:

Zitat von FXClicks (Beitrag 27193)
Wozu ein Programmierer Traderdoc?? :D

Man speichert es als Template ab und schmeißt den EA erstmal raus.
Später Template wieder laden.
Einfacher gehts nun wirklich nicht.

Hast Du noch eine unelegantere Methode auf Lager? Dann kann er auch mit F7 die EA-Eigenschaften aufrufen und OK klicken.

Ne! Er wollte einen Button auf dem Chart haben und kein raus und wieder rein!

traderdoc

FXClicks 17.08.14 20:45

raus und wieder rein

Also ich mag es.
Und so unelegant ist nun auch wieder nicht.

traderdoc 17.08.14 21:08

Über das wir hier reden schon!

traderdoc 17.08.14 21:42

So in etwa sieht das dann aus:

string buttonID="Button";

//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit() {

CreateButton();

return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason) {
ObjectDelete(0,buttonID);
}
//+------------------------------------------------------------------+
//| 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==buttonID)
{
bool selected=ObjectGetInteger(0,buttonID,OBJPROP_STATE );
if(selected)
{
Alert("Button clicked");
}
else
{

}
}
ObjectDelete(buttonID);
CreateButton();
ChartRedraw();
}
}
void CreateButton() {
ObjectCreate(0,buttonID,OBJ_BUTTON,0,100,100);
ObjectSetInteger(0,buttonID,OBJPROP_COLOR,clrWhite );
ObjectSetInteger(0,buttonID,OBJPROP_BGCOLOR,clrGra y);
ObjectSetInteger(0,buttonID,OBJPROP_XDISTANCE,100) ;
ObjectSetInteger(0,buttonID,OBJPROP_YDISTANCE,100) ;
ObjectSetInteger(0,buttonID,OBJPROP_XSIZE,200);
ObjectSetInteger(0,buttonID,OBJPROP_YSIZE,50);
ObjectSetString(0,buttonID,OBJPROP_FONT,"Arial");
ObjectSetString(0,buttonID,OBJPROP_TEXT,"Out1");
ObjectSetInteger(0,buttonID,OBJPROP_FONTSIZE,10);
ObjectSetInteger(0,buttonID,OBJPROP_SELECTABLE,0);
}

gehtdoch 19.08.14 21:01

Info
 
:) 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.

:confused: PS: Der abgebildete Code sollte sicher nur ein Code-Beispiel sein, hat bei mir leider 3 Fehlermeldungen.

traderdoc 19.08.14 21:55

Zitat:

Zitat von gehtdoch (Beitrag 27210)
:) 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.

:confused: 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.

gehtdoch 20.08.14 11:32

schnell, schneller, und noch schneller...
 
:D 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. :cool:
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.

:eek:

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);
}


traderdoc 20.08.14 12:59

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

gehtdoch 20.08.14 13:34

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. :mad:
Gibst Du mir bitte einen Tip?

traderdoc 20.08.14 14:26

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

gehtdoch 20.08.14 16:02

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?

traderdoc 20.08.14 16:42

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

gehtdoch 21.08.14 19:38

Problem gelöst, Ziel erreicht
 
Hallo,

hiermit möchte ich mich nochmals für die Hilfe bedanken.

nobtrade 19.05.15 11:56

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.


Alle Zeitangaben in WEZ +2. Es ist jetzt 11:01 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum