Marktsimulation (Teil 14): Sockets (VIII)
Einführung
Im vorangegangenen Artikel, „Marktsimulation (Teil 13): Sockets (VII)“ haben wir gezeigt, wie man einen einfachen Python-Server erstellt, der auch dann noch Code ausführt, wenn auf dem vom Server überwachten Socket keine Aktivität stattfindet. Das Interessante an dieser Implementierung ist, dass kein Thread verwendet werden muss.
Nichts hindert uns jedoch daran, das, was wir im letzten Artikel gesehen haben, mit dem zu kombinieren, was wir zuvor gesehen haben, da letzteres gezeigt hat, wie man einen ähnlichen Server erstellt, aber einen Thread verwendet, wenn ein Client eine Verbindung herstellt. Dass beide Methoden funktionieren, liegt daran, dass beide darauf ausgerichtet sind, den Socket auf die gleiche Weise zu überwachen, unabhängig von der Anzahl der verbundenen Clients. Allerdings ist weder das Modell mit einem Thread noch das Modell mit der Select-Funktion für unsere Implementierung geeignet.
Weder das eine noch das andere. Und es geht nicht darum, dass sie fehlerhaft sind oder nicht funktionieren, sondern darum, dass sie aufgrund der Art und Weise, wie der Code geschrieben ist, Excel beeinträchtigen. Durch diese Störung konkurrieren Excel und das Python-Skript um die CPU-Auslastung, was Excel sehr unpraktisch macht.
Viele Programmierer könnten davon ausgehen, dass wir auf Excel verzichten und direkt zu Python wechseln sollten, indem wir einige Pakete verwenden, die es Python ermöglichen, eine Excel-Datei für die spätere Analyse der Ergebnisse zu erzeugen. . Und in diesem Fall hat der Nutzer immer Recht. Als Programmierer müssen wir einen Weg finden, damit alles funktioniert. Wenn Sie Ihr Ziel nicht erreichen, liegt das daran, dass Sie noch nicht über den erforderlichen Wissensstand verfügen. Bemühen Sie sich, weiter zu lernen und die Grundsätze, auf denen Ihr Wissen beruht, zu vertiefen.
Die Grundlagen allein machen Sie nicht zu einem fortgeschrittenen Programmierer; Sie bleiben lediglich ein durchschnittlicher Programmierer. Das Wissen schreitet nicht deshalb voran, weil alle durchschnittliche Ergebnisse erzielen, sondern weil einige Menschen herausragen. In meinem heutigen Artikel möchte ich Ihnen zeigen, wie Sie das Problem zwischen Excel und Python lösen können. Lehnen Sie sich also zurück, und wir werden uns nun ansehen, wie man Excel und Python zusammenarbeiten lässt, ohne dass sie um die CPU-Nutzung konkurrieren.
Zurück zu den Ursprüngen
Viele von Ihnen haben erst kürzlich mit Python begonnen. Andere verwenden es vielleicht schon seit langem. Da jedoch die meisten Programmierer aktiv populäre Pakete verwenden, glaube ich, dass nur wenige wirklich verstehen, wie und warum man Python verwendet. Ich werde das hier nicht erklären, da es den Rahmen dieser Artikelserie sprengen würde. In dieser Serie soll gezeigt werden, wie man ein Replikations-/Modellierungssystem in MetaTrader 5 entwickelt. Um das Replikations-/Modellierungssystem besser nutzen zu können, ist es jedoch notwendig, bestimmte Ressourcen zu nutzen. Daher mussten wir eine kurze Pause von seiner Entwicklung einlegen, um andere Themen zu erläutern, die zwar auf den ersten Blick nichts miteinander zu tun haben, aber in Wirklichkeit miteinander verbunden sind.
Na gut. Um unser Ziel zu erreichen (einen Server in Excel zu betreiben, um Informationen zwischen Excel und MetaTrader 5 zu übertragen), könnten wir VBA verwenden. Die Erstellung eines solchen Servers mit VBA ist jedoch recht mühsam. Das Problem besteht darin, dass der Server vollständig in das Arbeitsblatt eingebettet wird, in dem er erstellt wird, aber wir müssen ihn in mehreren verschiedenen Arbeitsblättern verwenden können. Der Grund dafür wird weiter unten erläutert. Glauben Sie aber nicht, dass das Erstellen eines Servers in VBA etwas Komplexes ist. Eigentlich ist es ganz einfach, wenn auch, wie bereits erwähnt, mühsam, da wir den Code ständig wiederholen müssen.
Mit Python können wir jedoch leicht denselben Server wie in VBA erstellen, ganz zu schweigen von der Möglichkeit, C/C++ zu verwenden, wie in einem früheren Artikel gezeigt. Zweifellos ist die Verwendung von Python der einfachste Weg, dies zu erreichen. In früheren Artikeln haben wir jedoch gezeigt, dass die einfache Programmierung mit gängigen Paketen nicht praktikabel ist. Der Hauptgrund ist, dass der Server, sobald er gestartet ist, mit Excel um die CPU-Nutzung konkurriert. Ich habe sogar demonstriert, wie man mit Hilfe von Threads das Niveau des Wettbewerbs senken kann. Wenn es jedoch um die Erstellung von Threads in VBA geht, wird es mühsam, da der Code jedes Mal wiederholt werden muss, wenn ein neues Arbeitsblatt erstellt wird.
Daher besteht die Lösung darin, den Großteil des Codes in Python zu implementieren und so wenig VBA wie möglich zu verwenden. Und ja, das können wir tun, und genau das werden wir auch tun. Aber bedenken Sie, dass alles, was ab diesem Punkt präsentiert wird, ziemlich verwirrend sein kann. Ich empfehle Ihnen daher, die Angelegenheit in Ruhe zu prüfen. Verwenden Sie den hier gezeigten Code nicht in einem Produktionssystem. Sie können dies tun, wenn Sie möchten, aber denken Sie daran, dass der bereitgestellte Code nur für Lehrzwecke gedacht ist.
Nehmen wir uns einen Moment Zeit, um zu verstehen, was COM ist
Bevor wir beginnen, möchte ich Ihnen ein paar Fragen stellen: Wissen Sie, was COM ist, haben Sie über OLE gelesen oder etwas damit programmiert, wissen Sie etwas über .NET? Wenn die Antwort auf eine dieser Fragen „nein“ lautet, dann machen Sie gerade Ihre ersten Schritte in der Programmierung. Für unsere Zwecke ist es jedoch ausreichend, die grundlegenden Konzepte zu verstehen und mit COM arbeiten zu können.
COM steht für „Component Object Model“. Es wurde von Microsoft in den frühen 1990er Jahren entwickelt, um die Kommunikation zwischen Prozessen zu erleichtern. Es ist etwas, das den Sockets sehr ähnlich ist, aber mit einigen Vorteilen. Sie ermöglichte die Implementierung einer solchen Kommunikation unabhängig von der verwendeten Sprache, Architektur oder dem verwendeten Gerät. Und für all dies müssen Sie als Entwickler nicht verstehen, wie die interne Implementierung funktioniert, da Sie sich nicht mehr darum kümmern müssen und eine gemeinsame, klar definierte Schnittstelle verwenden werden.
Dies sind die Grundlagen der Arbeit mit COM. Aber warum ist sie für uns in diesem Stadium der Entwicklung wichtig? Der Grund dafür ist, dass wir mit dieser Technologie Python und Excel dazu bringen können, in völliger Harmonie zu arbeiten, ohne Konflikte oder Wettbewerb um die CPU-Nutzung während des Datenaustauschs zwischen ihnen.
Aber kann die COM-Technologie in Python verwendet werden? Ja, und überraschenderweise brauchen wir keine Pakete zu installieren. Wir müssen nur ein wenig verstehen, wie die Dinge in Python funktionieren. Wenn Sie jedoch diese COM-Technologie beherrschen, wird alles viel einfacher. Am Ende des Artikels finden Sie einen Link, mit dem Sie sich über COM informieren können, sowie einen Link, mit dem Sie Ihr Wissen über das Thema, das wir gerade besprechen, vertiefen können.
Jetzt werden wir mit der Programmierung in Python beginnen
Das erste, was wir tun werden, ist ganz einfach. Viele werden sagen, dass dies auch mit anderen Python-Paketen möglich ist. Und in der Tat haben sie nicht Unrecht. Das Gleiche kann auch mit anderen Paketen gemacht werden. Aber Sie müssen verstehen, wie die Dinge tatsächlich funktionieren. Wir werden keine Tricks anwenden, um das zu verbergen, was wir verstehen müssen. Daher werden wir Python in seiner einfachsten Form verwenden. Das heißt, wenn Sie Python ohne zusätzliche Pakete herunterladen und installieren, können Sie das Gleiche tun, was wir hier zeigen. Denken Sie daran, dass Excel auf Ihrem Computer installiert sein muss, aber das ist nur eine Erinnerung – ich denke, es ist offensichtlich.
Lassen wir unseren ersten Python-Code diese COM-Technologie verwenden. Zu diesem Zweck wird das Python-Skript Excel öffnen und einige Informationen in eine bestimmte Zelle eingeben. Es scheint schwierig zu sein, ohne diese zusätzlichen Pakete auszukommen, nicht wahr? Wenn Sie so dachten, dann liegt das daran, dass Sie noch dabei sind, die ersten Schritte in Python zu lernen. Ja, das ist möglich, und zwar ohne Probleme bei der Verwendung dieses oder jenes Pakets. Werfen Sie einen Blick auf den Quellcode des Skripts, das genau das tut. Hier ist der vollständige Code:
1. from win32com import client as win32 2. 3. excel = win32.Dispatch('Excel.Application') 4. excel.Visible = True 5. 6. while True: 7. pass
Python-Code
Wenn Sie das obige Skript ausführen, erhalten Sie das folgende Ergebnis:

Jetzt könnten Sie denken: „Aber wo ist das Arbeitsblatt?“. Machen Sie sich keine Sorgen. Wir haben nichts weiter getan, als Excel zu öffnen. Aber bitte beachten Sie, wie wir es gemacht haben. In Zeile 01 des Skripts geben wir an, was wir verwenden werden. In Zeile 03 senden wir eine Anfrage zur Erstellung einer Excel-App. Sie wird zwar erstellt, bleibt aber verborgen. Um sie sichtbar zu machen, verwenden wir Zeile 04. Wenn wir die Schleife in Zeile 06 nicht verwenden, wird die Anwendung sofort geöffnet und geschlossen. Zeile 07 sorgt lediglich dafür, dass Python sich nicht darüber beschwert, dass die Schleife leer ist.
Fügen wir diesem Skript nun noch ein wenig mehr Code hinzu. Wir könnten das etwas schneller machen, aber ich möchte, dass Sie verstehen, was hier passiert. Wir sollten also nichts überstürzen. Das folgende Skript ist direkt darunter zu sehen:
1. from win32com import client as win32 2. 3. excel = win32.Dispatch('Excel.Application') 4. excel.Visible = True 5. wb = excel.Workbooks.Add() 6. wb.Activate() 7. 8. while True: 9. pass
Python-Code
Das Ergebnis ist in der folgenden Abbildung dargestellt:

