跳至内容

copy_rates_from

copy_rates_from

从指定日期开始从MetaTrader 5程序端获取柱形图。

copy_rates_from(
   symbol,       // 交易品种名称
   timeframe,    // 时间周期
   date_from,    // 初始柱形图开盘日期
   count         // 柱形图数
   )

参数

symbol

[in] 交易品种名称,例如"EURUSD"。所需的未命名参数。

timeframe

[in] 请求柱形图的时间周期。根据TIMEFRAME枚举的值设置。所需的未命名参数。

date_from

[in] 请求样本中的第一个柱形图的开盘日期。通过’datetime’对象或根据1970.01.01以来过去的秒数设置。所需的未命名参数。

count

[in] 将要接收的柱形图数。所需的未命名参数。

返回值

返回numpy数据柱形图(包含以下指定列:时间、开盘价、最高价、最低价、收盘价、tick_volume、点差和real_volume)。错误情况下返回None。可使用last_error()获取错误信息。

注意

参见CopyRates()函数获取更多信息。

只有日期小于(早于)或等于指定日期的数据。这意味着,任何柱的开盘时间始终少于或等于指定的值。

MetaTrader 5程序端仅在用户可用的图表历史记录中提供柱形图。可供用户使用的柱形图数量设置在“图表中最大数量(Max.)柱形图”参数中。

当创建’datetime’对象时,Python使用本地时区,而MetaTrader 5以UTC时区保存报价和柱形图开盘时间(没有时移)。 因此,‘datetime’应在UTC时间内创建,用于执行使用时间的函数。从MetaTrader 5程序端接收到的数据使用UTC时间。

TIMEFRAME 是一个包含可能图表周期值的枚举

ID描述
TIMEFRAME_M11分钟
TIMEFRAME_M22 分钟
TIMEFRAME_M33 分钟
TIMEFRAME_M44 分钟
TIMEFRAME_M55 分钟
TIMEFRAME_M66 分钟
TIMEFRAME_M1010 分钟
TIMEFRAME_M1212 分钟
TIMEFRAME_M1215 分钟
TIMEFRAME_M2020 分钟
TIMEFRAME_M3030 分钟
TIMEFRAME_H11 小时
TIMEFRAME_H22 小时
TIMEFRAME_H33 小时
TIMEFRAME_H44 小时
TIMEFRAME_H66 小时
TIMEFRAME_H88 小时
TIMEFRAME_H1212 小时
TIMEFRAME_D11 天
TIMEFRAME_W11 周
TIMEFRAME_MN11 个月

例如:

from datetime import datetime
import MetaTrader5 as mt5
# 显示有关MetaTrader 5程序包的数据
print("MetaTrader5 package author: ",mt5.__author__)
print("MetaTrader5 package version: ",mt5.__version__)

# 导入'pandas'模块,用于以表格形式显示获得的数据
import pandas as pd
pd.set_option('display.max_columns', 500) # number of columns to be displayed
pd.set_option('display.width', 1500)      # max table width to display
# 导入用于处理时区的pytz模块
import pytz

# 建立与MetaTrader 5程序端的连接
if not mt5.initialize():
    print("initialize() failed, error code =",mt5.last_error())
    quit()

# 将时区设置为UTC
timezone = pytz.timezone("Etc/UTC")
# 以UTC时区创建'datetime'对象,以避免实现本地时区偏移
utc_from = datetime(2020, 1, 10, tzinfo=timezone)
# 在UTC时区,获取01.10.2020开始的10个EURUSD H4柱形图
rates = mt5.copy_rates_from("EURUSD", mt5.TIMEFRAME_H4, utc_from, 10)

# 断开与MetaTrader 5程序端的连接
mt5.shutdown()
# 在新行显示所获得数据的每个元素
print("Display obtained data 'as is'")
for rate in rates:
    print(rate)

# 从所获得的数据创建DataFrame
rates_frame = pd.DataFrame(rates)
# 将时间(以秒为单位)转换为日期时间格式
rates_frame['time']=pd.to_datetime(rates_frame['time'], unit='s')

# 显示数据
print("\nDisplay dataframe with data")
print(rates_frame)

结果:
MetaTrader5程序包作者MetaQuotes Software Corp.
MetaTrader5程序包版本5.0.29

将获得的数据显示为“保持原来状态”
(1578484800, 1.11382, 1.11385, 1.1111, 1.11199, 9354, 1, 0)
(1578499200, 1.11199, 1.11308, 1.11086, 1.11179, 10641, 1, 0)
(1578513600, 1.11178, 1.11178, 1.11016, 1.11053, 4806, 1, 0)
(1578528000, 1.11053, 1.11193, 1.11033, 1.11173, 3480, 1, 0)
(1578542400, 1.11173, 1.11189, 1.11126, 1.11182, 2236, 1, 0)
(1578556800, 1.11181, 1.11203, 1.10983, 1.10993, 7984, 1, 0)
(1578571200, 1.10994, 1.11173, 1.10965, 1.11148, 7406, 1, 0)
(1578585600, 1.11149, 1.11149, 1.10923, 1.11046, 7468, 1, 0)
(1578600000, 1.11046, 1.11097, 1.11033, 1.11051, 3450, 1, 0)
(1578614400, 1.11051, 1.11093, 1.11017, 1.11041, 2448, 1, 0)

显示带有数据的数据框
                 time     open     high      low    close  tick_volume  spread  real_volume
0 2020-01-08 12:00:00  1.11382  1.11385  1.11110  1.11199         9354       1            0
1 2020-01-08 16:00:00  1.11199  1.11308  1.11086  1.11179        10641       1            0
2 2020-01-08 20:00:00  1.11178  1.11178  1.11016  1.11053         4806       1            0
3 2020-01-09 00:00:00  1.11053  1.11193  1.11033  1.11173         3480       1            0
4 2020-01-09 04:00:00  1.11173  1.11189  1.11126  1.11182         2236       1            0
5 2020-01-09 08:00:00  1.11181  1.11203  1.10983  1.10993         7984       1            0
6 2020-01-09 12:00:00  1.10994  1.11173  1.10965  1.11148         7406       1            0
7 2020-01-09 16:00:00  1.11149  1.11149  1.10923  1.11046         7468       1            0
8 2020-01-09 20:00:00  1.11046  1.11097  1.11033  1.11051         3450       1            0
9 2020-01-10 00:00:00  1.11051  1.11093  1.11017  1.11041         2448       1            0

另见

CopyRatescopy_rates_from_poscopy_rates_rangecopy_ticks_fromcopy_ticks_range