Grupo de usuarios de MetaTrader 5 Python - cómo utilizar Python en Metatrader - página 75

 
MrBrooklin:

Sí, lo estoy abriendo en Excel. Hasta ahora no es posible actualizar la cotización en el archivo abierto EUR_USD_QUOTE.csv en tiempo real.

La idea era mirar la tabla y ver cómo cambia la cotización.

Sinceramente, Vladimir.

Por lo tanto, no tiene nada que ver con Python o Exel. El archivo se abrió y los datos se importaron a Exel. El programa que tienes que escribir en él, utilizando el VBA incorporado.

No necesitas un programa de Python, es más fácil usar VBA. No he trabajado mucho con él, pero estoy seguro de que puede hacer GET.

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

Así que no tiene nada que ver con Python o Exel. Abriste el archivo, los datos fueron leídos en Exel y eso es todo. Entonces tienes que escribir un programa en él usando VBA incrustado

No necesitas un programa de Python, es más fácil usar VBA. No he trabajado mucho con él, pero estoy seguro de que puede hacer GET.

¡Hola Alexey!

¿Es imposible escribir un código de programa en PYTHON de manera que el archivo EUR_USD_QUOTE.csv se cierre y se vuelva a abrir inmediatamente con una nueva cotización?

Todavía no sé nada de VBA, pero gracias por el consejo.

Saludos, Vladimir.

 
Maxim Dmitrievsky:

¿Abrir el archivo con Excel? Así que abre el archivo de forma monopólica. Tienes que permitir que otras aplicaciones/usuarios modifiquen el archivo en algún lugar de la configuración.

Tal vez http://blog.depit.ru/odnovremennaya-rabota-v-excel/ ayude.

En general, no se puede modificar un archivo abierto en otra aplicación.

Maxim, ¿qué tan difícil es hacer que el archivo EUR_USD_QUOTE.csv se abra primero, tal como fue implementado en el código fuente, y luego, después de un cierto intervalo, se cierre por un segundo bajo la influencia del código del programa finalizado e inmediatamente se abra de nuevo, pero con una nueva cotización? Y así hasta el infinito...

Saludos, Vladimir.

 
MrBrooklin:

Maxim, ¿qué tan difícil es hacer que el archivo EUR_USD_QUOTE.csv se abra primero como fue implementado en el código fuente, y después de un cierto intervalo de tiempo, bajo la influencia del código del programa finalizado, se cierre por un segundo y luego se abra de nuevo, pero con una nueva cotización? Y así hasta el infinito...

Saludos, Vladimir.

Prueba esto

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:

Así que ni Python ni Exel tuvieron nada que ver. Abriste el archivo, se contaron los datos en Exel y ya está. A continuación, es necesario escribir un programa en él en el VBA incorporado

Y si es así, el programa en Python no es necesario, es más fácil hacer todo a la vez en el VBA. No he trabajado mucho con él, pero estoy seguro de que puede hacer GET.

Ni siquiera necesitas VBA. Todo lo que tienes que hacer es usar Excel inicialmente. Voy a escribir las instrucciones en inglés... Cree un nuevo libro de trabajo. Haz clic en la pestaña Datos > Obtener datos > De otras fuentes > De la web, y luego pega la dirección web en el campo url. A continuación, haga clic en actualizar todas las opciones más > Propiedades de la conexión y configure para que se actualice automáticamente cada n minutos.

 
MrBrooklin:

Maxim, ¿qué tan difícil es hacer que el archivo EUR_USD_QUOTE.csv se abra primero, como se implementó en el código fuente, y en algún intervalo de tiempo bajo la influencia del código modificado por un segundo cerrado e inmediatamente reabierto, pero con una nueva cotización? Y así hasta el infinito...

Respetuosamente, Vladimir.

El archivo se bloqueará para la escritura por parte de excel si se deja la ventana de excel abierta. Tendrá que añadir la lógica para tener en cuenta un archivo bloqueado. Además, ¿por qué buscas citas en la web? ¿Por qué no utiliza MetaTrader para recoger las cotizaciones? No tiene 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:

prueba esto.


¡Gracias, Maxim!

Ya lo estoy probando. El bucle se ha iniciado, pero el archivo aún no se ha abierto. Dejaré el bucle en funcionamiento y esperaré.

Saludos, Vladimir.


P.D. ¡Perdón! No prestó atención a la vez a lo que está de pie hora. Lo cambié al minuto en que se abrió el archivo EUR_USD_QUOTE.csv pero obtuve este mensaje en la pestaña Ejecutar de Pycharm:

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

Luego, después de otro minuto más o menos, el archivo se cerró y se volvió a abrir, pero en Exel apareció una pestaña en la parte izquierda de la hoja de cálculo que me pedía que guardara el texto abierto anteriormente. Esperé un poco más para ver qué pasaba después, pero entonces el ciclo se detuvo y apareció un mensaje como éste:

�ᯥ譮: ����� "EXCEL.EXE", � �����䨪��஬ 4208, � �����襭.
�ᯥ譮: ����� "EXCEL.EXE", � �����䨪��஬ 3168, �� �����襭.
Traceback (most recent call last):
File "C:/Users/Vladimir/PycharmProjects/My_Python_Project/9.py", line 37, in <module>
get_data(save_file='EUR_USD_QUOTE.csv')
File "C:/Users/Vladimir/PycharmProjects/My_Python_Project/9.py", line 23, in get_data
with open(save_file, 'w') as save:
PermissionError: [Errno 13] Permission denied: 'EUR_USD_QUOTE.csv'

Este es el resultado hasta ahora, ¡pero ya he avanzado!

Saludos, Vladimir.

 
nicholish en:

El archivo se bloqueará para la escritura por parte de excel si se deja la ventana de excel abierta. Tendrá que añadir la lógica para tener en cuenta un archivo bloqueado. Además, ¿por qué buscas citas en la web? ¿Por qué no utiliza MetaTrader para recoger las cotizaciones? No tiene sentido.

El archivo se bloqueará para escribir en Excel, si deja la ventana de Excel abierta. Tendrá que añadir la lógica para tener en cuenta el archivo bloqueado. Además, ¿por qué buscas presupuestos en Internet? ¿Por qué no utiliza MetaTrader para recoger las cotizaciones? Eso no tiene sentido. (De mi parte: Lo siento, nicholish en, no hablo inglés, así que usé Google Translate)

Quiero aprender a tomar citas de Internet usando el lenguaje Python, para poder mirarlas no en la terminal, sino en algún archivo, por ejemplo csv . Pensé que era una tarea elemental, pero resulta que no lo es. Tal vez me equivoque de camino, pero el que no busca nada, no encuentra nada.

Ahora pasemos al código que has sugerido. Después de haber lanzado el código en Pycharm vi el siguiente mensaje:

Traceback (most recent call last):
File "C:/Users/Vladimir/PycharmProjects/My_Python_Project/10.py", line 25, in <module>
main()
File "C:/Users/Vladimir/PycharmProjects/My_Python_Project/10.py", línea 13, en main
eurusd_bid = soup.find('td', 'pid-1-bid').text.replace(',', '.')
AttributeError: 'NoneType' object has no attribute 'text'

El proceso ha finalizado con el código de salida 1

¿Qué debo cambiar para ver cómo funciona el código?

Mis respetos, Vladimir.

 

Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading

Grupo de usuarios de Python de MetaTrader 5 - Cómo utilizar Python en Metatrader

MrBrooklin, 2020.08.19 22:05

¡Gracias, Maxim!

Ya lo estoy probando. El bucle se está ejecutando, pero el archivo no se abre todavía. Dejaré el bucle en funcionamiento y esperaré.

Saludos, Vladimir.


P.D. ¡Perdón! No prestó atención a la vez, que valía una hora. Lo cambié al minuto en que se abrió el archivo EUR_USD_QUOTE.csv pero obtuve este mensaje en la pestaña Ejecutar de Pycharm:

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

Luego, después de otro minuto más o menos, el archivo se cerró y se volvió a abrir, pero en Exel apareció una pestaña en la parte izquierda de la hoja de cálculo que me pedía que guardara el texto abierto anteriormente. Esperé un poco más para ver qué pasaba después, pero entonces el ciclo se detuvo y apareció un mensaje como éste:

�ᯥ譮: ����� "EXCEL.EXE", � �����䨪��஬ 4208, � �����襭.
�ᯥ譮: ����� "EXCEL.EXE", � �����䨪��஬ 3168, �� �����襭.
Traceback (most recent call last):
File "C:/Users/Vladimir/PycharmProjects/My_Python_Project/9.py", line 37, in <module>
get_data(save_file='EUR_USD_QUOTE.csv')
File "C:/Users/Vladimir/PycharmProjects/My_Python_Project/9.py", line 23, in get_data
with open(save_file, 'w') as save:
PermissionError: [Errno 13] Permission denied: 'EUR_USD_QUOTE.csv'

Este es el resultado hasta ahora, ¡pero ya he avanzado!

Sinceramente, Vladimir.

Maxim, no sé qué ha pasado pero he vuelto a probar tu código y ¡madre mía! El proceso de bucle ha comenzado, pero con una advertencia. Al igual que antes, ha aparecido una pestaña en Excel en la parte izquierda pidiéndome que guarde el archivo, pero no es gran cosa. Se adjunta una captura de pantalla. Esperé a que pasaran los seis ciclos y dejé el programa. Ahora estudiaré cada línea de código y trataré de entender qué he escrito y para qué sirve. ¡Muchas gracias!

Sinceramente, Vladimir.



P.D. Se me ocurrió una idea, por qué aparece una pestaña en la parte izquierda sugiriendo guardar el archivo. Sólo el código de programación cierra el archivo sin guardar, por eso probablemente Exel ofrece y seguirá ofreciendo guardar el archivo.

 

Leyendo el localizador chino. Pensando mucho...

Ese es mi punto sobre la integración de Python y MQL. Ambos lenguajes están cerca, pero MQL es simple y Python es primitivo, como BASIC. Todos los que programan en MQL pueden construir fácilmente algo en Python y viceversa. ¿Cuál es el interés de este tema? En primer lugar, es para gente muy perezosa. Bueno, escribe algo en un lenguaje muy similar... El interés podría estar en dos componentes: las bibliotecas, de las que hay muchas en Python, y las interfaces, por las que MQL es famoso. Entonces, ¿por qué no hacer el acceso desde Python a las interfaces MQL y el acceso desde MQL a las bibliotecas de Python? Eso es todo.

Razón de la queja: