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

 
MrBrooklin:

Vielen Dank, Maxim!

Ich bin schon dabei, es auszuprobieren. Der Zyklus hat begonnen, aber die Datei wird noch nicht geöffnet. Ich werde die Schleife in Betrieb lassen und abwarten.

Mit freundlichen Grüßen, Vladimir.


P.S. Verzeihung! Hat nicht sofort darauf geachtet, was Stunde steht. Ich änderte es auf Minute EUR_USD_QUOTE.csv Datei geöffnet wurde, aber ich bekam diese Meldung in Run Registerkarte von Pycharm:

�訡��: �� 㤠���� ���� ����� "excel.exe".

Nach einer weiteren Minute oder so wurde die Datei geschlossen und wieder geöffnet, aber in Exel erschien eine Registerkarte auf der linken Seite des Arbeitsblatts, die mich aufforderte, den zuvor geöffneten Text zu speichern. Ich wartete noch etwas länger, um zu sehen, was als Nächstes passieren würde, aber dann stoppte der Zyklus und eine Meldung wie diese erschien:

�ᯥ譮: ����� "EXCEL.EXE", � �����䨪��஬ 4208, � �����襭.
�ᯥ譮: ����� "EXCEL.EXE", � �����䨪��஬ 3168, �� �����襭.
Traceback (most recent call last):
File "C:/Users/Vladimir/PycharmProjects/My_Python_Project/9.py", line 37, in <module>
get_data(save_file='EUR_USD_QUOTE.csv')
File "C:/Users/Vladimir/PycharmProjects/My_Python_Project/9.py", line 23, in get_data
with open(save_file, 'w') as save:
PermissionError: [Errno 13] Permission denied: 'EUR_USD_QUOTE.csv'

Das ist das bisherige Ergebnis, aber ich habe schon Fortschritte gemacht!

Mit freundlichen Grüßen, Vladimir.

Vielleicht hatte Excel keine Zeit, die Datei zu schließen, und hat bereits versucht, auf die Datei zuzugreifen, und dann

while True:
    t = datetime.now().hour
    if(t2 != t):
        os.system("TASKKILL /F /IM excel.exe") 
	time.sleep(10)
        get_data(save_file='EUR_USD_QUOTE.csv')
        t2 = t
    time.sleep(10)

Fügen Sie hier eine Verzögerung von 5-10 Sekunden ein, und das Programm wartet darauf, dass Excel geschlossen wird.

Ich habe noch nicht entschieden, was ich mit dem Fenster auf der linken Seite machen soll.)

 
MrBrooklin:

Ich möchte lernen, wie man Zitate im Internet mit der Sprache Python zu nehmen, um sie nicht in das Terminal zu sehen, aber in einer Datei, zum Beispiel, csv. Ich dachte, es sei die einfachste Aufgabe, aber es stellte sich heraus, dass sie es nicht war. Vielleicht bin ich auf der falschen Fährte, aber wer nichts sucht, der findet auch nichts.

Jetzt werde ich mich mit dem von Ihnen vorgeschlagenen Code befassen. Nachdem der Code gestartet wurde, erschien eine Meldung in der Pycharm-Entwicklungsumgebung :

Traceback (most recent call last):
File "C:/Users/Vladimir/PycharmProjects/My_Python_Project/10.py", line 25, in <module>
main()
File "C:/Users/Vladimir/PycharmProjects/My_Python_Project/10.py", line 13, in main
eurusd_bid = soup.find('td', 'pid-1-bid').text.replace(',', '.')
AttributeError: 'NoneType'-Objekt hat kein Attribut 'text'

Prozess beendet mit Exit-Code 1

Was muss ich ändern, um zu sehen, wie der Code funktioniert?

Hochachtungsvoll, Vladimir.

