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

 

¡Buenas tardes a todos!

No sé si estoy escribiendo en el hilo correcto, pero espero que me puedan corregir. Y una cosa más para aclarar: ¡soy un cero total en programación!

Así, he encontrado un código de un pequeño programa escrito en PYTHON que toma una cotización del par EUR/USD de un sitio conocido y la escribe en la celda A1 del archivo EUR_USD_QUOTE.csv.

Si a alguien no le importa, por favor, mejore este código para que se actualice automáticamente una cotización en la misma celda A1 del archivo EUR_USD_QUOTE.csv cada hora.

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

¡Buenas tardes a todos!

No sé si estoy escribiendo en el hilo correcto, pero espero que me podáis corregir. Y una cosa más para aclarar: ¡soy un cero total en programación!

Así, he encontrado un código de un pequeño programa escrito en PYTHON que toma una cotización del par EUR/USD de un sitio conocido y la escribe en la celda A1 del archivo EUR_USD_QUOTE.csv.

Si a alguien no le importa, por favor, mejore este código para que se actualice automáticamente una cotización en la misma celda A1 del archivo EUR_USD_QUOTE.csv cada hora.

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

Gracias, Maxim!

He lanzado el código finalizado en el entorno de desarrollo PyCharm, pero todavía no pasa nada, sólo se activa el botón "Rerun". Todavía no puedo entender - ¿el código funciona o no?

También hay información adicional que se muestra en la pestaña "Problemas":

  1. PEP 8: E402 nivel de módulo de importación no en la parte superior del archivo: 28 - esto se refiere a la línea con el código de datetime importar datetime
  2. PEP 8: E402 importación a nivel de módulo no en la parte superior del archivo: 29 - esto se refiere a la línea de tiempo deimportación
  3. Eliminar los paréntesis redundantes: cuando eliminé estos paréntesis del código, el mensaje desapareció.

Maxim, ¿puedes hacer temporalmente que la cita en el archivo se actualice ahora por lo menos en 1 minuto para entender si el código está funcionando o no, de lo contrario tengo que esperar una hora entera?

Una cosa más. Después de lanzar el código inicial que había publicado anteriormente, el archivo EUR_USD_QUOTE.csv se abrió inmediatamente con la cotización actual, mientras que el código modificado no puede abrir este archivo.

¿Quizás estoy haciendo algo mal o no entiendo algo? Por favor, aconséjeme.

Saludos, Vladimir.
 
MrBrooklin:
Gracias, Maxim!

He ejecutado el código finalizado en el entorno de desarrollo PyCharm, pero aún no ocurre nada, sólo se activa el botón "Rerun". Todavía no puedo entender - ¿el código funciona o no?

En la pestaña "Problemas" aparece información adicional:

  1. PEP 8: E402 nivel de módulo de importación no en la parte superior del archivo: 28 - esto se refiere a la línea con el código de datetime importar datetime
  2. PEP 8: E402 importación a nivel de módulo no en la parte superior del archivo: 29 - esto se refiere a la línea de tiempo deimportación
  3. Eliminar los paréntesis redundantes: cuando eliminé estos paréntesis del código, el mensaje desapareció.

Maxim, ¿puedes hacer temporalmente una cita en la actualización del archivo ahora por lo menos en 1 minuto para entender si el código está funcionando o no, tengo que esperar una hora entera...?

Una cosa más. Después de lanzar el código inicial que había publicado anteriormente, el archivo EUR_USD_QUOTE.csv se abrió inmediatamente con la cotización actual, mientras que el código modificado no puede abrir este archivo.

¿Quizás estoy haciendo algo mal o no entiendo algo? Por favor, aconséjeme.

Saludos, Vladimir.

Los 2 primeros errores - sólo hay que mover esto a la parte superior del archivo

from datetime import datetime
import time

Esto es sólo una advertencia de estilo de programación, no un error

Para una comprobación rápida, sustituya ambos campos

hour

a

segundo

el archivo debe escribirse cada 10 segundos porque el temporizador de comprobación está ajustado a 10 segundos.

P.D. No te pases de la raya o te expulsarán por hacer peticiones demasiado frecuentes.

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)

en los paréntesis no tengo ningún error

Este código espera hasta la siguiente hora y luego sólo guarda

 

No tengo instalados estos módulos

import requests
from bs4 import BeautifulSoup

así que no lo he comprobado

 
Maxim Dmitrievsky:

Maxim, cambié tu código un poco por el método de "experimento científico" (por favor discúlpame de antemano) y funcionó para abrir el archivo EUR_USD_QUOTE.csv con la cotización actual en 1 minuto después del lanzamiento.

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.

Pero si no cierro el archivo EUR_USD_QUOTE.csv durante el siguiente minuto, recibo este mensaje:

Traceback (most recent call last):
File "C:/Users/Vladimir/PycharmProjects/My_Python_Project/8.py", line 36, in <module>
get_data(save_file='EUR_USD_QUOTE.csv')
File "C:/Users/Vladimir/PycharmProjects/My_Python_Project/8.py", line 21, in get_data
with open(save_file, 'w') as save:
PermissionError: [Errno 13] Permission denied: 'EUR_USD_QUOTE.csv'

Process finished with exit code 1

¿Cómo puedo hacer que el proceso continúe sin intervención humana una vez ejecutado el código del programa?

Saludos, Vladimir.

 
MrBrooklin:

Maxim, he cambiado tu código un poco por el método de "experimento científico" (por favor, discúlpame de antemano) y fue posible abrir el archivo EUR_USD_QUOTE.csv con la cotización actual en 1 minuto después de lanzarlo.


Pero si no cierro el archivo EUR_USD_QUOTE.csv durante el siguiente minuto, recibo este mensaje:

Traceback (most recent call last):
File "C:/Users/Vladimir/PycharmProjects/My_Python_Project/8.py", line 36, in <module>
get_data(save_file='EUR_USD_QUOTE.csv')
File "C:/Users/Vladimir/PycharmProjects/My_Python_Project/8.py", line 21, in get_data
with open(save_file, 'w') as save:
PermissionError: [Errno 13] Permission denied: 'EUR_USD_QUOTE.csv'

Process finished with exit code 1

¿Cómo puedo hacer que el proceso continúe sin intervención humana una vez ejecutado el código del programa?

Saludos, Vladimir.

ah sí, porque el proceso está ocupado os.startfile() por alguna razón, borrar esta línea

os.startfile(save_file)

и

import os

puede ser eliminado

Lo he comprobado, funciona.

 
Maxim Dmitrievsky:

y sí, porque el proceso está ocupado os.startfile() por alguna razón, borrar esa línea

и

puede ser eliminado.

Lo he comprobado, funciona.

Maxim, hizo todo lo que le aconsejaste. No se han reportado más problemas. El programa se ha iniciado pero ahora ¿cómo puedo ver la cotización si el archivo EUR_USD_QUOTE. csv está cerrado y cuando lo abro y lo dejo abierto, aparece el mismo mensaje que PermissionError: [Errno 13] Permission denied: 'EUR_USD_QUOTE.csv' y la cotización en el archivo abierto ya no se actualiza?

Por favor, disculpadme una vez más, nunca he ocultado que soy un cero total en programación.

Saludos, Vladimir.

 
MrBrooklin:

Maxim, he hecho todo lo que me has aconsejado. No hay más mensajes sobre problemas. Ahora, ¿cómo puedo ver la cotización si el archivo EUR_USD_QUOTE.csv está cerrado y cuando lo abro y lo dejo abierto, me aparece el mismo mensaje que PermissionError: [Errno 13] Permission denied: 'EUR_USD_QUOTE.csv' y la cotización en el archivo abierto ya no se actualiza?

Por favor, disculpadme una vez más, nunca he ocultado que soy un cero total en programación.

Saludos, Vladimir.

Si abre el archivo con Excel, significa que abre el archivo de forma monopólica. Tiene que permitir que otras aplicaciones/usuarios modifiquen el archivo.

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

En general, no se puede modificar un archivo abierto en otro programa.

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

No se puede modificar un archivo abierto en otro programa.

Sí, lo abro en Excel. Todavía no puedo actualizar la cotización en el archivo abierto EUR_USD_QUOTE.csv en tiempo real.

La idea era mirar la tabla y ver los cambios en la cotización.

Saludos, Vladimir.