Diskussion zum Artikel "Die Entwicklung von grafischen Oberflächen für Expert Advisors und Indikatoren auf Basis von .Net Framework und C#"

 

Neuer Artikel Die Entwicklung von grafischen Oberflächen für Expert Advisors und Indikatoren auf Basis von .Net Framework und C# :

Der Artikel stellt eine einfache und schnelle Methode zur Erstellung von grafischen Fenstern mit Visual Studio mit anschließender Integration in den MQL-Code des Expert Advisors vor. Der Artikel richtet sich an ein nicht spezialisiertes Publikum und erfordert keine Kenntnisse der Technologie von C# oder .Net.

MetaTrader 5 Strategie-Tester hat eine Reihe von Funktionen, die von MQL-GUI-Entwicklern berücksichtigt werden sollten. Die wichtigste ist die Tatsache, dass die grafische Ereignisverarbeitungsfunktion OnChartEvent überhaupt nicht aufgerufen wird. Diese Funktion ist logisch, da die grafische Form die Arbeit mit einem Benutzer in Echtzeit beinhaltet. Es wäre jedoch äußerst interessant, eine bestimmte Art von Panels im Tester zu implementieren. Dies sind die sogenannten Trading Player, die es den Nutzern ermöglichen, ihre Handelsstrategien manuell zu testen. Beispielsweise generiert der Strategietester im Schnelldurchlauf die aktuellen Marktpreise, während ein Benutzer auf die Schaltflächen Kaufen und Verkaufen klickt, um die Handelsoperationen mit der Historie zu simulieren. Das TradePanel, das wir entwickelt haben, bietet genau diese Art von Panels. Trotz seiner Einfachheit kann es sich durchaus um einen reinen Handelspartner mit den notwendigsten Funktionen handeln. 

Aber lassen Sie uns darüber nachdenken, wie unser Panel im Strategietester MetaTrader 5 funktionieren wird. Das Grafikfenster von TradePanel existiert als eigenständige Net-Assembly. Daher ist es nicht von der aktuellen Umgebung des MetaTrader 5 oder gar dem Terminal selbst abhängig. Genau genommen kann es von jedem anderen Programm aus ausgeführt werden, während sogar Benutzer selbst Assemblies starten können, die sich im Exe-Container befinden.

Somit muss unser Programm OnChartEvent nicht aufrufen. Darüber hinaus ist es möglich, Daten im Fenster zu aktualisieren und neue Aufträge von Benutzern zu erhalten, in jedem Fall aber mit einer Funktion, die regelmäßig im Strategie-Tester gestartet wird. OnTick und OnTimer sind solche Funktionen. Das Panel arbeitet durch sie hindurch. Daher ist unser Panel zwar für den Echtzeitbetrieb ausgelegt, funktioniert aber auch gut im Strategietester. Hierfür sind keine Änderungen erforderlich. Lassen Sie uns diese Aussage überprüfen, indem wir unser Panel im Tester starten und mehrere Deals tätigen:

Autor: Vasiliy Sokolov

 

Der Ansatz ist durchwegs interessant.

Doch warum, um Himmels Willen, sind Buy- und Sell-Seiten vertauscht ?

Turmbau zu Babel.

 
Er hat nur Rot und Schwarz vertauscht, wenn Du schnell genug schaust ;) siehst Du, dass unter Buy der höhere der beiden Preise steht - alles in Ordnung, technisch!
 
Carl Schreiber:
Er hat nur Rot und Schwarz vertauscht, wenn Du schnell genug schaust ;) siehst Du, dass unter Buy der höhere der beiden Preise steht - alles in Ordnung, technisch!

Buy und Sell sind rechts/links vertauscht. Warum? Damit man sich vertut?

Im Original ist SELL links.

Ubrigens das Original ist das beste Pnel überhaupt, es akzeptiert sowohl . als auch ,

Wäre toll wenn das überall so wäre. Aber solche Wünsche habe ich abgeschrieben.

 

I am also trying to import a C# assembly. I can compile successfully, even with a call to a method imported from the assembly, so during compile time, everything seems to be fine.

But during executing in the Strategy Tester, it fails to load the EA with a simple "Cannot load 'MyDll.dll' [0]".

I put the DLL into MQL5\Libraries. I also tried putting it into the GAC, but nothing helped.

Any pointers on how to troubleshoot this?

 
dhilgarth:

I am also trying to import a C# assembly. I can compile successfully, even with a call to a method imported from the assembly, so during compile time, everything seems to be fine.

But during executing in the Strategy Tester, it fails to load the EA with a simple "Cannot load 'MyDll.dll' [0]".

I put the DLL into MQL5\Libraries. I also tried putting it into the GAC, but nothing helped.

Any pointers on how to troubleshoot this?

Ruf mal im Editor die MQL-Referenz (in der "Hilfe") auf, geh auf die Suchen Tab und trage Dll ein, Enter.

Dann gibt es eine Seite, wie dlls (und anderes) importiert wird.

Besser ist aber wohl dieser Artikel: https://www.mql5.com/de/articles/18

bzw, das hier: https://www.mql5.com/de/docs/runtime/testing#dll

Sonst hilft in die Suche oben rechts tester dll eingeben.
Datenaustausch: Erstellen einer DLL für MQL5 in 10 Minuten
Datenaustausch: Erstellen einer DLL für MQL5 in 10 Minuten
  • www.mql5.com
Tatsächlich erinnern sich nicht viele Entwickler daran, wie eine simple DLL-Bibliothek geschrieben wird und was die Merkmale der unterschiedlichen Systemanbindungen sind. Anhand mehrerer Beispiele werde ich versuchen, Ihnen den gesamten Prozess zur Erstellung einer simplen DLL in 10 Minuten zu zeigen, sowie einige technische Einzelheiten der...
 

Also der Controller ist schon genial und man bekommt richtig gute Ideen, was man machen könnte aber der MT5 hat ein entschiedenes Problem:

Jede *.dll die eingebunden wird in dem mq5 EA, wird für andere Zugriffe unbrauchbar, ebenso kann der Controller, keine Daten an andere dll's weiterleiten.

Liegt wohl daran, dass der c# code wohl direkt mit kompiliert wird und somit kann man verschiedene Dinge nicht machen.

Des weiteren lassen sich mehrere Forms nicht managen, da ich jedes Control, welches Daten empfängt auf beiden Forms haben muss oder nur auf der ersten.

Die einzige Möglichkeit dies zu umgehen besteht, in einem Tabcontrol zu benutzen in dem man dann die verschiedenen Seiten Baut, die man braucht, Handel, Nachrichten, History etc.

Oder man muss auf C++ zurückgreifen, diese dll's kann man importieren und muss die einzelnen Funktionen importieren.

 

Dieser Artikel hat mich sehr interressiert. Endlich eine Möglichkeit ein echtes Fenster zu öffnen und alles was man so haben will. Das ganze Beispiel läuft mit der Einschränkung, daß nur die vorgegebenen Dateien funktionsfähig sind. Weiter gibt es Probleme mit "enum GuiEventType", wenn man diesen "enum" nicht selber hinzufügt kompiliert MetaTrader5 das Beispiel erst garnicht. Dem Editor sind die Events nur solange aus der DLL bekannt bis man kompilieren will. 

Es wäre sehr schön gewesen, endlich auch echte Oberflächenmöglichkeiten zu haben. Aber leider ist dieses hier nur ein Demo - sehr neiderweckend für mich.

Die allererste Einsatzmöglichkeit für mich wäre eine Anzeige gewesen, da System-Out doch sehr altbacken und unleserlich ist. Aber leider funktioniert das Demo nur mit den kompilierten Varianten. Sobald ich selber die DLL mit Visual kompiliere, startet das Programm mit einem .NET-Fehler. Egal ob Kompilierung auf 3.x- oder 5-.NET gewählt wurde. Meine Vermutung ist, das unser Author nunmal einen speziellen MetaTrader hat, wo sowas läuft- schade.

Grund der Beschwerde: