Cycle Operator 'für' Fragen - Seite 13

 

Simon,

"Ihre while-Schleife hat kein Ticket gefunden ... . ."

Sie hat nicht "möglicherweise" den Ticketindex im History-Pool gefunden, sie hat ihn gefunden, sonst wären die folgenden Funktionen nicht ausgeführt worden :)


" ein Poolindex != eine Ticketnummer hatten wir das nicht schon mal ?"

Lassen Sie mich das jetzt klarstellen,

Eine Auftragsticketnummer ist die eindeutige Ticketnummer, die einem Auftrag zugewiesen wird, sobald die Anfrage abgesch ickt wurde.

Eine Auftragspositionsnummer ist die Position eines Auftrags in einem Auftragspoolindex(wichtig zu verstehen) , ähnlich einem Array.


"Warum erwarten Sie, dass die geschlossene USDJPY-Order in einem völlig anderen Pool, dem History-Pool, an der gleichen Position landet?"

Das sollte ich nicht, weil es ein separater Pool ist.

In dem von mir vorgestellten Code -

   if(OrderType()==OP_BUY){bid_ask=MarketInfo("USDJPY",MODE_BID);}
   if(OrderType()==OP_SELL){bid_ask=MarketInfo("USDJPY",MODE_ASK);}
   if((OrderStopLoss()!=0)&&(OrderTakeProfit()!=0))
   if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)&&(OrderSymbol()=="USDJPY"))
     {      
      OrderClose(OrderTicket(),OrderLots(),bid_ask,3,CLR_NONE);

      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)
      
      Print(OrderCloseTime());
     }

wird offenbar die Order aus dem History-Pool ausgewählt, richtig? Zumindest ist es das, was ich aus der Dokumentation entnommen habe. Außerdem habe ich vor kurzem versucht, etwa fünf Aufträge für verschiedene Währungspaare zu öffnen, einen davon zu schließen und dann den EA einzuschalten, und er hat immer noch alle Funktionen ausgeführt, einschließlich Print(OrderCloseTime());.


Ich danke Ihnen.

 
WhooDoo22:

Simon,

"Ihre while-Schleife hat kein Ticket gefunden ... . ."

Sie hat nicht "möglicherweise" den Ticket-Index im History-Pool gefunden, sie hat ihn gefunden, sonst wären die folgenden Funktionen nicht ausgeführt worden :)

Welche Funktionen benutzen Sie, die eine Ticketnummer verwenden? Ihre OrderSelects sind alle SELECT_BY_POS ... POS bedeutet POSition, also ich wiederhole, Ihre while-Schleife findet kein Ticket, sondern einen Index im Order-Pool.


Was Sie aus dem History-Pool auswählen, ist die Order an der Indexpositioni. Woher wissen Sie, dass die Order, die Sie gerade geschlossen haben, an der Positioni steht? Die Antwort ist, dass Sie es nicht wissen. Der Wert voni ist die Position, an der sich die USDJPY-Order im Orderpool befand ... Die Pools sind völlig getrennt und in keiner Weise miteinander verbunden.
 

Simon,

"Ihre while-Schleife findet kein Ticket, sondern einen Index im Auftragspool."

Ja, ich glaube, ich verstehe das. Das sollte kein Problem sein.


"Die Pools sind völlig getrennt und in keiner Weise miteinander verbunden."

Das ist klar, aber der Code-Block der Funktion OrderClose() scheint so zu funktionieren, wie es vorgesehen ist. Ich werde den Codeblock so anpassen, dass der Wert der Bestellscheinnummer gespeichert wird, um mit dem fortzufahren, was Sie ansprechen möchten. Einverstanden?

ERSTENS möchte ich diese Frage stellen: Warum sollte die Positionsnummer des Auftragspools in der Vergangenheit nicht dieselbe sein wie die aktuelle Positionsnummer des Pools? Ich glaube, dass diese Nummer dieselbe ist.


Ich danke Ihnen.

 
WhooDoo22:

Simon,

"Ihre while-Schleife findet kein Ticket, sondern einen Index im Auftragspool."

Ja, ich glaube, ich verstehe das. Das sollte kein Problem sein.


"Die Pools sind völlig getrennt und in keiner Weise miteinander verbunden."

Das ist klar, doch der Codeblock der Funktion OrderClose() scheint wie vorgesehen zu funktionieren.

Der Aufruf von OrderClose() wurde nicht geändert und sollte daher weiterhin funktionieren.


Dies funktioniert jedoch nicht wie beabsichtigt, weil das Konzept fatal fehlerhaft ist ... bis Sie verstehen, warum es keinen Sinn hat, weiterzumachen.

 if(OrderType()==OP_BUY){bid_ask=MarketInfo("USDJPY",MODE_BID);}
   if(OrderType()==OP_SELL){bid_ask=MarketInfo("USDJPY",MODE_ASK);}
   if((OrderStopLoss()!=0)&&(OrderTakeProfit()!=0))


   if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)&&(OrderSymbol()=="USDJPY"))
     {      
      OrderClose(OrderTicket(),OrderLots(),bid_ask,3,CLR_NONE);

      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)
      
      Print(OrderCloseTime());
     }
 
WhooDoo22:


ERSTENS möchte ich diese Frage stellen: Warum sollte die Nummer der historischen Poolposition eines Auftrags nicht dieselbe sein wie die aktuelle Poolpositionsnummer? Ich glaube, dass die Nummer dieselbe ist.


Gehen Sie zu Ihrem Demo-Konto, mit dem Sie getestet haben... wie viele offene Aufträge haben Sie? wie viele Aufträge haben Sie in Ihrer Historie auf der Registerkarte Kontohistorie?
 

Simon,

Account History" enthält sechsundfünfzig.

Handel" (offene Aufträge) enthält drei.


Ich warte darauf, dass du schreibst: "Ich schätze, es funktioniert WhooDoo. :)"

Hooold on, ich habe die zurückgegebene Ticketnummer der Print()-Funktion überprüft und es wurde eine andere Ticketnummer als die der USDJPY-Order zurückgegeben.

Funktioniert also nicht. Bestätigt. Ich bin froh, dass ich es trotzdem versucht habe, diese Lektion war eine Diskussion wert.

Ich danke Ihnen.

 
WhooDoo22:

Simon,

Account History" enthält sechsundfünfzig.

Die Rubrik "Handel" (offene Aufträge) enthält drei.

Wenn Sie eine neue USDJPY-Order erstellen und Ihren Code ausführen und diese neue Order mit dem Wert 3 gefunden wird, welche Position im History Pool wird Ihre USDJPY-Order einnehmen, wenn Sie sie schließen? Es gibt bereits 56, also ist Position 3 bereits besetzt, ebenso wie Position 4, 5, 6, 7 . . 55
 

Simon,

57.

   if(OrderType()==OP_BUY){bid_ask=MarketInfo("USDJPY",MODE_BID);}
   if(OrderType()==OP_SELL){bid_ask=MarketInfo("USDJPY",MODE_ASK);}
   if((OrderStopLoss()!=0)&&(OrderTakeProfit()!=0))
   if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)&&(OrderSymbol()=="USDJPY"))
     {      
      int usdjpy_ticket_number=OrderTicket();
      
      OrderClose(OrderTicket(),OrderLots(),bid_ask,3,CLR_NONE);

      if(OrderSelect(usdjpy_ticket_number,SELECT_BY_TICKET,MODE_TRADES)==true)
      
      Print("Ticket number for USDJPY = ",usdjpy_ticket_number);
      Print("Order close time = ",OrderCloseTime());
     }

Ich danke Ihnen.

 
WhooDoo22:

Simon,

57.

Ich danke Ihnen.

i ist 3. Wie kann es also gelingen, den Auftrag an Position 3 im History Pool auszuwählen, um den Auftrag an Position 57 zu erhalten? ?
 

Simon,

Das wird es nicht. Ich habe das vor kurzem wiederentdeckt.

Ich danke Ihnen.