MetaTrader与Python集成的模块

MQL5语言专门用于开发金融市场中的高性能交易应用程序,是算法交易使用的其他专门语言中无法比拟的。MQL5程序的语法和速度尽可能接近C++语言,支持OpenCL与MS Visual Studio的集成。也可使用统计模糊逻辑ALGLIB程序库。MetaEditor开发环境通过"smart"函数导入对.NET程序库提供原生支持,消除开发特殊包装样式的需求。还可以使用第三方C++ DLL。 С++源代码文件(CPP和H)可以直接从编辑器中编辑并编译成DLL。安装在用户电脑上的Microsoft Visual Studio也可作此用途。

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

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

从命令行安装程序包:

 pip安装MetaTrader5

从命令行更新程序包:

 pip安装 --更新MetaTrader5

用于集成MetaTrader 5和Python的函数

函数

操作

initialize

建立与MetaTrader 5程序端的连接

login

使用指定参数连接交易账户

shutdown

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

version

返回MetaTrader 5程序端版本

last_error

返回最后一个错误的数据

account_info

获取当前交易账户的信息

terminal_Info

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

symbols_total

获取MetaTrader 5程序端中所有交易品种的数量

symbols_get

获取MetaTrader 5程序端中的所有交易品种

symbol_info

获取指定交易品种的数据

symbol_info_tick

获取指定交易品种的最后报价

symbol_select

MarketWatch(市场报价)窗口中选择一个交易品种或从该窗口移除一个交易品种

market_book_add

订阅MetaTrader 5程序端的指定交易品种的市场深度更改事件

market_book_get

从BookInfo返回一个元组,其中包含指定交易品种的市场深度条目

market_book_release

取消订阅MetaTrader 5程序端的指定交易品种的市场深度更改事件

copy_rates_from

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

copy_rates_from_pos

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

copyrates_range

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

copy_ticks_from

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

copy_ticks_range

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

orders_total

获取活动订单的数量。

orders_get

获取可通过交易品种或单号筛选的活动订单

order_calc_margin

返回预付款(用账户货币表示)来执行指定的交易操作

order_calc_profit

返回指定交易操作的盈利(用账户货币表示)

order_check

检查是否有足够的资金执行所需的交易操作

order_send

发送请求来执行交易操作。

positions_total

获取未结持仓的数量

positions_get

获取可通过交易品种或单号筛选的未结持仓

history_orders_total

获取交易历史中指定时间间隔内的订单数量

history_orders_get

获取可通过单号或持仓筛选的交易历史中的订单

history_deals_total

获取交易历史中指定时间间隔内的交易数量

history_deals_get

获取可通过单号或持仓筛选的交易历史中的交易

连接Python与MetaTrader 5的示例

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

 pip安装MetaTrader5

  1. 添加matplotlib和pandas程序包

 pip安装matplotlib
 pip安装pandas

  1. 启动测试脚本

from datetime import datetime
import matplotlib.pyplot as plt
import pandas as pd
from pandas.plotting import register_matplotlib_converters
register_matplotlib_converters()
import MetaTrader5 as mt5
 
# 连接到MetaTrader 5
if not mt5.initialize():
    print("initialize() failed")
    mt5.shutdown()
 
# 请求连接状态和参数
print(mt5.terminal_info())
# 获取有关MetaTrader 5版本的数据
print(mt5.version())
 
# 从EURAUD请求1000个报价
euraud_ticks = mt5.copy_ticks_from("EURAUD"datetime(2020,1,28,13), 1000mt5.COPY_TICKS_ALL)
# 请求2019.04.01 13:00 - 2019.04.02 13:00之间的AUDUSD报价
audusd_ticks = mt5.copy_ticks_range("AUDUSD"datetime(2020,1,27,13), datetime(2020,1,28,13), mt5.COPY_TICKS_ALL)
 
# 通过多种方式获取不同交易品种的柱形图
eurusd_rates = mt5.copy_rates_from("EURUSD"mt5.TIMEFRAME_M1datetime(2020,1,28,13), 1000)
eurgbp_rates = mt5.copy_rates_from_pos("EURGBP"mt5.TIMEFRAME_M101000)
eurcad_rates = mt5.copy_rates_range("EURCAD"mt5.TIMEFRAME_M1datetime(2020,1,27,13), datetime(2020,1,28,13))
 
# 断开与MetaTrader 5的连接
mt5.shutdown()
 
#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('eurgbp_rates(', len(eurgbp_rates), ')')
for val in eurgbp_rates[:10]: print(val)
 
print('eurcad_rates(', len(eurcad_rates), ')')
for val in eurcad_rates[:10]: print(val)
 
#PLOT
# 从所获得的数据创建DataFrame
ticks_frame = pd.DataFrame(euraud_ticks)
# 将时间(以秒为单位)转换为日期时间格式
ticks_frame['time']=pd.to_datetime(ticks_frame['time'], unit='s')
# 在图表上显示报价
plt.plot(ticks_frame['time'], ticks_frame['ask'], 'r-', label='ask')
plt.plot(ticks_frame['time'], ticks_frame['bid'], 'b-', label='bid')
 
# 显示图例
plt.legend(loc='upper left')
 
# 添加标题
plt.title('EURAUD ticks')
 
# 显示图表
plt.show()

  1. 获取数据和图表
    python_script_chart