Der Grund, warum es nicht funktioniert, ist, dass diese Website Sie für das Senden von Anfragen gesperrt hat. Die Tatsache, dass Sie einen Benutzer-Agenten vortäuschen mussten, muss ein Hinweis darauf gewesen sein, dass Sie etwas taten, was sie nicht wollten. Web-Scanning geht weit über den Rahmen dieses Themas hinaus, also sollten wir aufhören, darüber zu reden, und uns wieder dem eigentlichen Thema zuwenden. Haben Sie Fragen zur Verwendung des MetaTrader5-Pakets?

 
Maxim Dmitrievsky:

Möglicherweise hat er keine Zeit, Excel zu schließen, und versucht, auf die Datei zuzugreifen.

fügen Sie eine Verzögerung von 5-10 Sekunden hinzu, dann wartet das Programm darauf, dass Excel geschlossen wird

Ich habe noch nicht entschieden, was ich mit dem linken Fenster machen werde.)

Maxim, vielen Dank für den Code, den Sie mir geholfen haben, zu verbessern. Das linke Bedienfeld ist im Moment nicht von Belang. Ich werde Ihren neuen Code später hinzufügen, wahrscheinlich am Wochenende, da ich heute auf der Arbeit völlig überlastet war und eine Pause brauche. Ich werde Sie informieren, sobald ich neue Ergebnisse habe.

Mit freundlichen Grüßen, Vladimir.

 

Bei welchem Offset gibt die MT5-Bibliothek die Zeit der offenen Aufträge zurück?

def checkPositions(self):
        return mt5.positions_get(symbol=self.symbol)

pos = trade.checkPositions()
pos[0].time

>>> pos[0].time
1598035196

datetime.datetime.fromtimestamp(pos[0].time).strftime("%A, %B %d, %Y %I:%M:%S")

>>> datetime.datetime.fromtimestamp(pos[0].time).strftime("%A, %B %d, %Y %I:%M:%S")
'Saturday, August 22, 2020 01:39:56'

Aber im Terminal ist es eine andere Zeit

Wie synchronisiere ich die Zeit im Python-Programm korrekt mit der Zeit der Aufträge (Positionen)?

 
Maxim Dmitrievsky:

Bei welchem Offset gibt die MT5-Bibliothek die Zeit der offenen Aufträge zurück?

aber im Terminal ist es eine andere Zeit

Wie synchronisiere ich die Zeit im Python-Programm korrekt mit der Zeit der Aufträge (Positionen)?

Zunächst müssen Sie die genaue Zeitzone des Handelsservers kennen. Erstellen Sie dann mit pytz ein Zeitzonenobjekt. Schließlich übergeben Sie das Zeitzonenobjekt an eine Methode.

import datetime as dt

import pytz
import pymt5adapter as mta


def main():
    broker_timezone = pytz.timezone('Etc/UTC')
    for position in mta.positions_get():
        time = dt.datetime.fromtimestamp(position.time, tz=broker_timezone)
        print(time)


if __name__ == '__main__':
    with mta.connected():
        main()
https://stackoverflow.com/questions/13866926/is-there-a-list-of-pytz-timezones
Is there a list of Pytz Timezones?
Is there a list of Pytz Timezones?
  • 2012.12.13
  • ipegasus
  • stackoverflow.com
I would like to know what are all the possible values for the timezone argument in the Python library pytz. How to do it?
 
nicholish en:

Zunächst müssen Sie die genaue Zeitzone des Handelsservers kennen. Erstellen Sie dann mit pytz ein Zeitzonenobjekt. Übergeben Sie schließlich das Zeitzonenobjekt an die Methode.

https://stackoverflow.com/questions/13866926/is-there-a-list-of-pytz-timezones

Danke, ich werde es so versuchen

Ich möchte die Zeit automatisch synchronisieren, da sich der Handelsserver ändern kann.
 
Maxim Dmitrievsky:

Danke, ich werde das ausprobieren.

Ich möchte die Zeit automatisch synchronisieren, da sich der Handelsserver ändern kann

UNIX-Zeitstempel sind zeitzonenunabhängig, so dass Sie die Zeitzone des Brokers kennen müssen, um dem Zeitstempel einen zeitzonenabhängigen Kontext zu geben. Die einzige Möglichkeit, dies zu tun, besteht darin, die Zeitzoneneinstellung des Handelsservers zu kennen. Ich glaube nicht, dass es eine Möglichkeit gibt, diese Informationen programmatisch zu erhalten. Sie können eine Konfigurationsdatei erstellen, um die verschiedenen Handelsserver, die Sie möglicherweise verwenden, der Zeitzone zuzuordnen. Beispiel:


config.json

{
    "servers": {
        "MetaQuotes-Demo": {
            "timezone": "Europe/Moscow"
        },
        "AMPGlobalUSA-Demo": {
            "timezone": "Etc/UTC"
        }
    }
}
 
nicholish en:

UNIX-Zeitstempel sind zeitzonenunabhängig, so dass Sie die Zeitzone des Brokers kennen müssen, um dem Zeitstempel einen zeitzonenabhängigen Kontext zu geben. Die einzige Möglichkeit, dies zu tun, besteht darin, die Zeitzoneneinstellung des Handelsservers zu kennen. Ich glaube nicht, dass es eine Möglichkeit gibt, diese Informationen programmatisch zu erhalten. Sie können eine Konfigurationsdatei erstellen, um die verschiedenen Handelsserver, die Sie möglicherweise verwenden, der Zeitzone zuzuordnen. Beispiel:


config.json

Nun... ja

einfacheren Weg ohne pytz:

pt = datetime.datetime.utcfromtimestamp(pos[0].time) // position open time by mt5 time
tt = datetime.datetime.utcnow() + datetime.timedelta(hours=3)   // current server time (from mt5 clock)

delta = tt-pt
>>> delta
datetime.timedelta(seconds=2139, microseconds=506786) // position lifetime
Wir können auch eine schwebende Order weit weg vom Preis eröffnen, bevor wir den EA starten. Und vergleichen Sie den Unterschied in Stunden zwischen 'pt' und
datetime.utcnow()
zur automatischen Zeitverschiebung
 
Maxim Dmitrievsky :

Nun ... ja

einfacher Weg ohne pytz:

Wir können auch eine schwebende Order weit weg vom Preis eröffnen, bevor wir den EA starten. Und vergleichen Sie die Differenz in Stunden zwischen 'pt' und der automatisch verrechneten Zeit

Das dachte ich auch, aber dann fiel mir ein, dass die Bestellzeit in einem UNIX-Zeitstempel gespeichert wird, der keine Zeitzone hat. Mit anderen Worten: Sie können die Zeitzone des Brokers nicht aus dem Zeitstempel des Auftrags extrapolieren, da die Zeitstempel unabhängig von der Zeitzone gleich sind. Wenn Sie den GMT-Offset wissen wollen, müssen Sie die aktuelle Terminalzeit (Broker) kennen, und es gibt derzeit keine Möglichkeit, mit Python die aktuelle Terminalzeit oder den GMT-Offset zu ermitteln.

 
Maxim Dmitrievsky:

Möglicherweise hat es keine Zeit, Excel zu schließen, und versucht, auf die Datei zuzugreifen, um dann

fügen Sie eine Verzögerung von 5-10 Sekunden hinzu, dann wartet das Programm darauf, dass Excel geschlossen wird

Ich habe noch nicht entschieden, was ich mit dem Fenster auf der linken Seite machen soll.)

Hallo Maxim!

Ich habe Ihnen vorhin versprochen, dass ich am Wochenende die Variante mit Verzögerungscodezusatz prüfen werde. Ich habe es überprüft, aber die Verzögerung hat sich nicht ausgewirkt. Ich habe keine Probleme mit der linken Registerkarte, weil ich ihr einfach keine Aufmerksamkeit schenke.

Nochmals herzlichen Dank für Ihre Hilfe. Ich werde in diesem Thread keine weiteren Fragen mehr stellen.

Mit freundlichen Grüßen, Vladimir.

Grund der Beschwerde: