Erstellung eines Python-Handelssystems für MT. - Seite 3

 
Yuriy Asaulenko:

Das ist ein anderes Thema).

Ich stelle kein Team zusammen. Ich gehe auf eigene Faust, tue, was ich für richtig und interessant halte, und gehe keine Verpflichtungen ein.

Wenn jemand mit mir ausgehen möchte, gibt es keine Einwände und auch keine Verpflichtungen.

Ich spreche nicht über das Team, sondern über die Engine in Form einer EXE-Anwendung zur Verknüpfung von Python und R mit MQL, die ich in diesem Thread vorgeschlagen habe.
 
Ivan Negreshniy:
Ich spreche nicht über das Team, sondern über den Motor in Form einer EXE-Anwendung zur Verknüpfung von Python und R mit MQL, die ich in diesem Thread vorgeschlagen habe.

Sie erhalten Ihre EXEs - in Python kein Problem. R, sorry, ich benutze es nicht - imho ein großer Haufen von allem und jedem. Wenn es in dieser Müllhalde Diamanten gibt, ist ihre Suche problematisch. Es sei denn, SanSanych sagt es mir).

Ich beschäftige mich hauptsächlich mit neuronalen Netzen, und davon gibt es auch ohne R genug.

Aber eigentlich ist die Interaktionsmethodik universell angelegt, und wahrscheinlich kann man sie auch für R verwenden.

 
Nun, da wir eine vorgefertigte Anwendung haben, ist es an der Zeit, Daten zwischen dem Terminal und Python auszutauschen.
Für den Anfang wählen wir die einfachste Art des Austauschs - den Datenaustausch über Dateien.
Jetzt werden viele Leute vergeblich in ihre Tintenfässer kichern. Also lass sie).
1. Während des Aufbaus und der Fehlersuche in der Anwendung ist die gemeinsame Nutzung von Dateien am effizientesten, da sie keinen Aufwand für die Aktualisierung erfordert. Und sobald die Anwendung erstellt ist, kann sie durch etwas anderes ersetzt werden.
2. Bei den meisten fertigen TCs ist die Geschwindigkeit des Dateiaustauschs mehr als ausreichend. 50-100 ms. Nicht genug für Sie?
3. Beim Austausch von Dateien über RAM-Disk erreicht die Austauschrate 1,5 GByte/s. Es ist unmöglich, die Latenzzeit überhaupt zu messen.
Alles in allem, spucken Sie es aus und vergessen Sie die Gegner).
Nun, eigentlich ist für die letzte Phase ein weiterer Austausch geplant, wenn wir oder das Thema es zulassen).

Wir werden mit dem Terminal über CSV-Dateien austauschen. So weit ein Weg - vom Terminal zur Anwendung.
Um Interessenkonflikte zu vermeiden, werden wir Semaphore-Dateien verwenden.
So sei DataTS.csv die Datendatei und STS.s die Semaphorendatei.
Das Terminal schreibt Daten in DataTS.csv und erstellt nach dem Schreiben eine leere Semaphorendatei STS.s.
Die Anwendung prüft das Vorhandensein der Semaphorendatei STS.s, liest dann die Datei DataTS.csv und löscht anschließend die Semaphorendatei STS.s.
Dann erkennt das Terminal das Verschwinden der Semaphordatei STS.s und schreibt erst dann die neuen Daten in die Datei DataTS.csv.
Mögliche Variationen, abhängig von Phyton und MT-Dateifunktionen - habe noch nicht nachgeschaut.
Aber nicht alles auf einmal, zuerst müssen wir mit Python arbeiten und seine Fähigkeiten bestimmen.
Genau das werden wir tun.
 
