MetaTrader 5 Python User Group - как использовать Python в Метатрейдере - страница 74

 

Всем доброго дня!

Не знаю в той ли ветке пишу, но надеюсь, что поправите меня. И ещё одно уточнение - в программировании я полный ноль!

Итак, нашел код маленькой программы написанной на языке PYTHON, которая берет котировку пары EUR/USD с известного сайта и записывает её в ячейку А1 файла EUR_USD_QUOTE.csv.

Если кому-нибудь не трудно, то пожалуйста, доработайте код так, чтобы котировка автоматически обновлялась в этой же ячейке А1 файла EUR_USD_QUOTE.csv через каждый час.

С уважением, Владимир.

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:

Всем доброго дня!

Не знаю в той ли ветке пишу, но надеюсь, что поправите меня. И ещё одно уточнение - в программировании я полный ноль!

Итак, нашел код маленькой программы написанной на языке PYTHON, которая берет котировку пары EUR/USD с известного сайта и записывает её в ячейку А1 файла EUR_USD_QUOTE.csv.

Если кому-нибудь не трудно, то пожалуйста, доработайте код так, чтобы котировка автоматически обновлялась в этой же ячейке А1 файла EUR_USD_QUOTE.csv через каждый час.

С уважением, Владимир.

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:

Спасибо, Максим!

Запустил доработанный код в среде разработки PyCharm, но пока ничего не происходит, только активировалась кнопка "Rerun" (перезапуск). Пока не могу понять - работает код или нет?

Есть ещё дополнительная информация, которая отбражается во вкладке "Problems":

  1.     PEP 8: E402 module level import not at top of file: 28 (PEP 8: импорт уровня модуля E402 не в верхней части файла: 28) - это касается строки с кодом from datetime import datetime
  2.     PEP 8: E402 module level import not at top of file: 29 - это касается строки import time
  3.     Remove redundant parentheses (Убрать лишние круглые скобки) - когда из кода убрал эти скобки, тогда данное сообщение исчезло.

Максим, можете временно сделать так, чтобы котировка в файле сейчас обновлялась хотя бы через 1 минуту, чтобы понять - работает код или нет, а то сидеть ждать целый час...?

И ещё. После запуска исходного кода, который мной был опубликован ранее, сразу открывался файл EUR_USD_QUOTE.csv с текущей котировкой, а с доработанным кодом этот файл не открывается.

Может я что-то не так делаю или чего-то не понимаю? Подскажите, пожалуйста.

С уважением, Владимир.
 
MrBrooklin:
Спасибо, Максим!

Запустил доработанный код в среде разработки PyCharm, но пока ничего не происходит, только активировалась кнопка "Rerun" (перезапуск). Пока не могу понять - работает код или нет?

Есть ещё дополнительная информация, которая отбражается во вкладке "Problems":

  1.     PEP 8: E402 module level import not at top of file: 28 (PEP 8: импорт уровня модуля E402 не в верхней части файла: 28) - это касается строки с кодом from datetime import datetime
  2.     PEP 8: E402 module level import not at top of file: 29 - это касается строки import time
  3.     Remove redundant parentheses (Убрать лишние круглые скобки) - когда из кода убрал эти скобки, тогда данное сообщение исчезло.

Максим, можете временно сделать так, чтобы котировка в файле сейчас обновлялась хотя бы через 1 минуту, чтобы понять - работает код или нет, а то сидеть ждать целый час...?

И ещё. После запуска исходного кода, который мной был опубликован ранее, сразу открывался файл EUR_USD_QUOTE.csv с текущей котировкой, а с доработанным кодом этот файл не открывается.

Может я что-то не так делаю или чего-то не понимаю? Подскажите, пожалуйста.

С уважением, Владимир.

1-е 2 ошибки - просто переместите это в самый верх файла

from datetime import datetime
import time

Это просто предупреждение стиля программирования, не ошибка

для быстрой проверки замените оба поля

hour

на 

second

в файл должно писаться каждые 10 секунд, потому что таймер проверки стоит 10 секунд

З.Ы. только сильно не увлекайтесь, а то могут зОбанить за сильно частые запросы

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)

по скобкам у меня нет ошибок никаких

Данный код дожидается наступления следующего часа и тогда только сохраняет

 

у меня не установлены эти модули

import requests
from bs4 import BeautifulSoup

поэтому не проверял

 
Maxim Dmitrievsky:

Максим, в общем методом "научного тыка" я немного изменил Ваш код (прошу заранее извинить) и получилось открыть файл EUR_USD_QUOTE.csv с текущей котировкой через 1 минуту после запуска.

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.

Но! Если файл EUR_USD_QUOTE.csv в течении следующей минуты я не закрою, то получаю такое сообщение:

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

Как сделать, чтобы процесс после запуска программного кода продолжался без участия человека?

С уважением, Владимир.

 
MrBrooklin:

Максим, в общем методом "научного тыка" я немного изменил Ваш код (прошу заранее извинить) и получилось открыть файл EUR_USD_QUOTE.csv с текущей котировкой через 1 минуту после запуска.


Но! Если файл EUR_USD_QUOTE.csv в течении следующей минуты я не закрою, то получаю такое сообщение:

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

Как сделать, чтобы процесс после запуска программного кода продолжался без участия человека?

С уважением, Владимир.

а да, потому что процесс занят os.startfile() зачем-то, удалите эту строку 

os.startfile(save_file)

и

import os

можно удалить

Проверил, работает

 
Maxim Dmitrievsky:

а да, потому что процесс занят os.startfile() зачем-то, удалите эту строку 

и

можно удалить

Проверил, работает

Максим, всё сделал, как Вы советовали. Никаких сообщение о проблемах больше нет. Программа запустилась, а теперь как можно посмотреть котировку, если файл EUR_USD_QUOTE.csv закрыт, а когда его открываю и оставляю открытым, то появляется тоже самое сообщение о том, что PermissionError: [Errno 13] Permission denied: 'EUR_USD_QUOTE.csv' и котировка в открытом файле больше не обновляется?

Ещё раз прошу извинить меня, пожалуйста, но никогда этого не скрываю, что полный ноль в программировании.

С уважением, Владимир.

 
MrBrooklin:

Максим, всё сделал, как Вы советовали. Никаких сообщение о проблемах больше нет. Программа запустилась, а теперь как можно посмотреть котировку, если файл EUR_USD_QUOTE.csv закрыт, а когда его открываю и оставляю открытым, то появляется тоже самое сообщение о том, что PermissionError: [Errno 13] Permission denied: 'EUR_USD_QUOTE.csv' и котировка в открытом файле больше не обновляется?

Ещё раз прошу извинить меня, пожалуйста, но никогда этого не скрываю, что полный ноль в программировании.

С уважением, Владимир.

экселем открываете? значит он открывает файл монопольно. Надо где-то в настройках разрешить изменение файлы другими приложениями\пользователями

может поможет  http://blog.depit.ru/odnovremennaya-rabota-v-excel/

а вообще нельзя изменять файл, открытый в другой программе.

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

экселем открываете? значит он открывает файл монопольно. Надо где-то в настройках разрешить изменение файлы другими приложениями\пользователями

может поможет  http://blog.depit.ru/odnovremennaya-rabota-v-excel/

а вообще нельзя изменять файл, открытый в другой программе.

Да, открываю в Excel. Пока не получается обновить котировку в открытом файле EUR_USD_QUOTE.csv в режиме реального времени.

А в этом и была задумка, чтобы смотреть в таблицу и видеть, как меняется котировка.

С уважением, Владимир.