MT5CopyTicksFrom

从指定日期开始从MetaTrader 5程序端获取报价。

MT5CopyTicksFrom(
   symbol,       // 交易品种名称
   from,         // 请求报价的日期
   count,        // 请求的报价数
   flags         // 定义请求报价类型的标识组合
   )

参数

交易品种

[in]  交易品种名称,例如"EURUSD"。

[in]  请求报价的开始日期。通过'datetime'对象或根据1970.01.01以来过去的秒数设置。

count

[in]  将要接收的报价数。

标识

[in]  确定请求报价类型的标记。MT5_COPY_TICKS_INFO – 卖价和/或买价变化的报价,MT5_COPY_TICKS_TRADE – 最后价和交易量变化的报价,MT5_COPY_TICKS_ALL – 全部报价。标识值在MT5_COPY_TICKS枚举中描述。

返回值

以元组形式返回报价(时间、卖价、买价、最后价、标识)。在元组中,标识变量可以是MT5_TICK_FLAG枚举的标识组合。

注意

参见CopyTicks函数获取更多信息。

当创建'datetime'对象时,Python使用本地时区,而MetaTrader 5以UTC时区保存报价和柱形图开盘时间(没有时移)。 因此,'datetime'应在UTC时间内创建,用于执行使用时间的函数。从MetaTrader 5获得的数据有UTC时间,但Python在尝试打印时再次应用本地时移。 因此,所获得的数据也应进行校正,以便直观表示。

MT5_COPY_TICKS定义了可以使用MT5CopyTicksFrom()MT5CopyTicksRange()函数请求的报价类型。

ID

描述

MT5_COPY_TICKS_ALL

所有报价

MT5_COPY_TICKS_INFO

包含卖价(Bid)和/或买价(Ask)价格变化的报价

MT5_COPY_TICKS_TRADE

包含最后价(Last)和/或交易量(Volume)价格变化的报价

MT5_TICK_FLAG 定义可能的报价标识。这些标识用于描述通过MT5CopyTicksFrom()MT5CopyTicksRange()函数获得的报价。

ID

描述

MT5_TICK_FLAG_BID

卖价(Bid)已更改

MT5_TICK_FLAG_ASK

买价(Ask)已更改

MT5_TICK_FLAG_LAST

最后价(Last)已更改

MT5_TICK_FLAG_VOLUME

交易量已更改

MT5_TICK_FLAG_BUY

最近“买入”价格已更改

MT5_TICK_FLAG_SELL

最近“卖出”价格已更改

 

例如:

 datetime 导入 datetime
 MetaTrader5 导入 *