Wie Sie sehen können, haben wir zwei Zeilen hinzugefügt: 05 und 06. Zu diesem Zeitpunkt verwenden wir die COM-Technologie. Die am Ende des Artikels angegebenen Links ermöglichen es Ihnen, diese Aufrufe zu überprüfen und zu studieren, um mehr mit der COM-Programmiertechnologie zu tun, wenn Sie über das hier Gezeigte hinausgehen möchten. Denken Sie daran, dass wir Ihnen hier nur die Grundlagen zeigen werden, die ausreichen, um Sie vorzubereiten und Verwirrung in der nächsten Phase zu vermeiden. Beachten Sie, dass wir Excel geöffnet, sichtbar gemacht, ein Arbeitsblatt hinzugefügt und es dann aktiviert haben. Alles ist noch sehr übersichtlich.
Stellen Sie sich nun vor, Sie möchten dasselbe Arbeitsblatt umbenennen. Wie kann man das mit COM über Python machen? Es ist ganz einfach. Verwenden Sie einfach das folgende geänderte Skript:
01. from win32com import client as win32 02. 03. excel = win32.Dispatch('Excel.Application') 04. excel.Visible = True 05. wb = excel.Workbooks.Add() 06. wb.Activate() 07. ws = wb.Sheets('Sheet1').Name = "New Name" 08. 09. while True: 10. pass
Python-Code
Das Ergebnis ist in der folgenden Abbildung dargestellt:

