MetaTrader 5 Python User Group - Comment utiliser Python dans Metatrader - page 76

 
MrBrooklin:

Merci, Maxim !

Je suis déjà en train de l'essayer. Le cycle a commencé, mais le dossier ne s'ouvre pas encore. Je vais laisser la boucle en fonctionnement et attendre.

Salutations, Vladimir.


P.S. Pardon ! Je n'ai pas prêté attention tout de suite à ce qui se passe à l'heure. Je l'ai modifié pour que le fichier EUR_USD_QUOTE.csv soit ouvert à la minute mais j'ai obtenu ce message dans l'onglet Run de Pycharm:

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

Puis, après une minute environ, le fichier s'est fermé et rouvert, mais dans Exel, un onglet est apparu sur le côté gauche de la feuille de calcul, me demandant d'enregistrer le texte précédemment ouvert. J'ai attendu un peu plus longtemps pour voir ce qui allait se passer ensuite, mais le cycle s'est arrêté et un message comme celui-ci est apparu :

�ᯥ譮 : ����� "EXCEL.EXE", � �����䨪��஬ 4208, � �����襭.
����� "EXCEL.EXE", � �����䨪��஬ 3168, �� �����襭.
Traceback (dernier appel le plus récent) :
Fichier "C:/Users/Vladimir/PycharmProjects/My_Python_Project/9.py", ligne 37, in <module>
get_data(save_file='EUR_USD_QUOTE.csv')
Fichier "C:/Users/Vladimir/PycharmProjects/My_Python_Project/9.py", ligne 23, in get_data
with open(save_file, 'w') as save :
PermissionError : [Errno 13] Permission refusée : 'EUR_USD_QUOTE.csv'.

Voici le résultat obtenu jusqu'à présent, mais j'ai déjà fait des progrès !

Sincèrement, Vladimir.

Peut-être qu'Excel n'a pas eu le temps de se fermer et qu'il essayait déjà d'accéder au fichier, puis...

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)

Ajoutez un délai de 5 à 10 secondes ici, et le programme attendra la fermeture d'Excel.

Je n'ai pas encore décidé ce que je vais faire de la fenêtre de gauche).

 
MrBrooklin:

Je veux apprendre comment prendre des citations sur Internet en utilisant le langage Python pour les regarder non pas dans le terminal, mais dans un fichier quelconque, par exemple, csv. Je pensais que c'était la tâche la plus élémentaire, mais il s'est avéré que ce n'était pas le cas. Je suis peut-être sur la mauvaise voie, mais celui qui ne cherche rien ne trouve rien.

Je vais maintenant passer au code que vous avez proposé. Après le lancement du code, un message est apparu dans l' environnement de développement Pycharm :

Traceback (dernier appel le plus récent) :
Fichier "C:/Users/Vladimir/PycharmProjects/My_Python_Project/10.py", ligne 25, in <module>
main()
Fichier "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' object has no attribute 'text'

Processus terminé avec le code de sortie 1

Que dois-je changer pour voir comment le code fonctionne ?

Respectueusement, Vladimir.

La raison pour laquelle cela ne fonctionne pas est que ce site vous a bloqué l'envoi de requêtes. Le fait que vous deviez falsifier un agent utilisateur devait être un indice que vous faisiez quelque chose qu'ils ne voulaient pas que vous fassiez. L'analyse du Web dépasse largement le cadre de ce sujet. Nous devrions donc arrêter d'en parler et revenir au sujet qui nous occupe. Vous avez des questions sur l'utilisation du package MetaTrader5 ?

 
Maxim Dmitrievsky:

Il se peut qu'il n'ait pas eu le temps de fermer Excel et qu'il essaie d'accéder au fichier, puis...

ajoutez un délai de 5 à 10 secondes, le programme attendra qu'Excel se ferme.

Je n'ai pas encore décidé ce que je vais faire de la fenêtre de gauche).

Maxim, merci beaucoup pour le code, que vous m'avez aidé à améliorer. Le panneau de gauche est peu préoccupant pour l'instant. J'ajouterai votre nouveau code plus tard, très probablement pendant le week-end, car j'ai été complètement débordé au travail aujourd'hui et j'ai besoin de repos. Je vous tiendrai au courant dès que j'aurai de nouveaux résultats.

Salutations, Vladimir.

 

