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 findet scheinbar die richtige Order nicht.. (http://www.expert-advisor.com/forum/showthread.php?t=6312)

Ado 14.01.19 15:05

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

Hat jemand eine Idee, wo das Problem liegen könnte?....Vielen Dank

traderdoc 15.01.19 11:13

Antwort: s. bereits in dem anderen Forum beschrieben.

traderdoc

Ado 26.01.19 17:59

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;

Code geht dann weiter mit Sell

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;

...usw für Sell-Stop

hat einer vielleicht ne Idee zur Fehlerquelle? Danke

Ado 28.01.19 20:32

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

MA-EA 28.01.19 22:22

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.

Ado 29.01.19 16:48

Zitat:

Zitat von MA-EA (Beitrag 42104)
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.

...Hi MA-EA

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


Alle Zeitangaben in WEZ +2. Es ist jetzt 15:41 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