# 导入'pandas'模块,用于以表格形式显示获得的数据
导入 pandas  pd
pd.set_option('display.max_columns', 500# 将要显示的列数
pd.set_option('display.width', 1500)      # 要显示的最大表宽
# 导入用于处理时区的pytz模块
导入 pytz
 
# 建立与MetaTrader 5程序端的连接
MT5Initialize()
#等待直至MetaTrader 5程序端连接到交易服务器
MT5WaitForTerminal()
 
# 将时区设置为UTC
timezone = pytz.timezone("Etc/UTC")
# 以UTC时区创建'datetime'对象,以避免实现本地时区偏移
utc_from = datetime(2019, 4, 1, tzinfo=timezone)
# 在UTC时区,请求从01.04.2019开始的100 000个EURUSD报价
ticks = MT5CopyTicksFrom("EURUSD"utc_from100000, MT5_COPY_TICKS_ALL)
print("Ticks received:",len(ticks))
 
# 断开与MetaTrader 5的连接
MT5Shutdown()
# 在新行显示每个报价的数据
print("Display obtained ticks 'as is'")
count = 0
for tick in ticks:
    print(tick)
    if(count >= 10):
        break
 
# 从所获得的数据创建DataFrame
ticks_frame = pd.DataFrame(list(ticks),
                           columns=['time', 'bid', 'ask', 'last', 'volume', 'flags'])
# 显示数据
print("\nDisplay dataframe with ticks")
print(ticks_frame.head(10))  # 我们可以看到Python在本地时区中使用一个偏移提供了报价时间
 
# 获取本地电脑从UTC时间的偏移
UTC_OFFSET_TIMEDELTA = datetime.utcnow() - datetime.now()
 
# 创建一个简单的函数来纠正偏移
def local_to_utc(dt):
    return dt + UTC_OFFSET_TIMEDELTA
 
# 在ticks_frame数据框中为'time'列应用偏移
ticks_frame['time'] = ticks_frame.apply(lambda ticklocal_to_utc(tick['time']), axis=1)
 
# 再次显示数据,确保报价时间已更改
print("\nDisplay the dataframe after adjusting the time")
print(ticks_frame.head(10))
 
结果:
已接收报价:100000
将获得的报价显示为“保持原来状态”
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 5, 745000), bid=1.12258, ask=1.12339, last=0.0, volume=0.0, flags=134)
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 26, 155000), bid=1.12260, ask=1.12339, last=0.0, volume=0.0, flags=130)
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 26, 497000), bid=1.12272, ask=1.12339, last=0.0, volume=0.0, flags=130)
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 34, 327000), bid=1.12268, ask=1.12336, last=0.0, volume=0.0, flags=134)
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 35, 61000), bid=1.12268, ask=1.12339, last=0.0, volume=0.0, flags=4)
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 35, 369000), bid=1.12258, ask=1.12339, last=0.0, volume=0.0, flags=130)
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 40, 577000), bid=1.12258, ask=1.12336, last=0.0, volume=0.0, flags=4)
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 46, 494000), bid=1.1225, ask=1.12336, last=0.0, volume=0.0, flags=130)
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 47, 288000), bid=1.12248, ask=1.12336, last=0.0, volume=0.0, flags=130)
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 56, 114000), bid=1.1225, ask=1.12336, last=0.0, volume=0.0, flags=130)
 
显示带有报价的数据框
                    时间、卖价、买价、最后价、交易量、标识
0 2019-04-01 03:02:05.745  1.12258  1.12339   0.0     0.0    134
1 2019-04-01 03:02:26.155  1.12261  1.12339   0.0     0.0    130
2 2019-04-01 03:02:26.497  1.12272  1.12339   0.0     0.0    130
3 2019-04-01 03:02:34.327  1.12268  1.12336   0.0     0.0    134
4 2019-04-01 03:02:35.061  1.12268  1.12339   0.0     0.0      4
5 2019-04-01 03:02:35.369  1.12258  1.12339   0.0     0.0    130
6 2019-04-01 03:02:40.577  1.12258  1.12336   0.0     0.0      4
7 2019-04-01 03:02:46.494  1.12250  1.12336   0.0     0.0    130
8 2019-04-01 03:02:47.288  1.12248  1.12336   0.0     0.0    130
9 2019-04-01 03:02:56.114  1.12250  1.12336   0.0     0.0    130
 
调整时间后显示带有报价的数据框
                    时间、卖价、买价、最后价、交易量、标识
0 2019-04-01 00:02:05.745  1.12258  1.12339   0.0     0.0    134
1 2019-04-01 00:02:26.155  1.12261  1.12339   0.0     0.0    130
2 2019-04-01 00:02:26.497  1.12272  1.12339   0.0     0.0    130
3 2019-04-01 00:02:34.327  1.12268  1.12336   0.0     0.0    134
4 2019-04-01 00:02:35.061  1.12268  1.12339   0.0     0.0      4
5 2019-04-01 00:02:35.369  1.12258  1.12339   0.0     0.0    130
6 2019-04-01 00:02:40.577  1.12258  1.12336   0.0     0.0      4
7 2019-04-01 00:02:46.494  1.12250  1.12336   0.0     0.0    130
8 2019-04-01 00:02:47.288  1.12248  1.12336   0.0     0.0    130
9 2019-04-01 00:02:56.114  1.12250  1.12336   0.0     0.0    130

另见

CopyRatesMT5CopyRatesFromPosMT5CopyRatesRangeMT5CopyTicksFromMT5CopyTicksRange