English Русский 中文 Español 日本語 Português
preview
Marktsimulation (Teil 06): Übertragen von Informationen von MetaTrader 5 nach Excel

Marktsimulation (Teil 06): Übertragen von Informationen von MetaTrader 5 nach Excel

MetaTrader 5Tester |
22 1
Daniel Jose
Daniel Jose

Einführung

Eines der Dinge, die einigen MetaTrader 5-Nutzern das Leben erschweren, ist die Tatsache, dass ihm sozusagen bestimmte Funktionen fehlen.

Viele Menschen, insbesondere Nicht-Programmierer, finden es sehr schwierig, Informationen zwischen MetaTrader 5 und anderen Programmen zu übertragen. Ein solches Programm ist Excel. Viele verwenden Excel, um ihre Risikokontrolle zu verwalten und aufrechtzuerhalten. Es ist ein ausgezeichnetes Programm und leicht zu erlernen, auch für diejenigen, die keine VBA-Programmierer sind. Die Übertragung von Informationen zwischen MetaTrader 5 und Excel gehört jedoch nicht zu den einfachsten Aufgaben, insbesondere wenn Sie keine Programmierkenntnisse haben.

Nichtsdestotrotz ist es äußerst nützlich, denn es vereinfacht das Leben derjenigen, die einfach nur handeln und Excel als Werkzeug für das Management des operationellen Risikos nutzen wollen. Ohne entsprechende Programmierkenntnisse werden Sie sich jedoch mit Sicherheit auf unbekannte Programme verlassen oder den MetaTrader 5 einfach aufgeben, weil Sie nicht in der Lage sind, Informationen von der Plattform in Excel zu übertragen.

Glücklicherweise bietet Excel einige sehr interessante Möglichkeiten, dies zu erreichen. Wir werden später noch ausführlicher auf sie zu sprechen kommen. Leider enthält MetaTrader 5 keine integrierte Funktion, die es uns ermöglicht, Informationen direkt an Excel zu senden. Sie benötigen entweder Programmierkenntnisse oder müssen sich ein Werkzeug anschaffen, mit dem Sie die Übertragung durchführen können.


Das Problem verstehen

Lassen Sie uns zunächst die anfänglichen Herausforderungen sowie die gebräuchlichsten Methoden der Datenübertragung zwischen Programmen und Excel verstehen. Eine der gängigsten Methoden ist die Verwendung von RTD (Real-Time Data) oder DDE (Dynamic Data Exchange). Beide Lösungen setzen jedoch Kenntnisse über die Programmierung von COM-Schnittstellen (Component Object Model) voraus, und viele Programmierer verfügen nicht über diese Fähigkeit. Und selbst wenn es Ihnen gelingt, eine solche Lösung zu entwickeln, wird sie nicht besonders flexibel sein.

Sowohl RTD als auch DDE sind unidirektionale Kommunikationsmethoden, d.h. sie bilden lediglich eine Brücke zwischen einem System und einem anderen. Sie lassen bestimmte Funktionen nicht zu, die vor allem für den Umgang mit Excel interessant wären. Da Excel diese Systeme jedoch von Haus aus unterstützt, sind sie nützlich, da sie eine Art Echtzeitkommunikation ermöglichen.

Aber lassen Sie uns das Ganze etwas weiter fassen. Wie oft benötigen Sie wirklich Echtzeitdaten in Excel? In den meisten Fällen ist eine leichte Verzögerung durchaus akzeptabel. Und damit meine ich nicht diejenigen, die Excel als Steuerungssystem für einen automatisierten Handelsroboter verwenden wollen. Wenn Sie MetaTrader 5 verwenden, werden Sie zweifellos wollen, dass die Berechnungen innerhalb der Plattform stattfinden und nicht an Excel gesendet werden. Es macht einfach keinen Sinn, Excel eine Position berechnen zu lassen und dann Ihren Expert Advisor im MetaTrader 5 auf der Grundlage der Excel-Ergebnisse entscheiden zu lassen.

Wenn Sie jedoch mit Positionen handeln, die zwei oder mehr Tage dauern können, oder wenn Sie mit Paaren von Kauf und Verkauf handeln, werden Sie sicherlich Excel benötigen, um Ihr Kapital besser zu verwalten und Entscheidungen zur Risikokontrolle zu treffen. In solchen Fällen möchten Sie, dass Excel automatisch Angebote oder Informationen erhält. Stellen Sie sich vor, Sie arbeiten mit Kauf/Verkaufs-Paaren und haben 20 Positionen offen. Sie müssten je nach Ihrer Strategie täglich oder stündlich 40 Kurse manuell aktualisieren.

Das Risiko, Fehler zu machen, ist groß, ganz zu schweigen von der Zeit, die damit vergeudet wird, 40 Angebote einzeln manuell zu übertragen. Was für eine lästige Pflicht.

Daher suchen viele Menschen nach Lösungen für dieses Problem. Eine solche Lösung ist die Verwendung von Kursen, die direkt aus dem Internet stammen.


Web-Lösung

Diese Web-Lösung basiert auf der Verwendung von Excel selbst, um automatisch Aktualisierungen für uns durchzuführen. Doch hier liegt ein kleines Problem.

Sie ist zwar einfach zu erstellen, aber nicht ideal. Dies liegt daran, dass zwischen die einzelnen Kurse eine mal größere, mal kleinere Verzögerung haben. Dies ist weitgehend darauf zurückzuführen, dass die meisten Finanzinformationsdienste kostenpflichtig sind.

So etwas wie ein kostenloses Mittagessen gibt es nicht, vor allem nicht, wenn Geld im Spiel ist.

Ich bin nicht hier, um zu beurteilen, ob die Erhebung von Gebühren für solche Dienste richtig oder falsch ist. Die Frage ist: Was nützt diese Methode, wenn Sie bereits eine Plattform wie den MetaTrader 5 in den Händen halten?

Wenn Sie diese Art von Lösung verwenden, öffnen Sie das mit Ihrem Google-Konto verknüpfte Arbeitsblatt und geben Sie in diesem Blatt den folgenden Befehl ein:

GoogleFinance

Durch Hinzufügen dieses Befehls zu einer Zelle in der Online-Kalkulationstabelle können Sie verschiedene Arten von Daten im Zusammenhang mit dem gewünschten Asset abrufen. Alle diese Daten werden regelmäßig aktualisiert. In der Regel gibt es eine Verzögerung zwischen den Aktualisierungen. Wenn Sie eine Position verwalten, die sich erst nach einigen Tagen ändern kann, ist diese Verzögerung nicht wirklich ein Problem. Das ist in Ordnung für Kauf- und Halte-Szenarien, aber wenn Sie handeln, wird es komplizierter.

Zurück zum Hauptpunkt: Sobald Sie das Online-Arbeitsblatt vollständig konfiguriert haben, können Sie es speichern und exportieren, um es anderweitig zu verwenden. Der Export ist nicht wirklich eine Export. Was Sie wirklich wollen, ist, die Werte, die die Funktion GoogleFinance abruft, zu extrahieren und sie in ein anderes Tabellenblatt zu übertragen – dieses auf Ihrem Computer – damit Sie bequem arbeiten können.

Obwohl diese Lösung in vielen Fällen funktioniert, ist sie für andere nicht geeignet. In vielen Fällen benötigen wir die Kurse (und in der Regel nur die Kurse) mit einer kürzest möglichen Verzögerung. Aber egal, was Sie tun, Sie können mit dieser Lösung keine Aktualisierungsfrequenz von weniger als einer Minute erreichen. Dies ist in Abbildung 01 zu sehen.

Abbildung 01

Abbildung 01 – Fenster Eigenschaften

In Abbildung 01 sehen wir das Eigenschaftsfenster, in dem die Aktualisierungshäufigkeit der von Excel importierten Komponente festgelegt wird. Wenn Sie dieses Fenster nicht kennen oder noch nie gesehen haben, machen Sie sich keine Sorgen. Ich werde zeigen, wie man dorthin kommt. Beachten Sie jedoch Folgendes: Auch wenn Sie hier die Mindestzeit auf eine Minute einstellen, bedeutet dies nicht, dass der Kurs selbst jede Minute aktualisiert wird, da die Funktion GoogleFinance nicht so schnell aktualisiert wird.

