23、监管与合规:MiFID II最佳执行要求、SEC Reg NMS、做市商报告义务、市场操纵防范

做市商这行,技术再牛,策略再赚钱,一旦踩了监管的红线,那就全完了。我见过不少团队,代码写得漂亮,回测曲线完美,结果上线没几天就被监管约谈。说白了,合规不是束缚,是生存底线。

今天咱们聊聊做市商必须面对的四大监管板块:MiFID II的最佳执行、SEC的Reg NMS、报告义务,以及市场操纵防范。嗯,这里面坑不少,我一个个说。

核心观点:监管不是阻碍,而是做市商长期盈利的护城河。合规做得好,反而能降低交易成本、提升信誉。

一、MiFID II:最佳执行要求

MiFID II是欧盟的金融工具市场指令,2018年生效。它最核心的一条就是「最佳执行」——经纪商必须为客户订单争取最优结果。

什么叫最优结果?不只是价格,还包括速度、执行概率、结算成本、市场影响。我当年在伦敦做项目时,客户要求我们证明每个订单都执行在「最佳」水平。说实话,这很难量化。

1.1 最佳执行的五大维度

维度 说明 我的经验
价格 成交价 vs 市场最优价 别只看最优价,要考虑滑点
成本 手续费、税费、隐性成本 隐性成本往往比显性高3-5倍
速度 订单到成交的延迟 微秒级差异就能决定盈亏
执行概率 订单被完全成交的可能性 部分成交比不成交更麻烦
市场影响 订单对价格的冲击 大单要拆,否则自己打自己

1.2 如何证明最佳执行?

MiFID II要求做市商保留所有订单的执行数据,至少保存5年。你需要能回答:为什么这个订单去了A交易所而不是B?为什么用了这个算法而不是那个?

我曾经帮一家做市商搭建执行分析系统,核心逻辑就是对比每个订单的实际执行价格与「基准价格」。基准价格可以是VWAP、TWAP,或者当时的NBBO中间价。

# 一个简单的执行质量评估函数
def evaluate_execution(order_price, benchmark_price, volume):
    """
    计算执行偏差
    order_price: 实际成交均价
    benchmark_price: 基准价格(如NBBO中间价)
    volume: 成交量
    """
    deviation = (order_price - benchmark_price) / benchmark_price * 10000  # 以bp为单位
    cost = deviation * volume
    
    if deviation < 0.5:
        return "优秀", cost
    elif deviation < 1.0:
        return "合格", cost
    else:
        return "需改进", cost

避坑指南:我曾经遇到一个团队,只记录成交价不记录基准价。监管来查时,他们拿不出对比数据,被罚了50万欧元。记住:基准价必须实时记录,事后补不了。

二、SEC Reg NMS:全美市场体系规则

Reg NMS是美国证券交易委员会2005年推出的规则,核心是保护订单不被「偷跑」。它要求交易所必须执行「最优价格」——也就是NBBO(全国最优买卖价)。

你想想看,如果纽约的交易所挂出100.01的卖单,芝加哥的交易所挂100.02,那你的订单必须去纽约成交。这就是Reg NMS的「订单保护规则」。

2.1 Reg NMS的三大核心

  • 订单保护规则(Rule 611):禁止交易所在有更好价格时执行较差价格。说白了,不能「挑单」。
  • 接入规则(Rule 610):交易所必须公平接入,不能歧视。
  • 市场数据规则(Rule 603):市场数据必须实时、公平分发。

做市商最头疼的是Rule 611。因为你要同时监控多个交易所的报价,确保自己的订单不会「撞上」更优价格。我见过一个高频做市商,因为没处理好跨交易所的NBBO更新,导致大量订单被「trade-through」,被SEC罚了200万美元。

2.2 如何合规处理NBBO?

你需要一个实时NBBO计算引擎。每个交易所的报价进来后,取最优买价和最优卖价,然后跨交易所比较。注意:要考虑延迟,不同交易所的报价到达时间不同。

# NBBO计算示例(简化版)
def calculate_nbbo(exchange_quotes):
    """
    exchange_quotes: dict, key=交易所, value=(bid, ask)
    返回: (best_bid, best_ask, best_bid_exchange, best_ask_exchange)
    """
    best_bid = -float('inf')
    best_ask = float('inf')
    best_bid_ex = None
    best_ask_ex = None
    
    for ex, (bid, ask) in exchange_quotes.items():
        if bid > best_bid:
            best_bid = bid
            best_bid_ex = ex
        if ask < best_ask:
            best_ask = ask
            best_ask_ex = ex
    
    return best_bid, best_ask, best_bid_ex, best_ask_ex

注意:NBBO计算必须考虑交易所的「保护带」。比如NYSE的报价更新后,其他交易所有一定时间(通常1秒)来响应。这个时间窗口内,即使有更优价格,也不算违规。

三、做市商报告义务

做市商不是想怎么做就怎么做。你得向监管机构报告大量数据。MiFID II要求报告交易数据、订单数据、执行质量数据。SEC要求报告Reg SHO(卖空规则)数据、大额交易数据。

我个人习惯把报告义务分成三类:

  1. 交易报告:每笔交易的细节,包括时间、价格、数量、对手方。
  2. 订单报告:挂单、撤单、修改的记录。监管要看你有没有「虚假挂单」。
  3. 风险报告:持仓、敞口、保证金使用情况。

我记得有个做市商朋友,因为报告格式不对,被监管要求重新提交过去两年的数据。那工作量,简直噩梦。所以,报告系统一定要自动化,而且要支持多种格式(XML、CSV、FIX等)。

# 交易报告生成示例
def generate_trade_report(trades):
    """
    trades: list of dict, 每笔交易包含:
    - trade_id, symbol, side, price, quantity, timestamp, counterparty
    返回: 符合MiFID II格式的XML字符串
    """
    import xml.etree.ElementTree as ET
    
    root = ET.Element("TradeReport")
    root.set("xmlns", "http://www.esma.europa.eu/MiFIDII")
    
    for trade in trades:
        trade_elem = ET.SubElement(root, "Trade")
        ET.SubElement(trade_elem, "TradeID").text = trade['trade_id']
        ET.SubElement(trade_elem, "Instrument").text = trade['symbol']
        ET.SubElement(trade_elem, "Side").text = trade['side']
        ET.SubElement(trade_elem, "Price").text = str(trade['price'])
        ET.SubElement(trade_elem, "Quantity").text = str(trade['quantity'])
        ET.SubElement(trade_elem, "Timestamp").text = trade['timestamp']
        ET.SubElement(trade_elem, "Counterparty").text = trade['counterparty']
    
    return ET.tostring(root, encoding='unicode')

我的建议:报告系统最好用事件驱动架构。每笔交易、每个订单变更都触发一个事件,自动生成报告。别等月底再补,那时候数据早乱了。

四、市场操纵防范

这是做市商最敏感的领域。监管对市场操纵零容忍,尤其是幌骗(Spoofing)和分层(Layering)。

4.1 幌骗(Spoofing)

幌骗就是挂出大单但不打算成交,目的是诱导其他交易者跟风,然后自己反向操作。比如,你在卖一挂1000手,别人以为要跌,纷纷卖出,你趁机低价买入,然后撤单。

2015年,美国商品期货交易委员会(CFTC)对一家高频交易公司罚款2500万美元,就是因为幌骗。我当年在芝加哥做项目时,亲眼见过一个交易员因为幌骗被FBI带走。嗯,那场面,终身难忘。

4.2 分层(Layering)

分层是幌骗的升级版。交易员在多个价格层级挂单,制造虚假的买卖压力。比如,在买一到买五各挂100手,看起来买盘很强,实际上都是假的。

监管怎么查?看撤单率。如果一个账户的撤单率超过90%,而且挂单时间极短(毫秒级),那基本就是幌骗或分层。

4.3 如何防范?

做市商必须建立内部监控系统。我建议从三个维度入手:

  • 撤单率监控:单个策略的撤单率不能超过阈值(比如70%)。
  • 挂单时间监控:挂单后短时间内撤单的比例。
  • 价格影响监控:挂单是否显著影响了市场价格。
# 幌骗检测示例
def detect_spoofing(order_history, threshold=0.7):
    """
    order_history: list of dict, 包含order_id, action, timestamp
    threshold: 撤单率阈值
    返回: 可疑订单列表
    """
    from collections import defaultdict
    
    order_stats = defaultdict(lambda: {'placed': 0, 'cancelled': 0})
    
    for order in order_history:
        oid = order['order_id']
        if order['action'] == 'PLACE':
            order_stats[oid]['placed'] += 1
        elif order['action'] == 'CANCEL':
            order_stats[oid]['cancelled'] += 1
    
    suspicious = []
    for oid, stats in order_stats.items():
        if stats['placed'] > 0:
            cancel_rate = stats['cancelled'] / stats['placed']
            if cancel_rate > threshold:
                suspicious.append(oid)
    
    return suspicious

警告:别以为只有「恶意」才算违规。有些做市策略无意中产生了高撤单率,同样会被监管盯上。我曾经有个客户,他的做市策略是「闪电挂单」,挂单后10毫秒内撤单,结果被监管认定为幌骗。后来我们改成了「挂单至少保留500毫秒」,才合规。

五、知识体系框架

下面这张图总结了本章的核心逻辑。你可以看到,监管与合规不是孤立的,而是贯穿做市商整个业务流程。

做市商监管与合规知识体系 做市商合规 MiFID II 最佳执行 SEC Reg NMS 报告义务 市场操纵防范 价格/成本/速度 执行概率/影响 订单保护规则 接入/数据规则 交易/订单报告 风险报告 幌骗检测 分层检测 合规 = 技术 + 流程 + 文化

你看,合规不是单一的技术问题,而是技术、流程、文化的结合。技术层面,你需要实时监控、自动报告、异常检测。流程层面,你需要明确的合规手册、定期审计。文化层面,全员都要有合规意识。

最后说一句:别把合规当成本,把它当投资。合规做得好,你的做市策略才能长期稳定运行。否则,一次罚款就能让你回到解放前。


无相订单流研究社 微信Lucian808555