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

 

Bonjour à tous !

Je ne sais pas si j'écris dans le bon fil, mais j'espère que vous pourrez me corriger. Et une dernière chose à préciser : je suis un zéro absolu en programmation !

J'ai trouvé le code d'un petit programme écrit en PYTHON qui prend une cotation de la paire EUR/USD sur un site connu et l'écrit dans la cellule A1 du fichier EUR_USD_QUOTE.csv.

Si quelqu'un n'y voit pas d'inconvénient, veuillez améliorer ce code afin qu'une cotation soit automatiquement mise à jour dans la même cellule A1 du fichier EUR_USD_QUOTE.csv toutes les heures.

Sincèrement, Vladimir.

import csv
import requests
from bs4 import BeautifulSoup
import os


def get_data(url_to_scrap='https://ru.investing.com/currencies/streaming-forex-rates-majors',
             file=None, save_file="Name.csv"):
    if url_to_scrap is not None:
        header = {'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
                  'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:79.0) Gecko/20100101 Firefox/79.0'}
        r = requests.get(url_to_scrap, headers=header)
        data = BeautifulSoup(r.content, 'html.parser')
    else:
        data = BeautifulSoup(open(file), 'html.parser')
    table = data.find('tr', id='pair_1')
    table = table.find_all(class_='pid-1-bid')
    row_data = []
    for row in table:
        row_data.append([row.get_text()])
    with open(save_file, 'w') as save:
        for row in row_data:
            writer = csv.writer(save, delimiter=';')
            writer.writerow(row)
    os.startfile(save_file)


get_data(save_file='EUR_USD_QUOTE.csv')
Пара EUR/USD: технический анализ, новости Forex, фундаментальный анализ - Блоги трейдеров и аналитика финансовых рынков
Пара EUR/USD: технический анализ, новости Forex, фундаментальный анализ - Блоги трейдеров и аналитика финансовых рынков
  • www.mql5.com
Валютная пара EUR/USD — самая ликвидная, поскольку в ней участвуют первая и вторая по значимости мировые резервные валюты. Это подтверждается и статистически: доллар и евро самые крупные по объему
 
MrBrooklin:

Bonjour à tous !

Je ne sais pas si j'écris dans le bon fil, mais j'espère que vous pourrez me corriger. Et une dernière chose à préciser : je suis un zéro absolu en programmation !

J'ai trouvé le code d'un petit programme écrit en PYTHON qui prend une cotation de la paire EUR/USD sur un site connu et l'écrit dans la cellule A1 du fichier EUR_USD_QUOTE.csv.

Si quelqu'un n'y voit pas d'inconvénient, veuillez améliorer ce code afin qu'une cotation soit automatiquement mise à jour dans la même cellule A1 du fichier EUR_USD_QUOTE.csv toutes les heures.

Sincèrement, Vladimir.

import csv
import requests
from bs4 import BeautifulSoup
import os


def get_data(url_to_scrap='https://ru.investing.com/currencies/streaming-forex-rates-majors',
             file=None, save_file="Name.csv"):
    if url_to_scrap is not None:
        header = {'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
                  'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:79.0) Gecko/20100101 Firefox/79.0'}
        r = requests.get(url_to_scrap, headers=header)
        data = BeautifulSoup(r.content, 'html.parser')
    else:
        data = BeautifulSoup(open(file), 'html.parser')
    table = data.find('tr', id='pair_1')
    table = table.find_all(class_='pid-1-bid')
    row_data = []
    for row in table:
        row_data.append([row.get_text()])
    with open(save_file, 'w') as save:
        for row in row_data:
            writer = csv.writer(save, delimiter=';')
            writer.writerow(row)
    os.startfile(save_file)


from datetime import datetime
import time


t = datetime.now().hour
t2 = t

while True:
    t = datetime.now().hour
    if(t2 != t):
        get_data(save_file='EUR_USD_QUOTE.csv')
        t2 = t
    time.sleep(10)

 
Maxim Dmitrievsky:

Merci, Maxim !

J'ai lancé le code finalisé dans l'environnement de développement PyCharm, mais rien ne se passe encore, seul le bouton "Rerun" est activé. Je n'arrive pas encore à comprendre - est-ce que le code fonctionne ou pas ?

Des informations supplémentaires sont affichées dans l'onglet "Problèmes" :

.
  1. PEP 8 : E402 import au niveau du module qui n'est pas en haut du fichier : 28 - cela concerne la ligne avec le code from datetime import datetime
  2. PEP 8 : E402 l'importation au niveau du module n'est pas en haut du fichier : 29 - cela fait référence au temps d'importation de la ligne
  3. Suppression des parenthèses redondantes - lorsque j'ai supprimé ces parenthèses du code, le message a disparu.

Maxime, peux-tu temporairement faire en sorte que la citation dans le fichier se mette à jour maintenant au moins en 1 minute pour comprendre si le code fonctionne ou pas, sinon je dois attendre une heure entière... ?

Une dernière chose. Après avoir lancé le code initial que j'avais publié précédemment, le fichier EUR_USD_QUOTE.csv a été immédiatement ouvert avec la cotation actuelle, alors que le code modifié ne peut pas ouvrir ce fichier.

Peut-être que je fais quelque chose de mal ou que je ne comprends pas quelque chose ? S'il vous plaît, conseillez-moi.

Salutations, Vladimir.
 
MrBrooklin:
Merci, Maxim !

J'ai exécuté le code finalisé dans l'environnement de développement PyCharm, mais rien ne se passe encore, seul le bouton "Rerun" est activé. Je n'arrive pas encore à comprendre - est-ce que le code fonctionne ou pas ?

Des informations supplémentaires sont également affichées dans l'onglet "Problèmes" :

.
  1. PEP 8 : E402 import au niveau du module qui n'est pas en haut du fichier : 28 - cela concerne la ligne avec le code from datetime import datetime
  2. PEP 8 : E402 l'importation au niveau du module n'est pas en haut du fichier : 29 - cela fait référence au temps d'importation de la ligne
  3. Suppression des parenthèses redondantes - lorsque j'ai supprimé ces parenthèses du code, le message a disparu.

Maxime, peux-tu temporairement faire en sorte que la citation dans le fichier se mette à jour maintenant au moins en 1 minute pour comprendre si le code fonctionne ou pas, sinon je dois attendre une heure entière... ?

Une dernière chose. Après avoir lancé le code initial que j'avais publié précédemment, le fichier EUR_USD_QUOTE.csv a été immédiatement ouvert avec la cotation actuelle, alors que le code modifié ne peut pas ouvrir ce fichier.

Peut-être que je fais quelque chose de mal ou que je ne comprends pas quelque chose ? S'il vous plaît, conseillez-moi.

Salutations, Vladimir.

2 premières erreurs - il suffit de les déplacer en haut du fichier.

from datetime import datetime
import time

Il s'agit simplement d'un avertissement de style de programmation, et non d'une erreur.

Pour une vérification rapide, remplacez les deux champs

hour

à

deuxième

le fichier doit être écrit toutes les 10 secondes parce que la minuterie de vérification est réglée sur 10 secondes.

P.S. Ne vous emportez pas trop vite ou vous serez banni pour des demandes trop fréquentes.

t = datetime.now().hour
t2 = t

while True:
    t = datetime.now().hour
    if(t2 != t):
        get_data(save_file='EUR_USD_QUOTE.csv')
        t2 = t
    time.sleep(10)

sur les parenthèses je n'ai pas d'erreurs

Ce code attend jusqu'à l'heure suivante et n'enregistre alors que

 

Je n'ai pas installé ces modules

import requests
from bs4 import BeautifulSoup

Je n'ai donc pas vérifié

 
Maxim Dmitrievsky:

Maxime, j'ai modifié un peu votre code par la méthode de "l'expérience scientifique" (veuillez m'excuser à l'avance) et il a fonctionné pour ouvrir le fichier EUR_USD_QUOTE.csv avec la cotation actuelle dans 1 minute après le lancement.

from datetime import datetime
import time
t = datetime.now().minute  # здесь поставил минуту
t2 = t

while True:
    t = datetime.now().minute  # здесь поставил минуту
    if t2 != t:
        get_data(save_file='EUR_USD_QUOTE.csv')
        t2 = t
    # Code executed here
    time.sleep(1)  # и здесь 10 изменил на 1.

Mais si je ne ferme pas le fichier EUR_USD_QUOTE.csv pendant la minute suivante, j'obtiens ce message :

Traceback (dernier appel le plus récent) :
Fichier "C:/Users/Vladimir/PycharmProjects/My_Python_Project/8.py", ligne 36, in <module>
get_data(save_file='EUR_USD_QUOTE.csv')
Fichier "C:/Users/Vladimir/PycharmProjects/My_Python_Project/8.py", ligne 21, in get_data
with open(save_file, 'w') as save :
PermissionError : [Errno 13] Permission refusée : 'EUR_USD_QUOTE.csv'

