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

 
MrBrooklin:

Sim, estou a abri-lo em Excel. Até agora não é possível actualizar a cotação no ficheiro aberto EUR_USD_QUOTE.csv em tempo real.

Foi a ideia de olhar para a tabela e ver como a citação muda.

Atenciosamente, Vladimir.

Portanto, não tem nada a ver com Python ou Exel. O ficheiro foi aberto e os dados foram importados para o Exel. O programa que se tem de escrever nele, utilizando a VBA incorporada.

Não é necessário um programa Python, é mais fácil de usar VBA. Não tenho trabalhado muito com ele, mas tenho a certeza que pode fazer GET.

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

Portanto, não tem nada a ver com Python ou Exel. Abriu o ficheiro, os dados foram lidos no Exel e pronto. Depois tem de escrever um programa nele usando VBA incorporado

Não é necessário um programa Python, é mais fácil de usar VBA. Não tenho trabalhado muito com ele, mas tenho a certeza que pode fazer GET.

Olá Alexey!

É impossível escrever um código de programa em PYTHON da forma como o ficheiro EUR_USD_QUOTE.csv será fechado e reaberto imediatamente com uma nova citação?

Ainda não sei nada sobre VBA, mas obrigado pela dica.

Cumprimentos, Vladimir.

 
Maxim Dmitrievsky:

Abre o ficheiro com Excel? Depois abre o ficheiro de forma monopolística. Algures nas definições tem de permitir que outras aplicações/utilizadores possam modificar o ficheiro

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

Em geral, não se pode modificar um ficheiro aberto noutra aplicação.

Maxim, quão difícil é fazer abrir primeiro o ficheiro EUR_USD_QUOTE.csv, tal como foi implementado no código fonte, e depois, após um certo intervalo, fecha por um segundo sob a influência do código do programa finalizado e abre imediatamente de novo, mas com uma nova citação? E assim por diante até ao infinito...

Cumprimentos, Vladimir.

 
MrBrooklin:

Maxim, quão difícil é tornar o ficheiro EUR_USD_QUOTE.csv primeiro aberto como foi implementado no código fonte, e após um certo intervalo de tempo, sob a influência do código do programa finalizado, fechar por um segundo e depois abrir novamente, mas com uma nova citação? E assim por diante até ao infinito...

Cumprimentos, Vladimir.

Experimente isto

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:

Portanto, nem Python nem Exel tiveram nada a ver com isto. Abriu o ficheiro, os dados em Exel foram contados e pronto. É então necessário escrever um programa na VBA incorporada

E se assim for, o programa em Python não é necessário, é mais fácil fazer tudo de uma só vez na VBA. Não trabalhei muito com ele, mas tenho a certeza que ele pode fazer GET.

Nem sequer precisa de VBA. Tudo o que tem de fazer é usar excel inicialmente. Vou escrever instruções em inglês... Criar um novo livro de exercícios. Clique no separador Dados > Obter Dados > De Outras Fontes > Da Web, depois cole o endereço da Web no campo url. De seguida clique em actualizar todas as outras opções > Propriedades de ligação e configurar para actualizar automaticamente a cada n minutos.

 
MrBrooklin:

Maxim, quão difícil é tornar o ficheiro EUR_USD_QUOTE.csv aberto primeiro, uma vez que foi implementado no código fonte, e em algum intervalo de tempo sob a influência de código modificado por um segundo fechado e imediatamente reaberto, mas com uma nova citação? E assim até ao infinito...

Com todo o respeito, Vladimir.

O ficheiro será bloqueado para escrita pelo excel se deixar a janela do excel aberta. Terá de acrescentar lógica para contabilizar um ficheiro bloqueado. Além disso, porque é que está a raspar a web para obter citações? Porque não está a usar o MetaTrader para recolher citações? Não faz sentido.

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:

experimente isto.


Obrigado, Maxim!

Já estou a tentar. O ciclo já começou, mas o ficheiro ainda não está a abrir. Vou deixar o laço em funcionamento e esperar.

Cumprimentos, Vladimir.


P.S. Perdão! Não prestou atenção de imediato ao que vale uma hora. Mudei-o para o ficheiro EUR_USD_QUOTE.csv no minuto em que foi aberto, mas recebi esta mensagem no separador Run do Pycharm:

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

Depois de mais ou menos um minuto, o ficheiro fechou e reabriu, mas em Exel apareceu uma aba no lado esquerdo da folha de cálculo pedindo-me para guardar o texto previamente aberto. Esperei um pouco mais para ver o que iria acontecer a seguir, mas depois o ciclo parou e uma mensagem como esta apareceu:

�ᯥ譮: ������ "EXCEL.EXE", � ������䨪���஬ 4208, � �������襭.
�ᯥ譮: ������ "EXCEL.EXE", � ������䨪��஬ 3168, ��� ������襭.
Traceback (última chamada):
Ficheiro "C:/Users/Vladimir/PycharmProjects/My_Python_Project/9.py", linha 37, em <module>
get_data(save_file='EUR_USD_QUOTE.csv')
Ficheiro "C:/Users/Vladimir/PycharmProjects/My_Python_Project/9.py", linha 23, em get_data
com open(save_file, 'w') as save:
PermissionError: [Errno 13] Permission denied: 'EUR_USD_QUOTE.csv')

Este é o resultado até agora, mas eu já fiz progressos!

Cumprimentos, Vladimir.

 
nicholish en:

O ficheiro será bloqueado para escrita pelo excel se deixar a janela do excel aberta. Terá de acrescentar lógica para contabilizar um ficheiro bloqueado. Além disso, porque está a raspar a web para obter citações? Porque não está a usar o MetaTrader para recolher citações? Não faz sentido.

O ficheiro será bloqueado para escrita no Excel, se deixar a janela do Excel aberta. Terá de acrescentar lógica para contabilizar o ficheiro bloqueado. Além disso, porque é que procura citações na Internet? Porque não usa o MetaTrader para recolher citações? Isso não faz sentido. (De mim pessoalmente: Desculpa, nicholish en, não falo inglês, por isso usei o Google Translate)

Quero aprender a tirar citações da Internet usando a linguagem Python, para que as possa ver não em terminal, mas em algum ficheiro, por exemplo csv . Pensei que era uma tarefa elementar, mas afinal não é. Talvez eu esteja no caminho errado, mas aquele que não procura nada, não encontra nada.

Passemos agora ao código que sugeriu. Depois de ter lançado o código em Pycharm , vi a seguinte mensagem:

Traceback (última chamada):
Ficheiro "C:/Users/Vladimir/PycharmProjects/My_Python_Project/10.py", linha 25, em <módulo>
main()
Ficheiro "C:/Users/Vladimir/PycharmProjects/My_Python_Project/10.py", linha 13, no principal
eurusd_bid = soup.find('td', 'pid-1-bid').text.text.replace(',', '.')
AttributeError: O objecto 'NoneType' não tem atributo 'text'

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

O que devo mudar para ver como funciona o código?

O meu respeito, Vladimir.

 

Fórum sobre comércio, sistemas automatizados de comércio e testes de estratégia comercial

MetaTrader 5 Python User Group - Como usar Python em Metatrader

MrBrooklin, 2020.08.19 22:05

Obrigado, Maxim!

Já estou a experimentá-lo. O laço está a correr, mas o ficheiro ainda não está a abrir. Vou deixar o laço em funcionamento e esperar.

Cumprimentos, Vladimir.


P.S. Perdão! Não prestou atenção de imediato, que valia uma hora. Mudei-o para o ficheiro EUR_USD_QUOTE.csv no minuto em que foi aberto, mas recebi esta mensagem no separador Run do Pycharm:

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

Depois de mais ou menos um minuto, o ficheiro fechou e reabriu, mas em Exel apareceu uma aba no lado esquerdo da folha de cálculo pedindo-me para guardar o texto previamente aberto. Esperei um pouco mais para ver o que iria acontecer a seguir, mas depois o ciclo parou e uma mensagem como esta apareceu:

�ᯥ譮: ������ "EXCEL.EXE", � ������䨪���஬ 4208, � �������襭.
�ᯥ譮: ������ "EXCEL.EXE", � ������䨪��஬ 3168, ��� ������襭.
Traceback (última chamada):
Ficheiro "C:/Users/Vladimir/PycharmProjects/My_Python_Project/9.py", linha 37, em <module>
get_data(save_file='EUR_USD_QUOTE.csv')
Ficheiro "C:/Users/Vladimir/PycharmProjects/My_Python_Project/9.py", linha 23, em get_data
com open(save_file, 'w') as save:
PermissionError: [Errno 13] Permission denied: 'EUR_USD_QUOTE.csv')

Este é o resultado até agora, mas eu já fiz progressos!

Atenciosamente, Vladimir.

Maxim, não sei o que aconteceu mas tentei novamente o teu código e, oh meu Deus! O processo de looping já começou, mas com uma advertência. Como antes, apareceu um separador em Excel no lado esquerdo a pedir-me para guardar o ficheiro, mas não é nada de especial. Em anexo, encontra-se uma imagem de ecrã. Esperei que os seis ciclos passassem e abandonei o programa. Agora vou estudar cada linha de código e tentar compreender o que escrevi e a que se destina. Muito obrigado!

Atenciosamente, Vladimir.



P.S. Surgiu uma ideia, porque é que aparece uma aba do lado esquerdo a sugerir que se guarde o ficheiro. Só o código de programação fecha o ficheiro sem guardar, é provavelmente por isso que a Exel oferece e continuará a oferecer para guardar o ficheiro.

 

Leitura do pager chinês. A pensar muito...

Este é o meu ponto de vista sobre a integração do Python e do MQL. Ambas as línguas são próximas, mas o MQL é simples e o Python é primitivo, como o BASIC. Todos os que programam em MQL podem facilmente construir algo em Python e vice versa. Qual é o interesse neste assunto? Em primeiro lugar, é para pessoas muito preguiçosas. Bem, escreve algo numa língua muito semelhante... O interesse poderia estar em duas componentes: bibliotecas, das quais existem muitas em Python, e interfaces, pelas quais a MQL é famosa. Então porque não fazer o acesso de interfaces Python para MQL e o acesso de MQL para bibliotecas Python? É isso mesmo.

Razão: