一、订单类型基础:限价单与市价单

做量化交易这些年,我见过太多新手在订单类型上栽跟头。说实话,这玩意儿看着简单,但真到了实盘,一个不小心就是几万块的学费。今天咱们就把限价单和市价单这俩最基础的订单类型彻底聊透。

1.1 什么是限价单?

限价单,说白了就是你给交易所下的一道死命令:「低于这个价我不卖,高于这个价我不买」。你指定一个价格,只有市场达到或优于这个价格时,订单才会成交。

核心特征:价格确定,成交不确定。

举个例子。假设BTC当前价格30000美元,你想在29500买入。你下一个限价买单,价格设29500。那么只有市场价格跌到29500或以下时,你的单子才会成交。如果价格一直没到,那这单就一直挂着。

限价单的两种常见类型:

  • 限价买单:指定一个最高买入价,只接受不高于此价格的成交
  • 限价卖单:指定一个最低卖出价,只接受不低于此价格的成交
我的经验:我个人习惯在流动性好的品种上用限价单。比如交易ETH/USDT,深度足够,限价单基本秒成交,还能省下不少滑点成本。

1.2 什么是市价单?

市价单就简单粗暴了——「不管什么价,给我立刻成交」。你只关心数量,不关心价格。交易所会以当前市场上最优的可成交价格帮你吃掉对手盘。

核心特征:成交确定,价格不确定。

还是那个例子。BTC当前30000美元,你想立刻买入1个。你下市价买单,系统会从卖一价开始吃,卖一不够就吃卖二,直到买够1个为止。最终成交价可能30001、30002,取决于当时的盘口深度。

市价单的常见变种:

  • 市价买单:以当前最优卖价成交,直到买够数量
  • 市价卖单:以当前最优买价成交,直到卖够数量
注意:我曾经在流动性差的币种上吃过亏。一个市价单下去,直接打穿了好几个价位,成交均价比我预期的差了0.5%。嗯,从那以后,流动性不足的品种我坚决不用市价单。

1.3 核心区别对比

咱们用一张表把区别说清楚:

对比维度 限价单 市价单
价格控制 完全控制,指定价格 无控制,接受当前市价
成交确定性 不确定,可能不成交 确定,立即成交
滑点风险 无滑点 有滑点,尤其在流动性差时
交易成本 通常为Maker费用(较低) 通常为Taker费用(较高)
适用场景 追求最优价格,不急于成交 追求快速成交,价格次要

你想想看,这两者的本质区别其实就是「你要价格确定性,还是要成交确定性」。鱼和熊掌不可兼得,这就是交易中最基本的权衡。

1.4 适用场景对比

光讲理论没意思,咱们直接上实战场景。我根据自己这些年的经验,把典型场景列出来:

限价单的典型场景:

  1. 挂单做市:你想在关键支撑位挂买单,在阻力位挂卖单。比如ETH在1800有强支撑,你挂个1799的限价买单,等着接货。
  2. 分批建仓:大资金进场不想吃滑点。我习惯把大单拆成几十个小限价单,分散在不同价位,这样平均成本更优。
  3. 套利交易:价差套利需要精确控制入场价,限价单是标配。
  4. 降低手续费:很多交易所对Maker(挂单方)有费率优惠,限价单可以帮你省手续费。

市价单的典型场景:

  1. 紧急止损:行情突然反转,你必须在第一时间离场。这时候别犹豫,直接市价单。我曾经因为犹豫用限价单止损,结果价格直接穿过去了,损失扩大了一倍。
  2. 追涨杀跌:趋势行情启动,你怕踏空。市价单能保证你第一时间上车。
  3. 流动性好的品种:比如交易BTC/USDT这种深度极好的品种,市价单的滑点几乎可以忽略不计。
  4. 小资金快速进出:资金量小,滑点影响不大,追求速度更重要。
避坑指南:我曾经在某个山寨币上同时挂了限价单和市价单做对比测试。结果限价单挂了2小时没成交,市价单秒成交但滑点了0.8%。这告诉我们一个道理:没有绝对的好坏,只有合不合适的场景。

1.5 知识体系结构图

下面这张图把限价单和市价单的核心逻辑梳理清楚了:

订单类型核心知识体系 限价单 (Limit Order) 市价单 (Market Order) 核心:价格确定,成交不确定 核心:成交确定,价格不确定 无滑点风险 Maker费率低 可能不成交 适合大资金 有滑点风险 Taker费率高 立即成交 适合小资金 适用:挂单做市、分批建仓、套利 适用:紧急止损、追涨、流动性好 核心权衡:价格确定性 vs 成交确定性 没有最优,只有最合适

1.6 实战代码示例

光说不练假把式。下面我用Python演示一下限价单和市价单的核心逻辑:

# 模拟限价单与市价单执行逻辑
# 作者:蓝海资料掘金营

class OrderExecutor:
    """订单执行模拟器"""
    
    def __init__(self, order_book):
        # order_book: 订单簿,格式为 {'bids': [[price, qty], ...], 'asks': [[price, qty], ...]}
        self.order_book = order_book
    
    def limit_buy(self, price, quantity):
        """限价买单:只在不高于指定价格时成交"""
        filled = 0
        total_cost = 0
        
        for ask_price, ask_qty in self.order_book['asks']:
            if ask_price > price:
                break  # 价格超出限价,停止成交
            trade_qty = min(ask_qty, quantity - filled)
            filled += trade_qty
            total_cost += trade_qty * ask_price
            if filled >= quantity:
                break
        
        avg_price = total_cost / filled if filled > 0 else 0
        return {
            'filled': filled,
            'avg_price': avg_price,
            'status': 'filled' if filled >= quantity else 'partial'
        }
    
    def market_buy(self, quantity):
        """市价买单:以当前最优价立即成交"""
        filled = 0
        total_cost = 0
        
        for ask_price, ask_qty in self.order_book['asks']:
            trade_qty = min(ask_qty, quantity - filled)
            filled += trade_qty
            total_cost += trade_qty * ask_price
            if filled >= quantity:
                break
        
        avg_price = total_cost / filled if filled > 0 else 0
        return {
            'filled': filled,
            'avg_price': avg_price,
            'slippage': avg_price - self.order_book['asks'][0][0]  # 滑点计算
        }

# 模拟订单簿
order_book = {
    'bids': [[29900, 5], [29850, 10], [29800, 15]],
    'asks': [[30000, 3], [30010, 5], [30020, 8], [30050, 10]]
}

executor = OrderExecutor(order_book)

# 测试限价买单
print("=== 限价买单测试 ===")
result = executor.limit_buy(price=30010, quantity=10)
print(f"成交数量: {result['filled']}, 均价: {result['avg_price']:.2f}")

# 测试市价买单
print("\n=== 市价买单测试 ===")
result = executor.market_buy(quantity=10)
print(f"成交数量: {result['filled']}, 均价: {result['avg_price']:.2f}")
print(f"滑点: {result['slippage']:.2f} 美元")
我的建议:这段代码虽然简单,但核心逻辑都在了。你可以在自己的回测框架里加上这个模块,看看不同市场环境下两种订单的表现差异。我当初就是这么一步步优化策略的。

1.7 本章小结

限价单和市价单,说白了就是交易中最基本的两个工具。一个帮你控制价格,一个帮你保证成交。没有谁比谁高级,关键看你怎么用。

我个人这些年总结下来就一句话:想省手续费、控价格,用限价单;想快进快出、保成交,用市价单。 别纠结,根据场景选就对了。

记住:交易的核心不是预测市场,而是管理风险。订单类型的选择,就是你风险管理的第一步。

公众号:蓝海资料掘金营,微信deep3321