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_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 个月 |
例如:
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另见
CopyRates、copy_rates_from_pos、 copy_rates_range、copy_ticks_from、 copy_ticks_range