Zum Inhalt springen
View in the app

A better way to browse. Learn more.

#T/N/X/T

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Das Zusammenspiel von OrderSelect() und OrderModify()

Geschrieben

Einen schönen guten Tag, Abend.

 

Ich habe da einige Probleme mit dem Zusammenspiel von OrderSelect() und Order Modify().

 

Habe da so ca. 10 Trades offen und möchte sie anhand eines Trailing-Stops überwachen.

 

Hier ist der Code:

 

total=OrdersTotal();
   //Hier ist der Trailing Stop
 
 
       for(int cnt=0;cnt<total;cnt++)
           {
             OrderSelect(cnt, OrderTicket(),MODE_TRADES);
              if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())
                  {
                   if(OrderType()==OP_BUY) // long position is opened
                      {
                               
                       
// check for trailing stop
                        if(TrailingStop>0)
                              {
                                 if(Bid-OrderOpenPrice()>Point*TrailingStop)
                                    {
                                      if(OrderStopLoss()<Bid-Point*TrailingStop)
                                          {
                                            OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
                                            return(0);
                                          }
                                     }
                                }
                      }
                      else // go to short position
                         {
                          
// check for trailing stop
                         if(TrailingStop>0)
                                {
                                if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
                                    {
                                      if((OrderStopLoss()>(Ask+Point*TrailingStop))||(OrderStopLoss()==0))
                                           {
                                             OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,
                                             OrderTakeProfit(),0,Red);
                                             return(0);
                                           }
                                     }
                                 }
                           }
                       }
                  }
return(0);

Ich bekomme hier dauernd den Fehlercode: OrderModify Error 130 d.h. invalid stops "ungültiger Stop" ??

 

Ich kann damit nichts anfangen, für eure Hilfe im Voraus besten Dank !

Bearbeitet von whipsaw
whipsaw

  • Antworten 51
  • Aufrufe 6,8Tsd
  • Erstellt
  • Letzte Antwort

Top-Benutzer in diesem Thema

Most Popular Posts

  • Ich hab ja mal den "Sich-Selber-Shorten-EA" geschrieben. Dort musste ich auch immer die Gegenpositionen beobachten. Den EA habe ich mal hier drangehängt. Für dich interessant sind diese zwei Funktione

  • int total=OrdersTotal(); for(int cnt=0;cnt<total;cnt++) { if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) == false) continue;

  • Nein, das der Rückgabewert nicht verwendet wird ist kein "Problem" in dem Sinn. Also der Code funktioniert an sich ohne Probleme.   Der Unterschied ist folgender: OrderSelect( ... ) zeigt im Rückgabew

Featured Replies

Geschrieben

Probiers mal so:

 

NormalizeDouble(Bid-Point*TrailingStop,Digits)

 

...und als Tip:

Wenn den Code zwischen die Code-Steuerzeichen einfügst, dann sieht das auch noch schön aus. :keyboard:

Geschrieben
  • Autor

Ja, aber wie soll das dann helfen, NormalizeDouble(Bid-Point*TrailingStop,Digits) ?

 

Wenn den Code zwischen die Code-Steuerzeichen einfügst, dann sieht das auch noch schön aus. :keyboard:

 

was meinst du damit ?

 

Sorry, verstehe ich nicht so genau.

Geschrieben

Ja, aber wie soll das dann helfen, NormalizeDouble(Bid-Point*TrailingStop,Digits) ?

z.B. so:

OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-Point*TrailingStop,Digits),OrderTakeProfit(),0,Green)

Du mußt bei OrderModify immer die richtige Anzahl von Digits eingeben, bei manchen Brokern 4, bei manchen 5. Über das Schlüsselwort "Digit" erkennt das dein Programm automatisch.

 

Wenn den Code zwischen die Code-Steuerzeichen einfügst, dann sieht das auch noch schön aus. :keyboard:

was meinst du damit ?

Du schreibst vor deinen Code in eckigen Klammern das Wort code und dahinter wieder in Eckigen Klammern /code, dann wird der Code, den du hier im Forum postest formatiert und man kann ihn richtig lesen :twiddle:

Geschrieben

Es geht auch den Code einzufügen, anschließend zu markieren und dann

