MQL5参考集成MetaTrader Python模块 

MetaTrader与Python集成的模块

Python是一种用于开发脚本和应用程序的现代高水平编程语言。它包含用于机器学习、自动化处理以及数据分析和可视化的多个程序库。

MetaTrader Python程序包是为方便快速地从MetaTrader 5程序端直接通过处理器通信获得交易所数据而设计的。通过这种方式接收的数据可以进一步用于统计计算和机器学习。

用于集成MetaTrader 5和Python的函数

函数

操作

lMT5Initialize

建立与MetaTrader 5程序端的连接

MT5Shutdown

关于之前建立的与MetaTrader 5程序端的连接

MT5TerminalInfo

获取所连接的MetaTrader 5程序端的状态和参数

MT5Version

返回MetaTrader 5程序端版本

MT5WaitForTerminal

等待直至MetaTrader 5程序端连接到交易服务器

MT5CopyRatesFrom

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

MT5CopyRatesFromPos

从指定索引开始从MetaTrader 5程序端获取柱形图

MT5CopyRatesRange

从MetaTrader 5程序端获取指定日期范围内的柱形图

MT5CopyTicksFrom

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

MT5CopyTicksRange

从MetaTrader 5程序端获取指定日期范围内的报价

连接Python与MetaTrader 5的示例

  1. https://www.python.org/downloads/windows下载最新版Python 3.7
  2. 安装Python时,请检查“将Python 3.7添加到PATH%”,以便能够从命令行运行Python脚本。
  3. 从命令行安装MetaTrader 5模块

 pip安装MetaTrader5

  1. 添加matplotlib和pytz包

 pip安装matplotlib
 pip安装pytz

  1. 启动测试脚本

 datetime 导入 datetime
 MetaTrader5 导入 *
 pytz导入 timezone
导入 matplotlibpyplot  plt
utc_tz = timezone('UTC')
 
# 连接到MetaTrader 5
MT5Initialize()
# 等待直至MetaTrader 5建立与交易服务器的连接并同步环境
MT5WaitForTerminal()
 
# 请求连接状态和参数
print(MT5TerminalInfo())
# 获取有关MetaTrader 5版本的数据
print(MT5Version())
 
# 从EURAUD请求1000个报价
euraud_ticks = MT5CopyTicksFrom("EURAUD"datetime(2019,4,1,0), 1000MT5_COPY_TICKS_ALL)
# 请求2019.04.01 13:00 - 2019.04.02 13:00之间的AUDUSD报价
audusd_ticks = MT5CopyTicksRange("AUDUSD"datetime(2019,4,1,13), datetime(2019,4,2,13), MT5_COPY_TICKS_ALL)
 
# 通过多种方式获取不同交易品种的柱形图
eurusd_rates = MT5CopyRatesFrom("EURUSD"MT5_TIMEFRAME_M1datetime(2019,4,5,15), 1000)
gbpusd_rates = MT5CopyRatesFromPos("GBPUSD"MT5_TIMEFRAME_M101000)
eurjpy_rates = MT5CopyRatesRange("EURJPY"MT5_TIMEFRAME_M1datetime(2019,4,1,13), datetime(2019,4,2,13))
# 断开与MetaTrader 5的连接
MT5Shutdown()
 
#DATA
print('euraud_ticks(', len(euraud_ticks), ')')
for val in euraud_ticks[:10]: print(val)
print('audusd_ticks(', len(audusd_ticks), ')')
for val in audusd_ticks[:10]: print(val)
print('eurusd_rates(', len(eurusd_rates), ')')
for val in eurusd_rates[:10]: print(val)
print('gbpusd_rates(', len(gbpusd_rates), ')')
for val in gbpusd_rates[:10]: print(val)
print('eurjpy_rates(', len(eurjpy_rates), ')')
for val in eurjpy_rates[:10]: print(val)
 
#PLOTTING
x_time = [x.time.astimezone(utc_tzfor x in euraud_ticks]
# 准备卖价和买价数组
bid = [y.bid for y in euraud_ticks]
ask = [y.ask for y in euraud_ticks]
 
# 在图表上显示报价
plt.plot(x_timeask,'r-', label='ask')
plt.plot(x_timebid,'g-', label='bid')
# 显示图例
plt.legend(loc='upper left')
# 添加标题
plt.title('EURAUD ticks')
# 显示图表
plt.show()

  1. 获取数据和图表
    python_script_chart

[2, 'MetaQuotes-Demo', '16167573']
[5002009, '15 Mar 2019']
 
euraud_ticks( 1000 )
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 3, 512000), bid=1.5764200000000002, ask=1.57837, last=0.0, volume=0.0, flags=134)
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 8, 70000), bid=1.57643, ask=1.57837, last=0.0, volume=0.0, flags=130)
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 26, 142000), bid=1.57649, ask=1.57837, last=0.0, volume=0.0, flags=130)
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 26, 260000), bid=1.5765500000000001, ask=1.57837, last=0.0, volume=0.0, flags=130)
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 26, 365000), bid=1.5765500000000001, ask=1.5785900000000002, last=0.0, volume=0.0, flags=4)
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 26, 410000), bid=1.5765500000000001, ask=1.57837, last=0.0, volume=0.0, flags=4)
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 26, 636000), bid=1.57663, ask=1.57837, last=0.0, volume=0.0, flags=130)
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 30, 72000), bid=1.57659, ask=1.57837, last=0.0, volume=0.0, flags=130)
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 34, 320000), bid=1.57656, ask=1.57837, last=0.0, volume=0.0, flags=130)
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 35, 61000), bid=1.57653, ask=1.57837, last=0.0, volume=0.0, flags=130)
 
audusd_ticks( 61336 )
MT5Tick(time=datetime.datetime(2019, 4, 1, 13, 0, 1, 410000), bid=0.71262, ask=0.7128, last=0.0, volume=0.0, flags=134)
MT5Tick(time=datetime.datetime(2019, 4, 1, 13, 0, 2, 380000), bid=0.71263, ask=0.71282, last=0.0, volume=0.0, flags=134)
MT5Tick(time=datetime.datetime(2019, 4, 1, 13, 0, 2, 753000), bid=0.71262, ask=0.71282, last=0.0, volume=0.0, flags=130)
MT5Tick(time=datetime.datetime(2019, 4, 1, 13, 0, 2, 842000), bid=0.71262, ask=0.71281, last=0.0, volume=0.0, flags=4)
MT5Tick(time=datetime.datetime(2019, 4, 1, 13, 0, 3, 428000), bid=0.71261, ask=0.71279, last=0.0, volume=0.0, flags=134)
MT5Tick(time=datetime.datetime(2019, 4, 1, 13, 0, 3, 771000), bid=0.71261, ask=0.7128, last=0.0, volume=0.0, flags=4)
MT5Tick(time=datetime.datetime(2019, 4, 1, 13, 0, 3, 936000), bid=0.71261, ask=0.71279, last=0.0, volume=0.0, flags=4)
MT5Tick(time=datetime.datetime(2019, 4, 1, 13, 0, 4, 2000), bid=0.7126, ask=0.71279, last=0.0, volume=0.0, flags=130)
MT5Tick(time=datetime.datetime(2019, 4, 1, 13, 0, 4, 108000), bid=0.71258, ask=0.71276, last=0.0, volume=0.0, flags=134)
MT5Tick(time=datetime.datetime(2019, 4, 1, 13, 0, 4, 186000), bid=0.71257, ask=0.71275, last=0.0, volume=0.0, flags=134)
 
