English Русский Español Deutsch 日本語 Português
preview
MQL5集成:Python

MQL5集成:Python

MetaTrader 5交易系统 | 13 三月 2025, 09:04
1 051 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

概述

在本文中,我将为您介绍一个能够提升您编程技能的重要工具。我们将探讨Python同MQL5的集成。对于开发者如何从Python中获益,这将取决于您的目标,因为Python是一种易于阅读且简单的高级编程语言。Python作为一种编程语言,为数据分析、统计计算和机器学习等领域提供了丰富的库。因此,将Python与MQL5集成可以提供更有价值的解决方案,这些解决方案有助于金融市场参与者通过数据处理和预测分析提升他们的交易结果。

在本文中,我将通过介绍简单的Python基础知识以及在设置环境后的一些简单示例,为您讲解如何在MQL5中使用Python。我将覆盖以下主题:

让我们深入探讨这一有趣的话题,了解如何通过将Python与MQL5结合使用来提升我们的交易成果。


Python概述

Python由Guido van Rossum开发,并于1991年发布。它是一种以可读性和简洁性著称的高级编程语言,非常适合初学者以及经验丰富的开发者。它适用于从简单脚本到复杂系统的广泛应用场景,其简洁的语法能够实现清晰且易于维护的代码。

Python的关键特性包括:

  • 可读性:Python的语法直观且接近自然语言,使得代码更易于编写和阅读。
  • 解释型语言:Python逐行执行代码,这使得调试和开发更加容易。
  • 动态类型:变量的类型在运行时确定,为编码提供了灵活性。
  • 丰富的标准库:Python的全面库支持常见任务,如文件输入/输出、系统调用和数据操作。
  • 多功能性:Python支持多种编程范式,包括面向对象、过程式和函数式编程。
  • 跨平台兼容性:Python能够在多种操作系统上运行,包括Windows、MacOS和Linux,无需对代码进行更改。
  • 强大的社区和生态系统:Python拥有庞大的社区和生态系统,提供了众多扩展Python可能性的库和工具。

Python的应用领域包括:

  • 数据科学:数据分析和可视化库,如Pandas和Matplotlib。
  • 人工智能:机器学习工具,如scikit-learn、TensorFlow和Keras。
  • 自动化:Selenium和Beautiful Soup用于自动化重复性任务。
  • Web开发:Web应用开发框架,如Django和Flask。
  • 科学研究:适用于模拟、统计分析和模型构建。

Pandas、NumPy、SciPy、scikit-learn、TensorFlow、Matplotlib、Selenium、Django和Flask是Python中最受欢迎的库和框架。总的来说,Python在编程领域的持续流行和相关性归功于其可读性、简洁性以及强大的库的结合。


Python集成的益处

正如之前所述,将Python与MQL5集成提供了诸多优势,使其成为系统的宝贵补充。本节试图展示将Python集成到MQL5系统中所带来的重要优势。

因此,这两个系统的集成提供了以下优势:

  • 通过使用Python中丰富的库(包括Pandas和NumPy),利用高级数据分析技术,实现复杂数据操作和分析。
  • 通过引入机器学习库(如scikit-learn、TensorFlow和Keras),可以开发和实施用于预测分析的机器学习模型。
  • 利用Python强大的生态系统,自动化复杂交易策略并对其进行优化,从而提高效率。
  • 通过Python丰富的库和框架集合,增强您的交易算法。

更多详情:

数据分析:

可以充分利用Python库来发挥巨大作用。Python提供了众多专为数据分析设计的库,包括Pandas和NumPy。这些库能够实现复杂的数据操作和统计分析,从而提升交易策略中分析的质量和深度。

  • Pandas库提供了高级数据结构和方法,便于快速且直观地进行数据分析。Pandas库使用户能够高效地处理大型数据集,并以最少的代价执行过滤、分组和聚合数据等操作。
  • NumPy是一个计算库,支持高效地数值计算,非常适合处理大型数值数组和矩阵。它提供了广泛的数学运算功能,经常作为其他库(如Pandas和scikit-learn)的基础库。

机器学习:

在机器学习领域,Python语言是首选,因为它简单易用且拥有强大的库,如scikit-learn、TensorFlow和Keras。当与MQL5集成时,交易者可以利用这些库来构建、开发和部署预测模型,利用历史数据来预测市场走势。

  • Scikit-learn:该库为用户提供了简单而有效的机器学习工具,使他们能够进行深入地数据分析和挖掘。它拥有多种算法,满足各种需求,包括分类、聚类、回归等。
  • TensorFlow和Keras:它们是开发者在深度学习领域中极为流行且广泛使用的工具,提供了一整套用于构建和训练神经网络的工具,以构建复杂的模型。

自动化与效率:

在重复性任务和复杂交易策略的背景下,自动化可以是一种有效的解决方案。通过自动化流程,交易者可以简化操作并减少人为错误的可能性。这在处理复杂策略时尤其有益,因为为策略编写清晰准确的代码有助于降低风险。

  • 这种自动化可以应用于各种与数据相关的任务,包括数据收集、处理和分析,从而为交易者节省时间,使他们能够专注于开发和执行策略。
  • 此外,这种方法还可以应用于回测和优化,通过利用历史数据评估策略的表现,并通过参数优化识别改进空间,从而最终实现更好的结果。

丰富的库和框架:

通过使用丰富的库和框架生态系统,可以增强MQL5的功能。这些包括高级统计工具、外部数据源的API以及复杂的可视化工具,可以用来扩展MQL5应用程序的能力。

  • 数据可视化:Matplotlib和Seaborn等库提供了创建信息图表的工具,从简单到复杂,可用于可视化可用数据,如交易表现和其他指标。
  • API和数据源:Python库提供了获取金融数据、进行网络爬虫和访问数据源的便捷解决方案。这些库可以与众多API接口,这对于那些希望增强交易策略的人来说非常有利。

在讨论这个主题时,还可以考虑其他好处,但我认为我们已经提到了将Python集成到系统中最重要的一些好处。

我们将提供一些可以直接应用于实践的交易相关应用。这将有助于说明我们在将Python与MQL5集成时如何使用交易概念。我们将研究这些概念和技术如何应用于不同领域,并展示如何将它们整合到交易流程中。


设置环境

在本节中,我们将设置所需的软件,以便能够将Python与MQL5结合使用,以下是具体步骤。

  • 通过访问https://www.metatrader5.com/en下载安装程序文件来安装MetaTrader 5,您可以将其安装到所需的设备上。
  • 通过以下链接下载最新版Python:https://www.python.org/downloads/windows
  • 安装Python时,请检查“将Python添加到PATH%”,以便能够从命令行运行Python脚本。
  • 为每个项目创建独立的环境至关重要,这样可以保持环境的整洁、隔离和可复用性。以下步骤展示了如何通过命令行实现这一目标:
    • 导航至项目目录
cd /path/to/your/project
    • 使用venv创建名为mytestenv的虚拟环境(内置虚拟环境工具)
python -m venv mytestenv
    • 现在需要激活已创建的虚拟环境
mytestenv\Scripts\activate
pip安装MetaTrader5
    • 显示MetaTrader安装详情
pip show MetaTrader5
    • 为了便于使用上述功能,需要安装matplotlib和pandas PKG。
pip install matplotlib
pip install pandas
    • 如果需要停用虚拟环境,可以在命令行中使用以下命令:
deactivate

至此,必要的软件(包括MetaTrader5、Python以及所需的库)已经成功安装在设备上,可以开始相关工作。


简单的应用

正如前面提到的,Python和MQL5是可以在多种任务和领域中使用的宝贵工具,包括数据分析、机器学习和自动化。本节致力于展示一些与交易相关的应用,这些应用阐明了如何使用Python脚本与MetaTrader 5结合,以获取一些基本任务的概览。

应用一:使用Python脚本打开MT5:

在本应用中,目标是创建一个Python脚本,该脚本将打开MetaTrader 5终端,并打印一条消息,指示终端是否已成功初始化。以下是完整的脚本代码。需要将代码中的(xxxxx)替换为您的相关账户信息,包括账户编号、登录信息、密码以及经纪商服务器。

import MetaTrader5 as mt5
print ("MetaTrader5 PKG version: ",mt5.__version__)
if mt5.initialize(login=xxxxx, server="xxxxx",password="xxxxx"):
    print ("MT5 initialized Successfully")  
else: print ("MT5 initialization Failed, Error code ",mt5.last_error())
 

运行此代码后,您会发现MetaTrader 5终端已成功初始化,就像您点击可执行文件一样,之后您可以像往常一样使用它进行交易。此外,您会在控制台中看到以下结果:

  • MetaTrader5 PKG版本:5.0.4424
  • MetaTrader5 PKG作者:MetaQuotes Ltd.
  • MT5初始化成功

应用二:使用Python脚本开启交易头寸:

在本应用中,目标是创建一个Python脚本,通过该脚本在MetaTrader 5终端开启一个买入头寸。为实现这一目标,将采取以下步骤:创建一个脚本,在XAUUSD(黄金/美元)上以卖方价格开启一个0.01手的买入头寸,并设置止损和获利水平。

需要将MetaTrader5模块导入为mt5。

import MetaTrader5 as mt5

打印MetaTrader5 PKG的版本信息。

print ("MetaTrader5 PKG version: ",mt5.__version__)

打印MetaTrader5 PKG的作者信息。

print ("MetaTrader5 PKG author: ",mt5.__author__)

MetaTrader5的连接初始化时会显示一条消息,指示初始化是否成功。如果初始化不成功,该消息会给出错误代码。账户详细信息,包括登录名、经纪服务器和密码,应该用实际的账户信息替换。

if mt5.initialize(login=xxxxx, server="xxxxx",password="xxxxx"):
    print ("MT5 initialized Successfully")
else: print ("MT5 initialization Failed, Error code ",mt5.last_error())

已声明以下变量:交易品种(symbol)、手数(lot)、点值(point)、订单类型(order_type)、价格(price)、止损(sl)、止盈(tp)、偏离值(deviation)、magic编号(magic)、备注(comment)、时间类型(type_time)和成交类型(type_filling)。

symbol="XAUUSD"
lot=0.01
point=mt5.symbol_info(symbol).point
order_type=mt5.ORDER_TYPE_BUY
price=mt5.symbol_info_tick(symbol).ask
sl=mt5.symbol_info_tick(symbol).ask-100
tp=mt5.symbol_info_tick(symbol).ask+150
deviation=10
magic=2222222
comment="python order"
type_time=mt5.ORDER_TIME_GTC
type_filling=mt5.ORDER_FILLING_IOC

根据已声明的订单信息发送订单请求。

request={
    "action":mt5.TRADE_ACTION_DEAL,
    "symbol":symbol,
    "volume":lot,
    "type":order_type,
    "price":price,
    "sl":sl,
    "tp":tp,
    "deviation":deviation,
    "magic":magic,
    "comment":comment,
    "type_time":type_time,
    "type_filling":type_filling,
    } 

使用(order_check)检查是否有足够的资金执行请求的交易操作,并根据其结果值判断是否满足要求。检查结果以MqlTradeCheckResult结构返回。

result=mt5.order_check(request)

通过使用“order_send”函数发送请求来执行交易操作,更新结果作为返回值。

result=mt5.order_send(request)

现在需要使用shutdown()函数来终止之前与MetaTrader 5终端建立的连接。

mt5.shutdown()

因此,您可以参照以下代码块所示的方式来编写完整的代码。

import MetaTrader5 as mt5
print ("MetaTrader5 PKG version: ",mt5.__version__)
print ("MetaTrader5 PKG author: ",mt5.__author__)
if mt5.initialize(login=xxxxx, server="xxxxx",password="xxxxx"):
    print ("MT5 initialized Successfully")
else: print ("MT5 initialization Failed, Error code ",mt5.last_error())
symbol="XAUUSD"
lot=0.01
point=mt5.symbol_info(symbol).point
order_type=mt5.ORDER_TYPE_BUY
price=mt5.symbol_info_tick(symbol).ask
sl=mt5.symbol_info_tick(symbol).ask-100
tp=mt5.symbol_info_tick(symbol).ask+150
deviation=10
magic=2222222
comment="python order"
type_time=mt5.ORDER_TIME_GTC
type_filling=mt5.ORDER_FILLING_IOC
request={
    "action":mt5.TRADE_ACTION_DEAL,
    "symbol":symbol,
    "volume":lot,
    "type":order_type,
    "price":price,
    "sl":sl,
    "tp":tp,
    "deviation":deviation,
    "magic":magic,
    "comment":comment,
    "type_time":type_time,
    "type_filling":type_filling,
    }    
result=mt5.order_check(request)
result=mt5.order_send(request)
mt5.shutdown()

执行代码后的结果如下:

  • MetaTrader5 PKG版本:5.0.4424
  • MetaTrader5 PKG作者:MetaQuotes Ltd.
  • MT5初始化成功
  • 在黄金(XAUUSD)上以卖方价格开启了一个买入交易,交易手数为0.01,止损订单设置为卖方价格减去100点,获利订单设置为卖方价格加上150点。

buyTrade

应用三:使用MT5 Python API获取数据:

在数据管理的背景下,通过使用MQL5和Python可以完成许多任务。本节将展示一个与交易相关的简单示例,通过MT5 Python API获取金融数据。除了将数据绘制成图表以便于可视化外,还将获取从2023年8月1日到现在的黄金(XAUUSD)价格(文章撰写时间为2024年8月12日),并将其打印和可视化为折线图。以下将展示此过程的步骤。

必须导入所需的库:

为了后续作为与MetaTrader 5交易平台交互的对象,需要导入MetaTrader5模块,并将其命名为“mt5”。

import MetaTrader5 as mt5

为了进行数据操作和分析,导入Pandas库并将其命名为pd。

import pandas as pd

导入plotly.express并将其命名为px,用于数据可视化以展示XAUUSD数据。

import plotly.express as px

从plotly.offline导入plot,以便在无需互联网连接的情况下生成图表。

from plotly.offline import plot

为了便于操作日期和时间,需要从datetime中导入datetime模块。

from datetime import datetime

打印MetaTrader5 PKG的信息(版本和作者)。

print ("MetaTrader5 PKG version: ",mt5.__version__)
print ("MetaTrader5 PKG author: ",mt5.__author__)

MetaTrader 5终端已初始化,并打印一条控制台消息用于指示初始化是否成功。如果初始化成功,则显示消息“MT5 initialized successfully”(MT5初始化成功)。相反,如果初始化失败,则显示消息“MT5 initialization failed, error code”(MT5初始化失败,错误代码),并附带错误代码和最后一条错误信息。

if mt5.initialize(login=xxxxx, server="xxxxx",password="xxxxx"):
    print ("MT5 initialized Successfully")
else: print ("MT5 initialization Failed, Error code ",mt5.last_error())

从MetaTrader 5平台获取了XAUUSD的历史数据(开盘价、最高价、最低价、收盘价、成交量、点差和实际成交量)。为此使用以下命令:

  • pd.DataFrame: A pd.dataFrame can be created with specific criteria, resulting in a two-dimensional, labeled data structure.
  • mt5.copy_rates_range: is used to determine the type of data in terms of symbol (XAUUSD), timeframe (mt5.TIMEFRAME_D1), starting date (datetime(2023,8,1)), and ending date (datetime.now()).
xauusd_data=pd.DataFrame(mt5.copy_rates_range("XAUUSD", mt5.TIMEFRAME_D1, datetime(2023,8,1), datetime.now()))

使用pandas.to_datetime函数将时间列从Unix时间戳转换为可读的日期时间格式。

xauusd_data['time'] = pd.to_datetime(xauusd_data['time'],unit='s')

使用以下代码行打印获取的XAUUSD数据。

print(xauusd_data)

使用px.line函数绘制获取的数据,该函数通过Plotly Express创建折线图。该图表表示从2023年8月1日到现在的XAUUSD价格随时间的变化。

fig = px.line(xauusd_data, x=xauusd_data['time'], y=xauusd_data['close'])
plot(fig)

完整的代码与以下代码块一致。

import MetaTrader5 as mt5
import pandas as pd
import plotly.express as px
from plotly.offline import plot
from datetime import datetime
print ("MetaTrader5 PKG version: ",mt5.__version__)
print ("MetaTrader5 PKG author: ",mt5.__author__)
if mt5.initialize(login=xxxxx, server="xxxxx",password="xxxxx"):
    print ("MT5 initialized Successfully")
else: print ("MT5 initialization Failed, Error code ",mt5.last_error())
xauusd_data=pd.DataFrame(mt5.copy_rates_range("XAUUSD", mt5.TIMEFRAME_D1, datetime(2023,8,1), datetime.now()))
xauusd_data['time'] = pd.to_datetime(xauusd_data['time'],unit='s')
print(xauusd_data)
fig = px.line(xauusd_data, x=xauusd_data['time'], y=xauusd_data['close'])
plot(fig)

执行代码后,结果如下:

  • 控制台打印了(MetaTrader5 PKG版本:5.0.4424)的消息。
  • 控制台打印了(MetaTrader5 PKG作者:MetaQuotes Ltd.)的消息。
  • 控制台打印了(MT5 初始化成功)的消息。
  • 控制台打印的XAUUSD数据与下图一致。

XAUUSD_data

  • 由于进行了与以下内容相同的绘图,因此浏览器打开了XAUUSD图表。

XAUUSD_plot

正如前面的图表所示,折线图展示了从2023年8月到现在这段时间内黄金(XAUUSD)的收盘价走势。上述简单的应用展示了在自动化交易、数据分析以及其他相关任务中使用Python与MQL5的潜力。


结论

Python是一种极其灵活且强大的编程语言,可以在包括交易和金融市场在内的多个领域中使用。使用Python使得自动化、数据分析和策略执行成为可能,从而有助于做出更明智的交易决策。Python与MQL5的结合使得创建利用数据和机器学习的复杂交易系统成为可能。这代表了算法交易领域的一个重大进步。它使得创建更具适应性和数据驱动的交易系统成为可能。这种结合具有提升金融市场中的交易结果的潜力。

本文展示了如何将Python与MQL5结合使用。此外,本文还概述了为MetaTrader 5设置Python环境所需的步骤。通过建立有效的工作流程,开发者可以更高效地管理依赖关系,并增强其交易系统的可扩展性。Python能够自动化任务并分析市场趋势。这一点通过其实际应用来展示,包括打开MetaTrader 5、执行交易、获取资产数据并对其进行可视化。

我希望本文能够帮助您开始使用Python与MQL5。尝试各种应用对于交易者和开发者来说都是非常有益的。如需进一步信息,请参考以下资源:

  • 《Python for Dummies》,作者:Stef Maruch
  • 《Python Crash Course》,作者:Eric Matthes
  • 《Python All-In-One》,作者:John Shovic和Alan Simpson

此外,您还可以通过以下链接访问MQL5网站上的其他相关文档: https://www.mql5.com/en/docs/python_metatrader5 。

本文由MetaQuotes Ltd译自英文
原文地址: https://www.mql5.com/en/articles/14135

附加的文件 |
openMT5.py (0.39 KB)
openPosition.py (1.22 KB)
getData.py (0.84 KB)
解构客户端交易策略的示例 解构客户端交易策略的示例
本文使用框图来检查位于终端的 Experts\Free Robots 文件夹中的基于烛形的训练 EA 的逻辑。
从基础到中级:变量 (III): 从基础到中级:变量 (III):
今天,我们将学习如何使用预定义的 MQL5 语言变量和常量。此外,我们将分析另一种特殊类型的变量:函数。知道如何正确使用这些变量可能意味着一个有效的应用程序和一个无效的应用程序之间的区别。为了理解这里介绍的内容,有必要理解前几篇文章中讨论的材料。
使用MQL5中的动态时间规整进行模式识别 使用MQL5中的动态时间规整进行模式识别
在本文中,我们探讨了动态时间规整(Dynamic Time Warping,DTW)作为识别金融时间序列中预测模式的一种方法。我们将深入了解其工作原理,并在纯MQL5语言中展示其实现方法。
威廉·甘恩(William Gann)方法(第一部分):创建甘恩角度指标 威廉·甘恩(William Gann)方法(第一部分):创建甘恩角度指标
甘恩理论的精髓是什么?甘恩角度是如何构建的?我们将为MetaTrader 5创建甘恩角度指标。