Diskussion zum Artikel "Integration von MetaTrader 5 und Python: Daten senden und empfangen" - Seite 9

[Gelöscht]  
MrBrooklin:

Hallo, Maxim!

Ich bin in meinen Python-Kenntnissen etwas fortgeschritten, aber ich kann keine detaillierten Informationen über den gemeinsamen Zugriff auf die csv-Datei von Python und einem Drittanbieter-Programm finden, zum Beispiel den gleichen Expert Advisor in MQL5 geschrieben. Einfach ausgedrückt: Der Python-Code schreibt regelmäßig Informationen in die csv-Datei, und der MQL5 Expert Advisor liest die Informationen daraus und führt die von mir benötigten Befehle aus. Ist ein solcher gemeinsamer Zugriff von beiden Seiten überhaupt möglich?

Mit freundlichen Grüßen, Vladimir.

Nein, aber beide Programme können versuchen, die Datei zu öffnen, wenn sie nicht von einem anderen Programm belegt ist. Und sie sollten sie nach dem Lesen/Schreiben wieder schließen.

 
Maxim Dmitrievsky:

Nein, aber beide Programme können versuchen, eine Datei zu öffnen, wenn sie nicht von einem anderen Programm belegt ist. Und sollten sie nach dem Lesen/Schreiben wieder schließen.

Vielen Dank, Maxim, für die Erklärung, insbesondere für das Schließen der Datei nach dem Lesen/Schreiben. Das ist der Punkt, den ich verstehen musste.

Mit freundlichen Grüßen, Vladimir.

 
Maxim Dmitrievsky:

Nein, aber beide Programme können versuchen, eine Datei zu öffnen, wenn sie nicht von einem anderen Programm belegt ist. Und sollten sie nach dem Lesen/Schreiben wieder schließen.

Hallo, Maxim, ich habe diesen Punkt berücksichtigt. Bitte helfen Sie mir, einen weiteren Punkt zu verstehen, nämlich die Kodierung von Text in einer mit Python erstellten csv-Datei und das anschließende Lesen dieses Textes durch einen in MQL5 erstellten Expert Advisor. Ich habe viele Informationen auf der MQL5-Website und in anderen Internet-Ressourcen gelesen, aber ich habe keine klare Erklärung gefunden. Im Allgemeinen öffnet der mit der Sprache Python erstellte Programmcode eine neue csv-Datei und schreibt die von mir benötigten Informationen in diese Datei. Der Einfachheit halber wird dabei ein Wort auf Russisch geschrieben, das eigentlich von der Website abgespart wurde. Das Wort in der geöffneten csv-Datei lese ich ohne Probleme, aber der Expert Advisor versteht die Kodierung dieses Wortes nicht. Das ist sicher, denn beim Schreiben des EA (übrigens habe ich es geschafft, den ersten unabhängigen Code zu schreiben!) habe ich eine csv-Datei mit dem gleichen Namen verwendet und das gleiche Wort in Zelle A1 geschrieben, aber nur über die Tastatur. Ich habe versucht, alles in beiden Codes zu ändern (ich meine in Python und MQL5), aber noch funktioniert nichts.

Können Sie mir sagen, welche Kodierung (encoding=?) ich für den Python-Code verwenden soll:

with open(save_file, 'w') as save:

und welche Kodierung (encoding=?) für den MQL5-Code zu verwenden ist:

filehandle=FileOpen("EUR_USD.csv",FILE_READ|FILE_SHARE_READ|FILE_ANSI|FILE_CSV|FILE_COMMON)

um sie zu "Freunden" zu machen? Ich ändere diese Kodierungen nun schon seit einigen Tagen und weiß nicht, was ich als nächstes tun soll. Und es gibt nur einen einzigen Punkt, der ein normales Arbeiten verhindert.

Vielleicht habe ich noch nicht alle Kodierungen für Python gefunden, aber das Interessanteste ist, dass, wenn der MQL5-Code die Kodierung FILE_ANSI hat, die in der obigen Zeile angegeben ist, und wenn ich das Wort z.B. "buy" auf der Tastatur in eine csv-Datei schreibe, dann liest und arbeitet der Expert Advisor nach dem Speichern dieser Datei perfekt.

Manchmal denke ich: Vielleicht liegt es gar nicht an den Kodierungen! Woran liegt es dann?

Bitte helfen Sie mir zu verstehen, was der Grund ist!

Mit freundlichen Grüßen, Vladimir.


P.S. Ich habe endlich zumindest eine vernünftige Erklärung gefunden: "In Python 3 ist die Standardkodierung UTF-8".

[Gelöscht]  
MrBrooklin:

Gut, um Probleme zu vermeiden, ist es besser, in eine Binärdatei zu schreiben und die Ausgabe wieder in Zeichen zu konvertieren. In diesem Artikel wird dies meiner Meinung nach in dem Beispiel mit den Sockets gemacht. Das heißt, das Flag FILE_BIN

 
Maxim Dmitrievsky:

Gut, um Probleme zu vermeiden, ist es besser, in eine Binärdatei zu schreiben und die Ausgabe wieder in Zeichen zu konvertieren. In diesem Artikel wird dies meiner Meinung nach in dem Beispiel mit den Sockets gemacht. Das heißt, das Flag FILE_BIN

Hallo Maxim, dank deiner Hinweise habe ich diese Information im Internet gefunden: "Binärdateien speichern im Gegensatz zu Textdateien Informationen als eine Menge von Bytes. Um mit ihnen in Python zu arbeiten, benötigen Sie das eingebaute Pickle-Modul".

Mit anderen Worten, wenn wir ein beliebiges Wort in Python-Programmcode als eine Menge von Bytes schreiben , indem wir das installierte Pickle-Modul verwenden und 'w' in 'wb' ändern .

import pickle 
.
.
.
with open(save_file, 'wb') as save:

und dann in einem in MQL5 geschriebenen Expert Advisor das FILE_BIN-Flag anstelle des FILE_ANSI-Flags setzen, sollte alles funktionieren? Wahrscheinlich sollten Sie nicht in eine csv-Datei, sondern in eine dat-Datei schreiben.

Vielen Dank, Maxim, für den Hinweis, ich werde es heute Abend ausprobieren!

Mit freundlichen Grüßen, Vladimir.


[Gelöscht]  
MrBrooklin:

Hallo Maxim, dank deiner Hilfe habe ich diese Informationen im Internet gefunden: "Im Gegensatz zu Textdateien speichern Binärdateien Informationen als eine Menge von Bytes. Um mit ihnen in Python zu arbeiten, benötigen Sie das eingebaute Pickle-Modul".

Mit anderen Worten, wenn wir ein beliebiges Wort in Python-Programmcode als eine Menge von Bytes schreiben , indem wir das installierte Pickle-Modul verwenden und 'w' in 'wb' ändern .

und dann in einem in MQL5 geschriebenen Expert Advisor das FILE_BIN-Flag anstelle des FILE_ANSI-Flags setzen, sollte alles funktionieren? Wahrscheinlich sollten Sie nicht in eine csv-Datei, sondern in eine dat-Datei schreiben.

Vielen Dank, Maxim, für den Hinweis, ich werde es heute Abend ausprobieren!

Mit freundlichen Grüßen, Vladimir.


nicht unbedingt, Sie können einfach die Kodierung auswählen

st = b 'hallo welt'

oder

'hallowelt '.encode('ascii')

und in eine Datei schreiben. Versuchen Sie dann, es in mt5 zu lesen

 
Maxim Dmitrievsky:

Das müssen Sie nicht, Sie können einfach die Kodierung auswählen

st = b 'hallo welt

oder

'hallowelt '.encode('ascii')

und schreiben Sie es in eine Datei. Versuchen Sie dann, es in mt5 zu lesen

Noch einmal sage ich und werde nicht müde, ein RIESIGES DANKESCHÖN zu sagen, Maxim, und Gott schenke Dir noch viele Jahre des Lebens!

Das Wichtigste für mich ist, dass Sie mir gesagt, was das Wesen des Problems ist, und ich fand die Lösung noch einfacher. Ich habe im Expert Advisor alles so gelassen, wie es war, als ich die csv-Datei mit dem Wort in Zelle A1 über die Computertastatur eingegeben habe. Aber für den in Python geschriebenen Programmcode habe ich diesen Hinweis im Internet gefunden:

with open(save_file, 'w',  encoding='cp1251',  errors='replace', newline='') as save:

Ich habe das, was fehlte, rot hervorgehoben! Ich hoffe, dass diese Zeile auch für jemanden nützlich sein wird, der Code in Python schreibt!

Mit freundlichen Grüßen, Vladimir.

 

Guten Tag!

Ich habe ein Problem in Python in matplotlib/plotly zu lösen:

1. Es gibt eine OHLC zum Rendern im Hauptfenster

2. Es gibt Daten zum Zeichnen im Unterfenster

Wie kodiere ich eine einfache Zeichnung? Gib mir einen einfachen Python-Code

Beispiel

[Gelöscht]  

Ich habe Probleme mit diesem Code:

from MetaTrader5 import *
from datetime import date
import pandas as pd 
import matplotlib.pyplot as plt 

# Initializing MT5 connection 
MT5Initialize()
MT5WaitForTerminal()

print(MT5TerminalInfo())
print(MT5Version())

Er sagt

Traceback (most recent call last):
  File "C:/Programs/PycharmProjects/nc/main.py", line 8, in <module>
    MT5Initialize()
NameError: name 'MT5Initialize' is not defined

Process finished with exit code 1

Ich bin noch neu in Python. Können Sie mir sagen, was falsch ist?

[Gelöscht]  
Сергей Таболин:

Und ich habe ein Problem mit diesem Code:

Er lautet

Ich bin noch neu in Python. Können Sie mir sagen, was falsch ist?

Sehen Sie sich das Beispiel aus meinem letzten Artikel an. Hier wurde eine alte Version des Pakets verwendet. Und die muss natürlich zuerst mit pip install installiert werden