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)
-   -   Wie wähle ich einen "individuellen" Trade aus? (http://www.expert-advisor.com/forum/showthread.php?t=6655)

LQK 11.05.20 12:50

Wie wähle ich einen "individuellen" Trade aus?
 
Hallo,

ich arbeite gerade an einem vollautomatischen EA, dieser soll nach vordefinierten Kriterien Trades selbstständig öffnen und schließen.

Dazu muss u.a. ein Trade "individuell" aufgerufen werden können, z.B. anhand seiner Trade-ID.

Ich bin mir noch nicht sicher, wie ich dieses "individuelle Aufrufen" eines Trades am besten mache.

Funktionen die in dem Zusammenhang von Interesse sein könnten sind:
  • OrderSelect()
  • OrderGetTicket()
  • OrderMagicNumber()
  • OrderTicket()

---

Wenn ich mit einem Trade irgendwas machen will, z.B. diesen verkaufen, muss ich ihn ja anscheinend zwingend (?) erstmal auswählen, das offenbar immer mit OrderSelect(). Hier eine kleine Erläuterung von OrderSelect() inkl. Erläuterung der Methodensignatur von OrderSelect():

https://docs.mql4.com/trading/orderselect

"Dummerweise" brauche ich, um einen Trade mit OrderSelect() auswählen zu können, ja erstmal einen "identifier". Anscheinend kann dieser identifier zum einen die Trade-ID sein (SELECT_BY_TICKET).

Dann stellt sich mir aber die Frage, woher weiß ich die Trade-ID ("order ticket"). Wenn ich die Trade-ID haben will, diese jetzt bereichts zum Auswählen des Trades mittels OrderSelect(), nützt mir das nichts. Eigentlich müsste ich dann ja die Trade-ID bereits beim Öffnen des Trades irgendwie dokumentieren, dass ich später notfalls auf die Trade-ID zugreifen kann, wenn ich diese brauche, z.B. um dann mit Hilfe der Trade-ID den Trade über OrderSelect() aufrufen zu können. Zu dem Zweck könnte ich z.B. bereits beim Öffnen des Trades die Trade-ID (also das "order ticket") auslesen und z.B. in einem array dokumentieren.

Die Frage ist, wie kann ich die Trade-ID (also das "order ticket") aus einem Trade auslesen? Bislang habe ich noch keine geeignete Methode gefunden, die die Trade-ID aus einem Trade ausliest.

---

Was ich mit SELECT_BY_POS machen kann, habe ich noch nicht ganz begriffen. Ist es so, dass die Pos(ition) eines Trades sich aus dem Zeitpunkt der Eröffnung ergibt? D.h. der zuerst geöffnete Trade hat Pos = 1, der als zweites geöffnete Trade Pos = 2, der als n. geöffnete Trade Pos = n?

---

Noch gar keine Idee habe ich derzeit, was der dritte Eingabeparamter von OrderSelect() zu bedeuten hat:

Zitat:

MODE_TRADES (default)- order selected from trading pool(opened and pending orders),
MODE_HISTORY - order selected from history pool (closed and canceled order).
Offenbar wird Pos hier nur jeweils anders definiert, bei MODE_HISTORY werden historische Trades für die Erstellung der Pos-Liste ebenfalls berücksichtigt, bei MODE_TRADES dagegen nicht?


---

Wie die weiteren in Frage kommenden Methoden evtl. dienlich sein könnten (OrderGetTicket(), OrderMagicNumber() und OrderTicket()) ist mir derzeit noch nicht klar. Kann ich mit einer dieser Funktionen das erreichen, was ich erreichen will: Auslesen der Trade-ID aus einem (neu eröffneten) Trade?

Eigentlich müsste es ja mit OrderGetTicket gehen. OrderGetTicket() wird hier erklärt:

https://www.mql5.com/de/docs/trading/ordergetticket

Allerdings ist das Auslesen der Ticket-ID dort auch nur wieder über die Pos möglich. Demnach wäre, wie man es auch immer dreht und wendet, die Order-ID gar nicht der eigentliche identifier, sondern immer die Pos. Tu mir mit dieser Vorstellung ein bisschen schwer, weil ja die Pos. sich ja während der Laufzeit ändern kann und somit kein ein-eindeutiger Wert ist. ;)

Oder mache ich irgendwo einen Denkfehler?


---

Bei OrderMagicNumber() steht in der Dokumentation:

https://docs.mql4.com/trading/ordermagicnumber

Allerdings ist mir hier dann unklar, was bitteschön eine "identifying magic number" sein soll, was daran das "magische" ist und wieso man diese magische Nummber zusätzlich zu Trade-ID und Pos benötigt.

---

Bei OrderTicket() ist mir unklar, was der Unterschied zu GetORderTicket() sein soll. :)

---

Ich freue mich über jeden konstruktiven Hinweis! :)

Grüße,
LQK

MA-EA 11.05.20 13:59

Select by Pos. So reichts eigentlich. Es sei denn, Du musst zum Bearbeiten/Schließen/was auch immer unbedingt das Ticket benutzen.
Code:

  for(int k=OrdersTotal()-1;k>=0;k--){
 
    if(OrderSelect(k,SELECT_BY_POS)){
   
      if(OrderType()==OP_BUY&&OrderMagicNumber()==Buy_MN&&OrderSymbol()==Symbol()){
...

Code:

  for(int l=OrdersTotal()-1;l>=0;l--){
 
    if(OrderSelect(l,SELECT_BY_POS)){
   
      if(OrderType()==OP_SELL&&OrderMagicNumber()==Sell_MN&&OrderSymbol()==Symbol()){
...


LQK 11.05.20 15:08

Okay, besten Dank.

Was mich an Pos "stört" ist halt, dass Pos nicht ein-eindeutig ist, d.h. eine Pos x kann mal auf den einen, mal auf den anderen Trade referenzieren.

Aber wenn es halt so ist... :)

Besten Dank nochmals! :)

traderdoc 11.05.20 15:23

Hallo @LQK,

mal vorab,

"ich arbeite gerade an einem vollautomatischen EA"

das kann ich mir z.Z. schwer vorstellen, weil Dir die Basics der Basics fehlen.
Das ist nicht weiter dramatisch, weil man alles erlernen kann, aber man sollte es erst einmal erlernen und dann erst einen vollautomatischen EA schreiben, sonst endest Du so wie @MA-EA bisher.

Um Dir ein paar Hilfestellungen zu geben, ja jede zu bearbeitende Order muss per OrderSelect() ausgewählt werden.
Mit SELECT_BY_POS wird in der Liste der Orders gesucht und die läuft vom Listenindex 0 bis OrdersTotal()-1.
MODE_TRADES wird angehängt wenn in der Liste der offenen Market oder PendingOrders gesucht werden soll
MODE_HISTORY wird angehängt, wenn in der Liste der geschlossenen Market- oder gelöschten PendingOrders gesucht werden soll

SELECT_BY_TICKET kann nur im Code stehen, wenn auch die TicketNumber bekannt ist und die wird entweder über SELECT_BY_POS und nachgeschaltetem OrderTicket() ermittelt oder die TicketNumbers werden schon beim Öffnen der Orders in ein Array geschrieben oder das Array wird permament neu gefüllt, indem über SELECT_BY_POS und nachgeschaltetem OrderTicket() die TicketNumbers aller Orders ausgelesen werden.

Schau Dir einfach fertigen und funktionierenden Code an, seziere jede Zeile bis Du sie verstanden hast und dann wird das schon was werden mit dem vollautomatischen EA.

traderdoc

LQK 12.05.20 13:12

Zitat:

Zitat von traderdoc (Beitrag 43651)
Hallo @LQK,

mal vorab,

"ich arbeite gerade an einem vollautomatischen EA"

das kann ich mir z.Z. schwer vorstellen, weil Dir die Basics der Basics fehlen.

Ja, der EA den ich gerade programmiere ist erstmal nur als Lernstück gedacht. Es handelt sich um eine ganz triviale Strategie die ich derzeit nicht mit echtem Geld zu handeln beabsichtige. Wie sich durch das programmieren meine Kenntnisse Stück für Stück verbessern, kann ich dann immer komplexere EA programmieren, und dann irgendwann diese sogar auf einem Konto mit echtem Geld arbeiten lassen. ;)

Zitat:

Um Dir ein paar Hilfestellungen zu geben, ja jede zu bearbeitende Order muss per OrderSelect() ausgewählt werden.
Mit SELECT_BY_POS wird in der Liste der Orders gesucht und die läuft vom Listenindex 0 bis OrdersTotal()-1.
MODE_TRADES wird angehängt wenn in der Liste der offenen Market oder PendingOrders gesucht werden soll
MODE_HISTORY wird angehängt, wenn in der Liste der geschlossenen Market- oder gelöschten PendingOrders gesucht werden soll

SELECT_BY_TICKET kann nur im Code stehen, wenn auch die TicketNumber bekannt ist und die wird entweder über SELECT_BY_POS und nachgeschaltetem OrderTicket() ermittelt oder die TicketNumbers werden schon beim Öffnen der Orders in ein Array geschrieben oder das Array wird permament neu gefüllt, indem über SELECT_BY_POS und nachgeschaltetem OrderTicket() die TicketNumbers aller Orders ausgelesen werden.

Danke für die Infos, das ist hilfreich für mich.


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