Inhalte aufrufen

  • Über WindowsLive anmelden Log In with Google Anmelden
  • Mitglied werden
Profilbild

EA findet nicht die richtige Order...

- - - - - Trailing Order

  • Du kannst leider keine neuen Themen eröffnen
  • Please log in to reply
16 Antworten zu diesem Thema

  #1
OFFLINE   Sven Köhler

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

 

 // 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;

 

....  

 

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



  #2
OFFLINE   traderdoc

Was steht denn im Funktionskörper von CountOrders() und ND()?
Das break; aN dieser Stelle bedeutet auch, dass nach einer erkannten BuyOrder die for-Schleife verlassen
wird. Das hätte zwar keinen Einfluss auf andere Währungspaare, aber auf Orders desselben.

traderdoc

Bearbeitet von traderdoc, 15 January 2019 - 10:57 Uhr,

Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierwünsche.

  #3
OFFLINE   Sven Köhler

Hi Traderdoc....

 

CountOrders(OP_BUY,HedgeMagic,Symbol())<1bedeutet, dass er die Primärorder NICHT trailen soll, wenn eine Hedge-Order aufdemselben Symbol geöffnet ist und hat folgenden Ablauf:

 

**********************************************************************

int CountOrders(int Type, int Magic, string symb)
{
 int _CountOrd=0;
 
 for(int i=OrdersTotal()-1;i>=0;i--)
 {
   if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
   if(OrderMagicNumber()==Magic)
   {
    if(OrderSymbol()==symb)
     {
       if(OrderType()==Type) _CountOrd++;
      }
    }
 }
 return(_CountOrd);
}

******************************************************************

Die Funktion ND() dient lediglich der Vereinfachung, dass ich nicht jedes Mal , wenn ich NormalizeDouble benötige dies ausführlich tun muss und hat folgenden Ablauf:

*****************************************************

double ND(double d)
{
 return (NormalizeDouble(d, _digits)); ...wobei _digits=Digits; ist
}

*****************************************************

 

das break; dient eigentlich dazu, die Switch(OrderType()) an di4eser Stelle zu beenden, da ja dann eigentlich das Trailing der Primär-Order beendet sein müsste (??)

In der Switch-Prüfung folgt dann ja noch das entsprechende für SELL-Orderbzw. die Stop-Orders..

 

Oder könnte man das ganze noch anders sauberer ablaufen lassen?

 

Vielen Dank

 



  #4
OFFLINE   traderdoc

Sorry, ich hatte eine Klammer zu wenig gezählt.

Die Funktion CountOrder() verstehe ich noch nicht ganz, da in Deinem Beispiel OP_BUY übergeben wird und in der genannten Funktion auch nach diesem OrderTyp gefragt wird, obwohl doch eine OP_SELL die HedgeOrder darstellen sollte.

traderdoc
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierwünsche.

  #5
OFFLINE   Sven Köhler

Hi....

 

die Hedge-Order soll ebenfalls eine Buy-Order sein, wenn die Primär-Order eine Buy-Order ist...dier Hedge-Order wird dann mit dem 3-fachen Lot der Primär-Order gesetzt und beide Order werden geschlossen , sobald diese im Profitbereich sind.

 

danke



  #6
OFFLINE   Sven Köhler

...vielleicht ergänzend ein konkretes beispiel:

 

ein Buy-Stop wird gesetzt, welcher hinsichtlich des OrderOpenPrice ggf. nachgetrailt wird, falls der trend abwärts geht.

 

Bei Öffnung der Buy-order mit zB 0,10 Lot soll der StopLoss im Gewinnbereich nachgegetrailt werden. Geht der Kurs mit 60 Punkten unter dem OrderOpenPrice der Buy-Order wird eine weitere Buy-Order (als Hedge) mit 0,3 Lot gesetzt. Beide Order werden dann geschlossen, sobald diese insgesamt über Null als Gesamtprofit liegen.

 

danke für deine Mühe



  #7
OFFLINE   alexf82

ich habe leider aktuell so gut wie keine zeit.

 

aber jetzt mal ganz einfach gesagt.

 

wenn es eine einzelorder gibt, soll getrailt werden?

wenn eine zweite order eröffnet wird, soll geschlossen werden, sobald diese im plus sind?

 

wo liegt das problem?

 

 

warum verneinst du hier das orderselect?

 if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;



  #8
OFFLINE   Sven Köhler

Hi Alex

 

ich habe leider aktuell so gut wie keine zeit.

 

aber jetzt mal ganz einfach gesagt.

 

wenn es eine einzelorder gibt, soll getrailt werden?

wenn eine zweite order eröffnet wird, soll geschlossen werden, sobald diese im plus sind?

 

wo liegt das problem?

 

 

genau so ist es...das Problem liegt darin, dass der EA nicht trailt, sobald 2 Order offen sind. d.h. ist eine Order offen auf EURUSD und eine auf USDJPY ( also unterschiedliche Symbole !)trailt er weder die eine noch die andere Order .

 

das schliessen der 2. Order (als Hedge-Order) auf demselben Symbol funktioniert soweit .

 

Keine Ahnung woran es liegt :-/



  #9
OFFLINE   alexf82

haben die normalen order und die hedge order unterschiedliche magicnumbers?

haben die ea auf dem paar x (sowohl normal als auch hedge) andere magicnumbers, als die order auf paar y?

 

was steht in der var BidValue?


Bearbeitet von alexf82, 17 January 2019 - 19:17 Uhr,


  #10
OFFLINE   Sven Köhler

hallo, 

 

ja haben sie, die Magic der normalen Order innerhalb desselben Symbols ist eine andere als die der Hedge-Order...auch hat jedes Symbol seine eigene Magic 



  #11
OFFLINE   Sven Köhler

...BidValue ist lediglich der Bid: double BidValue = MarketInfo(Symbol(), MODE_BID);



  #12
OFFLINE   alexf82

hast du schon mal im log beim tester geschaut, ob du fehlermeldungen bekommst?



  #13
OFFLINE   Sven Köhler

im Tester bringt der EA keine Fehler bzw. tritt dies nicht auf, da ich dort ja nur mit einem Symbol testen kann und nicht mehrere gleichzeitig



  #14
OFFLINE   alexf82

und du sagst, wenn du das ganze im tester laufen lässt und er nur die eine order offen hast, funktioniert das trailen?

 

woher kommt spread und was steht da drin?


Bearbeitet von alexf82, 18 January 2019 - 07:26 Uhr,


  #15
OFFLINE   Sven Köhler

ja... das Trailen funktioniert im Tester einwandfrei...incl Hedgen ....spread= AskValue-BidValue; ... also der normale Spread der Order



  #16
OFFLINE   Sven Köhler

....und wenn nur eine Order auf dem MT4 offen ist, läuft ja alles wie gewünscht



  #17
OFFLINE   Sven Köhler

PROBLEM gelöst !!!!

 

hi....das Trailing-Problemist gelöst....

 

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

 

 // 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;

 

....  

 

 

ich habe nach mehrfachen Hin- und Her-Versuchen jetzt nach der Zeile if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue; eine geschweifte Klammer bis zum Ende der For-schleife gesetzt und anstelle der Funktion  OnStart()  diese durch OnTick() ersetzt....jetzt scheint alles zu laufen...ich werd e weiter berichten (Ende der Woche ein ausführlichen Bericht aus der History) , da es sich m.E. um einen sehr profitablen EA handelt...danke nochmals für die Unterstützung !!!!


Bearbeitet von Sven Köhler, 21 January 2019 - 13:56 Uhr,

  • €urix gefällt das



Similar Topics

  Thema Eröffnet von Statistik Letzter Beitrag




0 Benutzer lesen gerade dieses Thema

0 Mitglieder, 0 Gäste, 0 anonyme Nutzer