oben im Editor die Code Tags anklicken.

 

Zitieren/Code

Geschrieben
  • Autor

ah ok, weil, wenn ich 40 Trades offen haben, kommt der PC(Das Programm) nicht so richtig nach, mit dem Trailing-Stop.

 

Kann es sein, dass die Start()-Funktion dazwischenfunkt, weil das Programm immer wieder bei Start() anfängt.

 

Im Voraus besten Dank.

Geschrieben

Kann es sein, dass die Start()-Funktion dazwischenfunkt, weil das Programm immer wieder bei Start() anfängt.

Nein, während du in der Start()-Funktion bist, wird diese nicht erneut aufgerufen.

Geschrieben
  • Autor

Nein, während du in der Start()-Funktion bist, wird diese nicht erneut aufgerufen.

 

 

Ich habe gelesen, wenn ein Ticksignal kommt, dann wird die Start-Funktion aufgerufen, oder ?

 

Bin ein bisschen verwirrt.

 

Gruss an alle

Geschrieben

Ich habe gelesen, wenn ein Ticksignal kommt, dann wird die Start-Funktion aufgerufen, oder ?

Das ist korrekt und widerspricht auch nicht meiner Aussage. Die start()-Funktion wird mit jedem Tick aufgerufen, allerdings nur, wenn sich dein EA nicht gerade darin (oder in Unterfunktionen) befindet. Das heißt: kommen viele Ticks schnell hintereinander und dein EA ist "noch nicht fertig" wenn der nächste Tick eintrifft, dann wird start() nicht nochmals aufgerufen! Eigentlich kommt dies eher selten vor, außer dein EA ist langsam (weil du vielleicht viele Indikatoren im Programmcode auf unterschiedlichsten Zeitebenen berechnen lässt - o.ä.).

Geschrieben

Ich habe gelesen, wenn ein Ticksignal kommt, dann wird die Start-Funktion aufgerufen, oder ?

Das ist richtig, läuft allerdings die Start-Funktion noch während bereits ein neuer Tick reinkommt, dann wird dieser neue Tick ignoriert, unterbricht also nicht Start()!

 

Edit: Bin einfach zu langsam auf meine alten Tage :keyboard:

Geschrieben

Edit: Bin einfach zu langsam auf meine alten Tage :keyboard:

Ach was, zwei gleiche Antworten klingen einfach überzeugender :good2:

Geschrieben

NormalizeDouble(Bid-Point*TrailingStop,Digits)

...also wenn ich das jetzt richtig verstanden habe, dann kann ich die Variante einsetzen...

OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-Point*TrailingStop,Digits),OrderTakeProfit(),0,Green)

...und die mit PointX aussetzen...

double PointX()
 {
  if (Digits==5 || Digits ==3)

  return(Point*10); else return(Point);
 }
//---------------------------
if(OrderType()==OP_BUY)
 {
  OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-PointX()*Stopp,OrderOpenPrice()+PointX()*Profit,0,Blue);
 }

oder interpretiere ich das falsch?!

 

lg NC

 

PS: Nochmal kurz am Rande:

Kann es sein, dass die PointX-Funktion irgendwie falsch ist. Denn egal ob 3 oder 5 Digits, der Wert wird immer x10(mal zehn)genommen... :keyboard:

Geschrieben

oder interpretiere ich das falsch?!

 

Nein, siehst du genau richtig :keyboard:

 

Kann es sein, dass die PointX-Funktion irgendwie falsch ist. Denn egal ob 3 oder 5 Digits, der Wert wird immer x10(mal zehn)genommen... :twiddle:

Ich kenne zwar keinen 3-Digit Broker, aber ich hab diese Implementierung schon an verschiedenen Stellen gesehen. Scheint also richtig zu sein.

Geschrieben

Kann es sein, dass die PointX-Funktion irgendwie falsch ist. Denn egal ob 3 oder 5 Digits, der Wert wird immer x10(mal zehn)genommen... :keyboard:

Bitte korrigiert mich, wenn ich falsch liege, aber kann das x10 nicht mit CFDs zusammenhängen?

 

