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
  • Autor

@sill3000

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

 

Kann man denn hier auch E-mails verschicken, wie geht das und wo finde ich denn meinen ? Sorry, tut mir leid, war keine Absicht von mir.

 

Möchte hier niemanden ärgern oder verunstimmen.

Geschrieben

Möchte hier niemanden ärgern oder verunstimmen.

Keine Sorge, so war das auch nicht gemeint. :whiteflag:

 

Finden tust du deinen Nachrichtendienst oben rechts neben deinen Usernamen.

Auf den Pfeil neben dem Namen gehen -> Nachrichtendienst.

Geschrieben

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

 

Inwiefern funktioniert es nicht? Bulls Änderung ist einerseits notwendig. Zusätzlich musst noch aufpassen weil es ja mehr Orderarten gibt als OP_BUY und OP_SELL. (Also nich alles was "nicht OP_BUY" ist ist deswegen gleich OP_SELL)

Geschrieben

Inwiefern funktioniert es nicht? Bulls Änderung ist einerseits notwendig. Zusätzlich musst noch aufpassen weil es ja mehr Orderarten gibt als OP_BUY und OP_SELL. (Also nich alles was "nicht OP_BUY" ist ist deswegen gleich OP_SELL)

 

Sorry, hatte das heut Mittag nur auf die Schnelle gemacht, also nur die entscheidene Stelle geändert. Das mit dem Zitat war allerdings Absicht, denn Kollege Sil soll ja mitdenken, sonst lernt er nix und wir können ihm dann demnächst gleich alles programmieren. :laugh:

Hier mal der komplette Code, wie ich ihn zu Zeit verwende:

 

     for(i=0;i<tot;i++)
     {
       if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false)
         continue;
        if(OrderType()==OP_BUY)   // long position is opened
        {
          OrderClose(OrderTicket(),OrderLots(),Bid,99,Violet);  // close position
          // oder: Print("Hallole BUY");
        }
        if(OrderType()==OP_SELL)   // short position is opened
        {
          OrderClose(OrderTicket(),OrderLots(),Ask,99,Magenta); // close position
          // oder: Print("Hallole SELL");
        }       
     }

 

Vielleicht gibt es ja da auch noch sinnvolle Ergänzungen.

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

 

Stosse erst jetzt auf das Posting, aber ich hänge die Frage gleich mal an:

 

kann es sein dass manche Broker es gar nicht zulassen gleich SL und/oder TP mitzugeben?

 

Ich bekomme die Orders hier nur plaziert wenn ich 0 für SL und TP mitgebe, gleich darauf kann ich aber den Stop mittels Ordermodify eintragen. Das könnte natürlich mal dazu führen dass eine Position ohne Stop bleibt.

 

Danke für eure Tips.

 

Lutz

Geschrieben

Sorry, hatte das heut Mittag nur auf die Schnelle gemacht, also nur die entscheidene Stelle geändert. Das mit dem Zitat war allerdings Absicht, denn Kollege Sil soll ja mitdenken, sonst lernt er nix und wir können ihm dann demnächst gleich alles programmieren. :laugh:

 

Trotzdem bitte nicht den Text in einem Zitat verändern. "Falsches" Zitieren gibts in Doktorarbeiten aber nicht hier bei Tom-Next ;) Er muss ja genauso mitdenken wenns in code-tags steht, nur ist es da auch noch leichter lesbar und als Code erkennbar.

 

kann es sein dass manche Broker es gar nicht zulassen gleich SL und/oder TP mitzugeben?

 

Ja gibt es. Am einfachsten zu testen wennst im Demo versuchst händisch eine Order mit SL oder TP abzusetzen und errors kriegst. Teils gehts das du die Werte direkt danach per OrderModify einfügst. Ansonsten muss man halt händisch im EA überwachen.

 

hth

Geschrieben

kann es sein dass manche Broker es gar nicht zulassen gleich SL und/oder TP mitzugeben?

