|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
EA findet scheinbar die richtige Order nicht..
Hallo zusammen,
mein EA läuft auf mehreren Symbolen gleichzeitig. Grundprinzip ist: - öffnet Stop-Order bei Vorliegen der entsrechenden Voraussetzungen und trailt den OrderOpenPrice bei Bedarf nach - bei Vorliegen einer Order (Buy oder Sell) trailt er den StopLoss im Gewinnbereich entsprechend mit - geht die Order in die falsche Richtung setzt er bei einem bestimmten Abtsnad eine Hedge-Order in gleiche Richtung (Sell-Order => hedge-Order auch Sell mit 3-facher Lotgröße wie Ursprungs-Order) - falls Profit der Hedge-Order und Urspungs-Order im Gewinnbereich, schließt er beide - der EA hat dabei auf jedem Symbol eine andere MagicNumber Das Ganze funktioniert auch reibungslos, wenn nur eine Order offen ist (zB eine Buy-Order auf EURUSD). Sind zwei Order offen (zB eine Buy-Order auf EURUSD und eine Sell-Order auf USDJPY) verweigert der EA das Trailing des StopLoss und das mögliche Setzen einer Hedge-Order. Haber schon alles Mögliche ausprobiert, habe es aber leider nicht hinbekommen, dass der EA auch bei mehreren offenen Order auf unterschiedlichen Symbolen einwandfrei arbeitet und finde den Fehler nicht :-/ Das obene beschriebene Trailing im Gewinnbereich soll mit folgendem Ablauf erreicht werden, wobei die Expert_ID die vergebene Magic ist Code:
// START OF TRAILING ***************************************************************** TrailingStop=0.00003; for(int i=OrdersTotal()-1;i>=0;i--) { if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue; if(OrderMagicNumber()==Expert_Id && OrderSymbol()==Symbol()) //only primary Order { switch(OrderType()) { //========================================================== case OP_BUY: //RefreshRates(); // TRAILING OF PRIMARY BUY-ORDER ******************* if(Trail==TRUE && CountOrders(OP_BUY,HedgeMagic,Symbol())<1).... d.h. es ist keine Hedge-Order geöffnet { if(TrailingStop>0) { if(ND(BidValue-OrderOpenPrice())>ND(TrailingStop+spread)) { if(OrderStopLoss()<BidValue-spread) { //--- modify order mt=OrderModify(OrderTicket(),OrderOpenPrice(),ND(BidValue-spread),0,0,Green); } } } } OpenOrderCount++; CheckHedge(Expert_Id); //RefreshRates(); break; .... usw für Sell.. |
|
|||
Antwort: s. bereits in dem anderen Forum beschrieben.
traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Fehler besteht weiterhin
Hi...ich muss das oben beschriebene Trailing-Problem nochmals aufgreifen...vielleicht hat jemand ne zündende Idee, wo der Fehler liegen könnte.
Jedes Symbol hat seine eigene Magic und HedgeMagic Ich habe zwischenzeitlich den Code wie folgt geändert, am Problem selbst hat sichg leider nix geändert. Bemerkenswert ist, dass der EA seien Aufgabe erfüllt, wenn 2 Stop-Orders gleichezitig offen sind, d.h. bei beidne Stop-Orders zieht er jeweils bei Vorliegend der Voraussetzungen den OrdernOpenPrice nach, ohne Probleme. Nur bei offenen "normalen" Orders trailt er diese nur, wenn nur eine offen ist, bei mehreren trailt der EA gar nicht mehr oder eben falsch, d.h. ich habe festgestellt, dass er zB den Wert eines anderen Symbols trailt ???! Das Trailen der "normalen" Orders soll wie folgt erfolgen: Code:
for(int i=OrdersTotal()-1;i>=0;i--) //for(int i=0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==True) { if(OrderSymbol()==Symbol()&& OrderMagicNumber()== Expert_Id) //only primary Order { switch(OrderType()) { case OP_BUY: if(OrderMagicNumber()!=HedgeMagic && CountOrders(OP_BUY,HedgeMagic,Symbol())<1) { Line(OrderOpenPrice()+ND(TrailingStop+TrailDistance)); if(Trail==TRUE && TrailingStop>0) { if(ND(BidValue-OrderOpenPrice())>ND(TrailingStop+TrailDistance)) { if(OrderStopLoss()<BidValue-TrailDistance) { //--- modify order RefreshRates(); mt=OrderModify(OrderTicket(),OrderOpenPrice(),ND(BidValue-TrailDistance),0,0,Green); } if(mt==True) Alert(Symbol()+"("+OrderMagicNumber()+")" + " getrailt bei: " + BidValue+ " um "+TimeToStr(TimeCurrent())); } } } CheckHedge(Expert_Id); break; Der Code für das funktionierende Stop-Order-Trailing, der in derselben Schleife und auch unter Switch läuft lautet: Code:
case OP_BUYSTOP: RefreshRates(); if(OrderMagicNumber()!=HedgeMagic) { if(Mi_48==FALSE) { orderprice= ND(AskValue+MinLevel+AddPriceGap); order_SL = ND(orderprice - TrailDistance - StopLoss * Point - AddPriceGap); order_TP = ND(orderprice + TakeProfit * Point + AddPriceGap); if(orderprice<OrderOpenPrice() && OrderOpenPrice()-orderprice>TrailingStart) { if(order_SL!=OrderStopLoss() && order_TP!=OrderTakeProfit()) { RefreshRates(); starttime=GetTickCount(); mt=OrderModify(OrderTicket(),orderprice,order_SL,order_TP,0,Lime); } } OpenOrderCount++; } else f=OrderDelete(OrderTicket()); } break; hat einer vielleicht ne Idee zur Fehlerquelle? Danke |
|
|||
Zusatz
...vielleicht "verrennen" sich meine Funktionen auch untereinander..
Kurz: ich habe heute zufällig beobachten können, dass er mehrere "normale" Order offen hatte und eine Symbol mit Hedge-Order, d.h. 1. Order USDJPY 2. Order EURUSD 3. Order GBPUSD 4. Order Hedge-Order zu GBPUSD die order 1 + 2 liefen in den Gewinnbereich, OHNE zu trailen erst als die beiden Orders 3+4 geschlossen waren, hat der EA die 1. und 2. Order getrailt und geschlossen...merkwürdig, dass er erst trailt, wenn die Hedge-Geschichte erledigt ist |
|
|||
Seh nicht wirklich durch, aber was soll der break?
Hast Du für jede einzelne Order ne eigene MN? Wenn nicht, funktioniert OrderSelect vielleicht nicht. |
|
|||
Zitat:
das break; komtm wegen der switch-Anweisung, innerhalb derer dann noch die Anweisung für Sell, sell-stop und buy-stop folgt. ja, jede Order hat ihre eigene MN |
Lesezeichen |
|
|