Bei einem CFD auf den DE30 beträgt Point (je nach Broker) den Wert 0,1. Wenn ich nun 10 Indexpunkte entfernt meinen TP setzen möchte, dann muss ich 100xPoint rechnen. Zwischen 6490 und 6500 liegen also 10x10xPoint. Was für Werte enthält denn die Variable Profit?

Geschrieben

Bitte korrigiert mich, wenn ich falsch liege, aber kann das x10 nicht mit CFDs zusammenhängen?

Das x10 bezieht sich auf das 5. bzw. 3. Digit bei EURJPY, wie Quickbeam2k1 richtig sagt.

Bei Indikatoren/EAs wird es häufig so gemacht, dass die Parameter, die man einstellt, sich auf einen 4 Digit-Broker beziehen. Setzt man bei EURUSD einen SL von 50 Punkten, so sind das bei einem 5-Digit Broker (z.B. MBT) 500. Um nicht ständig umrechnen zu müßen, kann man den EA/Indikator automatisch diesen Korrekturfaktor abhängig vom Digit-Wert berücksichtigen lassen.

Geschrieben
  • Autor

Wie kann man eigentlich einen TRade aufmachen, ohne S/L und T/P. WEnn ich die Variablen mit Werten versehe, dann macht er die Trades.

 

Aber, wenn ich die WErte mit "0" setze, dann macht er keinen einzigen Trade. Warum ?

 

Lieben Gruss

Geschrieben

Wie kann man eigentlich einen TRade aufmachen, ohne S/L und T/P. WEnn ich die Variablen mit Werten versehe, dann macht er die Trades.

 

Aber, wenn ich die WErte mit "0" setze, dann macht er keinen einzigen Trade. Warum ?

 

Lieben Gruss

Hast Du in deiner OrderSend() die Null mit "" oder ohne "" geschrieben?

Bei mir funktioniert es...

 

OrderSend(Symbol(),OP_BUY,lot,Ask,Slippage,0,0,"long",MagicNumber,0,White)

 

lg NC

Geschrieben
  • Autor

Ich habe da mal noch ne andere Frage, ich öffne buy-Order mit dem "Ask"-Preis und öffne short-Order mit dem "Bid"-Preis.

 

Meine Order für long: ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"My EA",12345,0,Green);

 

Meine Order für short: ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"My EA",12345,0,Red);

 

 

Kann ich auch buy-Orders und short-Orders nur mit dem "Bid"-Preis öffnen, sozusagen zu dem Kurswert, den man auf dem Chart sieht ? :nictation:

  • 4 Monate später...
Geschrieben
  • Autor

Habe da mal folgenden Code aufgebaut, scheint aber nicht zu funktionieren. Kennt sich da jemand mit aus ?

 

Wäre sehr dankbar für eure Hilfe.

 

 

 int total=OrdersTotal();
     for(int cnt=0;cnt<total;cnt++)
           {
             OrderSelect(cnt,SELECT_BY_TICKET,MODE_TRADES);
              
                  
                   if(OrderType()==OP_BUY) // long position is opened
                      {
                      Print("Hallole BUY");
                      checkBUY=TRUE;
                      checkSELL=FALSE;
                      }
                      else // go to short position
                         {
                         Print(" Hallole SELL");
                         checkBUY=FALSE;
                         checkSELL=TRUE;
                         }
                
           } 

 

 

Im voraus schon mal besten Dank !

Geschrieben

int total=OrdersTotal();
     for(int cnt=0;cnt<total;cnt++)
           {
              if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) == false)
                continue;              
              
                  
                   if(OrderType()==OP_BUY) // long position is opened
                      {
                      Print("Hallole BUY");
                      checkBUY=TRUE;
                      checkSELL=FALSE;
                      }
                      else // go to short position
                         {
                         Print(" Hallole SELL");
                         checkBUY=FALSE;
                         checkSELL=TRUE;
                         }
                
           } 

 

Hi Sil,

 

so müßte es laufen.

Bearbeitet von Mythos
quote in code geändert

Geschrieben

@sill3000

Gucken sie eigentlich ab und zu in ihren Briefkasten ? :aerator: :laugh:

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

Account

Navigation

Suche

Suche

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.