Processus terminé avec le code de sortie 1

Comment faire pour que le processus se poursuive sans intervention humaine après l'exécution du code du programme ?

Salutations, Vladimir.

 
MrBrooklin:

Maxime, j'ai modifié un peu votre code par la méthode de "l'expérience scientifique" (veuillez m'en excuser au préalable) et il a été possible d'ouvrir le fichier EUR_USD_QUOTE.csv avec la cotation actuelle en 1 minute après le lancement.


Mais si je ne ferme pas le fichier EUR_USD_QUOTE.csv pendant la minute suivante, j'obtiens ce message :

Traceback (dernier appel le plus récent) :
Fichier "C:/Users/Vladimir/PycharmProjects/My_Python_Project/8.py", ligne 36, in <module>
get_data(save_file='EUR_USD_QUOTE.csv')
Fichier "C:/Users/Vladimir/PycharmProjects/My_Python_Project/8.py", ligne 21, in get_data
with open(save_file, 'w') as save :
PermissionError : [Errno 13] Permission refusée : 'EUR_USD_QUOTE.csv'

Processus terminé avec le code de sortie 1

Comment faire pour que le processus se poursuive sans intervention humaine après l'exécution du code du programme ?

Salutations, Vladimir.

ah oui, parce que le processus est occupé os.startfile() pour une raison quelconque, supprimez cette ligne

os.startfile(save_file)

и

import os

peut être retiré

Je l'ai vérifié, ça marche.

 
Maxim Dmitrievsky:

et oui, parce que le processus est occupé os.startfile() pour une raison quelconque, supprimez cette ligne

и

peuvent être retirés.

Je l'ai vérifié, ça marche.

Maxim, j'ai fait tout ce que vous m'avez conseillé. Aucun autre problème n'a été signalé. Le programme a démarré mais maintenant comment puis-je voir la cotation si le fichier EUR_USD_QUOTE.csv est fermé et quand je l'ouvre et le laisse ouvert, le même message apparaît : PermissionError : [Errno 13] Permission refusée : 'EUR_USD_QUOTE.csv' et la cotation dans le fichier ouvert n'est plus mise à jour ?

Veuillez m'excuser encore une fois, je n'ai jamais caché que je suis un zéro absolu en programmation.

Salutations, Vladimir.

 
MrBrooklin:

Maxim, j'ai fait tout ce que vous m'avez conseillé. Il n'y a plus de messages concernant les problèmes. Maintenant, comment puis-je voir la cotation si le fichier EUR_USD_QUOTE.csv est fermé et que lorsque je l'ouvre et le laisse ouvert, j'obtiens le même message que PermissionError : [Errno 13] Permission refusée : 'EUR_USD_QUOTE.csv' et la cotation dans le fichier ouvert n'est plus mise à jour ?

Veuillez m'excuser encore une fois, je n'ai jamais caché que je suis un zéro absolu en programmation.

Salutations, Vladimir.

Vous ouvrez le fichier avec Excel ? Cela signifie qu'il ouvre le fichier de manière monopolistique. Vous devez autoriser d'autres applications/utilisateurs à modifier le fichier.

Peut-être que http://blog.depit.ru/odnovremennaya-rabota-v-excel/ vous aidera.

En général, vous ne pouvez pas modifier un fichier ouvert dans un autre programme.

Одновременная работа нескольких пользователей с таблицами Excel
Одновременная работа нескольких пользователей с таблицами Excel
  • blog.depit.ru
Возможности системы Microsoft Excel позволяют работать по наполнению одного файла электронных таблиц одновременно нескольким пользователям. Для того, чтобы начать совместную работу с документом, достаточно в документе Microsoft Excel перейти в меню « Рецензирование » — « Доступ к книге » и выбрать « Разрешить изменять файл нескольким...
 
Maxim Dmitrievsky:

Vous ouvrez le fichier avec Excel ? Donc il ouvre le fichier de façon monopolistique. Vous devez autoriser les autres applications/utilisateurs à modifier le fichier quelque part dans les paramètres.

Peut-être que http://blog.depit.ru/odnovremennaya-rabota-v-excel/ vous aidera.

Vous ne pouvez pas modifier un fichier ouvert dans un autre programme.

Oui, je l'ouvre dans Excel. Je ne peux toujours pas mettre à jour la cotation dans le fichier EUR_USD_QUOTE.csv ouvert en temps réel.

L'idée était de regarder le tableau et de voir les changements dans la citation.

Salutations, Vladimir.