|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
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. |
Lesezeichen |
Stichworte |
ausschalten, chart, chart button, ea ausschalten, ea einschalten, einschalten, mql4, programmierung, programmierung metatrader |
|
|