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

 

大家下午好!

我不知道我是否写对了主题,但我希望你能纠正我。还有一点要说明的是--我在编程方面完全是个零基础的人!我不知道该怎么办。

所以,我找到了一个用PYTHON编写的小程序的代码,该程序从知名网站获取欧元/美元对 的报价,并将其写入EUR_USD_QUOTE.csv文件的A1单元。

如果有人不介意,请改进这段代码,以便每小时在EUR_USD_QUOTE.csv文件的同一单元格A1中自动更新一个报价。

真诚的,弗拉基米尔。

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_QUOTE.csv文件的A1单元。

如果有人不介意,请改进这段代码,以便每小时在EUR_USD_QUOTE.csv文件的同一单元格A1中自动更新一个报价。

真诚的,弗拉基米尔。

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开发环境中启动了最终的代码,但还没有发生什么,只有 "重新运行 "按钮被激活。我还不明白--这个代码到底能不能用?

在 "问题 "标签中显示了一些额外的信息:

  1. PEP 8: E402模块级的导入不在文件的顶部:28 - 这涉及到带有 datetime导入 datetime的代码的行。
  2. PEP 8: E402模块级的导入不在文件的顶部:29 - 这指的是行导入 时间
  3. 删除多余的括号--当我从代码中删除这些括号时,信息消失了。

马克西姆,你能不能暂时让文件中的报价现在至少在1分钟内更新,以了解代码是否工作,否则我必须等待整整一个小时...?

还有一件事。在我启动了之前发布的初始代码后,文件EUR_USD_QUOTE.csv立即被打开,并出现了当前的报价,而修改后的代码无法打开这个文件。

也许我做错了什么,或者我不明白什么?请告诉我。

问候,弗拉基米尔。
 
MrBrooklin:
谢谢你,马克西姆! 我已经在PyCharm开发环境中运行了最终的代码,但还没有发生什么,只有 "重新运行 "按钮被激活。我还不明白--这个代码到底能不能用?在 "问题 "选项卡中还有其他信息显示:





  1. PEP 8: E402模块级的导入不在文件的顶部:28 - 这涉及到带有 datetime导入 datetime的代码的行。
  2. PEP 8: E402模块级的导入不在文件的顶部:29 - 这指的是行导入 时间
  3. 删除多余的括号--当我从代码中删除这些括号时,信息消失了。

马克西姆,你能不能暂时让文件中的报价现在至少在1分钟内更新,以了解代码是否工作,否则我必须等待整整一个小时...?

还有一件事。在我启动了之前发布的初始代码后,文件EUR_USD_QUOTE.csv立即被打开,并出现了当前的报价,而修改后的代码无法打开这个文件。

也许我做错了什么,或者我不明白什么?请告诉我。

问候,弗拉基米尔。

第1-2个错误--把这个移到文件的最上面即可

from datetime import datetime
import time

这只是一个编程风格的警告,不是一个错误

为了快速检查,替换两个字段

hour

第二

文件应该每10秒写一次,因为检查定时器被设置为10秒。

P.S.只是不要太得意忘形,否则你会因为过于频繁的请求而被禁止。

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:

马克西姆,我用 "科学实验 "的方法对你的代码做了一点修改(请事先原谅我),结果是在启动后1分钟内打开了 带有当前报价的EUR_USD_QUOTE.csv文件

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 文件,我就会收到这样的信息。

回溯(最近一次调用):
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:

马克西姆,我用 "科学实验 "的方法对你的代码做了一点修改(请事先原谅我),在启动后的1分钟内可以用当前报价打开 EUR_USD_QUOTE.csv文件


但如果我不在下一分钟内关闭EUR_USD_QUOTE.csv 文件,我就会收到这样的信息。

回溯(最近一次调用):
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',并且打开的文件 中的报价不再被更新,我如何查看报价?

请再次原谅我,我从来没有隐瞒过我在编程方面是一个完全的零。

问候,弗拉基米尔。

你用Excel打开文件吗? 这意味着它垄断性地打开文件。你必须允许其他应用程序/用户修改该文件。

也许http://blog.depit.ru/odnovremennaya-rabota-v-excel/,会有帮助。

一般来说,你不能修改一个在另一个程序中打开的文件。

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

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

也许http://blog.depit.ru/odnovremennaya-rabota-v-excel/,会有帮助。

你不能修改一个在另一个程序中打开的文件。

是的,我在Excel中打开它。我仍然不能实时更新打开的EUR_USD_QUOTE.csv文件中的报价。

这是我们的想法,看看表格,看看报价的变化。

问候,弗拉基米尔。