Einzelnen Beitrag anzeigen
  #1 (permalink)  
Alt 07.03.15
gehtdoch gehtdoch ist offline
Neues Mitglied
 
Registriert seit: Feb 2013
Beiträge: 15
gehtdoch befindet sich auf einem aufstrebenden Ast
Standard Problem: EA in verschiedenen Charts


Hallo Experten,

ich habe ein Problem mit einem EA zur Trading-Unterstützung in verschiedenen Werten. Dazu vielleicht eine kurze Erklärung.
In dem jeweiligen Chart möchte ich über Button den im Chart installierten EA Einschalten/Stoppen/Ausschalten.
Ich erkenne das Problem nicht!
So sieht es aus:
Ein Bild ist ganz unten im Anhang. Ist vom DOW daher ist dort die "2" benutzt.

Und hier ein Teil vom Code:

[CODE]
//HD-AutoTrading EUR/USD "3"
// global -------------------------------------
string button1ID="Button1"; //EA starten/neustarten
string button2ID="Button2"; //EA stoppen
string button3ID="Button3"; //Position schliessen

int Start3;
//+---------------
//| inizialisierung
//+---------------
int OnInit() {

int Start1=-1;
int Start2=-2;
Start3=-3; //Damit rennt der nicht sofort bei Installation los...
int Start4=-4;
int Start5=-5;
int Start6=-6;
int Start7=-7;
int Start8=-8;
int Start9=-9;
CreateButton(button1ID, "Start AT",12,85);
CreateButton(button3ID, " Close",105,85);

return(INIT_SUCCEEDED);
}
//+---------------
//| deinizialisieren
//+---------------
void OnDeinit(const int reason) {
ObjectDelete(0,button1ID);
ObjectDelete(0,button2ID);
ObjectDelete(0,button3ID);
ObjectDelete(0,"LabelBox");
ObjectDelete(0,"Posis : ");
ObjectDelete(0,"Start : ");
}

//+------------------------------------------------------------------+
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam) {
//--- Check the event by pressing a mouse button
// bool AllSymbols;

if(id==CHARTEVENT_OBJECT_CLICK) {
string clickedChartObject=sparam;
if(clickedChartObject==button1ID) {
bool selected=ObjectGetInteger(0,button1ID,OBJPROP_STAT E);
if(selected) {
// Alert("Button1 clicked");
Start3 = 3; //++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++
ObjectSetInteger(0,button1ID,OBJPROP_STATE,0);
ObjectDelete(0,button1ID);
CreateButton(button2ID, "Stop AT",12, 85);
} else {

}
}
if(clickedChartObject==button2ID) {
bool selected2=ObjectGetInteger(0,button2ID,OBJPROP_STA TE);
if(selected2) {
// Alert("Button2 clicked");
Start3 = -3; //++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++
ObjectSetInteger(0,button2ID,OBJPROP_STATE,0);
ObjectDelete(0,button2ID);
CreateButton(button1ID, "Start AT",12, 85);
} else {
}
}

if (clickedChartObject==button3ID) {
int cnt;
RefreshRates();

for(cnt=OrdersTotal()-1; cnt>=0; cnt--)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()!=Symbol())
{
continue;
}
if(OrderType()==OP_BUY)
{
OrderClose(OrderTicket(),OrderLots(),Bid,2,Blue);
CreateButton(button1ID, "Start AT",12, 85);
Start3=-3; //++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++
}
if(OrderType()==OP_SELL)
{
OrderClose(OrderTicket(),OrderLots(),Ask,2,Blue);
CreateButton(button1ID, "Start AT",12, 85);
Start3=-3; //++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++
}
}
}
}
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,clrLi meGreen);
ObjectSetInteger(0,button2ID,OBJPROP_BGCOLOR,clrRe d);
ObjectSetInteger(0,button3ID,OBJPROP_BGCOLOR,clrBl ueViolet);
ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
ObjectSetInteger(0,name,OBJPROP_XSIZE,75);//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);
}

//---------------------| HD-AutoTrading.mq4 |------------------------
#property copyright "HD"

input double TakeProfit =100; //10.0
input double Lots =0.1; //Forex
input double TrailingStop =30; //3.0
input double Sperre =0.3; //Umschaltsperre +/- in Euro
input double AtrPeriod =4; //ATR Periode
input double Halt =5; //min Atr/Prg stoppen

extern int A = 12.0;
extern int B = 26.0;
extern int C = 9.0;
// Ende global ---------------

// lokal ----------------------
void OnTick() //start() //
{
if ((total3<1) && (Start3==3) && (PGstoppen3==1))
}
//----------------------------
// Ende lokal -----------------
}
[CODE]
Der EA läuft problemlos, aber immer nur in einem Chart. Ich kann weitere Positionen mit 1-Klick eröffnen und über "Close" alle sofort schliessen.

Meine Versuche für DAX, DOW, EURUSD, GBPUSD, EURJPY:
Kompletten EA für jeden Chart umbenannt
Verschiedenste Variablen mit einer Zahl (hier 3) erweitert
MagicNr unterschiedlich
Probleme: Starte z.B. 3 EA´s: es wird nur die erste Position eröffnet (worauf die anderen EA´s warten, weiss ich nicht, sind aber in Lauerstellung)
Irgendwann spielt alles verrückt und selbst in nicht gestarteten EA´s werden Positionen eröffnet und geschlossen. Bremsen kann ich das nur noch mit dem Hauptschalter "AutoTrading".

Kann mir bitte jemand den entscheidenden Tip geben?
Dank im voraus.
Angehängte Grafiken
Dateityp: jpg DOW30.jpg (18,6 KB, 10x aufgerufen)