Seit meinem letzten Besuch haben sich einige Änderungen ergeben. Die App ist jetzt voll funktionsfähig - alles, was im vorherigen Beitrag beschrieben wurde, wurde implementiert. Alle Schaltflächen funktionieren jetzt und der Dateiaustausch ist implementiert.
- Die Schaltfläche Löschen löscht das Ausgabefenster,
- Mit der Schaltfläche Senden wird die Zeile des Eingabefensters an das Ausgabefenster gesendet,
- die Schaltfläche Start schaltet den Dateiaustausch ein,
- Mit der Schaltfläche Stopp wird der Dateiaustausch gestoppt.
Dies ist leicht zu überprüfen. Wir erstellen den Ordner C:\PyTS, legen die Datendatei DFile.csv und die Semaphore-Datei SFile.tx ab. Unser Python-Programm erkennt die Semaphore-Datei, liest die Datendatei, zeigt sie im Ausgabefenster an und löscht die Semaphore-Datei.
Jetzt können Sie die Daten in DFile.csv ändern und eine neue Semaphorendatei erstellen, und das Programm wird die neuen Daten lesen und ausgeben.
Sie können ein einfaches MQL-Programm schreiben, den Leseordner in unserem Programm in den Ordner ändern, in den MT schreibt, und dann können Sie die Geschwindigkeit des Austauschs, mögliche Datenlücken und viele andere Dinge bewerten.
Die einzige Funktion, die für den Dateiaustausch zuständig ist, ist FileExchange(). Er wird in einem zusätzlichen Thread implementiert - dem Timer-Thread. Wir können Dutzende solcher Threads und Funktionen haben, ohne dass sie die Anwendung in irgendeiner Weise beeinträchtigen - d.h. wir können Dutzende von parallelen und unabhängigen Datenaustauschkanälen zur Verfügung haben.
Im Moment ist der Timer auf 10,0s eingestellt - Sie können ihn auf 0,001s einstellen, siehe Dokumentation.
Nun, wenn Sie wirklich die Geschwindigkeit und andere Eigenschaften messen wollen, entfernen Sie die Debug print()-Funktionen im Austauschpfad - sie verringern die Geschwindigkeit erheblich.
Der Python-Programmcode befindet sich im Anhang. Wie üblich benennen Sie es in .py um
Dateien:
PyTS_1.0.txt  3 kb
 

Wir haben über den Austausch von CSV-Dateien gesprochen, aber Version 1.0 (siehe vorherigen Beitrag) öffnet und liest nur Dateien. Die nächste Version - 1.01, nach einigen Änderungen, liest CSV-Dateien und speichert sie in der InData-Variable.

Eigentlich alle Änderungen:

def FileExchange():
    global Change
    if Change==True:
        if os.path.exists(SFile):
            print("SFile.txt is")
            if os.path.exists(DFile):
                print("DFile.csv is")
                InData = csv.reader(open(DFile, 'r'))
                data_read = [row for row in InData]
                print(data_read)
                os.remove(SFile)
            else:
                print("DFile.csv no")
        else:
            print("SFile.txt no")
        print('Вывод таймера')
        timer =threading.Timer(10.0,FileExchange)
        timer.start()

Nur 3 Zeilen geändert + csv-Bibliotheksverbindung.

Und steuern Sie auch die Ausgabe von CSV-Inhalten aus der InData-Variable:

In [18]: [['04.08.2018 14:00', ' 1300', ' 1295', '1310', '1305', '100'], ['04.08.2018 14:10', ' 1307', ' 1297', '1320', '1315', '150']]

Jetzt sind die Werte der Zeilen durch Indizes verfügbar, Typ - Zeile, Spalte.

Nun, und der Code selbst - siehe Anhang.

Dateien:
PyTS_1.01.txt  3 kb
 
Yuriy Asaulenko:

Wir haben über den Austausch von CSV-Dateien gesprochen, aber Version 1.0 (siehe vorherigen Beitrag) öffnet und liest nur Dateien. Die nächste Version - 1.01, nach einigen Änderungen, liest CSV-Dateien und speichert sie in der InData-Variable.

Eigentlich alle Änderungen:

Nur 3 Zeilen geändert + csv-Bibliotheksverbindung.

Und steuern Sie auch die Ausgabe von CSV-Inhalten aus der InData-Variable:

Jetzt sind die Werte der Zeilen durch Indizes verfügbar, Typ - Zeile, Spalte.

Nun, und der Code selbst - siehe Anhang.

Die gemeinsame Nutzung von Dateien ist nicht die beste Lösung. Dateioperationen sind sehr langsam. Für einen solchen Austausch müssen Sie eine RAM-Disk anschließen.
 
Grigoriy Chaunin:
Die Verwendung von Dateien für den Austausch ist nicht die beste Lösung. Dateioperationen sind sehr langsam. Für einen solchen Austausch müssen Sie eine RAM-Disk anschließen.
Können Sie die Leistungsmerkmale des Dateiaustauschs (was ist vorhanden) und die erforderlichen Aufgaben (was wird benötigt) angeben?


Und ich für meinen Teil kann sagen, dass sie nicht langsam, sondern extrem schnell sind. Ohne numerische Merkmale haben sowohl Ihre als auch meine Aussagen keine Grundlage und machen daher für die vorliegende Aufgabe keinen Sinn. Sie müssen sowohl die Merkmale des Dateiaustauschs als auch die Anforderungen des Problems kennen, und nur wenn Sie diese vergleichen, können Sie gültige Schlussfolgerungen ziehen. Da Juri Asaulenko entschieden hat, dass die Dateien geeignet sind, denke ich, dass er das geplante Datenübertragungsvolumen und die Verarbeitungszeit besser kennt.

Im Allgemeinen haben Festplattendateien einen großen Vorteil gegenüber flüchtigen Speichern - sie werden auf der abgeschalteten Festplatte gespeichert und können nach einer Woche oder einem Jahr wieder aufgerufen werden. Zu kontrollieren, zu analysieren, zu überprüfen, zu beobachten.

 
Grigoriy Chaunin:
Die Verwendung von Dateien für den Tausch ist nicht die beste Lösung. Dateioperationen sind sehr langsam. Für einen solchen Austausch müssen Sie eine RAM-Disk anschließen.

Dieses Thema wurde in diesem Thread bereits in früheren Beiträgen erörtert, einschließlich der möglichen Verwendung einer RAM-Disk, falls erforderlich:

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Wie man ein Handelssystem für MT mit Python erstellt.

Yuriy Asaulenko, 2018.08.01 19:33

Nun, da wir den Entwurf der Anwendung haben, ist es an der Zeit, den Datenaustausch des Terminals mit Python vorzunehmen.
Zunächst wählen wir die einfachste Art des Austauschs - den Datenaustausch über Dateien.
Jetzt werden viele Leute in ihren Tintenfässern kichern, und zwar vergeblich. Also lass sie).
1. Während des Aufbaus und der Fehlersuche in der Anwendung ist die gemeinsame Nutzung von Dateien am effizientesten, da sie keinen Aufwand für die Aktualisierung erfordert. Und sobald die Anwendung erstellt ist, kann sie durch etwas anderes ersetzt werden.
2. Bei den meisten fertigen TCs ist die Geschwindigkeit des Dateiaustauschs mehr als ausreichend. 50-100 ms. Nicht genug für Sie?
3. Beim Austausch von Dateien über RAM-Disk erreicht die Austauschrate 1,5 GByte/s. Es ist unmöglich, die Latenzzeit überhaupt zu messen.
Alles in allem, spucken Sie es aus und vergessen Sie die Gegner).
Nun, eigentlich ist für die letzte Phase ein weiterer Austausch geplant, wenn wir oder das Thema es zulassen).
Auch in einem der ersten Beiträge in diesem Thema.
 

Ich präsentiere eine neue Version von PyTS 1.02. Diese Version ist funktional äquivalent zu Version 1.01, aber die unnötigen print()-K ontrollen wurden aus dem Code entfernt und der Klassenansatz begann implementiert zu werden (Lenin schrieb - der Ansatz muss klassenbasiert sein) - CSV-Dateiverarbeitung ist vollständig der Klasse zugewiesen - cCSVJob.

Zip-Datei im Anhang, in der Sie auch alle früheren Versionen des Programms finden, sowie im PyTS-Ordner die zum Testen notwendigen Dateien mit den Quelldaten.

Dateien:
PyTS.zip  6 kb