Sie müssen sich also darüber im Klaren sein, was wir hier tun. Ich stelle Ihnen eine Möglichkeit vor, wie Sie das Angebot für Vermögenswerte mit einer einminütigen Verzögerung erhalten können. Wenn Sie beabsichtigen, bei jeder Preisänderung aktualisierte Echtzeitkurse zu erhalten, müssen Sie einen anderen Ansatz als den hier dargestellten wählen. Aber die hier vorgestellte Lösung wird in den meisten Situationen und bei einer Vielzahl von Problemen gut funktionieren. Denn Sie werden feststellen, dass die erforderliche Programmierung sehr einfach zu verstehen ist und die Kommunikation zwischen MetaTrader 5 und Excel sehr effektiv ist.


Verständnis für die Umsetzung

Es gibt komplexere Lösungen mit Python, um Echtzeitkurse zu erhalten, und einfachere Lösungen mit RTD oder DDE. Diese kann jedoch direkt in MQL5 entwickelt werden, ist einfach und schnell zu implementieren und gleichzeitig elegant und angenehm zu bedienen.

Als Erstes müssen Sie wissen, dass MetaTrader 5 vier grundlegende Anwendungstypen hat. Jede ist für einen anderen Zweck geeignet.

  • Expert Advisor: Die bekannten EAs oder Robots sind MetaTrader 5-Anwendungen, die es uns ermöglichen, Aufträge oder Handelsanfragen an den Börsenserver zu senden. Diese Programme sind in erster Linie für diese Art von Aufgaben gedacht.
  • Indikatoren: Diese ermöglichen es uns, Informationen in das Chart einzufügen oder anzuzeigen. Sie dienen verschiedenen Zwecken der Preisüberwachung, um etwas Bestimmtes anzuzeigen, wofür sie programmiert wurden.
  • Skripte: Sie ermöglichen es uns, eine Aufgabe zu erfüllen. Sie treten in der Regel schnell in das Chart ein und wieder aus und bleiben nicht lange aktiv. Sie sind jedoch immer mit einer bestimmten Charts verbunden.
  • Dienste: Wie ein Skript führt ein Dienst bzw. „service“ in der Regel eine bestimmte Aufgabe aus und lässt sich schnell starten und stoppen. Im Gegensatz zu Skripten sind Dienste jedoch nicht an ein bestimmtes Chart gebunden. Sie bleiben auch dann aktiv, wenn kein Chart im MetaTrader 5-Terminal geöffnet ist.

Wie Sie vielleicht schon bemerkt haben, haben alle Anwendungstypen in MetaTrader 5 ihren Zweck. Aber nur Dienste funktionieren unabhängig von einem auf der Plattform geöffneten Chart, was sie zur besten Option macht.

Hinweis: Obwohl sich Dienste und Skripte unterschiedlich verhalten (da Skripte an ein Chart gebunden sind), sind Dienste und Skripte in Bezug auf den Code praktisch identisch. Sie unterscheiden sich nur dadurch, dass ein Dienst die folgende Eigenschaft aktiviert hat:

#property service

Das Vorhandensein dieser Zeile in einem Skript macht es zu einem Dienst.

Die Lösung, die wir verwenden werden, besteht daher in der Einrichtung eines Dienstes. Aber wie ich gerade erwähnt habe, können Sie es auch als Skript verwenden. In diesem Fall ist sie jedoch an ein Chart gebunden. Die einzige Codeänderung, die erforderlich ist, besteht darin, die oben gezeigte Eigenschaft zu entfernen. Wir werden in Kürze darauf zurückkommen, wenn wir den Code selbst untersuchen.


Beginn der Implementierung

Da einige Leser dieses Artikels vielleicht nicht sehr vertraut mit Excel sind, werde ich zeigen, wie man die notwendigen Schritte in Excel durchführt, zumindest die Grundlagen. Wenn dies nicht auf Sie zutrifft, können Sie den nächsten Abschnitt überspringen, in dem ich erkläre, wie man den Dienst in MQL5 implementiert, damit er in MetaTrader 5 verwendet werden kann und die gewünschten Daten direkt an Excel sendet.

Bevor Sie etwas tun, müssen Sie eine kleine Datei bearbeiten, die später von MetaTrader 5 verwendet wird. Sie können diese Datei jedoch nirgendwo auf Ihrem System ablegen. Aus Sicherheitsgründen erlaubt MQL5 keinen Zugriff auf beliebige Orte im Dateisystem Ihres Computers. Um alles richtig zu machen, müssen Sie MetaEditor öffnen und im Navigationsbereich die in Animation 01 unten gezeigten Schritte ausführen:

Animation 01

Animation 01 – Zugriff auf das richtige Verzeichnis

Wenn Sie dies tun, öffnet sich der Datei-Explorer Ihres Betriebssystems und Sie befinden sich im Ordner FILES innerhalb des MQL5-Verzeichnisses. Die Datei, die Sie erstellen müssen, muss zunächst in diesem Ordner abgelegt werden. Erstellen Sie darin die unten abgebildete Datei. Dies ist nur ein Beispiel dafür, was wir tatsächlich tun werden.

PETR4;
VALE3;
ITUB3;

Speichern Sie diese Datei unter dem Namen QUOTE.CSV. Schließen Sie aber noch nicht den Datei-Explorer. Wir werden sie im nächsten Schritt benötigen, um die soeben gespeicherte Datei leichter wiederzufinden.

Öffnen Sie nun Excel mit einem leeren Arbeitsblatt und gehen Sie wie folgt vor, um diese QUOTE.CSV-Datei mit dem zu erstellenden Arbeitsblatt zu verknüpfen.

Abbildung 02

Abbildung 02

In Abbildung 02 sehen Sie, wo sich die von uns benötigte Option befindet. Wenn sie in Ihrer Excel-Version nicht sichtbar ist, suchen Sie sie unter „Get Data“. In jedem Fall müssen Sie die Option zum Importieren von Daten aus einer Textdatei wählen. Es ist ähnlich wie beim Importieren von Daten aus dem Internet, aber hier wird eine lokale Datei verwendet.

Abbildung 03

Abbildung 03

Nachdem Sie die in Abbildung 02 gezeigte Option ausgewählt haben, öffnet sich ein Dateibrowser-Fenster. Navigieren Sie mit dem Dateiexplorer des Betriebssystems zu dem zuvor angegebenen Verzeichnis, bis Sie QUOTE.CSV im MQL5-Verzeichnis gefunden haben. Wenn Sie ihn gefunden haben, bestätigen Sie Ihre Auswahl und Sie sehen den in Abbildung 03 dargestellten Inhalt. Achten Sie auf die Einstellungen zum Laden von Dateien, die oben in Abbildung 03 angezeigt werden. Wenn alles korrekt ist, klicken Sie auf den Pfeil neben der Schaltfläche Laden und wählen Sie „Load To“.... Sie werden dann zu Abbildung 04 weitergeleitet.

Abbildung 04

Abbildung 04

In Abbildung 04 können Sie auswählen, wo die Daten im Arbeitsblatt platziert werden sollen. Da es sich hier nur um eine Demonstration handelt, belassen Sie die Auswahl wie im hervorgehobenen Bereich angegeben. Klicken Sie dann auf OK, und das Ergebnis wird wie in Abbildung 05 dargestellt angezeigt.

Abbildung 05

Abbildung 05

Na gut. Die Daten werden geladen. Aber eine Sache fehlt noch: Excel mitzuteilen, wie und wann die Daten aktualisiert werden sollen. Denken Sie daran, dass wir keinen RTD- oder DDE-Server verwenden. Wir müssen Excel also explizit mitteilen, wann diese Daten aktualisiert werden sollen; andernfalls werden sie nie aktualisiert. Wenn Sie über ausreichende VBA-Kenntnisse verfügen, können Sie etwas Anspruchsvolleres erstellen. Aber hier möchte ich, dass alles einfach bleibt, damit jeder das gewünschte Ergebnis erzielen kann. Damit Excel also weiß, wie und wann die Daten in QUOTE.CSV zu aktualisieren sind, müssen Sie auf die in Abbildung 06 gezeigten Informationen zugreifen.

Abbildung 06

Abbildung 06

Wenn Sie die Tabelle in Excel auswählen, wird die Registerkarte Abfrage aktiv. Wählen Sie auf dieser Registerkarte das oben abgebildete Element Eigenschaften. Wenn Sie auf dieses Element klicken, sehen Sie zunächst genau das, was in Abbildung 07 dargestellt ist.

Abbildung 07

Abbildung 07

Sehen Sie sich Abbildung 07 genau an. In diesem Fenster müssen Sie einige Einstellungen ändern, damit Excel die Daten automatisch für uns aktualisieren kann. Beachten Sie jedoch, dass es sich bei dem zu aktualisierenden Objekt nur um die Tabelle handelt, die wir gerade auf der Grundlage der Daten aus QUOTE.CSV erstellt haben. Passen Sie also die Einstellungen in Abbildung 07 wie in Abbildung 08 gezeigt an.

Abbildung 08

Abbildung 08

Sobald Sie die Änderungen durch Klicken auf OK bestätigen, folgt Excel der festgelegten Konfiguration. So werden die Daten in der Kalkulationstabelle etwa alle 60 Sekunden aktualisiert, wenn sich die Datei ändert. Probieren Sie es selbst aus: Öffnen Sie die Datei in einem Texteditor und fügen Sie Werte wie im folgenden Beispiel ein.

PETR4;30.80
VALE3;190.31
ITUB3;25.89

Speichern Sie QUOTE.CSV, aber es ist nicht nötig, den Texteditor zu schließen. Warten Sie ein wenig und überprüfen Sie Excel. Wie von Zauberhand wird die Tabelle wie in Abbildung 09 dargestellt aktualisiert.

Abbildung 09

Abbildung 09

Ändern Sie die Werte erneut mit dem Texteditor, bis Sie verstehen, was passiert. Beachten Sie, dass wir von diesem Punkt an eine ganze Menge tun können, ohne auf komplexe oder komplizierte Lösungen zurückgreifen zu müssen. Ein weiterer interessanter Punkt ist, dass Sie die lokale Netzwerkfreigabe nutzen können. Auf diese Weise kann Excel auf einem anderen Computer als MetaTrader 5 laufen. Sie müssen sich nicht unbedingt auf demselben Rechner befinden.


Implementierung des Dienstes in MQL5

In den Erläuterungen im vorigen Abschnitt habe ich die Verwendung einer Datei erwähnt und wo Sie sie ablegen müssen. Um diesen Artikel abzuschließen, müssen wir nun den Dienst erstellen, der im MetaTrader 5 ausgeführt wird. Aber keine Sorge – die Umsetzung hier wird sehr einfach zu erstellen und zu verwenden sein. Am Ende dieses Artikels finden Sie sogar ein Demonstrationsvideo, um eventuelle Zweifel an der Bedienung des Systems auszuräumen.

Zunächst einmal muss ich sagen, dass Sie, anders als im Demonstrationsvideo, die Vermögenswerte nicht im Fenster Market Watch anzeigen lassen müssen. Im Video werden die Assets gezeigt, sodass Sie mitverfolgen können, wie der Prozess abläuft. Bei einer typischen Ausführung ist dies jedoch nicht erforderlich. Sie können den Dienst einfach ausführen, und er wird weder die Vermögenswerte in Market Watch noch die Leistung von MetaTrader 5 beeinträchtigen.

Angenommen, Sie haben die Datei erstellt, die wir brauchen, wie im vorherigen Abschnitt gezeigt, können wir zum Dienstcode übergehen und verstehen, wie alles wirklich funktionieren wird. Der vollständige Code des Dienstes ist unten zu sehen:

01. //+------------------------------------------------------------------+
02. #property service
03. #property copyright "Daniel Jose"
04. #property description "Quote sharing service between"
05. #property description "MetaTrader 5 and Excel"
06. #property version   "1.00"
07. //+------------------------------------------------------------------+
08. input string user01 = "Quote.csv"; //FileName
09. //+------------------------------------------------------------------+
10. class C_ShareAtExcel
11. {
12.     private :
13.             string  szSymbol[],
14.                     szFileName;
15.             int     maxBuff;
16.             bool    bError;
17. //+------------------------------------------------------------------+
18. inline void Message(const string szMsg)
19.                     {
20.                             PrintFormat("Sharing service with Excel: [%s].", szMsg);
21.                     }
22. //+------------------------------------------------------------------+
23.     public  :
24. //+------------------------------------------------------------------+
25.             C_ShareAtExcel(string szArg)
26.                     :bError(true),
27.                      maxBuff(0),
28.                      szFileName(szArg)
29.                     {
30.                             int     file;
31.                             string  sz0, szRet[];
32.     
33.                             if ((file = FileOpen(szFileName, FILE_CSV | FILE_READ | FILE_ANSI)) == INVALID_HANDLE)
34.                             {
35.                                     Message("Failed");
36.                                     return;
37.                             }
38.                             while (!FileIsEnding(file))
39.                             {
40.                                     sz0 = FileReadString(file);
41.                                     if (StringSplit(sz0, ';', szRet) > 1)
42.                                     {
43.                                             ArrayResize(szSymbol, maxBuff + 1);
44.                                             szSymbol[maxBuff] = szRet[0];
45.                                             StringToUpper(szSymbol[maxBuff]);
46.                                             maxBuff++;
47.                                     }
48.                             }
49.                             FileClose(file);
50.                             bError = false;
51.                             Message("Started");
52.                     }
53. //+------------------------------------------------------------------+
54.             ~C_ShareAtExcel()
55.                     {
56.                             ArrayResize(szSymbol, 0);
57.                             Message("Finished");
58.                     }
59. //+------------------------------------------------------------------+
60.             void Looping(int seconds)
61.                     {
62.                             string  szInfo;
63.                             int     file;
64.                             
65.                             while ((!_StopFlag) && (!bError))
66.                             {
67.                                     szInfo = "";
68.                                     for (int c0 = 0; c0 < maxBuff; c0++)
69.                                             szInfo += StringFormat("%s;%0.2f\r\n", szSymbol[c0], iClose(szSymbol[c0], PERIOD_D1, 0));
70.                                     if ((file = FileOpen(szFileName, FILE_TXT | FILE_WRITE | FILE_ANSI | FILE_SHARE_WRITE)) != INVALID_HANDLE)
71.                                     {
72.                                             FileWriteString(file, szInfo);
73.                                             FileClose(file);
74.                                     };
75.                                     Sleep(seconds * 1000);
76.                             }
77.                     }
78. //+------------------------------------------------------------------+
79. };
80. //+------------------------------------------------------------------+
81. C_ShareAtExcel *share;
82. //+------------------------------------------------------------------+
83. void OnStart()
84. {
85.     share = new C_ShareAtExcel(user01);
86.     
87.     share.Looping(2);
88.     
89.     delete share;
90. }
91. //+------------------------------------------------------------------+

Der Quellcode des Dienstes

Wie Sie sehen können, ist der Code sehr kompakt. Aber wie es meine Gewohnheit ist, verwenden wir hier eine Klasse, sodass wir diesen Code für andere Zwecke wiederverwenden können, wenn wir uns dazu entschließen. Nichts hindert Sie jedoch daran, dieselbe Logik in einer einzigen Prozedur zu erstellen, wobei die gesamte Logik in der Funktion OnStart platziert wird.

Aber lassen Sie uns ins Detail gehen und erklären, wie der Code funktioniert. Auf diese Weise können Sie, auch wenn Sie gerade erst mit MQL5 anfangen, es anpassen, um andere Informationen an Excel zu senden. Hinweis: Obwohl ich mich hier auf Excel beziehe, hindert Sie nichts daran, Daten in andere Programme oder Systeme zu übertragen.

In Zeile 2 befindet sich die Eigenschaftsanweisung, die MQL5 mitteilt, dass der Code als Dienst behandelt werden muss. Wenn Sie es stattdessen als Skript verwenden möchten, deaktivieren oder entfernen Sie einfach Zeile 2. Dies hat keinen Einfluss auf den Codebetrieb; das Skript wird lediglich an ein Chart angehängt, damit es ausgeführt werden kann.

In Zeile 8 wird dem Nutzer die Möglichkeit gegeben, die zu verwendende Datei zu bestimmen. Denken Sie daran, dass die Datei wie im vorherigen Abschnitt beschrieben erstellt und bearbeitet werden muss, da das System sonst nicht funktioniert.

In Zeile 10 beginnen wir mit der Definition unserer Klasse. Achten Sie auf Zeile 12, wo eine private Klausel deklariert wird. Das bedeutet, dass alles, was von diesem Punkt an geschieht, für die Klasse privat ist und nicht von außen zugänglich gemacht werden kann. Dann deklarieren wir einige globale Variablen für die Klasse, und gleich danach, in Zeile 18, erstellen wir eine Prozedur zur Standardisierung der im Terminal ausgegebenen Nachrichten. Diese Meldungen zeigen an, was der Dienst gerade tut.

In Zeile 24 deklarieren wir eine öffentliche Klausel. Von diesem Zeitpunkt an kann auf alles innerhalb der Klasse als Teil der Klassenschnittstelle zugegriffen werden. Unmittelbar danach, in Zeile 26, beginnen wir mit der Erstellung des Klassenkonstruktors. Sie erhält als Argument den zu verwendenden Dateinamen. Beachten Sie, dass die Programmierung so erfolgt, als ob die Klasse nicht Teil des Dienstcodes wäre. Dies ist der richtige Weg, um mit objektorientierter Programmierung (OOP) zu arbeiten. Obwohl wir die Informationen in Zeile 8 haben, tun wir so, als ob wir sie nicht hätten; stattdessen werden sie später weitergegeben.

In Zeile 33 versuchen wir nun, die angegebene Datei zu öffnen. Wenn es uns nicht gelingt, sie zum Lesen zu öffnen, informieren wir den Nutzer in Zeile 35, und der Code kehrt in Zeile 36 zurück. Wenn jedoch auf die Datei zugegriffen werden kann, beginnen wir sie zu lesen. Das Lesen erfolgt zeilenweise in der Schleife, die in Zeile 38 beginnt. Zeile 40 liest eine komplette Zeile aus der Datei. In Zeile 41 trennen wir das Symbol des Anlageinstruments von allen anderen Informationen in der Zeile. Beachten Sie, dass wir das Semikolon (;) als Trennzeichen verwenden.

Wenn Zeile 41 gültige Daten anzeigt, wird eine neue Position im Speicher zugewiesen und das Asset-Symbol dort gespeichert. Das Symbol muss nicht in Großbuchstaben geschrieben werden, da wir es in Zeile 45 normalisieren. Beachten Sie auch, dass nicht überprüft wird, ob das Asset-Symbol tatsächlich existiert. Mit anderen Worten, es liegt an Ihnen, ein gültiges Symbol zu liefern. Eine solche Überprüfung ist hier jedoch nicht unbedingt erforderlich. Wenn Sie einen Fehler machen, zeigt Excel merkwürdige Ergebnisse an, und Sie werden den Fehler schnell bemerken und korrigieren. Daher ist eine Symbolvalidierung in MQL5 nicht erforderlich.

Wenn alles gut geht, schließen wir die Datei und informieren das Terminal, dass der Dienst aktiv ist – dies geschieht in Zeile 51.

Das nächste, was wir im Code sehen, ist der Destruktor der Klasse, der in Zeile 54 beginnt. Mit nur zwei Zeilen gibt dieser Destruktor den zugewiesenen Speicher frei und teilt mit, dass die Klasse aus der Taskliste des Systems entfernt wird.

In Zeile 60 haben wir nun die Hauptprozedur unseres Programms. Diese Prozedur lässt die Klasse in einer Schleife laufen, bis der Dienst beendet wird. Die Schleife beginnt in Zeile 65. Bitte beachten Sie: Diese Schleife wird nicht so ausgeführt, dass der Prozessor oder die Plattform überlastet wird. Zwischen den Iterationen wird eine gewisse Zeit gewartet, damit andere Aufgaben ausgeführt werden können. Diese Verzögerung wird in Sekunden als Argument für die Prozedur angegeben. Dieses Argument wird in Zeile 75 verwendet, wo vor dem nächsten Schleifendurchlauf eine Pause eingelegt wird.

Jetzt kommt der eigentliche „Zauber" in dieser Schleife. In Zeile 67 wird der Inhalt der Zeichenkette, die in die Datei geschrieben werden soll, gelöscht. Um sicherzustellen, dass das Schreiben so schnell wie möglich erfolgt – da es genau dann geschehen kann, wenn Excel die Datei liest (und ja, das kann passieren) – führen wir eine Schleife aus, die in Zeile 68 beginnt. Diese Schleife konstruiert die Daten, die in Zeile 69 in Excel geschrieben werden sollen. An dieser Stelle können Sie alles platzieren. Buchstäblich alles.

Sobald die Schleife in Zeile 68 beendet ist, versuchen wir, in Zeile 70 auf die Datei zuzugreifen. Achtung: Normalerweise verursacht der Versuch, in eine Datei zu schreiben, während eine andere Anwendung sie liest, Zugriffsfehler. Einige dieser Fehler können zu Fehlern bei der Datenübertragung führen. Diese Art von Problem ist bekannt, wenn man mit Producer-Consumer-Algorithmen arbeitet. Aber glücklicherweise erlaubt uns MQL5 die Verwendung des Flags FILE_SHARE_WRITE, das dem System mitteilt, dass der gleichzeitige Dateizugriff erlaubt ist.

Wenn wir die Datei erfolgreich zum Schreiben öffnen, schreiben wir alles in einem einzigen Vorgang in Zeile 72. Dann schließen wir die Datei sofort in Zeile 73.

Damit schließt sich der Kreislauf, und die Schleife läuft so lange, wie der Dienst läuft.


Schlussfolgerung

In diesem Artikel haben Sie gelernt, wie Sie Daten aus MetaTrader 5 auf sehr einfache und effektive Weise nach Excel übertragen können. Dieser Ansatz ist ideal für diejenigen, die ein Portfolio überwachen oder Geschäfte verwalten wollen, die keine Echtzeitaktualisierungen erfordern.

Im nachstehenden Video sehen Sie, wie das System funktioniert, und können eventuelle Unklarheiten über die Verwendung von Finanzdaten ausräumen. Da das System sehr einfach ist und die Erklärungen in diesem Artikel mehr als ausreichend sind, damit jeder den Code verwenden kann, wird es keine Anhänge geben. Das hängt ganz von den Vermögenswerten ab, die Sie tatsächlich überwachen wollen.


Übersetzt aus dem Portugiesischen von MetaQuotes Ltd.
Originalartikel: https://www.mql5.com/pt/articles/11794

Beigefügte Dateien |
ShareAtExcel.mq5 (4.03 KB)
Letzte Kommentare | Zur Diskussion im Händlerforum (1)
SuperTaz
SuperTaz | 3 Okt. 2025 in 17:43

Die Datei "quote.csv" muss in der Kodierung ANSI gespeichert werden.

Es funktioniert immer noch nicht, es gibt einen weiteren Fehler, der entdeckt werden muss...

Neuronale Netze im Handel: Ein Multi-Agenten-System mit konzeptioneller Verstärkung (letzter Teil) Neuronale Netze im Handel: Ein Multi-Agenten-System mit konzeptioneller Verstärkung (letzter Teil)
Wir setzen weiterhin die von den Autoren des FinCon-Rahmens vorgeschlagenen Ansätze um. FinCon ist ein Multi-Agenten-System, das auf Large Language Models (LLMs) basiert. Heute werden wir die erforderlichen Module implementieren und umfassende Tests des Modells mit realen historischen Daten durchführen.
Neuronale Netze im Handel: Ein Multi-Agenten-System mit konzeptioneller Verstärkung (FinCon) Neuronale Netze im Handel: Ein Multi-Agenten-System mit konzeptioneller Verstärkung (FinCon)
Wir laden Sie ein, den FinCon-Rahmen zu erkunden, der ein auf einem Large Language Model (LLM) basierendes Multi-Agenten-System ist. Der Rahmen nutzt konzeptionelle verbale Verstärkung, um die Entscheidungsfindung und das Risikomanagement zu verbessern und eine effektive Leistung bei einer Vielzahl von Finanzaufgaben zu ermöglichen.
Dialektische Suche (DA) Dialektische Suche (DA)
Der Artikel stellt den dialektischen Algorithmus (DA) vor, eine neue globale Optimierungsmethode, die vom philosophischen Konzept der Dialektik inspiriert ist. Der Algorithmus macht sich eine einzigartige Aufteilung der Bevölkerung in spekulative und praktische Denker (thinker) zunutze. Tests zeigen eine beeindruckende Leistung von bis zu 98 % bei niedrigdimensionalen Problemen und eine Gesamteffizienz von 57,95 %. Der Artikel erläutert diese Metriken und präsentiert eine detaillierte Beschreibung des Algorithmus sowie die Ergebnisse von Experimenten mit verschiedenen Arten von Funktionen.
Von der Grundstufe bis zur Mittelstufe: Template und Typename (V) Von der Grundstufe bis zur Mittelstufe: Template und Typename (V)
In diesem Artikel werden wir einen letzten einfachen Anwendungsfall für Vorlagen untersuchen und die Vorteile und die Notwendigkeit der Verwendung von typename in Ihrem Code diskutieren. Auch wenn dieser Artikel auf den ersten Blick etwas kompliziert erscheint, ist es wichtig, ihn richtig zu verstehen, um später Vorlagen und typename verwenden zu können.