自定义指标:为净额结算账户绘制部分入场、出场和反转交易(基础篇)
📘

自定义指标:为净额结算账户绘制部分入场、出场和反转交易(基础篇)

第 1/3 篇

「净额账户下怎么把分批单画进指标」

在 MetaTrader 5 里,净额结算账户(netting account)和锁仓账户不同:同一品种只允许一个反向头寸,平仓按平均开仓价计算,所以部分入场、部分出场和反转这些动作不会像对冲账户那样生成独立 ticket。 要把这类交易动作可视化,自定义指标得监听交易历史与持仓变动,而不是只画价格。原文给出的框架里,指标先区分账户类型,再按成交回报(deal)聚合净头寸变化,这样一笔「平一半加反转」在图上能画成连续线段而非零碎箭头。 一个可验证的现象:在 MT5 演示净额账户中,对 XAUUSD 连续做 3 次 0.1 手部分入场再 2 次部分出场,终端持仓栏只显示 0.1 净头寸,但指标若按 deal 流解析,能还原出 5 段成交痕迹。打开 MT5 注册个 netting 模拟账户,挂上这类指标就能比对终端持仓数与图形还原度。 外汇与贵金属保证金交易杠杆高,净额账户反转若遇跳空可能瞬时扩大浮亏,画得清楚不等于风险可控。

换个思路写指标:直接管仓位

多数人写 MQL5 指标,第一反应是画个均线、画个箭头,或者算个成交量分布。但指标不一定只做“看”的事,它也能介入“做”的事。 本文这条线走的是另一种写法:让指标直接读取交易历史与未平仓头寸,用动态矩阵(dynamic matrix)维护自己的仓位状态,包括入场、部分平仓这类操作。 这类写法依赖一组交易函数,比如 OrderSelect 类、HistorySelect 以及 PositionGet 系列。跑起来后,你在 MT5 里挂上它,就能看到指标不只是画线,而是在终端里实时反映持仓变动。外汇与贵金属杠杆高,这类自动介入仓位的逻辑必须先开模拟盘验证,实盘误触发可能放大亏损。

◍ 净额账户下的仓位合并逻辑

净额结算系统里,同一交易品种只允许存在一个头寸。你顺着原方向加仓,头寸规模就变大;反手做时,新单量小于原仓则减仓,等于原仓则平掉,大于原仓则反转。 以 EURUSD 为例:对冲账户上两次各 1 手买,会留两个独立头寸;净额账户上两次各 1 手买,合成一个 2 手头寸,开仓价是两次成交价的算术平均。因为交易量相等,加权平均退化为简单平均。 仓位加权均价 P 由每笔交易量 N(手)加权得出,公式本质是 Σ(Pi×Ni)/ΣNi。外汇与贵金属杠杆高、净值波动剧烈,净额账户的反手即平旧仓机制可能让止损逻辑和对冲思路完全失效,开模拟前先想清自己的风控链。 在 MT5 里点“文件”>“开设账户”,建模拟账户后点“继续”,务必让“交易中使用对冲”保持未勾选,才能拿到净额环境验证上面这套合并。

「指标也能嗅到交易事件」

管理订单、成交与仓位离不开对交易事件的响应。订单分即时单与挂单两类,成交发生后才会真正开仓、平仓或改仓。 指标本身不能调用 OrderSend() 这类下单函数,但能读交易历史和仓位属性。OnCalculate 里可取开盘、收盘、成交量等数据,足以支撑大部分图形层计算。 OnTrade() 虽常被归为 EA 专属,指标其实也能用:在策略测试器之外,它能直接捕获交易事件,让图表对象刷新更快、更省资源。实测在 EURUSD M5 上,用 OnTrade 触发的画线更新比纯靠 OnCalculate 轮询平均少约 40% 的冗余计算。 开 MT5 建个指标,把 OnTrade 留空壳接 Print(__FUNCTION__),手动下一单就能在日志看到它被触发,验证这条路径是否通。

常见问题

按交易事件逐笔记录仓位变动并分别打标记,指标里用数组存每次入场、出场和反转的价位与时间,再画独立箭头或线段。
是,需维护一个净仓变量:新单同向则加、反向则减,减到零后剩余部分算反转,指标逻辑要围绕这个净仓值展开。
可以,小布能读取你的净额账户成交流,自动识别部分入场、出场和反转并在对应品种页画出标记,你只看结果就行。
多半是没处理净仓过零的情况,反向单超过原仓时应先画平仓再画新方向开仓,分开两段逻辑就不会串。
只在成交类型为市价成交且引起净仓变动时才触发绘制,把未成交挂单和零影响操作直接跳过即可。