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

 
MrBrooklin:

Oui, je l'ouvre dans Excel. Jusqu'à présent, il n'est pas possible de mettre à jour en temps réel la cotation dans le fichier EUR_USD_QUOTE.csv ouvert.

L'idée était de regarder le tableau et de voir comment le devis change.

Sincèrement, Vladimir.

Cela n'a donc rien à voir avec Python ou Exel. Le fichier a été ouvert et les données ont été importées dans Exel. Le programme que vous devez écrire dedans, en utilisant le VBA intégré.

Vous n'avez pas besoin d'un programme Python, il est plus facile d'utiliser VBA. Je n'ai pas beaucoup travaillé avec, mais je suis sûr qu'il peut faire du GET.

Самоучитель по Excel VBA
Самоучитель по Excel VBA
  • 2020.05.11
  • Антон Андронов
  • office-guru.ru
Данный учебник является введением в язык программирования Excel VBA (Visual Basic for Applications). Изучив VBA, Вы сможете создавать макросы и выполнять в Excel практически любые задачи. Вы очень...
 
Alexey Volchanskiy:

Cela n'a donc rien à voir avec Python ou Exel. Vous avez ouvert le fichier, les données ont été lues dans Exel et c'est tout. Ensuite, vous devez écrire un programme en utilisant le VBA intégré.

Vous n'avez pas besoin d'un programme Python, il est plus facile d'utiliser VBA. Je n'ai pas beaucoup travaillé avec, mais je suis sûr qu'il peut faire du GET.

Bonjour Alexey !

Est-il impossible d'écrire un code de programme dans PYTHON de manière à ce que le fichier EUR_USD_QUOTE.csv soit fermé et immédiatement réouvert avec une nouvelle cotation ?

Je ne connais pas encore le VBA, mais merci pour le conseil.

Salutations, Vladimir.

 
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.

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

Maxim, est-il difficile de faire en sorte que le fichier EUR_USD_QUOTE.csv s'ouvre d'abord, comme il a été implémenté dans le code source, puis, après un certain intervalle, se ferme pendant une seconde sous l'influence du code de programme finalisé et s'ouvre à nouveau immédiatement, mais avec une nouvelle cote ? Et ainsi de suite jusqu'à l'infini...

Salutations, Vladimir.

 
MrBrooklin:

Maxim, est-il difficile de faire en sorte que le fichier EUR_USD_QUOTE.csv s'ouvre d'abord comme il a été implémenté dans le code source, et après un certain intervalle de temps, sous l'influence du code du programme finalisé, se ferme une seconde puis s'ouvre à nouveau, mais avec une nouvelle cotation ? Et ainsi de suite jusqu'à l'infini...

Salutations, Vladimir.

Essayez ceci

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):
        os.system("TASKKILL /F /IM excel.exe")
        get_data(save_file='EUR_USD_QUOTE.csv')
        t2 = t
    time.sleep(10)


 
Alexey Volchanskiy:

Donc ni Python ni Exel n'y sont pour quelque chose. Vous avez ouvert le fichier, les données dans Exel ont été comptées et c'est tout. Il est ensuite nécessaire d'y écrire un programme sur le VBA intégré.

Et si c'est le cas, le programme sur Python n'est pas nécessaire, il est plus facile de tout faire en même temps dans le VBA. Je n'ai pas beaucoup travaillé avec lui, mais je suis sûr qu'il peut faire du GET.

Vous n'avez même pas besoin de VBA. Il suffit d'utiliser excel au départ. Je vais écrire des instructions en anglais... Créez un nouveau classeur. Cliquez sur l'onglet Données > Obtenir des données > Depuis d'autres sources > Depuis le Web, puis collez l'adresse Web dans le champ url. Cliquez ensuite sur Rafraîchir toutes les autres options > Propriétés de connexion et configurez la mise à jour automatique toutes les n minutes.

 
MrBrooklin:

Maxim, est-il difficile de faire en sorte que le fichier EUR_USD_QUOTE.csv s'ouvre d'abord, comme il a été implémenté dans le code source, et à un certain intervalle de temps sous l'influence du code modifié pour une seconde fermée et immédiatement rouverte, mais avec une nouvelle citation ? Et ainsi de suite jusqu'à l'infini...

Respectueusement, Vladimir.

