文章 "MetaTrader 5 与 Python 的集成:接收和发送数据" - 页 9

 
MrBrooklin:

你好 马克西姆

我的 Python 知识有点高深,但我找不到关于从 Python 和第三方程序(例如,用 MQL5 编写的相同 Expert Advisor)联合访问 csv 文件的详细信息。简单地说,Python 代码会定期向 csv 文件写入信息,而MQL5 Expert Advisor 会从中读取信息并执行我需要的命令。这种双方联合访问是否可行?

敬上,弗拉基米尔。

不可能,但如果文件未被其他程序占用,两个程序都可以尝试打开文件。读/写完成后,它们都应关闭文件。

 
Maxim Dmitrievsky:

不是,但如果文件未被其他程序占用,这两个程序都可以尝试打开文件。并且在读取/写入后应关闭文件。

谢谢你的解释,特别是关于读/写后 关闭文件 的解释。这是我需要理解的一点。

再见,弗拉基米尔

 
Maxim Dmitrievsky:

不是,但如果文件未被其他程序占用,这两个程序都可以尝试打开文件。并且在读取/写入后应关闭文件。

你好,马克西姆,我已经考虑到了这一点。请再帮我弄明白一点,即使用 Python 创建的 csv 文件中的文本编码以及随后在 MQL5 中创建的 Expert Advisor 对这些文本的读取。我查看了 MQL5 网站和其他互联网资源上的大量信息,但没有找到明确的解释。一般来说,使用 Python 语言创建的程序代码会打开一个新的 csv 文件,并将我需要的信息写入其中。为简化调整,在写入一个俄语单词时,实际上是从网站上拼写出来的。我可以顺利读取打开的 csv 文件中的单词,但 Expert Advisor 无法理解这个单词的编码。这是肯定的,因为在编写 EA 时(顺便说一下,我成功地编写了第一个独立代码!),我使用了一个同名的 csv 文件,并在 A1 单元格中写入了相同的单词,但只能用键盘输入。我尝试更改两个代码中的所有内容(我指的是 Python 和 MQL5),但都没有成功。

您能告诉我 Python 代码使用什么编码 (encoding=?) 吗?

with open(save_file, 'w') as save:

以及 MQL5 代码使用什么编码(encoding=?)

filehandle=FileOpen("EUR_USD.csv",FILE_READ|FILE_SHARE_READ|FILE_ANSI|FILE_CSV|FILE_COMMON)

使它们成为 "朋友"?我已经改变这些编码好几天了,但我不知道下一步该怎么做。而阻碍正常工作的只有一点。

也许我还没有找到 Python 的所有编码,但最有趣的 是,当 MQL5 代码使用FILE_ANSI 编码(即上面一行给出的编码)时,当我在 csv 文件中用键盘输入单词 "buy"(买入)时,保存此文件后,Expert Advisor 可以完美地读取并运行。

有时我在想:也许这根本不是编码的问题!那到底是什么原因呢?

请帮我找出原因!

敬上,弗拉基米尔。


附注:我终于找到了至少一个合理的解释:"在 Python 3 中,默认编码是 UTF-8"

 
MrBrooklin:

因此,为避免出现问题,最好先写入二进制文件,然后将输出转换为字符。在本文中,我认为使用套接字的示例就是这样做的。也就是说,FILE_BIN 标志

 
Maxim Dmitrievsky:

因此,为避免出现问题,最好先写入二进制文件,然后将输出转换为字符。在本文中,我认为使用套接字的示例就是这样做的。也就是说,FILE_BIN 标志

你好,马克西姆,感谢你的提示,我在互联网上找到了这些信息:"二进制文件与文本文件不同,它以一组字节的形式存储信息。要在 Python 中处理它们,您需要使用内置的pickle 模块"。

换句话说,如果我们使用已安装的pickle 模块将 Pyhon 程序代码中的任何单词写成一组字节,将"w " 改为"wb"

import pickle 
.
.
.
with open(save_file, 'wb') as save:

然后在用 MQL5 编写的 Expert Advisor 中设置 FILE_BIN 标志,而不是 FILE_ANSI 标志 ,一切都能正常工作吗?也许您不应该写入 csv 文件,而应该写入 dat 文件。

非常感谢 Maxim 的提示,我今晚就试试!



 
MrBrooklin:

你好,马克西姆,多亏你的帮助,我在互联网上找到了这些信息:"与文本文件不同,二进制文件以字节集的形式存储信息。要在 Python 中处理它们,需要使用内置的pickle 模块"。

换句话说,如果我们使用已安装的pickle 模块将 Pyhon 程序代码中的任何单词写成一组字节,将"w " 改为"wb"

然后在用 MQL5 编写的 Expert Advisor 中设置 FILE_BIN 标志,而不是 FILE_ANSI 标志 ,一切都能正常工作吗?也许您不应该写入 csv 文件,而应该写入 dat 文件。

非常感谢 Maxim 的提示,今晚我就试试!



不一定,您可以选择编码

st = b 'hello world'

helloworld'.encode('ascii')

将其写入文件。然后尝试在 mt5 中读取

 
Maxim Dmitrievsky:

您不必这样做,只需选择编码即可

st = b 'hello world

helloworld'.encode('ascii')

将其写入文件。然后尝试在 mt5 中读取

马克西姆,我再次向你表示衷心 的感谢,上帝保佑你长命百岁!

对我来说,最重要的是您告诉了我问题的本质,让我更轻松地找到了解决方案。在测试 csv 文件时,我保留了 Expert Advisor 中的所有内容,A1 单元格中的单词是用电脑键盘输入的。但对于用 Python 编写的程序代码,我在互联网上找到了这个提示:

with open(save_file, 'w',  encoding='cp1251',  errors='replace', newline='') as save:

我用红色标出了缺少的内容!我希望这一行也能对用 Python 编写代码的人有所帮助!

弗拉基米尔

 

下午好。

我有一个问题要在 matplotlib/plotly 中用 python 解决:

1.主窗口中有一个用于渲染的 OHLC

2.子窗口中有要绘制的数据

如何编写简单绘图的代码? 给我一个简单的 python 代码

范例

[删除]  

我在处理这个代码时遇到了麻烦:

from MetaTrader5 import *
from datetime import date
import pandas as pd 
import matplotlib.pyplot as plt 

# Initializing MT5 connection 
MT5Initialize()
MT5WaitForTerminal()

print(MT5TerminalInfo())
print(MT5Version())

它说

Traceback (most recent call last):
  File "C:/Programs/PycharmProjects/nc/main.py", line 8, in <module>
    MT5Initialize()
NameError: name 'MT5Initialize' is not defined

Process finished with exit code 1

我还是 python 的新手。你能告诉我问题出在哪里吗?

 
Сергей Таболин:

我对这段代码有意见:

它说

我还是 python 的新手。你能告诉我问题出在哪里吗?

查看我上一篇文章中的示例。这里使用的是旧版本的软件包。当然,需要先通过 pip install 安装它