Bei manchen Brokern müssen SL und TP einen Mindestabstand vom aktuellen Kurs haben. Dies merkt man dann aber auch bei der manuellen Ordereröffnung.

Geschrieben

Bei manchen Brokern müssen SL und TP einen Mindestabstand vom aktuellen Kurs haben. Dies merkt man dann aber auch bei der manuellen Ordereröffnung.

 

Das stimmt, daran kann es aber nicht liegen da es zuverlässig mit demselben SL klappt wenn man die geöffnete Order unmittelbar danach im EA modifiziert.

 

Lutz

Geschrieben

Toller Thread, genau das Richtige für den Kleinenbroker .

 

Aus #23

 

 {
             OrderSelect(cnt,SELECT_BY_TICKET,MODE_TRADES);
              
                  
                   if(OrderType()==OP_BUY) // long position is opened

 

Aus #24 von Bull

 

{
              if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) == false)
                continue;              
              
                  
                   if(OrderType()==OP_BUY) // long position is opened

 

Es tut mir leid, ich verstehe den Unterschied in der Wirkungsweise nicht . Denn die Deutung ist für mich

diesselbe . Allerdings erfolgt natürlich in #24 ein Zuweisung durch eine zwingende Überprüfung "IF " wahr/falsch

während in #23 ein Zuordnung zu "nichts" erfolgt ... ich selektiere aber dann geschieht innerhalb dieser Kommandozeile nichts .

Ist das das Problem in #23 ?

 

KB

Geschrieben

Bei manchen Brokern müssen SL und TP einen Mindestabstand vom aktuellen Kurs haben. Dies merkt man dann aber auch bei der manuellen Ordereröffnung.

 

Noch eine Anmerkung: bei mir sind bei Activtrades bei manueller Ordereröffnung zum Marktpreis die Felder für SL und TP grau, d.h. ich kann dort gar nichts eingeben.

 

Lutz

Geschrieben

Allerdings erfolgt natürlich in #24 ein Zuweisung durch eine zwingende Überprüfung "IF " wahr/falsch

während in #23 ein Zuordnung zu "nichts" erfolgt ... ich selektiere aber dann geschieht innerhalb dieser Kommandozeile nichts .

Ist das das Problem in #23 ?

 

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ückgabewert an ob das Auswählen der Order funktioniert hat oder nicht (true wenn alles gut, false im Fehlerfall), egal ob du den Wert verwendest oder nicht.

Solange das Auswählen immer funktioniert, sind beide Varianten gleich, aber wenn es einmal ein Problem gibt ignoriert der eine Code das und versucht trotzdem auf die Order zuzugreifen (was dann nicht funktionieren kann). Im zweiten Code wird dieser Fehler erkannt und die nächste Order versucht.

 

hth

Geschrieben

@Mythos : Dank

 

@All : dann ergänze ich mal diesen Thread durch eine zusätzliche Frage die aus der folgenden Situation heraus entstanden ist .

 

Situation : In einem Markt ("EURUSD") habe ich 5 Shorts und 5 Long´s gleichzeitig im Markt, einen Teil als Pending ,einen Teil ist im Markt .

Diese Trades möchte ich nun regelmäßig, einmal/Bar betreuen . Alle Trades haben Magicnummern von mir erhalten .

Auf dem gleichen Konto gibt es weitere Trades eines anderen EA in gleichem und auch in anderen Märkten, RM/MM ist natürlich geprüft .

 

Meine Aufgabe : Regelmäßig überprüfen, ob die Entrypreise für die Stoporders noch OK sind (das ist abhängig vom aktuellen Kurs) und ggfs anpassen .

Regelmäßig überprüfen, ob Order die im Markt liegen, im SL ok sind , dass kann sein, dass diese erst platziert werden oder aber

nachgezogen werden . Schlussendlich Orders zu schliessen, wenn bestimmte Randbedingungen eingetreten sind .

 

Soweit so gut, dass alles macht man mit den üblich bekannten Order-Befehlen .

Nun habe ich es aber eben mit vielen Trades zu tun .

 

Mein Lösungsansatz ist nun so, dass ich mit Switch arbeite :

 

//+------------------------------------------------------------------------------------------------+
//|   Function  :  überprüfen, ob Hedge geschlossen werden kann, weil der Short gelöscht wurde     |
//+------------------------------------------------------------------------------------------------+
void CheckPendingHedge4Close()                   //                                                |
{                                                //                                                |
 string ip_cSymbol = Markt ;                    //                                                |
 for( int iCnt = OrdersTotal()-1; iCnt >= 0; iCnt-- )     //                                      |
 {                                              //                                                |
   OrderSelect(iCnt, SELECT_BY_POS, MODE_TRADES)         ;//                                      |
   if( OrderSymbol() != ip_cSymbol )            //                                                |
     continue;                                  //                                                |
                                                //                                                |
   if( OrderSymbol() == ip_cSymbol )            //                                                |
     if( OrderType() == OP_BUYSTOP || OrderType() == OP_BUYLIMIT ) ;//                            |
       switch( OrderMagicNumber() )             //                                                |
       {                                        //                                                |
         case ER_MAGIC_S21:                     //                                                |
           break;                               //                                                |
         case ER_MAGIC_S22:                     //                                                |
           break;                               //                                                |
         case ER_MAGIC_S23:                     //                                                |
           break;                               //                                                |
         case ER_MAGIC_S24:                     //                                                |
           break;                               //                                                |
         case ER_MAGIC_S25:                     //                                                |
           break;                               //                                                |
         case ER_MAGIC_B21:                     //                                                |
           if( Bid < B21Schliessen )            //                                                |
           {                                    //                                                |
             OrderDelete(B21)                  ;//                                                |
             Print(" STOP B21 at",TimeToStr(TimeCurrent(),TIME_SECONDS)," Kurse: ",     //        |
                   dBid," ",dAsk," B21Schliessen= ",B21Schliessen) ;//                            |
             Alert(" STOP B21 ")               ;//                                                |
             B21=0                             ;//                                                |
             B21Schliessen=0                   ;//                                                |
           }                                    //                                                |
           break                               ;//                                                |
         case ER_MAGIC_B22:                     //                                                |
           if( Bid < B22Schliessen )            //                                                |
           {                                    //                                                |
             OrderDelete(B22)                  ;//                                                |
             Print(" STOP B22 at",TimeToStr(TimeCurrent(),TIME_SECONDS)," Kurse: ",     //        |
                   dBid," ",dAsk," B22Schliessen= ",B22Schliessen) ;//                            |
             Alert(" STOP B22 ")               ;//                                                |
             B22=0                             ;//                                                |
             B22Schliessen=0                   ;//                                                |
           }                                    //                                                |
           break                               ;//                                                |
         case ER_MAGIC_B23:                     //                                                |
           if( Bid < B23Schliessen )            //                                                |
           {                                    //                                                |
             OrderDelete(B23)                  ;//                                                |
             Print(" STOP B23 at ",TimeToStr(TimeCurrent(),TIME_SECONDS)," Kurse: ",    //        |
                   dBid," ",dAsk," B23Schliessen= ",B23Schliessen) ;//                            |
             Alert(" STOP B23 ")               ;//                                                |
             B23=0                             ;//                                                |
             B23Schliessen=0                   ;//                                                |
           }                                    //                                                |
           break                               ;//                                                |
         case ER_MAGIC_B24:                     //                                                |
           if( Bid < B24Schliessen )            //                                                |
           {                                    //                                                |
             OrderDelete(B24)                  ;//                                                |
             Print(" STOP B24 at ",TimeToStr(TimeCurrent(),TIME_SECONDS)," Kurse: ",     //       |
                   dBid," ",dAsk," B24Schliessen= ",B24Schliessen) ;//                            |
             Alert(" STOP B24 ")               ;//                                                |
             B24=0                             ;//                                                |
             B24Schliessen=0                   ;//                                                |
           }                                    //                                                |
           break                               ;//                                                |
         case ER_MAGIC_B25:                     //                                                |
           if( Bid < B25Schliessen )            //                                                |
           {                                    //                                                |
             OrderDelete(B25)                  ;//                                                |
             Print(" STOP B25 at ",TimeToStr(TimeCurrent(),TIME_SECONDS)," Kurse: ",     //       |
                   dBid," ",dAsk," B25Schliessen= ",B25Schliessen) ;//                            |
             Alert(" STOP B25 ")               ;//                                                |
             B25=0                             ;//                                                |
             B25Schliessen=0                   ;//                                                |
           }                                    //                                                |
           break                               ;//                                                |
       }                                        //                                                |
 }                                              //                                                |
 return                                        ;//                                                |
}                                                //                                                |
                                                //                                                |