eurusd_rates( 1000 )
MT5Rate(time=datetime.datetime(2019, 4, 4, 22, 20), open=1.12162, low=1.12171, high=1.12152, close=1.12153, tick_volume=22, spread=8, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 4, 22, 21), open=1.12153, low=1.1217, high=1.12153, close=1.12169, tick_volume=35, spread=8, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 4, 22, 22), open=1.1217, low=1.12179, high=1.1217, close=1.12179, tick_volume=49, spread=8, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 4, 22, 23), open=1.12178, low=1.12189, high=1.12178, close=1.12187, tick_volume=39, spread=9, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 4, 22, 24), open=1.12188, low=1.12188, high=1.12181, close=1.12185, tick_volume=59, spread=8, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 4, 22, 25), open=1.12183, low=1.12187, high=1.12173, close=1.12173, tick_volume=47, spread=8, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 4, 22, 26), open=1.12174, low=1.12179, high=1.12173, close=1.12178, tick_volume=39, spread=8, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 4, 22, 27), open=1.12178, low=1.12179, high=1.12171, close=1.12171, tick_volume=28, spread=8, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 4, 22, 28), open=1.12171, low=1.12171, high=1.12166, close=1.12169, tick_volume=39, spread=8, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 4, 22, 29), open=1.12169, low=1.12169, high=1.1215600000000001, close=1.12158, tick_volume=43, spread=8, real_volume=0)
 
gbpusd_rates( 1000 )
MT5Rate(time=datetime.datetime(2019, 11, 5, 1, 15), open=1.28831, low=1.28831, high=1.2882, close=1.28821, tick_volume=6, spread=12, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 11, 5, 1, 16), open=1.28821, low=1.2882500000000001, high=1.28821, close=1.28822, tick_volume=6, spread=10, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 11, 5, 1, 17), open=1.28822, low=1.28831, high=1.28822, close=1.2882799999999999, tick_volume=19, spread=7, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 11, 5, 1, 18), open=1.2882799999999999, low=1.28831, high=1.28827, close=1.28829, tick_volume=16, spread=7, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 11, 5, 1, 19), open=1.28829, low=1.28836, high=1.28829, close=1.28836, tick_volume=11, spread=7, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 11, 5, 1, 20), open=1.28836, low=1.28836, high=1.28831, close=1.2883200000000001, tick_volume=8, spread=7, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 11, 5, 1, 21), open=1.2883200000000001, low=1.28833, high=1.28831, close=1.2883200000000001, tick_volume=7, spread=5, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 11, 5, 1, 22), open=1.2883200000000001, low=1.2883499999999999, high=1.28829, close=1.2883499999999999, tick_volume=6, spread=10, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 11, 5, 1, 23), open=1.2883, low=1.28846, high=1.2883, close=1.28844, tick_volume=14, spread=7, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 11, 5, 1, 24), open=1.28844, low=1.28844, high=1.28833, close=1.28833, tick_volume=8, spread=7, real_volume=0)
 
eurjpy_rates( 1441 )
MT5Rate(time=datetime.datetime(2019, 4, 1, 13, 0), open=124.763, low=124.785, high=124.737, close=124.749, tick_volume=236, spread=15, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 1, 13, 1), open=124.748, low=124.754, high=124.735, close=124.752, tick_volume=165, spread=15real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 1, 13, 2), open=124.752, low=124.768, high=124.735, close=124.752, tick_volume=162, spread=15, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 1, 13, 3), open=124.752, low=124.756, high=124.736, close=124.739, tick_volume=122, spread=15, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 1, 13, 4), open=124.738, low=124.76, high=124.734, close=124.757, tick_volume=164, spread=15, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 1, 13, 5), open=124.756, low=124.773, high=124.752, close=124.772, tick_volume=150, spread=15, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 1, 13, 6), open=124.773, low=124.802, high=124.771, close=124.779, tick_volume=180, spread=15, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 1, 13, 7), open=124.777, low=124.781, high=124.758, close=124.775, tick_volume=201, spread=15, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 1, 13, 8), open=124.776, low=124.79, high=124.768, close=124.777, tick_volume=189, spread=15, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 1, 13, 9), open=124.777, low=124.803, high=124.774, close=124.794, tick_volume=128, spread=16, real_volume=0)