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:
--- 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:
--- 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 |
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--){ Code:
for(int l=OrdersTotal()-1;l>=0;l--){ |
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! :) |
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 |
Zitat:
Zitat:
Danke für die Infos, das ist hilfreich für mich. |
Alle Zeitangaben in WEZ +2. Es ist jetzt 17:21 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