Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 5 > Programmierung MQL5

Programmierung MQL5 Hier gehts rund ums Programmieren in MQL5.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4883
Beiträge: 42954
Benutzer: 7.176
Aktive Benutzer: 85
Links: 83
Wir begrüßen unseren neuesten Benutzer: NiceMods
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 2 Stunden
- NiceMods
vor 3 Tagen
- schlupjup
vor 5 Tagen
- Brunow
vor 6 Tagen
- Berndt
vor 6 Tagen
- hellbird

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

Empfehlungen

Like Tree3Likes
Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 11.06.22
Mitglied
 
Registriert seit: Feb 2017
Beiträge: 66
pascalper befindet sich auf einem aufstrebenden Ast
Standard Umstellung MT4 -> MT5

Hallo,
ich beginne meinen MT4 EA auf MT5 umzustellen, die Vorteile sind klar.
Coding C, Pascal kein Problem für mich, MT5 C++ "Dialekt" ist schon eine Herausforderung

Nun möchte ich die Community befragen ob die Umstellung nachfolgender Funktion korrekt ist? Bitte Danke im voraus!
Arbeite viel mit globalen Variablen, die Weiterverarbeitung (nächste Order, etc) erleichtert sich um einiges.
Beim kompilieren im MT5 gibt es keine Fehler, jeglicher Art.

MT4
Code:
  void GlobalSet() {
   for(int pos=0;pos<HistoryOrdersTotal();pos++)
   if(OrderSelect(pos,SELECT_BY_POS,MODE_HISTORY))
   if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) {
    if(OrderType()==OP_BUY && OrderProfit()<0) {
     GlobalVariableSet(Symbol()+"-LastBuyLots",OrderLots());
     GlobalVariableSet(Symbol()+"-LastBuyProfit",OrderProfit());
     GlobalVariableSet(Symbol()+"-LastSellLots",0);
     GlobalVariableSet(Symbol()+"-LastSellProfit",0);
     } 
    if(OrderType()==OP_SELL && OrderProfit()<0) {
     GlobalVariableSet(Symbol()+"-LastSellLots",OrderLots());
     GlobalVariableSet(Symbol()+"-LastSellProfit",OrderProfit());
     GlobalVariableSet(Symbol()+"-LastBuyLots",0); 
     GlobalVariableSet(Symbol()+"-LastBuyProfit",0);
     }
   }
  }
MT5
Code:
  void GlobalSet() {
   ulong total=HistoryOrdersTotal();
   ulong ticket;
   for(uint i=0;i<total;i++) {
    if((ticket=HistoryOrderGetTicket(i))>0) {
     if(PositionGetString(POSITION_SYMBOL)==Symbol() && PositionGetInteger(POSITION_MAGIC)==Magic) {
     
      if(ENUM_POSITION_TYPE(ORDER_TYPE_BUY) && ENUM_ORDER_PROPERTY_DOUBLE(POSITION_PROFIT)<0) {
      GlobalVariableSet(Symbol()+"-LastBuyLots",ENUM_ORDER_PROPERTY_DOUBLE(ORDER_VOLUME_INITIAL));
      GlobalVariableSet(Symbol()+"-LastBuyProfit",ENUM_ORDER_PROPERTY_DOUBLE(POSITION_PROFIT));
      GlobalVariableSet(Symbol()+"-LastSellLots",0);
      GlobalVariableSet(Symbol()+"-LastSellProfit",0); }
     
      if(ENUM_POSITION_TYPE(ORDER_TYPE_SELL) && ENUM_ORDER_PROPERTY_DOUBLE(POSITION_PROFIT)<0) {
      GlobalVariableSet(Symbol()+"-LastSellLots",ENUM_ORDER_PROPERTY_DOUBLE(ORDER_VOLUME_INITIAL));
      GlobalVariableSet(Symbol()+"-LastSellProfit",ENUM_ORDER_PROPERTY_DOUBLE(POSITION_PROFIT));
      GlobalVariableSet(Symbol()+"-LastBuyLots",0);
      GlobalVariableSet(Symbol()+"-LastBuyProfit",0); } 
         }
       }
     }
   }
Fragen:
- Richtig von MT4 auf MT5 übertragen?
- MT5 "ticket" (rot) überhaupt notwendig?

Beste Grüße
pascalper
Mit Zitat antworten
  #2 (permalink)  
Alt 12.06.22
Benutzerbild von Indikator-Trading
Premium Mitglied
 
Registriert seit: May 2020
Ort: Bielefeld
Beiträge: 321
Indikator-Trading befindet sich auf einem aufstrebenden Ast
Standard

Hallo,
du kannst HistoryOrderGetTicket natürlich benutzen und dann über HistoryOrderGetString() HistoryOrderGetDouble() und HistoryOrderGetInteger() die entsprechenden Werte der Order auslesen.
HistoryOrderGetTicket() selektiert allerdings nicht die jeweilige Order.
Dafür musst du HistorySelect() oder HistorySelectByPosition() aufrufen.
Mit Zitat antworten
  #3 (permalink)  
Alt 12.06.22
Benutzerbild von Indikator-Trading
Premium Mitglied
 
Registriert seit: May 2020
Ort: Bielefeld
Beiträge: 321
Indikator-Trading befindet sich auf einem aufstrebenden Ast
Standard

Das Hauptproblem ist hier allerdings, dass du PositionGetString() nutzt, also eine Funktion die die Eigenschaften einer noch offenen Position auslesen soll.

Mit dem MT5 kann man ja echte Aktien und auch Futures ohne CFD handeln. Das geht, da es im Gegensatz zum MT4 Orders, Deals und Positions gibt.

Mach dich also erstmal damit vertraut, dann klappt die Umstellung auf den MT5 deutlich einfacher.

Hier ein Link dazu:
https://www.mql5.com/de/articles/211
Mit Zitat antworten
  #4 (permalink)  
Alt 13.06.22
Mitglied
 
Registriert seit: Feb 2017
Beiträge: 66
pascalper befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Indikator-Trading Beitrag anzeigen
Das Hauptproblem ist hier allerdings, dass du PositionGetString() nutzt, also eine Funktion die die Eigenschaften einer noch offenen Position auslesen soll.

Mit dem MT5 kann man ja echte Aktien und auch Futures ohne CFD handeln. Das geht, da es im Gegensatz zum MT4 Orders, Deals und Positions gibt.

Mach dich also erstmal damit vertraut, dann klappt die Umstellung auf den MT5 deutlich einfacher.

Hier ein Link dazu:
https://www.mql5.com/de/articles/211
Danke für den Link, wird schon klarer - ein Mix der Pools geht natürlich nicht.

von
if(PositionGetString(POSITION_SYMBOL)==Symbol() && PositionGetInteger(POSITION_MAGIC)==Magic

geändert auf
if(HistoryOrderGetString(ticket, ORDER_SYMBOL)==Symbol() && HistoryOrderGetInteger(ticket, ORDER_MAGIC))
Mit Zitat antworten
  #5 (permalink)  
Alt 13.06.22
Mitglied
 
Registriert seit: Feb 2017
Beiträge: 66
pascalper befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Indikator-Trading Beitrag anzeigen
Hallo,
du kannst HistoryOrderGetTicket natürlich benutzen und dann über HistoryOrderGetString() HistoryOrderGetDouble() und HistoryOrderGetInteger() die entsprechenden Werte der Order auslesen.
HistoryOrderGetTicket() selektiert allerdings nicht die jeweilige Order.
Dafür musst du HistorySelect() oder HistorySelectByPosition() aufrufen.
Nun bin ich verwirrt...

Ich interpretiere deinen letzten Satz das man in der Reihenfolge selektiert?

1) HistoryOrdersTotal (Pool)
2) HistorySelectByPosition (Pos_id)
3) HistoryOrderGetTicket (oder Deals) Selektiert das nicht die Order/Deal?
4) HistoryOrderGetString, etc. (Eigenschaften)

Beispiele habe ich nur in der Reihenfolge 1+3+4 gefunden. Nicht von 1-4.

HistorySelectByPosition NACH HistoryOrderGetTicket zu verwenden ergibt für mich (derzeit noch) keinen Sinn.

Könntest du mir Beispiele zeigen (Bitte, Danke) wo man HistorySelectByPosition verwendet, in der MT5 Doku (https://www.mql5.com/de/docs/trading...lectbyposition) unter HistorySelectByPosition steht:
"die Größe der Liste der Ordern kann man mittels HistoryOrdersTotal() erfahren. Elemente der Liste der Ordern ist es besser, mittels der Funktion HistoryOrderGetTicket() durchzusehen" (Grauenvolle Übersetzung...)
"the size of the list of orders in the history can be obtained using HistoryOrdersTotal(). To run through elements of the orders list, use HistoryOrderGetTicket()"
Habe mir die eng. Doku angesehen, steht genauso drinnen
(Ich lese mir immer grundsätzlich immer die de+en Doku durch, um die Infos zu bestätigen)

Bedeutet für mich:Mit HistoryOrdersTotal bekomme ich die gesamte Liste der Orders und mit HistoryOrderGetTicket die einzelnen Orders und weiterführend dann die Order/Deals Eigenschaften (HistoryOrderGetString)
Was ich so mache

Code:
   ulong total=HistoryOrdersTotal();
   ulong ticket;
   for(uint i=0;i<total;i++) {
    if((ticket=HistoryOrderGetTicket(i))>0)
Kann mich aber natürlich komplett verrannt haben!

Ps: HistorySelect(start, end) finde ich super! Wobei mein EA kaum die vollen Möglichkeiten von MT5 jemals brauchen wird.
Mit Zitat antworten
  #6 (permalink)  
Alt 15.06.22
Mitglied
 
Registriert seit: Jun 2022
Beiträge: 42
TraderMike befindet sich auf einem aufstrebenden Ast
Standard

Hallo
auch ich habe Probleme dem russischen Coding Gedanken zu folgen im besonderen das es keine wirklich guten (logischen) Beispiele gibt und die Doku entweder mehr schlecht als recht übersetzt ist....obwohl ich als Spiele Entwickler C*, Unify, Java, alles kann, der MT4/5 Krampf mit Date+Time als Beispiel, läßt einem den Kopf schütteln.

Nach langem Nachdenken bin ich zum Schluss gekommen das MetaQuotes den MT4 Server eigentlich nicht "abdrehen" kann, vielleicht wenn MT5 bei 90% Nutzung liegt, kein Broker kann und wird es sich leisten können die restlichen MT4 Retail Nutzer zu verlieren. MT5 ist von 90% noch Welten entfernt.

Viele haben nur ex4 Datein, oft gibt es für Scripte, Indikatoren, EA's kein MT5 Pedant.
Man sieht es an der Anzahl der MT5 Foreneinträge, das MT5 trotz seines Alters eher wenig verwendet wird, auch ist mir in anderen Foren aufgefallen das andere Coder ebenso Probleme haben, damit ist echtes OOP gemeint.

Da wird wohl zuerst eine MT4 Runtime innnerhalb MT5 kommen, damit kein Trader verloren geht - das Risiko für eine Nutzer Abwanderung ist einfach zu hoch. Es gibt genügend Alternativen.

Würde die MT5 Umstellung ganz locker angehen und gleich den MT4 Code entrümpeln, auch wenn MT5 viele Vorteile hat, bleibt der harte Kern weiterhin seriell prozedural-was keiner sagt oder schreibt, aka "es muss nicht schön sein (OOP), es muß funktionieren"!!!!!

Gruß
Mike

Geändert von TraderMike (15.06.22 um 13:52 Uhr)
Mit Zitat antworten
  #7 (permalink)  
Alt 15.06.22
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.677
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Auch ich gebe zu, dass MT5 nicht der Weisheit letzter Schluß ist.
Ich programmiere nun seit 12 Jahren hier und für Mitglieder eines anderen Forums
diverse EAs, Indikatoren und Scripte und meine auch, dass MT4 nicht so einfach abgestellt werden kann, wobei MT4 ja eigentlich schon MT4/5 heißen müsste, denn auch in MT4 kann man OOP.
Und ja die Datum- und Zeitfunktionen sind der absolute Graus.

Wie dem auch sei, die Aussage: es muß funktionieren ist die alles Entscheidende!

traderdoc
TraderMike likes this.
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Mit Zitat antworten
  #8 (permalink)  
Alt 15.06.22
Mitglied
 
Registriert seit: Jun 2022
Beiträge: 42
TraderMike befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von traderdoc Beitrag anzeigen
Auch ich gebe zu, dass MT5 nicht der Weisheit letzter Schluß ist.
Ich programmiere nun seit 12 Jahren hier und für Mitglieder eines anderen Forums
diverse EAs, Indikatoren und Scripte und meine auch, dass MT4 nicht so einfach abgestellt werden kann, wobei MT4 ja eigentlich schon MT4/5 heißen müsste, denn auch in MT4 kann man OOP.
Und ja die Datum- und Zeitfunktionen sind der absolute Graus.

Wie dem auch sei, die Aussage: es muß funktionieren ist die alles Entscheidende!

traderdoc
Ich denke du meintest MT 4.5, naja einige wesentliche Unterschiede gibt es schon von C zu C++, C ist eine Teilmenge von C++, der C++ Compiler unterstützt z.B. mehr Abstraktionsmechanismen, MT5 ist eher als ein schlampiges Scripting zu sehen.
Statt MT5 (russisches Dialekt C++) hätten sie in Richtung Objectve CAML (OCaml) gehen sollen, MT5 für die echten Profis und MT4 für den Retail.

Fakt ist, für die Trading Kernaufgaben braucht es kein OOP, da sind wir einer Meinung. Mir ist kein MT4 Retail Code bekannt der an die 32-Bit Grenze kommt, Klicki-Bunti Indikatoren eventuell, Auswertungen sollte man sowieso extern machen, egal ob 32-Bit oder 64-Bit um dem Klient keine Ressourcen wegzunehmen.

Mir persönlich wäre es am liebsten, wenn (mehr/viele) Broker API, bzw Bridges zur Verfügung stellen würden, denn der Datentransfer ist gering (OHLC, Orders) - dann würde ich mir einen eigenen superschnellen modularen Klient schreiben, ein "One Signal - many Broker", parallel Verarbeitung/Broker/Ordering rückte damit immer näher, alleine was man mit dem Symbol Management alles machen könnte...Spread, Swaps, Multi Currency, Method Ordering etc...das wäre sinnvoll, nicht der lausige Marketplace....

Gruß
Mike
Mit Zitat antworten
  #9 (permalink)  
Alt 15.06.22
Benutzerbild von Indikator-Trading
Premium Mitglied
 
Registriert seit: May 2020
Ort: Bielefeld
Beiträge: 321
Indikator-Trading befindet sich auf einem aufstrebenden Ast
Standard

Der MT5 hat zum MT4 zwei große Vorteile:
1)
Der Backtest kann mehrere Symbole zur gleichen Zeit simulieren.
D.h. ich kann einen Backtest mit z.B. allen 28 "großen" Forex Pairs gleichzeitig durchführen. Dies hat den Vorteil, dass man mehr statistische Signifikanz erhält und Curvefitting nicht soo schnell passiert (wenn man weiß was man macht)

Ein Backtest im M4 Chart mit 7 Symbolen hat bei mir z.B. ~20.000 Trades.

2)
Im MT5 werden alle Cores des Prozessors genutzt. Beim MT4 ist es immer nur einer. Mein aktueller Prozessor hat 24 Cores. Ein Optimierungsbacktest kann also bis zu 24 mal schneller laufen, als es beim MT4 der Fall wäre.

