金融市场基础:多资产类别特性与市场微观结构

各位同学,今天我们来聊聊金融市场的基础设施。说实话,很多做量化交易的人,一上来就撸代码、调参数,却忽略了市场本身的结构。我见过太多人,策略回测跑得飞起,一上实盘就亏得底裤都不剩——原因很简单,他们不懂市场微观结构。

我个人习惯,在开始任何策略设计之前,先花一周时间把交易标的的「脾气」摸清楚。股票、债券、商品、外汇,这四类资产就像四个性格迥异的人,你得知道跟谁打交道。

多资产类别的核心特性

先说说股票。股票市场流动性最好,但波动也大。我记得2015年股灾那会儿,千股跌停,你挂个跌停价都卖不出去——流动性瞬间枯竭。做强化学习策略时,股票的动作空间通常最大,因为标的数量多,但要注意,很多小盘股一天都没几笔成交,你的智能体可能根本学不到有效信号。

债券呢?债券市场是机构玩家的天下。国债流动性不错,但信用债就难说了。我做过一个债券组合策略,发现一个坑:债券的报价往往不连续,很多债券一天就几笔成交。你想想看,强化学习需要大量交易数据来训练,债券市场的数据稀疏性是个大问题。

商品期货,这个我比较熟。商品有明确的交割日期,近月合约和远月合约的价差会随着时间收敛。做跨期套利时,我习惯用主力合约,因为流动性最好。但要注意,商品有涨跌停板,而且夜盘波动特别大——有一次我盯原油夜盘,价格瞬间跳了3%,滑点直接吃掉了我一周的利润。

外汇市场,24小时交易,流动性全球最大。但外汇的报价是点差制,而且不同货币对的点差差异很大。EUR/USD点差可能只有0.1个点,但一些新兴市场货币对,点差能到5个点以上。做外汇策略时,交易成本的控制比方向判断更重要。

核心要点:不同资产类别的流动性、波动性、交易时间、数据频率差异巨大。强化学习策略必须针对资产特性做适配,不能一套代码打天下。

市场微观结构与订单簿

订单簿,说白了就是市场上所有买单和卖单的排队情况。限价单挂在上面等着成交,市价单直接吃掉对手盘。我刚开始做高频策略时,以为订单簿就是简单的价格-数量表格,后来才发现,里面的门道多着呢。

订单簿的深度,决定了你能交易多大的量而不影响价格。举个例子,某股票买一价10元挂了1000手,卖一价10.01元挂了800手。你想买500手,市价单直接吃掉卖一的800手,成交价10.01元。但如果你想买2000手,就得把卖一到卖五全部吃掉,成交均价可能到了10.05元——这就是市场冲击成本。

我个人习惯,在策略里加入一个「订单簿模拟器」。每次智能体决定交易时,先模拟一下当前订单簿的深度,估算实际成交价格。这样做的好处是,策略不会在回测里看起来很完美,一实盘就崩。

实战技巧:做强化学习时,可以把订单簿的「买卖价差」和「深度斜率」作为状态特征输入。这两个特征能很好地反映市场当前的流动性和交易成本。

还有一个概念叫「订单簿的恢复速度」。大单吃掉流动性后,新的限价单多久能补充进来?这决定了市场冲击的持续性。我记得有一次做股指期货,一个大单砸下去,订单簿空了整整3秒才恢复——这3秒里,任何后续交易都会产生巨大的滑点。

交易成本与滑点建模

交易成本,是量化策略的隐形杀手。很多人在回测里假设「按收盘价成交」,或者「按最优价成交」,结果实盘时发现,利润全被手续费和滑点吃掉了。

交易成本主要分三块:

  • 显性成本:佣金、印花税、过户费。这些是固定的,容易计算。
  • 隐性成本:买卖价差、市场冲击、延迟成本。这些才是大头。
  • 机会成本:因为没成交而错过的收益。这个最难量化。

滑点建模,我建议用「永久冲击」和「暂时冲击」两个模型。永久冲击是指你的交易改变了市场均衡价格,暂时冲击是指交易后价格会反弹回来。经典的Almgren-Chriss模型就是干这个的。

下面是一个简单的滑点成本估算函数,我在项目中经常用:

def estimate_slippage(order_size, order_book_depth, volatility):
    """
    估算市价单的滑点成本
    order_size: 订单数量(股/手)
    order_book_depth: 订单簿前5档的总深度
    volatility: 近期波动率(标准差)
    """
    # 市场冲击系数,经验值0.1-0.5
    impact_coeff = 0.25
    # 滑点 = 冲击系数 * (订单量/深度) * 波动率
    slippage = impact_coeff * (order_size / order_book_depth) * volatility
    return slippage

嗯,这里要注意:这个函数只适用于流动性较好的市场。如果订单簿深度为0,或者波动率异常高,结果会失真。我曾经在国债期货上用过这个模型,结果发现国债的订单簿深度经常突变,导致滑点估算偏差很大。

避坑指南:千万不要在回测里用「固定滑点」假设。不同时间、不同市场状态下的滑点差异巨大。我建议用历史订单簿数据做滑点回测,或者至少用动态滑点模型。

做强化学习时,交易成本必须作为奖励函数的一部分。我习惯把滑点成本直接扣减到收益率里,让智能体学会「什么时候该交易,什么时候该持有」。你会发现,加入滑点惩罚后,策略的交易频率会明显下降,但夏普比率反而提高了。

知识体系总览

下面这张图,是我整理的多资产交易基础框架。你可以看到,从资产特性到微观结构,再到成本建模,是一条完整的链路。做策略时,每一步都不能跳过。

多资产交易策略知识体系 股票 债券 商品 外汇 市场微观结构 订单簿深度 | 买卖价差 | 流动性恢复速度 | 市场冲击 交易成本与滑点建模 显性成本 | 隐性成本 | 永久冲击 | 暂时冲击 | Almgren-Chriss模型 强化学习策略设计(状态/动作/奖励)

你看,从资产特性到微观结构,再到成本建模,最后才是强化学习策略设计。这个顺序不能乱。我见过太多人跳过前两步,直接上强化学习,结果策略在模拟环境里跑得挺好,一到真实市场就失灵——因为模拟环境根本没考虑订单簿深度和滑点。

好了,这一章的内容就到这里。记住一句话:不了解市场结构,就别谈量化交易。下一章我们会深入强化学习的核心算法,到时候这些基础知识都会用上。