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

 
MrBrooklin:

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

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

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

Так тут ни Питон, ни Экзель не при чем. Вы файл открыли, данные в Экзель считались и все. Надо тогда в нем писать программу на встроенном VBA

А раз так, программа на Питоне не нужна, проще сразу в VBA все сделать. Я с ним мало работал, но уверен, что GET он делать умеет.

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

Так тут ни Питон, ни Экзель не при чем. Вы файл открыли, данные в Экзель считались и все. Надо тогда в нем писать программу на встроенном VBA

А раз так, программа на Питоне не нужна, проще сразу в VBA все сделать. Я с ним мало работал, но уверен, что GET он делать умеет.

Здравствуйте, Алексей!

Разве на языке PYTHON нельзя написать программный код так, чтобы по истечении времени файл EUR_USD_QUOTE.csv закрывался и тут же снова открывался с новой котировкой?

Про VBA ничего пока не знаю, но спасибо за подсказку.

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

 
Maxim Dmitrievsky:

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

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

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

Максим, насколько трудно сделать так, чтобы файл EUR_USD_QUOTE.csv сначала открылся, как это было реализовано в исходном коде, а через некоторый интервал времени под воздействием доработанного программного кода на секунду закрылся и тут же снова открылся, но уже с новой котировкой? И так до бесконечности...

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

 
MrBrooklin:

Максим, насколько трудно сделать так, чтобы файл 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):
        os.system("TASKKILL /F /IM excel.exe")
        get_data(save_file='EUR_USD_QUOTE.csv')
        t2 = t
    time.sleep(10)


 
Alexey Volchanskiy:

So neither Python nor Exel had anything to do with it. You opened the file, the data in Exel was counted and that's it. It is then necessary to write a program in it on the built-in VBA

And if so, the program on Python is not needed, it is easier to do everything at once in the VBA. I didn't work with him much, but I'm sure he can do GET.

Вам даже не нужен VBA. Все, что вам нужно сделать, это использовать excel изначально. Собираюсь написать инструкцию на английском ... Create a new workbook. Click the Data Tab > Get Data > From Other Sources > From Web, then paste the web address in the url field. Next click refresh all more options > Connection properties and configure to update automatically every n minutes.

 
MrBrooklin:

Maxim, how difficult is it to make the EUR_USD_QUOTE.csv file open first, as it was implemented in the source code, and at some interval of time under the influence of modified code for a second closed and immediately reopened, but with a new quote? And so to infinity...

Respectfully, Vladimir.

The file will be locked for writing by excel if you leave the excel window open. You will need to add logic to account for a locked file. Also, why are you scraping the web for quotes? Why aren't you using MetaTrader to gather quotes? It doesn't make sense. 

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:

попробуйте так


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

Уже пробую. Цикл запустился, но файл пока не открывается. Оставлю цикл в работе и подожду.

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


P.S. Пардон! Сразу не обратил внимание на то, что стоит hour. Поменял на minute файл EUR_USD_QUOTE.csv открылся, но во вкладке Run в среде разработки Pycharm появилось вот такое сообщение:

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

Затем еще через минуту с небольшим, файл закрылся и снова открылся, но уже в Exsel с левой стороны таблицы появилась вкладка, где предлагалось сохранить ранее открытй текст. Подождал ещё немного, чтобы посмотреть что будет дальше, а дальше цикл остановился и появилось вот такое сообщение:

�ᯥ譮: ����� "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'

Пока такой реультат, но прогресс уже есть!

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

 
nicholish en:

The file will be locked for writing by excel if you leave the excel window open. You will need to add logic to account for a locked file. Also, why are you scraping the web for quotes? Why aren't you using MetaTrader to gather quotes? It doesn't make sense.

Файл будет заблокирован для записи в Excel, если вы оставите окно Excel открытым. Вам нужно будет добавить логику для учета заблокированного файла. Кроме того, почему вы ищите в Интернете котировки? Почему вы не используете MetaTrader для сбора котировок? В этом нет смысла. (От себя лично: Извините, nicholish en, не владею английским языком, поэтому воспользовался сервисом Google Translate)

Хочу научиться брать котировки в интернете при помощи языка Python, чтобы смотреть их не в терминале, а в каком-нибудь файле, например, csv. Подумал, что это самая элементарная задача, а оказалось, что нет. Возможно нахожусь на неправильном пути, но тот кто ничего не ищет, тот ничего и не находит.

Теперь перейду к предложенному Вами коду. После запуска кода в среде разработки Pycharm появилось вот такое сообщение:

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", line 13, in main
    eurusd_bid = soup.find('td', 'pid-1-bid').text.replace(',', '.')
AttributeError: 'NoneType' object has no attribute 'text'

Process finished with exit code 1

Что нужно изменить, чтобы посмотреть, как работает код?

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

 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

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

MrBrooklin, 2020.08.19 22:05

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

Уже пробую. Цикл запустился, но файл пока не открывается. Оставлю цикл в работе и подожду.

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


P.S. Пардон! Сразу не обратил внимание на то, что стоит hour. Поменял на minute файл EUR_USD_QUOTE.csv открылся, но во вкладке Run в среде разработки Pycharm появилось вот такое сообщение:

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

Затем еще через минуту с небольшим, файл закрылся и снова открылся, но уже в Exsel с левой стороны таблицы появилась вкладка, где предлагалось сохранить ранее открытй текст. Подождал ещё немного, чтобы посмотреть что будет дальше, а дальше цикл остановился и появилось вот такое сообщение:

�ᯥ譮: ����� "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'

Пока такой реультат, но прогресс уже есть!

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

Максим, не знаю что произошло, но снова попробовал запустить Ваш код и о, чудо! Процесс цикла пошел, правда с одной оговоркой. Как и раньше в Excel появилась вкладка с левой стороны с предложением сохранить файл, но это уже не значительная мелочь. Скрин прикладываю. Подождал когда пройдут шесть циклов, после этого завершил выполнение программы. Теперь буду изучать каждую строчку кода и пытаться понять, что и для чего прописано. Огромное Вам спасибо!!!

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



P.S. Пришла мысль, почему появляется вкладка с левой стороны с предложением сохранить файл. Просто программный код закрывает файл без сохранения, наверное поэтому Exel предлагает и дальше будет предлагать сохранить файл.

 

Читал китайский пейджер. Много думал... 

Это я к вопросу об интеграции Python и MQL. Оба языка близки, но MQL прост, а Python примитивен, вроде бэйсика. Любой, программирующий на MQL, может на коленке слепить что-то на Python и наоборот. В чём интерес к этой теме? Во-первых, это для очень ленивых людей. Ну, напиши ты что-то на сильно похожем языке... Интерес может быть к двум составляющим: библиотеки, которых много в Python и интерфейсы, которыми славен MQL. Так почему не сделать доступ из Python к интерфейсам MQL и доступ из MQL к библиотекам Python? И всё.