[2, 'MetaQuotes-Demo', '16167573']
[5002325, '19 Feb 2020']
 
euraud_ticks( 1000 )
(1580209200, 1.63412, 1.63437, 0., 0, 1580209200067, 130, 0.)
(1580209200, 1.63416, 1.63437, 0., 0, 1580209200785, 130, 0.)
(1580209201, 1.63415, 1.63437, 0., 0, 1580209201980, 130, 0.)
(1580209202, 1.63419, 1.63445, 0., 0, 1580209202192, 134, 0.)
(1580209203, 1.6342, 1.63445, 0., 0, 1580209203004, 130, 0.)
(1580209203, 1.63419, 1.63445, 0., 0, 1580209203487, 130, 0.)
(1580209203, 1.6342, 1.63445, 0., 0, 1580209203694, 130, 0.)
(1580209203, 1.63419, 1.63445, 0., 0, 1580209203990, 130, 0.)
(1580209204, 1.63421, 1.63445, 0., 0, 1580209204194, 130, 0.)
(1580209204, 1.63425, 1.63445, 0., 0, 1580209204392, 130, 0.)
audusd_ticks( 40449 )
(1580122800, 0.67858, 0.67868, 0., 0, 1580122800244, 130, 0.)
(1580122800, 0.67858, 0.67867, 0., 0, 1580122800429, 4, 0.)
(1580122800, 0.67858, 0.67865, 0., 0, 1580122800817, 4, 0.)
(1580122801, 0.67858, 0.67866, 0., 0, 1580122801618, 4, 0.)
(1580122802, 0.67858, 0.67865, 0., 0, 1580122802928, 4, 0.)
(1580122809, 0.67855, 0.67865, 0., 0, 1580122809526, 130, 0.)
(1580122809, 0.67855, 0.67864, 0., 0, 1580122809699, 4, 0.)
(1580122813, 0.67855, 0.67863, 0., 0, 1580122813576, 4, 0.)
(1580122815, 0.67856, 0.67863, 0., 0, 1580122815190, 130, 0.)
(1580122815, 0.67855, 0.67863, 0., 0, 1580122815479, 130, 0.)
eurusd_rates( 1000 )
(1580149260, 1.10132, 1.10151, 1.10131, 1.10149, 44, 1, 0)
(1580149320, 1.10149, 1.10161, 1.10143, 1.10154, 42, 1, 0)
(1580149380, 1.10154, 1.10176, 1.10154, 1.10174, 40, 2, 0)
(1580149440, 1.10174, 1.10189, 1.10168, 1.10187, 47, 1, 0)
(1580149500, 1.10185, 1.10191, 1.1018, 1.10182, 53, 1, 0)
(1580149560, 1.10182, 1.10184, 1.10176, 1.10183, 25, 3, 0)
(1580149620, 1.10183, 1.10187, 1.10177, 1.10187, 49, 2, 0)
(1580149680, 1.10187, 1.1019, 1.1018, 1.10187, 53, 1, 0)
(1580149740, 1.10187, 1.10202, 1.10187, 1.10198, 28, 2, 0)
(1580149800, 1.10198, 1.10198, 1.10183, 1.10188, 39, 2, 0)
eurgbp_rates( 1000 )
(1582236360, 0.83767, 0.83767, 0.83764, 0.83765, 23, 9, 0)
(1582236420, 0.83765, 0.83765, 0.83764, 0.83765, 15, 8, 0)
(1582236480, 0.83765, 0.83766, 0.83762, 0.83765, 19, 7, 0)
(1582236540, 0.83765, 0.83768, 0.83758, 0.83763, 39, 6, 0)
(1582236600, 0.83763, 0.83768, 0.83763, 0.83767, 21, 6, 0)
(1582236660, 0.83767, 0.83775, 0.83765, 0.83769, 63, 5, 0)
(1582236720, 0.83769, 0.8377, 0.83758, 0.83764, 40, 7, 0)
(1582236780, 0.83766, 0.83769, 0.8376, 0.83766, 37, 6, 0)
(1582236840, 0.83766, 0.83772, 0.83763, 0.83772, 22, 6, 0)
(1582236900, 0.83772, 0.83773, 0.83768, 0.8377, 36, 5, 0)
eurcad_rates( 1441 )
(1580122800, 1.45321, 1.45329, 1.4526, 1.4528, 146, 15, 0)
(1580122860, 1.4528, 1.45315, 1.45274, 1.45301, 93, 15, 0)
(1580122920, 1.453, 1.45304, 1.45264, 1.45264, 82, 15, 0)
(1580122980, 1.45263, 1.45279, 1.45231, 1.45277, 109, 15, 0)
(1580123040, 1.45275, 1.4528, 1.45259, 1.45271, 53, 14, 0)
(1580123100, 1.45273, 1.45285, 1.45269, 1.4528, 62, 16, 0)
(1580123160, 1.4528, 1.45284, 1.45267, 1.45282, 64, 14, 0)
(1580123220, 1.45282, 1.45299, 1.45261, 1.45272, 48, 14, 0)
(1580123280, 1.45272, 1.45275, 1.45255, 1.45275, 74, 14, 0)
(1580123340, 1.45275, 1.4528, 1.4526, 1.4528, 94, 13, 0)