MetaTrader 5 Python用户组 - 如何在Metatrader中使用Python - 页 75

 
MrBrooklin:

是的,我在Excel中打开它。到目前为止,不可能实时更新开放的EUR_USD_QUOTE.csv文件中的报价。

这是看表的想法,看看报价如何变化。

真诚的,弗拉基米尔。

所以,这与Python或Exel没有关系。该文件被打开,数据被导入Exel。你必须在其中编写程序,使用内置的VBA

你不需要Python程序,使用VBA更容易。我没怎么用过它,但我相信它可以做GET。

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

所以它与Python或Exel没有关系。你打开文件,数据被读入Exel,仅此而已。然后你必须使用嵌入式VBA 在其中写一个程序

你不需要Python程序,使用VBA更容易。我没怎么用过它,但我相信它可以做GET。

你好,Alexey!

是否不可能在PYTHON中写一个程序代码,使EUR_USD_QUOTE.csv文件被关闭并立即以新的报价重新打开?

我对VBA还不了解,但谢谢你的提示。

问候,弗拉基米尔。

 
Maxim Dmitrievsky:

你用Excel打开文件? 所以它是垄断性地打开文件。你必须允许其他应用程序/用户在设置中的某个地方修改该文件。

也许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:

所以Python和Exel都与此无关。你打开文件,Exel中的数据被计算出来,就这样。然后有必要在它的内置VBA 上编写一个程序。

如果是这样,就不需要Python上的程序了,在VBA中一次完成所有的事情更容易。我没怎么和他一起工作,但我相信他可以做GET。

你甚至不需要VBA。你所要做的就是最初使用excel。我准备用英语写说明...创建一个新的工作簿。点击 "数据标签">"获取数据">"来自其他来源">"来自网络",然后在 "网址 "字段中粘贴网页地址。接下来点击刷新所有其他选项>连接属性,并配置为每隔N分钟自动更新。

 
MrBrooklin:

马克西姆,让EUR_USD_QUOTE.csv文件先打开,就像它在源代码中实现的那样,在某个时间间隔的影响下,修改后的代码第二次关闭并立即重新打开,但有新的报价,这有多难?就这样一直到无限大...

尊敬的弗拉基米尔。

如果你打开excel窗口,该文件将被excel锁定,无法写入。你将需要添加逻辑来说明锁定的文件。另外,你为什么要在网上搜刮报价?你为什么不使用MetaTrader来收集报价?这是不可能的。

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. Pardon!一下子没注意到,那是值得一小时 的。我把它改成了一分钟 EUR_USD_QUOTE.csv文件被打开,但Pycharm 的运行标签中得到了这样的信息

� � � � 㤠���� ����� "excel.exe"。

然后又过了一分钟左右,文件关闭又重新打开,但在Exel中,电子表格的左侧出现了一个标签,要求我保存之前打开的文本。我又等了一会儿,想看看接下来会发生什么,但后来循环停止了,出现了这样的信息。

����� "excel.exe", � �����䨪�஬ 4208, � ����� 襭赶。
����� "excel.exe", � �����䨪�஬ 3168, � ����� 襭赶。
回溯(最近一次调用):
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:

如果你打开excel窗口,该文件将被excel锁定,无法写入。你将需要添加逻辑来说明锁定的文件。另外,你为什么要在网上搜刮报价?你为什么不使用MetaTrader来收集报价?这是不可能的。

如果你把Excel窗口打开,该文件将被锁定以写入Excel。你将需要添加逻辑来说明锁定的文件。另外,你为什么要在网上寻找报价?你为什么不使用MetaTrader来收集报价?这没有任何意义。(来自我个人的:对不起, nicholish en 我不会说英语,所以我用谷歌翻译)

我想学习如何 使用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",第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 用户组 - 如何在 Metatrader 中使用 Python

布鲁克林先生, 2020.08.19 22:05

谢谢你,马克西姆!

已经在试了。循环正在运行,但文件还没有打开。我将让这个循环处于运行状态并等待。

问候,弗拉基米尔。


P.S. Pardon!没有一下子注意到什么是站小时。我把它改成了一分钟 EUR_USD_QUOTE.csv文件被打开,但Pycharm 的运行标签中得到了这样的信息

� � � 㤠���� ����� "excel.exe"。

然后又过了一分钟左右,文件关闭又重新打开,但在Exel中,电子表格的左侧出现了一个标签,要求我保存之前打开的文本。我又等了一会儿,想看看接下来会发生什么,但后来循环停止了,出现了这样的信息。

����� "excel.exe", � �����䨪�஬ 4208, � ����� 襭赶。
����� "excel.exe", � �����䨪�஬ 3168, � ����� 襭赶。
回溯(最近一次调用):
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很原始,像BASIC。每个用MQL编程的人都可以轻松地在Python中创建一些东西,反之亦然。对这个主题的兴趣是什么?首先,这是为非常懒惰的人准备的。好吧,用非常相似的语言写点东西...兴趣可能在于两个部分:库(Python中有许多库)和接口(MQL对此很有名)。那么,为什么不把从Python到MQL接口的访问和从MQL到Python库的访问结合起来?就这样了。