第二十七章:交易成本分析

交易成本这东西,说白了就是你在市场里「买路钱」。我刚开始做量化的时候,总觉得策略赚钱就行,成本那点小钱无所谓。直到有一次回测跑得漂亮,实盘却亏得莫名其妙——一查才发现,光滑点就吃掉了年化收益的40%。嗯,从那以后,我再也不敢小看交易成本了。

显性成本:看得见的「明账」

显性成本,就是交易所和券商明明白白告诉你要收的钱。我习惯把它们分成三类:

  • 佣金:券商收的服务费。现在很多券商给量化交易者的佣金已经压到万1甚至更低,但要注意最低收费——比如一笔5元,小单子就很吃亏。
  • 印花税:国家收的,A股目前是卖出时收千分之一。这个没法省,只能尽量少交易。
  • 过户费:中国结算收的,万0.2左右,金额不大但别忽略。

关键点:显性成本是「确定性」的,每一笔都能算清楚。但很多人只盯着佣金,忽略了印花税——其实印花税才是大头,尤其对高频策略来说。

隐性成本:看不见的「暗箭」

隐性成本才是真正的坑。我在项目中遇到过好几次,策略明明算着赚钱,实盘就是不行,最后发现全是隐性成本在作祟。

常见的隐性成本包括:

  • 滑点:你看到的价格和实际成交价之间的差。流动性差的股票,滑点能到好几个tick。
  • 市场冲击:大单子一进去,直接把价格打偏了。你想想看,你买100万股和买100股,对市场的影响能一样吗?
  • 延迟成本:信号出来到成交之间的时间差。高频交易里,1毫秒的延迟可能就是一笔亏钱和赚钱的区别。
  • 机会成本:没成交的那部分订单,本来能赚的钱没赚到。

我的经验:评估隐性成本,最实用的方法是做「模拟交易」——用历史数据回放,模拟真实的市场冲击和滑点。我一般会在回测中加一个「滑点模型」,比如固定加1个tick,或者按成交量比例动态计算。

成本归因:把账算清楚

成本归因,就是搞清楚每一分钱到底花在了哪里。我个人习惯用「分解法」:

  1. 先算总交易成本 = 买入成本 + 卖出成本
  2. 再拆成显性部分和隐性部分
  3. 显性部分再拆成佣金、印花税、过户费
  4. 隐性部分再拆成滑点、冲击、延迟

举个例子,假设你买了一笔股票:

成本项 金额(元) 占比
佣金 50 5%
印花税 100 10%
过户费 20 2%
滑点 300 30%
市场冲击 530 53%
合计 1000 100%

看到没?隐性成本占了83%。如果你只看佣金和印花税,那真是捡了芝麻丢了西瓜。

TCA报告:交易成本分析报告

TCA(Transaction Cost Analysis)报告,就是把上面的分析做成一个标准化的文档。我一般会包含这几个部分:

  • 执行质量概览:成交率、滑点率、冲击成本等核心指标
  • 成本分解:显性 vs 隐性,各项占比
  • 时间序列分析:成本随时间的变化趋势
  • 对比基准:和VWAP、TWAP等基准比较
  • 异常交易标记:哪些交易的成本异常高

写TCA报告的时候,我习惯用Python自动化生成。下面是一个简单的示例:

import pandas as pd
import numpy as np

def generate_tca_report(trades):
    """
    生成TCA报告
    trades: DataFrame,包含price, volume, side, timestamp等字段
    """
    report = {}
    
    # 显性成本
    report['commission'] = trades['volume'].sum() * 0.0001  # 万1佣金
    report['stamp_tax'] = trades.loc[trades['side']=='sell', 'volume'].sum() * 0.001
    
    # 隐性成本:滑点
    trades['slippage'] = abs(trades['price'] - trades['mid_price']) / trades['mid_price']
    report['avg_slippage'] = trades['slippage'].mean()
    
    # 市场冲击:用Amihud指标估算
    trades['amihud'] = abs(trades['price'].pct_change()) / trades['volume']
    report['market_impact'] = trades['amihud'].mean() * 1e6
    
    return report

注意:TCA报告不是做一次就完事的。我建议每周或每月跑一次,看看成本有没有异常变化。有一次我发现滑点突然飙升,一查才发现是交易所改了撮合规则——要不是TCA报告及时报警,我可能还在傻傻地交易。

优化建议:把成本降下来

知道了成本在哪,接下来就是怎么优化。我总结了几条实战经验:

  • 算法交易:用TWAP、VWAP、Iceberg等算法把大单拆小,降低市场冲击。我一般用VWAP做日内交易,用TWAP做隔夜交易。
  • 选择流动性好的标的:流动性差的股票,滑点能吃掉你所有利润。我建议只交易日均成交额在1亿以上的股票。
  • 优化下单时机:避开开盘和收盘的波动期,选择流动性最好的时段下单。
  • 降低交易频率:每笔交易都有固定成本,交易越频繁,成本占比越高。我见过有人一天交易100次,结果佣金比利润还高。
  • 使用DMA(直接市场接入):减少中间环节,降低延迟成本。

避坑指南:我曾经为了省佣金,选了一家小券商。结果他们的交易系统经常卡顿,延迟比大券商高了50毫秒。省下来的佣金全赔在滑点上了。所以,别只看佣金,要看综合成本。

知识体系总览

下面这张图,是我对交易成本分析的整体理解。你可以把它当作一个检查清单:

交易成本分析 显性成本 隐性成本 成本归因 佣金 印花税 过户费 滑点 市场冲击 延迟成本 机会成本 分解法 TCA报告 优化建议 核心目标:降低总交易成本,提升策略净收益 显性成本 + 隐性成本 = 总成本 → 持续监控 → 不断优化

交易成本分析,说白了就是「算清楚账,然后想办法省钱」。显性成本是明账,隐性成本是暗账,成本归因是把账算明白,TCA报告是定期对账,优化建议就是省钱的办法。

我做了这么多年量化,最大的体会就是:成本控制能力,本身就是一种策略优势。同样的策略,成本控制得好的人,年化收益能高出5-10个百分点。别小看这点差距,复利下来,差距就是几倍甚至几十倍。

无相订单流研究社 微信Lucian808555