//+------------------------------------------------------------------------------------------------+

 

"CheckPendingHedge4Close()" ist eine der Funktionen die aus der Startroutine aufgerufen wird .

Und anstatt OrderDelete mag man sich bitte gerne auch OrderModify() dazu denken (das progge ich gerade im TSL) .

 

Nun meine Frage : Ist das effizient oder würdet Ihr mir eine andere Struktur empfehlen . Insbesondere

frage ich, ob Euch die Verwendung von Switch / Case gefällt . Persönlich mag ich sie , weil mir der

Code transparenter erscheint ... und das ist mal ganz sicher Geschmackssache . Eine Schleife würde

vermutlich weniger Zeilen brauchen . Mit "STRG & C" sowie "STRG & V" bin ich wiederum auch recht schnell

und "Strg & F" läßt mich schnell die varieerenden Namen umbenennen .

 

Aber dennoch ist es "verflucht langer Code" denn die CheckPending...4close ist nur eine von vielen (logo alle in Includes geordnet)

 

Also : was würdet Ihr besser finden ?

 

KB

 

@liebe Admin : wie immer, wenn ich im falschen Thread herum tobe, dann verzeiht mir :wub: und verschiebt mich

Geschrieben

Nun meine Frage : Ist das effizient oder würdet Ihr mir eine andere Struktur empfehlen .

 

Wenn du irgendwo gewisse Fälle unterscheiden musst ist switch immer eine gute Wahl. Mich würden da jetzt nur die ganzen unnötigen Fälle stören (die cases wo nur ein break drin is).

Geschrieben

jetzt nur die ganzen unnötigen Fälle stören (die cases wo nur ein break drin is).

Diese Funktion wird in diesem EA bislang 6mal aufgerufen. Daher habe ich mir einen Standardschalter geschrieben, fülle diesen je nach Funktion

aus (so wie in diesem das Löschen von B2X wenn Bid kleiner als B2XSchliessen ist) und lösche dann den Rest des Schalter ... wenn

er denn fertig ist.. das ist hier noch nicht der Fall gewesen :wub: . Sry & Dank für Dein Feedback Mythos . KB

Geschrieben

Im folgenden Schnipsel soll eine StopBuy mit Hilfe von der Funktion Pair1_B21 in den Markt gelegt werden :

 

 

    
   if( OrderSymbol() == ip_cSymbol )            //                                                |
       if( OrderType() == OP_SELL )             //  nur aktive Short bekommen einen Hedge         |
       switch( OrderMagicNumber() )             //                                                |
       {                                        //                                                |
         case ER_MAGIC_S21:                     //                                                |
           if(OrderSelect(B21, SELECT_BY_TICKET)==false)   //                                     |
           {                                    //                                                |
              Pair1_B21((dAsk + Gap))          ;//                                                |
              Print("C_P_H_4_O : S21= ",S21,"life => nun Entry B21= ",B21)   ;//                  |
           }                                    //                                                |
           break;                               //                                                |

 

Und das soll aber nur passieren, wenn ich a.) im richtigen Markt bin b.) sich eine aktive Shortorder mit der Magicnummer "ER_MAGIC_S21" im Markt befindet .

 

Nun das Problem : ausserdem soll sich die Order mit der Ticketnummer "B21" (das ist eine INT Variable) NICHT (mehr) im Markt befinden .

 

