在 MQL5 中创建做市商算法(基础篇)
📘

在 MQL5 中创建做市商算法(基础篇)

第 1/3 篇

◍ 在 MT5 里搭一个做市商式报价引擎

想在 MetaTrader 5 里模拟做市商行为,核心不是预测方向,而是持续双向挂单并管理库存风险。MQL5 的 CTrade 类配合 SymbolInfoTick 拿到的实时买卖价,足以支撑一套轻量做市逻辑。 下面这段骨架代码在 OnTick 里每跳刷新一次,对当前品种同时挂出距市价 10 点的买卖限价单;若已有同方向挂单则跳过,避免重复堆积。注意点差和库存方向——外汇与贵金属杠杆高、滑点突发行情多,实盘跑这套前务必在策略测试器用真实点差回测。 真实环境中点差会吃掉大部分薄利。以 EURUSD 为例,若 broker 平均点差 1.2 点、挂单距市价 10 点,理论每轮捕获 8.8 点空间,但报价跳空时未成交挂单可能直接穿价,概率上更依赖成交率而非单笔厚度。

MQL5 / C++
class="type">void OnTick()
{
   class="type">MqlTick tick;
   SymbolInfoTick(_Symbol, tick);  class=class="str">"cmt">// 取当前品种实时tick买卖价
   class="type">class="kw">double ask = tick.ask;          class=class="str">"cmt">// 卖价(做市商卖出价)
   class="type">class="kw">double bid = tick.bid;          class=class="str">"cmt">// 买价(做市商买入价)
   class="type">class="kw">double offset = class="num">10 * _Point;    class=class="str">"cmt">// 挂单偏移量:10点
   class=class="str">"cmt">// 若买侧无限价单则挂买
   if(PositionSelect(_Symbol)==false && OrdersTotal()==class="num">0)
   {
      trade.BuyLimit(class="num">0.1, bid - offset, _Symbol);  class=class="str">"cmt">// 低于买价挂买单
      trade.SellLimit(class="num">0.1, ask + offset, _Symbol); class=class="str">"cmt">// 高于卖价挂卖单
   }
}

流动性与滑点:大资金的真实阻力

金融市场的流动性,本质是挂在盘面上的订单与头寸所构成的资金“饱和度”。饱和度越高,交易者越能在大体量买卖中少受滑点侵蚀;反之,轻仓几百美元几乎无感,而数亿美元头寸想同时进出就异常艰难。 滑点才是大玩家的头号恐惧:单子以A价挂出、以B价成交,价差直接吞掉利润。原文点明,除非是三流加密货币那种零深度的市场,小资金通常碰不到流动性问题,但面对亿级仓位,开平都难,根子就在流动性。 做市商撑起了这块饱和度。它们的活儿就是维持双边报价、压住跳空,让买卖总能碰到合适价格。没了做市商,单边暴拉、报价缺口频出就是常态。外汇与贵金属自带高杠杆高风险,流动性断裂时滑点可能瞬间放大亏损,开MT5看tick图里的缺口频率就能直观验证。

「做市商不是傀儡大师」

很多交易者把做市商想象成幕后操纵者,觉得他专门把价格打到止损位、诱导散户下错单。真实机制没那么戏剧化:由于价差、佣金和库存费的存在,市场里的大部分散户自己就会持续亏损,做市商根本不必动手。 按与交易所的协议,做市商的核心义务只有一条——对买方挂出买价、对卖方挂出卖价,并在流动性缺失时补上市场深度的空档。把价格推向某个方向并不是他的任务。 可以验证的现象是:在那些做市商无利可图的市场,比如许多美国细价股,依然能频繁看到价格跳空、报价断档、双向挤压和瞬间大幅跳水。反推可知,有正常做市商的外汇或贵金属盘面,这类极端断层会被显著平滑,但杠杆下的高风险依旧存在,散户亏损倾向主要来自成本和波动而非所谓操纵。

◍ DEX 的 AMM 机制与隐藏陷阱

把做市商换成智能合约,就衍生出了去中心化交易所(DEX)依赖的 AMM(自动做市商)模式。它用流动性池撮合买卖,价格和成交量全由算法定,理论上让买卖双方直接对接而不必经过中介。 不过 AMM 并非无代价。所有 DEX 都存在显著的价格滑点——当单笔交易量放大时,成交价会明显偏离预期,大单换手很可能吃掉相当一部分本金。 另一个被低估的风险是操纵门槛极低。代币发行方可以抽走池内流动性、把整个资金池套现离场,这类事件在 DEX 上并不少见。加密资产本身波动剧烈、监管模糊,参与流动性提供或交易前应先在链上浏览器核对池子锁仓与合约权限。

做市商怎么掐掉早期控盘

价格刚被欺诈性资金往上推的时候,做市商往往不等趋势成型就反手压单。他们在萌芽阶段挂出大量限价卖单,把试图抬价的一方需求直接吃掉,拉高出货的新手常因此亏在流动性突然消失上。 但如果控盘方计划够密、市场市价单持续涌入,真实买盘会把价格推过做市商的挂单区。此时做市商短期失去价格压制能力,倾向暂时退场让价格自由走一段,等失衡修复再回来。 外汇与贵金属属高杠杆高风险品种,这类博弈随时可能因宏观数据反转,任何'做市商离场'信号都只是概率性现象,开MT5看盘时建议用分时成交密度验证,而非直接押注。

「从价差异动读做市商离场」

做市商与交易所的协议里通常写明:节假日、异常波动期、重要新闻发布时,必须关停算法撤出市场,核心动机是保住资本而非让利。 最直接的观察窗口是点差。即便在 ECN 环境,重要全球新闻出炉瞬间点差也会瞬间拉宽——平时那点窄价差,靠的正是做市商持续挂单填流动性。 他们一走,市场就露原形:点差飙宽、滑点放大、瞬时插针与急拉频现。外汇与贵金属属高风险品种,这类时段报价失真是概率显著升高的常态,开 MT5 把新闻日历和分时点差叠在一起就能验证。

常见问题

先做一个最简双边报价脚本:固定点差挂买卖单,用虚拟库存记录敞口,跑模拟盘观察成交与滑点,再逐步加流动性逻辑。
大概率不是坑,是流动性薄层被吃穿。看盘口深度和近期滑点统计,避开数据发布前后下大单,或拆单进场降低冲击。
可以。小布盯盘会读价差异动和库存变化,标注做市商离场或早期控盘信号,你打开对应品种页就能直接看诊断。
AMM 有无常损失和预言机滞后陷阱,行情急拉时池子价格慢半拍,套利者会先吃掉你的便宜单,别只看表面年化。
盯买卖价差突然放大、挂单厚度骤减但价格没动,配合成交量萎缩,大概率做市商在减仓离场,后续波动可能放大。