Wie Sie sehen können, haben wir dem Python-Skript nur eine Zeile hinzugefügt – Zeile 07. Das Ergebnis war genau das, was wir erwartet hatten. Aber wir haben noch keine Informationen in die Tabelle eingegeben. Wie können wir das tun? Auch hier ist es sehr einfach und unkompliziert. Wir müssen nur den Ort angeben und die Informationen dort platzieren. Da dieser Teil davon abhängen kann, was wir tun wollen, zeigen wir eine von vielen möglichen Möglichkeiten. Sie wird in etwa so aussehen:
01. from win32com import client as win32 02. 03. excel = win32.Dispatch('Excel.Application') 04. excel.Visible = True 05. wb = excel.Workbooks.Add() 06. wb.Activate() 07. wb.Sheets('Sheet1').Name = "New Name" 08. ws = wb.Sheets('New Name') 09. ws.Range('E6').Value = 'Checking.' 10. 11. while True: 12. pass
Python-Code
Und als Ergebnis erhalten wir genau das, was Sie in der Abbildung sehen:

Wow, wie interessant das ist! Wenn Sie eine Formel eingeben, wird diese berechnet. Achten Sie nun auf Folgendes: Die Zeilen 08 und 09 wurden hinzugefügt. Der Grund dafür ist, dass wir durch das Hinzufügen der Zeile 08 sicherstellen, dass wir den Namen der Registerkarte nicht ständig wiederholen müssen. Die Zeilen 08 und 09 können aber auch zu einer Zeile zusammengefasst werden.
„Aber warten Sie einen Moment. Der Code, den wir im vorherigen Skript gesehen haben, kommt mir sehr bekannt vor“. Wenn Sie das Gleiche denken, ist das kein Zufall. Wenn wir Excel öffnen und es sichtbar machen, sieht alles sehr ähnlich aus wie der in VBA ausgeführte Code. Das ist der Zauber der COM-Schnittstelle. Beachten Sie, dass wir ein Skript in Python erstellen, aber vieles von dem, was wir tun, ähnelt einem VBA-Skript. Dies eröffnet die Möglichkeit, weit mehr zu tun als das, was wir bisher gesehen haben.
„Das ist großartig, aber alles, was hier gemacht wurde, könnte auch mit anderen Paketen gemacht werden, die in Python installiert werden können“. Ja, Sie haben Recht. Wenn wir es jedoch wie gezeigt machen, werden Sie feststellen, dass wir ein Python-Skript verwenden können, das sehr gut in VBA verwendet werden kann. „Ich weiß, wie man das macht, wenn ich ein leeres Arbeitsblatt öffnen will. Aber wenn Excel bereits geöffnet ist, wie gehe ich dann vor?“ In diesem Fall wird das Verfahren viel einfacher und klarer sein. Sie müssen lediglich in Excel eingeben, wo die Änderungen vorgenommen werden sollen. Der Code wird wie folgt aussehen:
1. from win32com import client as win32
2.
3. excel = win32.GetActiveObject('Excel.Application')
4. excel.Worksheets('Sheet1').Range('D5').Value = "Cool..." Python-Code
Das Ergebnis der Ausführung dieses Skripts ist unten zu sehen:

Sie werden sehen, dass alles viel einfacher und leichter ist, als es zunächst scheint. Beachten Sie, dass wir in Zeile 03 die Schnittstelle auffordern, uns ein Objekt für die Arbeit mit der Anwendung, in diesem Fall Excel, zur Verfügung zu stellen. In Zeile 04 geben wir an, was und wo wir arbeiten werden. Das ist ganz einfach. Alles, was wir bisher gesehen haben, ist jedoch nur das Nötigste. Unser Ziel ist es, Ihnen zu vermitteln, dass es nicht notwendig ist, eine große Anzahl von Python-Paketen herunterzuladen und zu installieren. Sie müssen nur wissen, wie Sie die bereits standardmäßig enthaltenen Informationen nutzen können. Außerdem lerne ich natürlich etwas mehr über einige Techniken und Technologien, die es schon seit vielen Jahren gibt.
Na gut. Dies war das Kernstück dessen, was wir brauchten, um unseren Server zu betreiben, ohne die Nutzer bei der Arbeit mit Excel zu stören. Als Nächstes müssen Sie verstehen, wie Sie bestimmte Elemente in Excel manipulieren können. Und damit meine ich keine Formeln oder ähnliches. Ich möchte, dass Sie verstehen, dass wir die COM-Technologie von Python nutzen können, um weit über das hinauszugehen, was Python normalerweise tut. Um jedoch die Ideen zu trennen und Ihnen zu ermöglichen, besser zu verstehen, was wir erklären werden, lassen Sie uns zu einem neuen Thema übergehen.
Veranstaltungen und noch mehr Veranstaltungen
Die meisten Nutzer wissen nicht, dass viele Programme eigentlich Systeme sind, die auf Ereignisse reagieren. Diese Ereignisse können von beliebiger Natur sein: ein Mausklick, eine Texteingabe oder etwas, das mit dem Datenaustausch zwischen Prozessen oder Programmen zusammenhängt. In einem Multitasking-Betriebssystem sind die Ereignisse das Wichtigste.
Das ist auch in diesem Fall nicht anders. Obwohl wir anfangs nicht viel brauchen, damit unser Python-Server mit Excel interagieren kann, ohne um die CPU-Nutzung zu konkurrieren, müssen wir verstehen, wie wir Python dazu bringen können, Ereignisse in Excel zu beobachten. Unser Server muss nämlich wissen, was Excel macht, um zu verstehen, wann es geschlossen oder aktiviert werden sollte.
Vergessen Sie nicht: Die Idee ist, Excel geöffnet zu lassen und Echtzeitdaten vom MetaTrader 5 zu empfangen, was über RTD oder DDE geschehen kann. Wir möchten jedoch auch, dass Excel Befehle an MetaTrader 5 sendet, und zwar so, dass ein Händler Aufträge an MetaTrader 5 senden kann, indem er einfach in Excel „hineinschaut“. Dann erlaubt MetaTrader 5 einem Expert Advisor, in Excel erstellte Aufträge zu interpretieren. So kann der EA die vom Händler angeforderten Operationen ausführen. Und das alles, ohne dass der MetaTrader 5 auf dem Bildschirm des Händlers sichtbar ist. Der Händler schaut nur auf Excel und kann auf der Grundlage einer Analyse – sei es eine fundamentale oder eine andere Art – jedes Symbol direkt von Excel aus kaufen oder verkaufen, unabhängig vom Chart.
Gut, aber wie können wir dem Python-Skript mitteilen, was der Nutzer in Excel macht? Denken Sie daran, dass wir Excel nur als Beispiel verwenden, aber was wir erklären, gilt für jedes Programm, das COM-Technologie verwendet.
Der Weg dorthin ist sehr einfach. Sie müssen jedoch verstehen, wie das Programm, das wir überwachen wollen, funktioniert. Zu diesem Zweck ermöglichen Ihnen die Links den Zugang zu den Materialien, die für die Durchführung anderer Aufgaben im Zusammenhang mit dem hier Gezeigten erforderlich sind. Seien Sie nicht faul: Studieren Sie das Material, bevor Sie fragen, wie dies oder jenes zu tun ist. Denn wenn man versteht, wie alles funktioniert, kann man viel mehr tun, als nur nach einer vorgefertigten Antwort zu fragen. Studieren Sie die Materialien und die Dokumentation des Programms, das Sie über COM verwenden möchten.
Schauen wir uns nun an, wie dies tatsächlich funktioniert. Dazu müssen wir die oben gezeigten Skripte leicht abändern. Um die Dinge so einfach wie möglich zu halten – da die Idee hier sowohl didaktisch als auch praktisch ist – werden wir davon ausgehen, dass Excel bereits geöffnet ist, wenn das Python-Skript ausgeführt wird. Auf diese Weise werden wir viel weniger Arbeit haben und es wird einfacher sein, zu verstehen und zu erklären, was passiert.
Das Hauptskript ist unten zu sehen:
01. from win32com import client as win32 02. import pythoncom as pyCOM 03. import time 04. 05. class AppEvents: 06. def OnSheetActivate(self, *arg): 07. print('Tab ' + str(arg[0].Name) + ' selected...') 08. 09. class SheetEvent: 10. def OnSheetSelectionChange(self, *args): 11. print(args[1].Address) 12. args[0].Cells(1, 1).Value = "Select " + str(args[1].Address) 13. 14. excel = win32.GetActiveObject('Excel.Application') 15. 16. win32.WithEvents(excel, AppEvents) 17. win32.WithEvents(excel.Workbooks('Book1'), SheetEvent) 18. 19. print("Enter in loop...") 20. while True: 21. pyCOM.PumpMessages() 22. print('ping...') 23. time.sleep(1)
Python-Code
Wenn wir sie ausführen, werden wir zwei Dinge feststellen. Die erste wird direkt in Excel angezeigt, wie in der folgenden Abbildung dargestellt:

Die zweite wird in dem Terminal beobachtet, in dem das Skript ausgeführt wird. In unserem Fall verwenden wir Visual Studio Code, sodass in dem Bereich, der das nachahmt, was wir normalerweise in der Befehlszeile sehen, die folgenden Daten zu sehen sind:

Bitte beachten Sie: Dies zeigt, was in Excel gemacht wurde. „Aber wie ist das möglich?“ Denken Sie daran, dass dieser Code nur für Bildungszwecke gedacht ist. Es kann viel mehr getan werden als das, was hier gezeigt wird, aber lassen Sie uns aufschlüsseln, was passiert ist, damit Sie mit diesem Wissen etwas wirklich Interessantes machen können.
Bevor wir beginnen, möchte ich Ihre Aufmerksamkeit auf ein Detail in diesem Code lenken. Ich werde auf einen bestimmten Moment hinweisen, der aber für alle Fälle gilt, unabhängig davon, ob wir einen weiteren solchen Punkt schaffen wollen oder den bereits im Skript vorhandenen. Dies ist Zeile 06, obwohl das, worüber ich sprechen werde, auch für Zeile 10 gilt.
Wenn Sie in der Referenzdokumentation zu diesem Artikel nach Excel-Anwendungsereignissen suchen, finden Sie die folgenden Informationen: Application.SheetActivate event. Okay, aber warum sage ich das? Der Grund dafür ist einfach: WIR KÖNNEN NICHT EINFACH IRGENDEINEN NAMEN VERWENDEN, um ein Ereignis in einem Python-Skript zu referenzieren. Andernfalls wird das Skript bei der Erfassung des Ereignisses nicht funktionieren.
Achten Sie nun auf einen Teil des Codes. In Zeile 05 definieren wir eine Klasse. Diese Klasse wird alle Anwendungsereignisse enthalten, die wir abfangen wollen, genau wie in Zeile 09, wo wir eine andere Klasse erstellt haben, um einen anderen Ereignistyp zu behandeln. In diesem Fall haben wir es mit einem Ereignis zu tun, das das Arbeitsblatt selbst betrifft. Beachten Sie, dass diese beiden Aktivitäten getrennt sind und unterschiedliche Zwecke verfolgen. Der Klassenname kann ein beliebiger gültiger Name sein; der Name der Prozedur folgt jedoch nicht dieser Regel. Damit ein Verfahren mit einem Ereignis verknüpft werden kann, muss es einen bestimmten Namen haben.
Zurück zur Dokumentation: Da wir das Ereignis Application.SheetActivate in unserem Python-Skript verwenden wollen, müssen wir Folgendes tun: Der Name des zu erfassenden Ereignisses muss mit On beginnen, unmittelbar gefolgt vom Ereignisnamen, der in diesem Fall SheetActivate lautet. So erhalten wir den Namen, den das Verfahren haben sollte. Ein weiterer Aspekt, der in der Dokumentation zu berücksichtigen ist, ist die Anzahl der Argumente oder Parameter, die von jedem Ereignis verwendet werden. Sie können dieselbe Struktur, die wir hier anbieten, für alle Veranstaltungen verwenden. Auf diese Weise wandelt Python die eigentlichen Argumente in ein Tupel um, das innerhalb der Sprache selbst verwendet werden kann. Wenn Sie nicht wissen, was ein Tupel ist oder wie man es verwendet, lesen Sie die Python-Dokumentation – sie ist die wichtigste Ressource für jeden, der in dieser Sprache programmieren möchte.
Aber wenn wir zum Code zurückkehren, können wir bereits sehen, wie das funktioniert. Im Terminalbild haben wir die Zeile 22 entfernt, weil sie zu viele Meldungen erzeugte und das Verständnis des Geschehens beeinträchtigte. Aus pädagogischen Gründen empfehle ich Ihnen jedoch, die Zeile 21 gleich zu Beginn aktiv zu lassen, um etwas Wichtiges zu bemerken. Der Aufruf in Zeile 21 blockiert den Code nicht, sondern macht die mit Ereignissen verbundenen Klassen fähig, diese Ereignisse zu empfangen. Erscheint Ihnen dieses Ergebnis unklar? Lassen Sie uns die Dinge klarstellen.
Beachten Sie, dass Zeile 14 etwas enthält, das wir schon einmal gesehen haben. Ihr Zweck ist es, die Excel-Sitzung zu erfassen. Was uns aber eigentlich interessiert, ist die Variable selbst. Es sei gleich darauf hingewiesen, dass sie an zwei Stellen verwendet wird. Die erste ist in Zeile 16. In dieser Zeile geben wir an, welche Klasse für die Behandlung von anwendungsbezogenen Ereignissen zuständig sein wird. Der zweite Parameter dieses Aufrufs ist der Klassenname. Das zweite Mal, dass wir die Variable verwenden, ist in Zeile 17. Und jetzt Achtung: Wir verwenden hier eine bestimmte Verbindung. In diesem Fall bezieht sich die Verbindung auf den Namen der in Excel geöffneten Datei. Wenn wir eine Datei mit einem anderen Namen verwenden, müssen wir sie an dieser Stelle ersetzen, damit das System die Ereignisse korrekt erfassen kann. Der zweite Parameter gibt den Namen der Klasse an, die die auf dem Blatt auftretenden Ereignisse behandeln soll.
Ich überlasse dies Ihrem persönlichen Studium, lieber Leser: Experimentieren Sie und versuchen Sie zu verstehen, was passiert und warum dieses Skript es uns ermöglicht, den Blattnamen und die ausgewählten Zellen in jeder von ihnen zu erfassen. Wenn Sie sich die Zeit nehmen, es zu verstehen, werden Sie die Motivation gewinnen, das Skript weiter zu verbessern.
Abschließende Gedanken
Im heutigen Artikel haben wir auf sehr einfache Weise erklärt, was viele nicht wissen: wie Python Informationen verarbeiten und auf Programme über die COM-Schnittstelle zugreifen kann. Ich hoffe, dieses Material weckt bei Ihnen als angehende professionelle Programmierer ein größeres Interesse daran, zu studieren, wie alles tatsächlich funktioniert. Was wir hier gezeigt haben, ist die einfachste Umsetzung unserer Möglichkeiten. Viele glauben, dass es notwendig ist, zahlreiche Tools zu installieren und mit vielen Programmen zu jonglieren, aber in Wirklichkeit reichen technisches Verständnis und Kenntnisse mehr als aus, um viel in hoher Qualität zu produzieren.
Ich habe zwar noch nicht demonstriert, wie all dies miteinander verbunden wird, sodass Python einen Live-Server verwalten und Daten in einer Tabellenkalkulation manipulieren, schreiben und lesen kann, ohne den Betrieb von Excel zu beeinträchtigen, aber diejenigen, die eine breitere Perspektive und Programmiererfahrung haben, können sich bereits vorstellen, wie all dies integriert werden wird. Aber wenn das bei Ihnen nicht der Fall ist, machen Sie sich keine Sorgen. Im nächsten Artikel werden wir untersuchen, wie all dies umgesetzt werden kann. Bis bald! Und vergessen Sie nicht, das Material in der Links-Sektion zu studieren, denn es wird Ihnen sehr nützlich sein, wenn Sie ein professioneller Programmierer werden wollen.
Links:
| Datei | Beschreibung |
|---|---|
| Experts\Expert Advisor.mq5 | Demonstriert die Interaktion zwischen Chart-Handel und einem Expert Advisor (erfordert Mausstudium für die Interaktion). |
| Indicators\Chart Trade.mq5 | Erzeugt ein Fenster zur Konfiguration des zu versendenden Auftrags (erfordert Mausstudie zur Interaktion). |
| Indicators\Market Replay.mq5 | Erstellt Steuerelemente für die Interaktion mit dem Wiedergabe-/Modellierungsdienst (erfordert Mausstudie für die Interaktion). |
| Indicators\Mouse Study.mq5 | Ermöglicht die Interaktion zwischen den grafischen Steuerelementen und dem Nutzer (sowohl für die Marktwiedergabe als auch für den realen Markthandel erforderlich). |
| Servicios\Market Replay.mq5 | Erstellt und pflegt den Marktwiedergabe-/Modellierungsdienst (die Kerndatei des gesamten Systems). |
| Code VS C++ Server.cpp | Erstellt und pflegt einen in C++ entwickelten Socket-Server (Mini-Chat-Version). |
| Python Code Server.py | Erstellt und pflegt einen Python-Socket für die Kommunikation zwischen MetaTrader 5 und Excel. |
| ScriptsCheckSocket.mq5 | Ermöglicht das Testen der Verbindung mit einem externen Socket. |
| Indicators\Mini Chat.mq5 | Ermöglicht die Implementierung eines Mini-Chats über einen Indikator (erfordert die Verwendung eines Servers). |
| Experts\Mini Chat.mq5 | Ermöglicht die Implementierung eines Mini-Chats über einen Expert Advisor (erfordert die Verwendung eines Servers). |
Übersetzt aus dem Portugiesischen von MetaQuotes Ltd.
Originalartikel: https://www.mql5.com/pt/articles/10683
Warnung: Alle Rechte sind von MetaQuotes Ltd. vorbehalten. Kopieren oder Vervielfältigen untersagt.
Dieser Artikel wurde von einem Nutzer der Website verfasst und gibt dessen persönliche Meinung wieder. MetaQuotes Ltd übernimmt keine Verantwortung für die Richtigkeit der dargestellten Informationen oder für Folgen, die sich aus der Anwendung der beschriebenen Lösungen, Strategien oder Empfehlungen ergeben.
Quantitative Analyse von Trends: Sammeln von Statistiken in Python
Von der Grundstufe bis zur Mittelstufe: Indikator (II)
Eine alternative Log-datei mit der Verwendung der HTML und CSS
Analyse überkaufter und überverkaufter Trends mit Ansätzen der Chaostheorie
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.