Hintergrund : B21 (Buy) ist ein Hedge zu S21 (Short) , B21 soll immer im Markt sein , wenn S21 im Markt ist .

Zu Beginn ist B21 also Null, später dann kann B21 jeden anderen Wert annehmen und wird nicht mehr Null sein .

Daher ist eine Abfrage "B21==0" sinnlos, es klappt nur beim ersten Trade .

 

Also brauche ich eine Abfrage :

 

Ist der Trade, der mal die Ticketnummer B21 hatte, noch im Markt ?

Nein ? => Dann platziere neuen "B21" .

 

und ...

if(OrderSelect(B21, SELECT_BY_TICKET)==false)  

... funzt nicht

 

Dank für Hilfe .

 

KB

Geschrieben

und ...

if(OrderSelect(B21, SELECT_BY_TICKET)==false)  

... funzt nicht

 

Kann nicht funzen weil du die Order ja immer selektieren kannst wenn es sie mal gab.

 

Probier mal das:

 

if(OrderSelect(B21, SELECT_BY_TICKET)==true) {
 if(OrderCloseTime() > 0)
     //nicht im Markt
 else
     //noch aktiv
}

Geschrieben

, natürlich funktioniert es .

 

doch nicht . Zu früh gefreut . Hintergrund ist , wie folgt :

 

OrderSelect only selects open trades, OrderCloseTime will always be zero

 

OrderSelect( ..., MODE_HISTORY) only selects closed trades, OrderCloseTime will always be nonzero

 

aus http://forum.mql4.com/37904#412143

 

Nun wäre mein Problem gelöst, wenn nicht in meinem EA die Möglichkeit bestehen würde,

dass zwischendurch noch andere Trades geschlossen werden . Es kann also durchaus sein,

dass die von mir zu überprüfende Order an 2 oder 4 Stelle in der Historie steht, bevor ich

die Prüfung starte.

Also muss ich eine ID-Nummer definieren , die auch nicht die Magicnummer sein kann .

Denn diese habe ich fix vorgegeben . Oder soll ich die mit einem Counter verbinden ?

 

Alles nicht so leicht .... Ideen "more than welcome" . Eigentlich verblüffend, dass diese

Abfrage doch nicht sooo leicht zu beantworten ist, dass sagen die auch im forum.mql4.com.

Dort wollte man einen speziellen Befehl anregen . Aber das nur am Rande .

 

KB

Geschrieben

Alles nicht so leicht .... Ideen "more than welcome"

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 Funktionen:

 

void AddTicket(int iTicket)
{
bool bFound = false;
for (int ii=0; ii<ArraySize(processed_tickets); ii++)
{
 if (processed_tickets[ii] == 0)
 {
  bFound = true;
  processed_tickets[ii] = iTicket;
  break;
 }
}

if (!bFound)
{
 ArrayResize(processed_tickets, ArraySize(processed_tickets)+1);
 processed_tickets[ArraySize(processed_tickets)-1] = iTicket;
}
}

bool FindTicket(int iTicket, bool bDelete=false)
{
bool result = false;
for (int ii=0; ii<ArraySize(processed_tickets); ii++)
{
 if (processed_tickets[ii] == iTicket)
 {
  result = true;
  if (bDelete) processed_tickets[ii] = 0;
  break;
 }
}

return(result);
}

 

Mit AddTicket wird das Ticket im Array gespeichert und mit FindTicket wird es gesucht. Vielleicht hilft der EA dir weiter, müsste inhaltlich nämlich deinem Problem nahe kommen.

ShortMe.mq4

Geschrieben

ich kannte nicht mal den Befehl AddTicket

Hätte mich auch gewundert, den habe ich selbst erfunden :sunglass:

Geschrieben

Nun wäre mein Problem gelöst, wenn nicht in meinem EA die Möglichkeit bestehen würde,

dass zwischendurch noch andere Trades geschlossen werden . Es kann also durchaus sein,

dass die von mir zu überprüfende Order an 2 oder 4 Stelle in der Historie steht, bevor ich

