- EA 交易的主要事件:OnTick
- 基本原理和概念:订单、交易和仓位
- 交易操作类型
- 订单类型
- 按价格和数量划分的订单执行模式
- 挂单到期日期
- 期货订单的保证金计算方法:OrderCalcMargin
- 估算交易操作的利润:OrderCalcProfit
- MqlTradeRequest 结构体
- MqlTradeCheckResult 结构体
- 请求验证:OrderCheck
- 请求发送结果:MqlTradeResult 结构体
- 发送交易请求:OrderSend 和 OrderSendAsync
- 买入和卖出操作
- 修改仓位的止损和/或止盈水平
- 跟踪止损
- 平仓:全部和部分
- 反向平仓:全部和部分
- 挂单
- 修改挂单
- 删除挂单
- 获取活动订单列表
- 订单特性(现行和历史)
- 用于读取活动订单特性的函数
- 按特性选择订单
- 获取仓位列表
- 仓位特性
- 用于读取仓位特性的函数
- 交易特性
- 从历史中选择订单和交易
- 用于从历史中读取订单特性的函数
- 用于从历史中读取交易特性的函数
- 交易类型
- OnTradeTransaction 事件
- 同步和异步请求
- OnTrade 事件
- 监测交易环境变化
- 创建多交易品种 EA 交易
- EA 交易的优势和局限性
- 在 MQL 向导中创建 EA 交易
创建 EA 交易
在本章中,我们开始学习用于实现 EA 交易的 MQL5 交易 API。就无错编码和涉及的技术数量和种类而言,这种类型的程序可能是最复杂且要求最高的。特别是,我们需要利用从前几章学到的许多技能,从面向对象编程 (OOP) 到使用图形对象、指标、交易品种和软件环境设置等的实际应用层面。
根据所选择的交易策略,EA 交易开发人员可能需要特别注意以下几点:
- 决策和订单发送速度(针对高频交易 (HFT))
- 根据工具的相关性和波动性选择金融工具的最佳组合(针对集群交易)
- 动态计算订单之间的手数和距离(针对鞅策略和网格策略)
- 分析新闻或外部数据源(将在本书的第七章讨论)
开发人员应将所有这些特性以最佳方式应用于 MQL5 API 提供的交易机制中(之前已经介绍过这些机制)。
接下来,我们将详细考虑用于管理交易活动的内置函数、EA 交易事件模型及特定的数据结构体,并回忆终端和服务器之间交互的基本原则,以及 MetaTrader 5 中算法交易的基本概念:订单、交易和头寸。
同时,由于材料的多样性,EA 交易开发的许多重要细微差别,如测试和优化,将在下一章中重点介绍。
我们之前已经探讨了 各种类型的 MQL 程序的设计,包括 EA 交易,以及 程序启动和停止的功能入门知识。尽管 EA 交易是在定义了工作交易品种的特定图表上启动,但可以成功地集中管理任意一组金融工具的交易。这种 EA 交易传统上被称为多货币,尽管实际上其投资组合可能包括差价合约 (CFD)、股票、大宗商品和其他市场的交易代码。
在 EA 交易和指标中,有许多 关键事件 OnInit 和 OnDeinit。这些事件不是强制性的,但通常出现在程序准备和常规完成的代码中:我们之前在示例中使用了这些事件,后面还会继续使用。在单独的一节中,我们提供了 所有事件处理函数的概述:迄今为止,我们已经详细研究了其中的一些函数(例如, OnCalculate 指标事件和 OnTimer 计时器)。本章中将介绍 EA 交易特定的事件(OnTick、 ontrade、 OnTradeTransaction)。
EA 交易可以使用最广泛的来源数据作为交易信号: 报价、 分时报价、 市场深度、 交易账户历史或指标读数。在后一种情况下,创建指标实例和从缓冲区读取值的原则与 使用 MQL 程序中的现成指标中讨论的原则相同。在以下几节的 EA 交易示例中,我们将演示大多数技巧。
需要注意的是,交易函数不仅可以在 EA 交易中使用,也可以在脚本中使用。我们将看到两个选项的示例。