Für mich als Entwickler von EAs und Indikatoren ist es nicht nachvollziehbar weswegen man bei einer Software bleibt, welche 2005 Entwickelt wurde und die oben genannten Nachteile hat. Von 2005 hat es noch zwei weitere Jahre gedauert hat bis der erste iPhone vorgestellt worden ist... Davor waren alle Handys noch ohne Touch Screen...
Mit Zitat antworten
  #10 (permalink)  
Alt 15.06.22
Mitglied
 
Registriert seit: Jun 2022
Beiträge: 42
TraderMike befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Indikator-Trading Beitrag anzeigen
Der MT5 hat zum MT4 zwei große Vorteile:
1)
Der Backtest kann mehrere Symbole zur gleichen Zeit simulieren.
D.h. ich kann einen Backtest mit z.B. allen 28 "großen" Forex Pairs gleichzeitig durchführen. Dies hat den Vorteil, dass man mehr statistische Signifikanz erhält und Curvefitting nicht soo schnell passiert (wenn man weiß was man macht)

Ein Backtest im M4 Chart mit 7 Symbolen hat bei mir z.B. ~20.000 Trades.

2)
Im MT5 werden alle Cores des Prozessors genutzt. Beim MT4 ist es immer nur einer. Mein aktueller Prozessor hat 24 Cores. Ein Optimierungsbacktest kann also bis zu 24 mal schneller laufen, als es beim MT4 der Fall wäre.

Für mich als Entwickler von EAs und Indikatoren ist es nicht nachvollziehbar weswegen man bei einer Software bleibt, welche 2005 Entwickelt wurde und die oben genannten Nachteile hat. Von 2005 hat es noch zwei weitere Jahre gedauert hat bis der erste iPhone vorgestellt worden ist... Davor waren alle Handys noch ohne Touch Screen...
Hallo,

Multi Threading lasse ich ja noch so gelten!

Aber Backtests? Das ist komplett veraltet, denn mit veralteten statischen Daten kann man keine dynamische realtime Märkte bespielen!
Starre Settings sind der Tod in einem dynamischen Markt Umfeld!
Mit veralteten Daten auf die Zukunft schließen = Kaffeesud Leserei

Also wenn man halbwegs neartime sein möchte dann gibt es NUR eine Lösung: Foward Demos! Daraus kann ein Live EA SOFORT Nutzen ziehen! (CopyTrading, Named Pipes, etc)

Ich lasse Forward Demos mit jeweils ALLEN Symbolen, auch Indizes, Metalle etc = 86 Symbole pro MT4 laufen, weil manchmal läuft es im FX gut, dann wieder Silber, dann wieder Indizes usw.
Diese Daten stehen realtime zur Verfügung
Voraussetzung: Volldynamischer Profilgesteuerter Live EA, die eigentliche Arbeit machen die Forward Demos

Wenn du eurjpy, usdjpy, gbpjpy gleichzeitig handelst und der yen geht süden, laufen alle deine *jpy in den SL - mit neartime Daten kann man Method Ordering machen um genau solche Szenarien zu verhindern - mit Backtest Settings NICHT!

Die Restaussage werte ich als Marketing damit jemand deine Coding Skills vielleicht kauft....
IPhone mit FinanzSoftware zu vergleichen....

Gruß
Mike
Mit Zitat antworten
Antwort

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 +2. Es ist jetzt 19:15 Uhr.





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