die Prüfung starte.

Also muss ich eine ID-Nummer definieren , die auch nicht die Magicnummer sein kann .

Denn diese habe ich fix vorgegeben . Oder soll ich die mit einem Counter verbinden ?

 

Moment, das Orderticket ist ja genau dafür da eine Order eindeutig zu identifizieren. Und du selektierst ja über das Ticket.

 

Und zu deinem "MODE_TRADES" vs. "MODE_HISTORY" (das ist der pool-parameter):

The pool parameter is ignored if the order is selected by the ticket number.

 

Inwiefern funktioniert meine Version nicht?

Geschrieben
Inwiefern funktioniert meine Version nicht?
Sie funktioniert in meinem EA nicht und das kann durchaus an dem Rest des Code gelegen habe und nicht an Deinem und wenn dem so sein sollte : Ganz sicher habe ich nichts Böses gewollt .

Allerdings habe ich dem Beitrag aus http://forum.mql4.com/37904#412143 entnommen , dass

 

if(OrderSelect(B21, SELECT_BY_TICKET)==true) {
 if(OrderCloseTime() > 0)

 

sich gegenseitig ausschliessen sollen . Alle Order im Pool sind Pending oder im Markt und niemals geschlossen (die befinden sich in der History) , OrderCloseTime ist bei diesen somit also "Null" .

Will ich an die History kommen, dann muss ich diese speziell im OrderSelect aufrufen .

 

Oder ist da mein Englisch zu schlecht oder die irren sich im Forum ? Ich weiss es wirklich nicht . Schmeisse ich Pool, MODE_Trades und MODE_HISTORY durcheinander ?

 

 

@RAiNWORM : bald werde sicher auch ich den Unterschied zwischen einem Befehl und einer Funktion IMMER und nicht nur manchmal erkennen . :loungelizard:

 

KB

Geschrieben
Ganz sicher habe ich nichts Böses gewollt.

Hab ich auch nicht so verstanden, will nur helfen den Fehler zu finden ;)

 

Zu OrderSelect:

The function selects an order for further processing. [...]

The pool parameter is ignored if the order is selected by the ticket number. The ticket number is a unique order identifier. To find out from what list the order has been selected, its close time must be analyzed. If the order close time equals to 0, the order is open or pending and taken from the terminal open positions list. [...] If the order close time does not equal to 0, the order is a closed order or a deleted pending order and was selected from the terminal history.

[...]

 

Übersetzt heißt das folgendes:

 

Die Funktion wählt eine Order für die weitere Bearbeitung aus. [...] Wenn die Order über das Ticket ausgewählt wird, wird der Poolparameter ignoriert. Das Orderticket ist eine Zahl zur eindeutigen Identifizierung einer Order. Um Herauszufinden aus welcher Liste die Order ausgewählt wurde, muss die Zeit der Orderschließung analysiert werden. Wenn die Schließungszeit 0 ist, ist die Order offen oder wartend (pending) und wurde aus der Liste der offenen Positionen im Terminal ausgewählt. [...] Wenn die Schließungszeit nicht 0 ist ist die Order geschlossen oder gelöscht und wurde aus der History des Terminals ausgewählt.

 

Zu gut deutsch: Wenn du SELECT_BY_POS machst hättest du Recht. Dann musst du entscheiden welchen Pool du dir anschaust (offene oder History). Hat den Sinn das man meist alle offenen Orders untersuchen will und es da keinen Sinn macht das man die (möglicherweise) Unmengen an geschlossenen Orders mit durchläuft.

Wenn du aber per Ticket wählst, wählst du genau eine Order aus und es ist egal wo sie gerade liegt, wenn die Order mit diesem Ticket von dir ist, wird sie ausgewählt.

 

Was du natürlich aufpassen musst: Wenn du so überprüfst ob es die Order gibt, ist jetzt diese Order ausgewählt. Wenn du danach wieder die Order von zuvor verwenden willst, musst du diese neue auswählen.

 

hth

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.