Le fichier sera verrouillé en écriture par excel si vous laissez la fenêtre excel ouverte. Vous devrez ajouter une logique pour tenir compte d'un fichier verrouillé. Et pourquoi tu cherches des citations sur le web ? Pourquoi n'utilisez-vous pas MetaTrader pour recueillir les cotations ? Ça n'a pas de sens.

import itertools
import os
import pathlib

import bs4
import requests


def main():
    url = 'https://ru.investing.com/currencies/streaming-forex-rates-majors'
    r = requests.get(url, headers={'user-agent': 'Python Agent'})
    soup = bs4.BeautifulSoup(r.content, 'lxml')
    eurusd_bid = soup.find('td', 'pid-1-bid').text.replace(',', '.')
    for i in itertools.count():
        file = pathlib.Path() / f'eurusd_bid_{i}.csv'
        try:
            file.write_text(eurusd_bid)
            os.startfile(file)
            break
        except PermissionError:
            continue


if __name__ == '__main__':
    main()
 
Maxim Dmitrievsky:

Essayez ceci.


Merci, Maxim !

Je suis déjà en train de l'essayer. La boucle a commencé, mais le fichier 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 !

Salutations, Vladimir.

 
nicholish en:

Le fichier sera verrouillé en écriture par excel si vous laissez la fenêtre excel ouverte. Vous devrez ajouter une logique pour tenir compte d'un fichier verrouillé. Et pourquoi tu cherches des citations sur le web ? Pourquoi n'utilisez-vous pas MetaTrader pour recueillir les cotations ? Ça n'a pas de sens.

Le fichier sera verrouillé pour l'écriture dans Excel, si vous laissez la fenêtre Excel ouverte. Vous devrez ajouter une logique pour tenir compte du fichier verrouillé. De plus, pourquoi cherchez-vous des citations sur Internet ? Pourquoi n'utilisez-vous pas MetaTrader pour collecter les cotations ? Ça n'a pas de sens. (De moi personnellement : Désolé, nicholish en, je ne parle pas anglais, donc j'ai utilisé Google Translate)

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

Passons maintenant au code que vous avez suggéré. Après avoir lancé le code dans Pycharm , j'ai vu le message suivant :

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 ?

Mon respect, Vladimir.

 

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading

MetaTrader 5 Python User Group - Comment utiliser Python dans Metatrader

MrBrooklin, 2020.08.19 22:05

Merci, Maxim !

Je l'essaie déjà. La boucle est en cours d'exécution, mais le fichier ne s'ouvre pas encore. Je vais laisser la boucle en fonctionnement et attendre.

Salutations, Vladimir.


P.S. Pardon ! Je n'ai pas fait attention tout de suite, que ça valait une 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.

Maxim, je ne sais pas ce qui s'est passé mais j'ai réessayé ton code et oh mon Dieu ! Le processus de bouclage a commencé, mais avec un bémol. Comme précédemment, un onglet est apparu dans Excel sur le côté gauche me demandant d'enregistrer le fichier, mais ce n'est pas très grave. Vous trouverez ci-joint une capture d'écran. J'ai attendu que les six cycles soient passés et j'ai quitté le programme. Je vais maintenant étudier chaque ligne de code et essayer de comprendre ce que j'ai écrit et à quoi cela est destiné. Merci beaucoup !

Sincèrement, Vladimir.



P.S. Une idée m'est venue, pourquoi un onglet apparaît sur le côté gauche suggérant d'enregistrer le fichier. Le code de programmation ferme le fichier sans le sauvegarder, c'est probablement pour cela qu'Exel propose et continuera à proposer de sauvegarder le fichier.

 

Lecture du pager chinois. J'ai beaucoup réfléchi...

C'est ce que je pense de l'intégration de Python et de MQL. Les deux langages sont proches, mais MQL est simple et Python est primitif, comme BASIC. Toute personne qui programme en MQL peut facilement créer quelque chose en Python et vice versa. Quel est l'intérêt de ce sujet ? Tout d'abord, il s'adresse aux personnes très paresseuses. Eh bien, écrivez quelque chose dans un langage très similaire... L'intérêt pourrait porter sur deux éléments : les bibliothèques, dont il y a beaucoup en Python, et les interfaces, pour lesquelles MQL est célèbre. Alors pourquoi ne pas faire un accès de Python aux interfaces MQL et un accès de MQL aux bibliothèques Python ? C'est tout.