第十八章 做市策略归因分析:PnL分解、风险因子归因、策略收益来源分析、绩效归因报告

做市策略跑了一段时间,赚了还是亏了?

这个问题看似简单,其实没那么好回答。我见过不少团队,看PnL报表只盯着总盈亏数字,赚了觉得策略牛,亏了觉得市场烂。说实话,这种认知水平,离真正的量化做市还差得远。

归因分析,就是要把你的PnL「拆开来看」。每一分钱是怎么来的,每一笔亏损是谁造成的,都要清清楚楚。我个人习惯,每周五下午雷打不动做一次归因分析,雷打不动。

核心观点:归因分析不是为了「解释过去」,而是为了「优化未来」。你只有知道钱从哪来,才知道该往哪使劲。

18.1 PnL分解:把利润拆成几块

做市策略的PnL,我一般拆成四块:

  • 价差收益(Spread PnL)——吃买卖价差赚的钱
  • 库存收益(Inventory PnL)——持仓方向性波动带来的盈亏
  • 手续费返还(Rebate PnL)——交易所给的maker返佣
  • 滑点损失(Slippage PnL)——挂单被吃、撤单重挂造成的成本

举个例子,你挂单在买一卖一,赚了1个tick的价差。但中间行情涨了,你的库存多头浮盈了2个tick。这时候总PnL是+3个tick,但你不能说「策略赚了3个tick」——价差只贡献了1个,库存贡献了2个。这两者的风险性质完全不同。

我在项目中遇到过一种情况:某团队策略回测年化30%,实盘却只有8%。一拆才发现,回测里大部分利润来自「库存收益」,也就是方向性赌对了。但实盘里方向判断不准,库存收益变成了亏损,全靠价差和返佣在撑着。说白了,回测的「假利润」全被归因分析给揪出来了。

我的习惯:每天收盘后,把PnL按这四类拆开,画成堆叠柱状图。一眼就能看出策略到底靠什么赚钱。

18.2 风险因子归因:谁在拖后腿

PnL拆完了,下一步是看风险因子。做市策略暴露在哪些风险里?

我常用的风险因子模型是这样的:

# 风险因子归因示例(伪代码)
risk_factors = {
    'delta': 0.0,      # 方向性风险
    'gamma': 0.0,      # 曲率风险
    'vega': 0.0,       # 波动率风险
    'theta': 0.0,      # 时间衰减
    'rho': 0.0,        # 利率风险(期权做市常用)
    'skew': 0.0,       # 偏斜风险
    'correlation': 0.0 # 相关性风险(多资产做市)
}

# 计算每个因子的PnL贡献
for factor in risk_factors:
    factor_pnl = factor_exposure * factor_return
    print(f"{factor}: {factor_pnl:.2f}")

为什么要做这个?因为不同的风险因子,对冲成本不一样,管理难度也不一样。

举个例子,delta风险你可以用期货对冲,成本很低。但gamma和vega风险,对冲起来就贵多了。如果你发现策略的PnL主要来自「卖gamma收租」,那就要小心了——市场一波动,gamma亏损可能吃掉你几个月的利润。

我曾经见过一个期权做市团队,连续三个月盈利,归因一看,vega敞口贡献了60%的利润。说白了就是在赌波动率会跌。结果第四季度波动率飙升,一周亏光了三个月的利润。这就是风险因子归因没做透的后果。

避坑指南:不要只看「总风险敞口」,要看「每个因子的PnL贡献是否稳定」。如果一个因子的贡献占比超过40%,且波动很大,那你的策略其实是在赌这个因子。

18.3 策略收益来源分析:哪些交易在赚钱

风险因子归因是从「风险维度」看,策略收益来源分析是从「交易维度」看。

我一般按以下几个维度切分:

  • 按交易对/品种——哪个品种贡献最大?哪个在拖后腿?
  • 按交易时段——开盘、盘中、收盘,哪个时段赚钱效率高?
  • 按订单类型——被动挂单(maker)赚得多,还是主动吃单(taker)赚得多?
  • 按市场状态——趋势行情、震荡行情、高波动行情,哪种行情下策略表现好?

这里有个关键点:收益来源的「稳定性」比「绝对值」更重要

你想想看,如果一个策略80%的利润来自「开盘前15分钟」,那这个策略的容量和可持续性就值得怀疑。一旦市场微观结构变了,或者有更多玩家涌入这个时段,利润可能瞬间消失。

我习惯用夏普比率来评估每个收益来源的「质量」:

# 按交易时段计算夏普比率
for session in ['open', 'mid', 'close']:
    pnl_series = get_pnl_by_session(session)
    sharpe = pnl_series.mean() / pnl_series.std() * sqrt(252)
    print(f"{session} 夏普: {sharpe:.2f}")

夏普高的时段,说明收益稳定,值得加大投入。夏普低的时段,说明收益波动大,可能只是运气好。

一个小技巧:把每个收益来源的「累计PnL曲线」画出来。如果曲线是「稳稳向上」的,说明这个来源靠谱。如果是「大起大落」的,说明这个来源有运气成分。

18.4 绩效归因报告:给老板看的,也是给自己看的

归因分析的最终产出,是一份绩效归因报告。这份报告既要给老板看,也要给自己看。

给老板看的版本,要简洁、直观、有结论。我一般用一张表格加一张图搞定:

指标 本周 本月 本年 说明
总PnL +125,000 +480,000 +2,100,000 扣除所有成本后
价差收益 +80,000 +310,000 +1,400,000 占比66.7%
库存收益 +20,000 +90,000 +350,000 占比16.7%
返佣收益 +30,000 +110,000 +480,000 占比22.9%
滑点损失 -5,000 -30,000 -130,000 占比-6.2%
夏普比率 3.2 2.8 2.5 年化
最大回撤 -1.2% -2.1% -3.5% 日内回撤

给自己看的版本,要更细、更深入。我一般会额外加几个维度:

  • 每个品种的盈亏分布——有没有某个品种一直在亏钱?
  • 每个交易员的贡献——如果是多交易员团队,谁在赚钱谁在亏?
  • 策略参数敏感性——如果调整某个参数,PnL会怎么变?
  • 市场状态切换时的表现——从震荡切换到趋势时,策略是否适应?

嗯,这里要注意:归因报告不是「一次性」的工作。我建议每周至少做一次,每次花30分钟。时间长了,你会对策略的「脾性」了如指掌。

我的经验:归因分析做得越细,你对策略的掌控力就越强。很多策略「突然失效」,其实不是突然的——归因报告里早就有了预警信号,只是你没看而已。

18.5 知识体系总览

下面这张图,是我对做市策略归因分析的整体理解。你可以把它当作一个「检查清单」:

做市策略归因分析框架 PnL分解 • 价差收益 (Spread PnL) • 库存收益 (Inventory PnL) • 手续费返还 (Rebate PnL) • 滑点损失 (Slippage PnL) 风险因子归因 • Delta / Gamma / Vega • Theta / Rho • Skew / Correlation • 每个因子的PnL贡献 策略收益来源分析 • 按交易对/品种 • 按交易时段 • 按订单类型 (Maker/Taker) • 按市场状态 绩效归因报告 • 总PnL / 夏普比率 / 回撤 • 各品种盈亏分布 • 策略参数敏感性 • 市场状态切换表现 目标:优化未来,而非解释过去

这张图把归因分析的四个维度串在了一起。你从PnL分解入手,然后看风险因子,再深入分析收益来源,最后汇总成报告。每一步都有明确的目标和产出。

说实话,归因分析这件事,做一次不难,难的是坚持做。我见过太多团队,刚开始热情高涨,做了两周就嫌麻烦不做了。结果呢?策略亏了都不知道亏在哪。

嗯,最后说一句:归因分析不是「事后诸葛亮」,而是「事前预防针」。你做得越勤快,策略出问题的概率就越低。


无相订单流研究社 微信Lucian808555