MetaTrader 5 Python User Group - como usar o Python no Metatrader - página 74

 

Boa tarde a todos!

Não sei se estou a escrever no fio certo, mas espero que me possam corrigir. E mais uma coisa para esclarecer - sou um zero total na programação!

Assim, encontrei um código de um pequeno programa escrito em PYTHON que pega numa citação do par EUR/USD de um site conhecido e escreve-o na célula A1 do ficheiro EUR_USD_QUOTE.csv.

Se alguém não se importar, por favor melhore este código para que uma cotação seja automaticamente actualizada na mesma célula A1 do ficheiro EUR_USD_QUOTE.csv de hora a hora.

Atenciosamente, 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:

Boa tarde a todos!

Não sei se estou a escrever no fio certo, mas espero que me possam corrigir. E mais uma coisa para esclarecer - sou um zero total na programação!

Assim, encontrei um código de um pequeno programa escrito em PYTHON que pega numa citação do par EUR/USD de um site conhecido e escreve-o na célula A1 do ficheiro EUR_USD_QUOTE.csv.

Se alguém não se importar, por favor melhore este código para que uma cotação seja automaticamente actualizada na mesma célula A1 do ficheiro EUR_USD_QUOTE.csv de hora a hora.

Atenciosamente, 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:

Obrigado, Maxim!

Lancei o código finalizado no ambiente de desenvolvimento PyCharm, mas ainda nada acontece, apenas o botão "Rerun" está activado. Ainda não consigo compreender - o código funciona ou não?

Existe também informação adicional apresentada no separador "Problemas":

  1. PEP 8: E402 nível de módulo de importação não no topo do ficheiro: 28 - isto diz respeito à linha com o código da data/hora de importação
  2. PEP 8: E402 nível de módulo de importação não no topo do ficheiro: 29 - isto diz respeito ao tempo deimportação de linha
  3. Remover parênteses redundantes - quando removi estes parênteses do código, a mensagem desapareceu.

Maxim, pode fazer temporariamente a citação na actualização do ficheiro agora pelo menos em 1 minuto para compreender se o código está a funcionar ou não, caso contrário tenho de esperar uma hora inteira...?

Só mais uma coisa. Depois de ter lançado o código inicial que tinha publicado anteriormente, o ficheiro EUR_USD_QUOTE.csv foi imediatamente aberto com a citação actual, enquanto que o código modificado não pode abrir este ficheiro.

Talvez eu esteja a fazer algo errado ou não compreendo alguma coisa? Por favor, aconselhem-me.

Cumprimentos, Vladimir.
 
MrBrooklin:
Obrigado, Maxim!

Executei o código finalizado no ambiente de desenvolvimento PyCharm, mas ainda nada acontece, apenas o botão "Rerun" está activado. Ainda não consigo entender - o código funciona ou não?

Existe também informação adicional apresentada no separador "Problemas":

  1. PEP 8: E402 nível de módulo de importação não no topo do ficheiro: 28 - isto diz respeito à linha com o código da data/hora de importação
  2. PEP 8: E402 importação ao nível do módulo não no topo do ficheiro: 29 - isto refere-se ao tempo deimportação da linha
  3. Remover parênteses redundantes - quando removi estes parênteses do código, a mensagem desapareceu.

Maxim, pode fazer uma citação temporária na actualização do ficheiro agora, pelo menos em 1 minuto, para compreender se o código está a funcionar ou não, tenho de esperar uma hora inteira...?

Só mais uma coisa. Depois de ter lançado o código inicial que tinha publicado anteriormente, o ficheiro EUR_USD_QUOTE.csv foi imediatamente aberto com a citação actual, enquanto que o código modificado não pode abrir este ficheiro.

Talvez eu esteja a fazer algo errado ou não compreendo alguma coisa? Por favor, aconselhem-me.

Cumprimentos, Vladimir.

1º 2 erros - basta mover isto para o topo do ficheiro

from datetime import datetime
import time

Isto é apenas um aviso de estilo de programação, não um erro

Para uma verificação rápida, substitua ambos os campos

hour

para

segundo

o ficheiro deve ser escrito de 10 em 10 segundos porque o temporizador de verificação está definido para 10 segundos.

P.S. Apenas não se entusiasme demasiado ou será banido por pedidos demasiado frequentes.

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)

entre parênteses não tenho nenhum erro

Este código espera até à hora seguinte e depois só salva

 

Não tenho estes módulos instalados

import requests
from bs4 import BeautifulSoup

por isso ainda não verificou

 
Maxim Dmitrievsky:

Maxim, alterei o vosso código um pouco pelo método "experiência científica" (por favor desculpem-me antes) e foi possível abrir o ficheiro EUR_USD_QUOTE.csv com a citação actual em 1 minuto após o lançamento.

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.

Mas se eu não fechar o ficheiro EUR_USD_QUOTE.csv durante o próximo minuto, recebo esta mensagem:

Traceback (última chamada):
Ficheiro "C:/Users/Vladimir/PycharmProjects/My_Python_Project/8.py", linha 36, em <module>
get_data(save_file='EUR_USD_QUOTE.csv')
Ficheiro "C:/Users/Vladimir/PycharmProjects/My_Python_Project/8.py", linha 21, em get_data
com open(save_file, 'w') as save:
PermissionError: [Errno 13] Permission denied: 'EUR_USD_QUOTE.csv'

Processo terminado com o código de saída 1

Como posso fazer com que o processo continue sem intervenção humana depois de o código do programa ter sido executado?

Cumprimentos, Vladimir.

 
MrBrooklin:

Maxim, alterei o vosso código um pouco pelo método "experiência científica" (por favor desculpem-me antes) e foi possível abrir o ficheiro EUR_USD_QUOTE.csv com a citação actual em 1 minuto após o lançamento.


Mas se eu não fechar o ficheiro EUR_USD_QUOTE.csv durante o próximo minuto, recebo esta mensagem:

Traceback (última chamada):
Ficheiro "C:/Users/Vladimir/PycharmProjects/My_Python_Project/8.py", linha 36, em <module>
get_data(save_file='EUR_USD_QUOTE.csv')
Ficheiro "C:/Users/Vladimir/PycharmProjects/My_Python_Project/8.py", linha 21, em get_data
com open(save_file, 'w') as save:
PermissionError: [Errno 13] Permission denied: 'EUR_USD_QUOTE.csv'

Processo terminado com o código de saída 1

Como posso fazer com que o processo continue sem intervenção humana depois de o código do programa ter sido executado?

Cumprimentos, Vladimir.

ah sim, porque o processo está ocupado os.startfile() por alguma razão, apague esta linha

os.startfile(save_file)

и

import os

pode ser removido

Verificou-o, funciona.

 
Maxim Dmitrievsky:

e sim, porque o processo está ocupado os.startfile() por alguma razão, apague essa linha

и

pode ser apagado.

Verificou-o, funciona.

Maxim, fez tudo como aconselhou. Não foram relatados mais problemas. O programa começou, mas agora como posso ver a citação se o ficheiro EUR_USD_QUOTE.csv está fechado e quando o abro e deixo aberto recebo a mesma mensagem que PermissionError: [Errno 13] Permission denied: 'EUR_USD_QUOTE.csv' e a citação no ficheiro aberto já não está actualizada?

Mais uma vez, peço desculpa, nunca escondi que sou um zero total na programação.

Cumprimentos, Vladimir.

 
MrBrooklin:

Maxim, eu fiz tudo como aconselhou. Não há mais mensagens sobre problemas. Agora como posso ver a citação se o ficheiro EUR_USD_QUOTE.csv está fechado e quando o abro e o deixo aberto, recebo a mesma mensagem que PermissionError: [Errno 13] Permission denied: 'EUR_USD_QUOTE.csv' e a citação no ficheiro aberto já não está actualizada?

Peço desculpa mais uma vez, nunca escondi que sou um zero total na programação.

Cumprimentos, Vladimir.

Abre o ficheiro com Excel? Significa que abre o ficheiro de forma monopolística. Tem de permitir que outras aplicações/utilizadores modifiquem o ficheiro.

Talvez http://blog.depit.ru/odnovremennaya-rabota-v-excel/ ajude.

Em geral, não se pode modificar um ficheiro aberto noutro programa.

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

Abre o ficheiro com Excel? Então abre o ficheiro de forma monopolística. Tem de permitir que outras aplicações/utilizadores modifiquem o ficheiro algures nas definições.

Talvez http://blog.depit.ru/odnovremennaya-rabota-v-excel/ ajude.

Não se pode modificar um ficheiro aberto noutro programa.

Sim, eu abro-o em Excel. Ainda não posso actualizar a cotação no ficheiro aberto EUR_USD_QUOTE.csv em tempo real.

Foi a ideia de olhar para a tabela e ver as alterações na citação.

Cumprimentos, Vladimir.