14、订单类型与风控:限价单风险、市价单风险、冰山订单风险、止损单风险

做市商每天要处理成千上万笔订单。每种订单类型,说白了都是一把双刃剑。用好了能赚钱,用不好就是灾难。我见过太多团队,因为对订单类型理解不够深,在风控上吃了大亏。

今天咱们就把四种核心订单类型的风险点,一个一个拆开来看。

14.1 限价单风险:看似安全,实则暗流涌动

限价单,就是指定一个价格,不到这个价不成交。很多新手觉得这是最安全的订单类型。其实不然。

核心风险点:

  • 未成交风险:价格没到,单子挂在那里,可能永远成交不了
  • 延迟成交风险:行情剧烈波动时,你的限价单可能很久才被吃掉
  • 逆向选择风险:你的限价单往往在行情不利时被成交

我个人习惯把限价单的风险分成两类:挂不进去出不掉

挂不进去,就是你的买单价设得太低,卖单价设得太高,结果行情一路狂奔,你全程踏空。做市商最怕这个——你本来应该在某个价位提供流动性,结果单子没挂上,市场深度出现缺口。

出不掉更可怕。我记得在2018年的一次极端行情中,某交易所的BTC限价单深度在几分钟内被抽干。很多做市商的限价单挂在中间价位,结果行情直接跳过,单子变成了「孤儿单」——既没成交,也撤不掉(因为网络拥堵)。

避坑指南:

我曾经在部署限价单策略时,只设了价格条件,没设时间条件。结果有个单子挂了整整72小时没成交,占用了大量保证金。后来我强制要求所有限价单必须带「超时自动撤单」逻辑,默认30秒。

14.2 市价单风险:速度的代价

市价单,按当前最优价立即成交。快是真快,贵也是真贵。

风险类型 具体表现 影响程度
滑点风险 实际成交价与预期价偏差过大
流动性消耗 大额市价单直接吃掉多层深度 中高
手续费成本 市价单通常比限价单手续费高

市价单最大的坑,就是滑点。你想想看,当你下了一个大额市价买单,系统会从卖一、卖二、卖三……一路吃上去。如果市场深度不够,成交均价可能比你预期的高出好几个档位。

我建议做市商在使用市价单时,必须设置滑点保护。比如:

# 滑点保护示例
def place_market_order(side, quantity, max_slippage_bps=5):
    """
    带滑点保护的市价单
    max_slippage_bps: 最大允许滑点,单位基点(1基点=0.01%)
    """
    current_price = get_market_price(side)
    max_price = current_price * (1 + max_slippage_bps / 10000)
    
    # 如果预期成交价超过max_price,则拒绝下单
    estimated_price = estimate_fill_price(side, quantity)
    if estimated_price > max_price:
        return {"status": "rejected", "reason": "slippage_exceeded"}
    
    return send_order(side, quantity, order_type="market")

特别注意:

市价单在流动性枯竭时,可能造成灾难性后果。2020年3月12日,ETH的市价单滑点一度超过30%。如果你的风控系统没有实时监控市场深度,这种行情下市价单就是自杀。

14.3 冰山订单风险:藏起来的危险

冰山订单,就是只显示一部分数量,剩下的藏在下面。做市商常用它来隐藏真实意图。

但冰山订单有个致命问题:暴露风险

为什么?因为专业的做市商和量化团队,可以通过分析订单簿的「恢复模式」来识别冰山订单。比如,一个订单被吃掉一部分后,很快又在同一价位出现相同数量的挂单——这基本就是冰山订单。

我在项目中遇到过这样的情况:我们部署了冰山订单策略,结果被对手方识别出来。他们故意在冰山订单上方挂小单,引诱我们不断补充流动性,然后一次性砸穿。那次我们亏了大概15个BTC。

冰山订单风控要点:

  • 随机化冰山参数:每次显示的量和总量不要是固定比例
  • 时间随机化:补充挂单的时间间隔不要固定
  • 价格偏移:冰山订单的挂单价可以小幅偏移,不要死盯一个价
  • 总量控制:单个冰山订单的总量不要超过市场深度的5%

14.4 止损单风险:双刃剑中的双刃剑

止损单,本意是控制亏损。但用不好,它会加速你的死亡。

止损单的核心风险就三个字:踩踏

当价格跌破某个关键位置,大量止损单同时触发,形成「瀑布效应」。价格越跌,止损单越多;止损单越多,价格越跌。这就是典型的正反馈循环。

我记得2021年5月19日,中国宣布打击加密货币挖矿。那天BTC从43000跌到30000,中间触发了无数止损单。很多做市商的止损单不仅没起到保护作用,反而让他们在最低点附近成交——比不止损亏得还多。

我的建议:

止损单不要用市价止损,要用限价止损。虽然限价止损可能无法成交,但至少能避免在最差的价格被吃掉。另外,止损单的触发价和委托价之间要留足够的缓冲区间。

# 限价止损示例
def stop_loss_with_limit(symbol, side, stop_price, limit_price, quantity):
    """
    限价止损单
    stop_price: 触发止损的价格
    limit_price: 触发后挂的限价单价格
    """
    # 监控价格
    current_price = get_current_price(symbol)
    
    if side == "sell" and current_price <= stop_price:
        # 触发止损,挂限价卖单
        return place_limit_order(symbol, "sell", limit_price, quantity)
    elif side == "buy" and current_price >= stop_price:
        # 触发止损,挂限价买单
        return place_limit_order(symbol, "buy", limit_price, quantity)
    
    return {"status": "monitoring"}

14.5 四种订单类型的风控矩阵

为了方便你快速对照,我整理了一个风控矩阵:

订单类型 主要风险 风控手段 监控指标
限价单 未成交、延迟成交、逆向选择 超时撤单、价格偏移、动态调整 挂单存活率、成交延迟
市价单 滑点、流动性消耗 滑点保护、最大金额限制 实际滑点、深度消耗比例
冰山订单 暴露风险、被狙击 参数随机化、总量控制 冰山识别率、补充频率
止损单 踩踏、瀑布效应 限价止损、缓冲区间 触发率、成交质量

14.6 核心知识体系

下面这张图,是我对本章知识体系的总结。你可以把它当作一个快速参考框架:

订单类型与风控核心体系 订单类型风控 限价单 未成交风险 延迟成交风险 逆向选择风险 市价单 滑点风险 流动性消耗 手续费成本 冰山订单 暴露风险 被狙击风险 参数固定风险 止损单 踩踏风险 瀑布效应 成交质量差 风控手段:滑点保护 | 超时撤单 | 参数随机化 | 限价止损

嗯,这张图把四种订单类型的风险点和对应的风控手段都串起来了。你可以把它打印出来贴在工位上。

最后提醒一句:

无论你用哪种订单类型,实时监控熔断机制都是底线。没有这两样东西,再好的策略都是空中楼阁。我见过太多团队,策略跑得漂亮,结果一次黑天鹅事件就全亏回去了。


交易系统化学习资料 微信Strategy888888