HedgeTerminal 双向对冲基础:在 MT5 里搭起类 MT4 的仓位管理骨架(基础篇)
(1/3)· 从净持仓模型到面板安装,搞懂 MT5 原生不支持的双向交易怎么落地
「用 HedgeTerminal 在 MT5 里做双向持仓」
MT5 自带的订单系统默认是净头寸模式,同一品种只能有一个方向的总仓位。要真正做对冲,得靠第三方面板 HedgeTerminal,它能在图表上直接开反向单,互不抵消。 该面板发表于 2015 年 6 月 11 日,原文浏览量 5518、收藏 68,说明早期就有不少交易者想在 MT5 上绕开净头寸限制。面板以独立窗口吸附在图表一侧,点买点卖各自生成独立 ticket。 外汇与贵金属杠杆高、双向持仓占用保证金翻倍,爆仓风险显著放大,实盘前务必在策略测试器或模拟盘验证保证金占用逻辑。
这篇东西到底拆成哪几块
原文把整份材料切成三块主线:先讲 MT5 里双向持仓是怎么被组织的,再走一遍 HedgeTerminal 的安装和首次上手,最后掀开终端后台,看订单配对、OCO、虚拟化这些机制到底怎么跑。 第一章偏原理,从 MetaTrader 5 原生支持双向交易的机会,讲到配对订单作为对冲与统计的基础,以及净持仓和 HedgeTerminal 仓位之间的映射关系;末尾列了实现双向交易算法的硬性需求。 第二章是实操路径:安装分三步,附图示和常见报错解法;启动后覆盖一键交易、止损止盈与尾随、掉期演示、报告生成和表格外观改动,2.11 还留了计划但未实现的功能清单。 第三章进到终端内部,3.1–3.2 说全局/局部轮廓的信息存储,3.3–3.4 讨论 OCO 能否真的护住双向仓位,3.7 往后则是配对判断、成交切分链接、虚拟化与隐藏订单,以及性能和内存使用的边界。外汇与贵金属自带高杠杆高风险,动手前先认清这套机制只解决组织问题,不预示盈亏。
◍ 介绍
在过去的 18 个月里,MetaQuotes 为了将 MetaTrader 4 和 MetaTrader 5 平台整合到统一的生态系统,进行了广泛坚实的工作。现在,这两个平台可以共享一个解决方案的统一市场 - MetaTrader市场 ,可由外部开发者提供不同的产品。用于两个平台的编译器也已经统一。其结果是这两个平台都拥有基于 MQL5 的通用编译器,和一种编程语言 - MQL 依据所使用的平台,具有不同函数集合。所有发布于 代码库 的源代码也已修改,并且它们当中的一些经过调整也可与新编译器兼容。 平台的这次重大统一,搁置了交易部分的统一。MetaTrader 4 和 MetaTrader 5 的交易模型依然不兼容,尽管事实上,交易环境的主要部分是共通的。MetaTrader 4 通过系统订单,有助于独立管理交易仓位 - 特殊程序实体使得终端里的双向交易十分简单容易。MetaTrader 5 的目标在于交易所交易,其中交易者契约的主要体现是总体净持仓。在 MetaTrader 5 中订单只是简单地买卖金融工具的指令。 这两个平台之间交易执行的差异,导致了很多热烈的讨论和辩论。不过,讨论归讨论。不幸的是,自从 MetaTrader 5 发布,如同 MetaTrader 4 那样展现交易者契约双向仓位的解决方案不止发布了一款。尽管发表了许多文章,提出了各种方案,只是它们都不具备足够地灵活性,以便大规模应用。另外,这些决定中没有能适合交易所交易的,它涉及了大量必须考虑的细节。 本文要解决 MetaTrader 平台第四版、第五版的爱好者之间的争议。这将提供一种通用方案来形成编程规范,以及精确按照规范实现的程序。本文讨论一款可视化的面板和虚拟化函数库 HedgeTerminal , 其允许交易员像使用 MetaTrader 4 那样展现双向仓位。同时,HedgeTerminal 底层模型亦考虑了交易订单执行的特性。这意味着它可以在场外市场 FOREX 和集中式交易所两者间成功地实现,例如,在 莫斯科交易所 的衍生品分部交易衍生证券。 HedgeTerminal 是一款内置于 MetaTrader 5 的全功能交易终端。通过 虚拟化 机制,它改变了当前仓位的表现,所以交易员或交易机器人可以管理他们的独立交易仓位。无论仓位数量,甚或它们的方向都不重要。我想强调的是,我们正在谈论虚拟化 - 一个具体地转换交易者契约展现的机制,而不是它们的量化特征。 这并非与扭曲交易者财务活动的结果有关,但与转换这种活动的重现有关。HedgeTerminal 基于 MetaTrader 5 交易环境和 MQL5 编程语言。它并未给终端带来新的交易信息,它只是简单地从不同角度观察当前的交易环境。这意味着,HedgeTerminal 基于 MetaTrader 5,且是其本机应用。虽然,我们在它们之间发放一个标识符,但包容符更合适,因为 HedgeTerminal 仅是众多小型 MetaTrader 5 应用之一。 虚拟化可行性以及 HedgeTerminal 的存在基于三个范例: 从概念上讲,将一个完整且保证可转换的仓位,表示为独立的双向交易事务是可行的 。此陈述证明的事实是,在一些外部交易平台,包括那些设计用于交易所交易的平台,有管理双向仓位的手段; MetaTrader 5 的交易模型在用户级别可以在订单之间创建单向连接 。计算表明,以某种方式设计的链接将抵御冲突。此外,即使在某些情况下,如历史数据受损或不可抗力情况,双向事务可以追溯修正,并在净值重现时作为财会结果计算;
「MT5 里复刻 MT4 锁仓逻辑的底层办法」
MT4 里查订单开仓价只需看“价格”栏,MQL4 调 OrderOpenPrice() 就够了;MT5 却要把一笔订单关联的所有成交拉出来,按成交量算加权均价,这个可变均价才是真实执行价。终端把细节摊开,反而让新手和刚碰 MQL5 的人容易误读。 好消息是 MT5 的能力集合完全覆盖 MT4 子集,所有 MT4 能做的在 MT5 都能做,只是信息量和复杂度上来了。可以把这些复杂处理丢给内嵌在 MT5 里的辅助程序,比如 HedgeTerminal:它用 MQL5 抓取订单和成交,重组成类似 MT4 的双向仓位界面,同时保留 MT5 全部底层能力。 拆交易动作靠“配对订单”。每笔订单有个叫订单魔幻数(magic number)的字段,EA 用它标记自己的单子。第二笔单子填第一笔的 magic,就能确定它是前者的平仓反向单。两笔这样链起来的单子,在 HedgeTerminal 里叫对冲仓位(双向仓位),和 MT5 原生的净持仓是两回事。 注意 HedgeTerminal 的双向仓位不跟 MT5 净持仓绑定,只在启动时校验一次:反向活动持仓总成交量必须等于实际净持仓。不一致就弹惊叹号,多数情况是 ExcludeOrders.xml 被改错,或服务器成交记录损坏,靠排除机制能清掉。外汇和贵金属杠杆高,这种非对称不立刻影响功能,但放着会让统计慢慢歪。 开发这类双向算法有几条硬限制:表达不能歧义、主要信息必须从 MT5 交易环境实时取、转换动作对用户透明、面板要接近原生 MT5 且可配置、对外 API 要像 MT4/5 标准交互。否则程序会退化成“碰运气能跑”的状态。
装 HedgeTerminal 前先把旧单理清楚
HedgeTerminal 把账户里所有订单都视作仓位。若安装前账户已有历史成交,彼此无关联的单子会被它识别为开仓单——几笔无所谓,几千笔就会生成数以千计仓位,逐个反向平仓得重复付佣金和点差,成本可能直接压垮账户。 它用启动向导来处理这个坑。从 MT5 市场拖 EA 到图表,勾选「允许自动交易」并授权 EA 权限即可调出向导。若账户是干净的零持仓,装完就结束;若检测到已执行订单(示例里是 5 笔),会弹窗给三种选择:隐藏进 ExcludeOrders.xml、留着稍后手平、或取消安装。 最稳的做法是先手动平掉所有净持仓,再启动 EA 连按两次 Yes——第一步装文件,第二步把旧单信息自动转进排除列表。装歪了就去 c:\Users\<用户名>\AppData\Roaming\MetaQuotes\Terminal\Common\Files\HedgeTerminal 删对应经纪商-账号文件夹,向导下次会重跑。 首次启动后面板不显持仓即正常。演示版只让跑 AUDCAD 和 VTBR*,且历史仓位只留最近 10 笔。实盘外汇、贵金属波动剧烈、杠杆高风险大,先用 0.4 手 AUDCAD 测一下:开仓后活动栏出现同量多头,按 Vol. 改 0.2 回车,差出的 0.2 手自动变历史仓位,相当于平掉一半。 锁仓测试更直观:开 0.2 多再反手卖 0.2,MT5 净持仓归零,HedgeTerminal 却显示两笔反向仓位。四笔成交拆开看:买 in 0.98088 / 0.2 手只是其中一条,其余三条方向价格不同,整体财务结果两边终会对齐。
◍ 手工改配置文件就能调出魔幻数字列
HedgeTerminal 把界面和可调参数全塞进 Settings.xml,EA 参数面板里只暴露一个配置文件名。想让面板显示开仓 EA 的标识,不用写代码,只要找到 c:\Users\<用户名>\AppData\Roaming\MetaQuotes\Terminal\Common\Files\HedgeTerminal 下的 Settings.xml,把里面被注释掉的 Magic 列标签取消注释,重启面板就会多出一列 "Magic"。 手工开的仓位这列是 0,EA 开的仓显示对应魔幻数字;更进一步,ExpertAliases.xml 里配好别名后,数字会变成 EA 名字,比盯一串 ID 直观得多。 删列也一样粗暴:用 XML 注释符 <!-- --> 把某列整段包起来,品名、成交记录都能隐藏。但注意,活动仓里的 "盈利" 列藏了平仓按钮,删了就只能在别处平,实盘前先在模拟盘验一遍。 外汇与贵金属杠杆高、滑点跳空频繁,改配置后务必用历史成交回看一列是否影响管理动作,再上真实账户。