Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4973
Beiträge: 43289
Benutzer: 7.220
Aktive Benutzer: 81
Links: 84
Wir begrüßen unseren neuesten Benutzer: JosephTK
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 8 Stunden
- JosephTK
vor 2 Tagen
- Hopfen&Mal...
vor 3 Tagen
- frankmicha...
vor einer Woche
- DFeck
vor einer Woche
- bb1107

Onlineuser
'Wer ist online' anzeigen Benutzer: 0
Gäste: 416
Gesamt: 416
Team: 0
Team:  
Benutzer:  
Freunde anzeigen

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 11.05.20
LQK LQK ist offline
Mitglied
 
Registriert seit: Nov 2019
Beiträge: 76
LQK befindet sich auf einem aufstrebenden Ast
Standard 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
  #2 (permalink)  
Alt 11.05.20
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.178
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

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()){
...
  #3 (permalink)  
Alt 11.05.20
LQK LQK ist offline
Mitglied
 
Registriert seit: Nov 2019
Beiträge: 76
LQK befindet sich auf einem aufstrebenden Ast
Standard

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!
  #4 (permalink)  
Alt 11.05.20
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

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
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #5 (permalink)  
Alt 12.05.20
LQK LQK ist offline
Mitglied
 
Registriert seit: Nov 2019
Beiträge: 76
LQK befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von traderdoc Beitrag anzeigen
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.
Thema geschlossen

Lesezeichen

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +1. Es ist jetzt 06:34 Uhr.





Suchmaschine - Reisen - Wavesnode - Facebook Forum - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------