MetaTrader 5 Python User Group - wie man Python in Metatrader verwendet - Seite 81

 
Maxim Dmitrievsky:

und wenn Sie hypothetisch die ONNX-Unterstützung nutzen, werden die importierten Modelle langsamer sein als die MQL selbst?

Überprüfen Sie es selbst.

Aber vergessen Sie nicht, dass der eigentliche Wrapper über ONNX definitiv in C++ als Bibliothek/Modul für Python sein wird, und dann die Treiber/Bibliotheken der spezifischen Grafikkarte (wenn es geeignet ist).

Python ist nur ein Korridor zwischen den Aufrufen effizienter Bibliotheken, die mit ihm in Form von ziemlich teuren Datensätzen ausgetauscht werden müssen.

Die Leute verstehen nicht genug, dass Python wirklich nur ein Wrapper über Bibliotheksaufrufe ist und nicht mehr. Sie glauben, dass Python eine leistungsstarke und moderne Sprache ist. Aber in Wirklichkeit ist es eine Bindung zwischen C++-Bibliotheken ;)

Und jede Bibliothek hat monströse Kosten, um die Kompatibilität mit den dynamischen Strukturen von Python zu gewährleisten (sogar in Numpy).

 
Renat Fatkhullin:

Überprüfen Sie es selbst.

Aber vergessen Sie nicht, dass der eigentliche Wrapper über ONNX definitiv in C++ in Form einer Bibliothek/Modul für Python sein wird, und dann die Treiber/Bibliotheken der spezifischen Grafikkarte (wenn es geeignet ist).

Python ist nur ein Korridor zwischen den Aufrufen effizienter Bibliotheken, die in Form von ziemlich teuren Datensätzen mit ihm ausgetauscht werden müssen.

Die Leute verstehen nicht genug, dass Python wirklich nur ein Wrapper für Bibliotheksaufrufe ist und nicht mehr. Sie glauben, dass Python eine leistungsstarke und moderne Sprache ist. Aber in Wirklichkeit ist es eine Bindung zwischen C++-Bibliotheken ;)

Und jede Bibliothek hat einen monströsen Aufwand, um die Kompatibilität mit den dynamischen Strukturen von Python zu gewährleisten (sogar in Numpy).

Ich werde es mir ansehen... habe mich noch nicht mit den Details beschäftigt.

Es ist klar, dass Python hauptsächlich für die Forschung verwendet wird.

Aber um den Code eines bereits trainierten neuronalen Netzes im Nachhinein zu ziehen (und die ändern sich während der Forschung jedes Mal), ist es schon unwirklich, irgendwo etwas zu übertragen :)

Vielleicht habe ich nicht ganz verstanden, was Sie tun wollten. Wie auch immer, mit der Python-Api haben Sie genügend Möglichkeiten. Es sei denn, Sie können es nicht auf den Markt bringen.

 
Renat Fatkhullin:

Nein. Es ist naiv zu glauben, dass wir Selbstmord begehen und eine Sprache wählen werden, die hunderte Male langsamer ist alsere, um den Tester loszuwerden.

Für uns ist es viel rentabler, unsere Idee zu entwickeln, C++ - Bibliotheken von Drittanbietern in MQL5-Modulen neu zu kompilieren. Zu diesem Zweck haben wir begonnen, einen externen LLVM-Compiler in den Editor aufzunehmen.

Ich weiß nicht, ob meine Frage richtig übersetzt wurde. Die Frage ist etwas anders.

Empfängt das Python-Modul Befehle für den Strategie-Tester? Möglicherweise oder definitiv nicht?
 

Ich gebe auch meine fünf Kopeken dazu ))))

Ich habe mich für Python entschieden, weil es viel einfacher ist (so scheint es mir), mit Netzwerken zu arbeiten. Es gibt viele Entwicklungen darin. Man nimmt es einfach und wendet es an. Und neuronale Netze kann man nicht loswerden. Meiner Meinung nach braucht MQL nur Bibliotheken, um mit dieser Entität zu arbeiten...

 
Almaz:

Geben Sie mir ein Beispiel für Ihren Python-Code, der sich verlangsamt. Aus den Worten geht nicht klar hervor, was er tut und wie Sie die Daten erhalten. Und warum wird ständig in die Datei geschrieben? Kann das nicht am Ende gemacht werden?

Ich habe den Python-Code ein wenig geändert: Ich habe die Tick-Abfrage von einem Tag auf 30 erhöht und das Schreiben in die Datei nicht zeilenweise, sondern in Blöcken von 500 Zeilen organisiert. Die Laufzeit hat sich um ein paar Sekunden verkürzt. Der Indikator zeigt nichts an.

Ich habe meinen Indikator umgestaltet. Ich fügte Puffer hinzu und schrieb die Daten Zeile für Zeile in die Datei. Die Anforderung von Zecken bleibt gleich - ein Tag.

Ich habe den Indikator in das Diagramm eingefügt.

2020.11.29 17:58:07.306 newCandles_F_1.01 (GBPUSD,H2)   00:01:01

Der Indikator hat alle Daten in einer Minute gerendert und in eine Datei geschrieben.

Python - 3 Stunden

MMS - 1 Minute

 

Ich grüße alle.

Können Sie mir sagen, warum?

Ich lese eine csv-Datei in einen Datenrahmen ein. Dann staple ich ein paar Zeilen in eine und schreibe sie in eine neue csv-Datei

....
csv_framе = pd.read_csv(flname, delimiter=',')
#  тут меняю имя файла
if os.path.isfile(flname):
    os.remove(flname)

rows, cols = csv_framе.shape
for i in range(candles_in_train, rows):
    lst = list()
    for k in range(candles_in_train):
        m = i - candles_in_train + k
        l = list(csv_framе.iloc[m])
        if m < i - 1:
            del l[-1]
        lst += l
    mf.write_csv_data(flname, 'a', lst)

Dieser Code funktioniert 17 Sekunden lang.

Wenn ich aber alles auf einmal in einen neuen csv-Frame packe und dann in eine Datei auslagere, dann erhöht sich die Laufzeit des Codes auf 1 Minute. 44 sec.

...
new_frame = pd.DataFrame()

rows, cols = csv_framе.shape
for i in range(candles_in_train, rows):
    lst = list()
    for k in range(candles_in_train):
        m = i - candles_in_train + k
        l = list(csv_fraim.iloc[m])
        if m < i - 1:
            del l[-1]
        lst += l
    #mf.write_csv_data(flname, 'a', lst)
    r, c = new_frame.shape
    if r == 0:
        new_frame = pd.DataFrame([lst])
    else:
        new_frame.loc[r] = lst
new_frame.to_csv(flname, header=None, index=False)

Warum ist das so?

 

Kodierungsproblem? (Google Übersetzer)


 

Es gibt eine Tabelle (Pandas DataFrame). Wie erstellt man eine neue Spalte mit der Bedingung: wenn Spalte "1" < Spalte "2", dann schreibe 145, sonst schreibe 874?


hinzufügen:

Auf jeden Fall gelöst durch

import numpy as np
... np.where(
 
Guten Tag, kann Python in MT5 verwendet werden, um WinApi zu erreichen?

Ich möchte vor allem wissen, ob es funktionieren wird.

keybd_event(VK_CONTROL,0,0,0);
 

Wie kann ich einen Ausgleich vornehmen?

Dies ist die Tabelle (Data Frame)

      time  
2020-11-25
2020-11-26
2020-11-27
2020-11-30 
2020-12-01        

Wie man das macht:

      time             time_1
2020-11-25	   2020-11-26
2020-11-26         2020-11-27
2020-11-27         2020-11-30
2020-11-30         2020-12-01 
2020-12-01         ничего не писать 
Grund der Beschwerde: