读取报价
Python API 允许您使用三个函数来获取价格数组(柱线),这三个函数在指定请求数据范围的方式上有所不同:按柱线编号或按时间。所有函数都类似于不同形式的 CopyRates。
对于所有函数,前两个参数用于指定交易品种名称和时间范围。时间范围列于 TIMEFRAME 枚举中,它类似于 MQL5 中的 ENUM_TIMEFRAMES 枚举。
请注意:在 Python 中,该枚举的元素以 TIMEFRAME_ 为前缀,而 MQL5 中类似枚举的元素以 PERIOD_ 为前缀。
标识符 |
说明 |
---|---|
TIMEFRAME_M1 |
1 分钟 |
TIMEFRAME_M2 |
2 分钟 |
TIMEFRAME_M3 |
3 分钟 |
TIMEFRAME_M4 |
4 分钟 |
TIMEFRAME_M5 |
5 分钟 |
TIMEFRAME_M6 |
6 分钟 |
TIMEFRAME_M10 |
10 分钟 |
TIMEFRAME_M12 |
12 分钟 |
TIMEFRAME_M12 |
15 分钟 |
TIMEFRAME_M20 |
20 分钟 |
TIMEFRAME_M30 |
30 分钟 |
TIMEFRAME_H1 |
1 小时 |
TIMEFRAME_H2 |
2 小时 |
TIMEFRAME_H3 |
3 小时 |
TIMEFRAME_H4 |
4 小时 |
TIMEFRAME_H6 |
6 小时 |
TIMEFRAME_H8 |
8 小时 |
TIMEFRAME_H12 |
12 小时 |
TIMEFRAME_D1 |
1 天 |
TIMEFRAME_W1 |
1 周 |
TIMEFRAME_MN1 |
1 个月 |
这三个函数都将柱线作为 numpy 批处理数组返回,其中包含命名列 time、open、high、low、close、tick_volume、spread 和 real_volume。numpy.ndarray 数组类似于命名元组,但更高效。要访问列,请使用方括号表示法,例如 array['column']。
None 如果发生错误,则不返回任何值。
所有函数参数都是强制的和未命名的。
numpy.ndarray copy_rates_from(symbol, timeframe, date_from, count)
copy_rates_from 函数请求从指定日期 (date_from) 开始、count 根柱线的数据。该日期可以由 datetime 对象设置,或者设置为自 1970.01.01 以来经历的秒数。
创建 datetime 对象时,Python 使用本地时区,而 MetaTrader 5 终端使用 UTC(GMT,无偏移)存储分时报价和柱线的开盘时间。因此,要执行使用时间的函数,必须以 UTC 格式创建datetime变量。要配置时区,可以使用pytz软件包。例如(参见 MQL5/Scripts/MQL5Book/Python/eurusdrates.py):
from datetime import datetime
|
接收数据的范例:
(1641567600, 1.12975, 1.13226, 1.12922, 1.13017, 8325, 0, 0)
|
numpy.ndarray copy_rates_from_pos(symbol, timeframe, start, count)
copy_rates_from_pos 函数请求从指定 start 索引开始、count 根柱线的数据。
MetaTrader 5 终端仅在图表上用户可见的历史范围内呈现柱线。用户可见的柱线数量由设置中的“窗口中的最大柱线数”参数设定。
以下例子 (MQL5/Scripts/MQL5Book/Python/ratescorr.py) 展示了基于报价的几种货币的相关矩阵的图形表示。
import MetaTrader5 as mt5
|
图像文件ratescorr.png是在 MetaTrader 5 的当前工作副本的沙盒中形成的。如果你 Python 安装不包括可选功能“tcl/tk 和 IDLE”或者如果你没有添加 pip install.tk 软件包,则通过调用 plt.show() 在单独的窗口中交互显示图像可能不起作用。
外汇货币相关矩阵
numpy.ndarray copy_rates_range(symbol, timeframe, date_from, date_to)
copy_rates_range 函数允许您获取 date_from 和 date_to 之间的指定日期和时间范围内的柱线:这两个值作为 UTC 时区中自 1970 年开始的秒数给出(由于 Python 使用 datetime 当地时区,因此应使用 pytz 模块进行转换)。结果包括开盘时间在 time >= date_from 到 time <= date_to 的柱线。
在下面的脚本中,我们将请求特定时间范围内的柱线。
from datetime import datetime
|
结果示例:
time open high low close tick_volume spread real_volume 0 2020-01-10 00:00:00 109.513 109.527 109.505 109.521 43 2 0 1 2020-01-10 0:05:00 109.521 109.549 109.518 109.543 215 8 0 2 2020-01-10 0:10:00 109.543 109.543 109.466 109.505 98 10 0 3 2020-01-10 0:15:00 109.504 109.534 109.502 109.517 155 8 0 4 2020-01-10 0:20:00 109.517 109.539 109.513 109.527 71 4 0 5 2020-01-10 0:25:00 109.526 109.537 109.484 109.520 106 9 0 6 2020-01-10 0:30:00 109.520 109.524 109.508 109.510 205 7 0
|