Sur quel décalage la bibliothèque MT5 renvoie-t-elle l'heure des ordres ouverts?

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'

Mais dans le terminal, c'est un autre temps

Comment puis-je synchroniser correctement l'heure dans le programme python avec l'heure des ordres (positions) ?

 
Maxim Dmitrievsky:

Sur quel décalage la bibliothèque MT5 renvoie-t-elle l'heure des ordres ouverts?

Mais dans le terminal, c'est un autre temps

Comment puis-je synchroniser correctement l'heure dans le programme python avec l'heure des ordres (positions) ?

Vous devez d'abord connaître le fuseau horaire exact du serveur commercial. Créez ensuite un objet fuseau horaire en utilisant pytz. Enfin, passez l'objet fuseau horaire à une méthode.

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:

Vous devez d'abord connaître le fuseau horaire exact du serveur commercial. Créez ensuite un objet fuseau horaire en utilisant pytz. Enfin, passez l'objet fuseau horaire à la méthode.

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

Merci, je vais essayer comme ceci

Je voudrais synchroniser l'heure automatiquement car le serveur de trading peut changer.
 
Maxim Dmitrievsky:

Merci, je vais essayer.

Je voudrais synchroniser l'heure automatiquement, car le serveur commercial peut changer.

Les timestamps UNIX sont agnostiques par rapport au fuseau horaire. Vous devez donc connaître le fuseau horaire du courtier pour donner au timestamp un contexte tenant compte du fuseau horaire. La seule façon de le faire est de connaître le réglage du fuseau horaire du serveur commercial. Je ne pense pas qu'il y ait un moyen d'obtenir cette information de manière programmatique. Ce que vous pouvez faire, c'est créer un fichier de configuration pour associer les différents serveurs commerciaux que vous utilisez au fuseau horaire. Exemple :


config.json

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

Les timestamps UNIX sont agnostiques par rapport au fuseau horaire. Vous devez donc connaître le fuseau horaire du courtier pour donner au timestamp un contexte tenant compte du fuseau horaire. La seule façon de le faire est de connaître le réglage du fuseau horaire du serveur commercial. Je ne pense pas qu'il y ait un moyen d'obtenir cette information de manière programmatique. Ce que vous pouvez faire, c'est créer un fichier de configuration pour associer les différents serveurs commerciaux que vous utilisez au fuseau horaire. Exemple :


config.json

Eh bien... oui

un moyen plus facile sans 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
Nous pouvons également ouvrir un ordre en attente loin du prix, avant de lancer l'EA. Et comparez la différence en heures entre " pt " et
datetime.utcnow()
pour décaler automatiquement l'heure
 
Maxim Dmitrievsky :

Eh bien... oui

un moyen plus facile sans pytz :

Nous pouvons également ouvrir un ordre en attente loin du prix, avant de lancer l'EA. Et comparez la différence en heures entre 'pt' et pour décaler automatiquement l'heure.

J'ai pensé la même chose mais je me suis souvenu que l'heure de la commande est stockée dans un timestamp UNIX qui n'a pas de fuseau horaire. En d'autres termes, vous ne pouvez pas extrapoler le fuseau horaire du courtier à partir de l'horodatage de l'ordre, car les horodatages sont les mêmes quel que soit le fuseau horaire. Si vous voulez connaître le décalage GMT, vous devez connaître l'heure actuelle du terminal (broker) et il n'existe actuellement aucun moyen d'utiliser python pour obtenir l'heure actuelle du terminal ou le décalage GMT.

 
Maxim Dmitrievsky:

Il se peut qu'il n'ait pas eu le temps de fermer Excel et qu'il essaie d'accéder au fichier, puis...

ajoutez un délai de 5 à 10 secondes, le programme attendra qu'Excel se ferme.

Je n'ai pas encore décidé ce que je vais faire de la fenêtre de gauche).

Bonjour Maxim !

Je vous ai promis plus tôt qu'en fin de semaine je vérifierais la variante avec ajout de code de retard. Je l'ai vérifié, mais le retard n'a rien affecté. Je n'ai aucun problème avec l'onglet de gauche, car je n'y prête tout simplement pas attention.

Encore une fois, merci beaucoup pour votre aide. Je ne poserai plus de questions dans ce fil.

Salutations, Vladimir.