第4章:忽略交易成本——高频换手,利润全交了手续费

做因子投资,最怕什么?

不是策略失效,不是回撤太大。而是你辛辛苦苦跑出来的超额收益,一算账,全给券商和交易所打工了。

我见过太多人,回测里年化30%,实盘三个月亏了5%。为什么?手续费吃掉了所有利润。今天我们就聊聊这个“隐形杀手”——交易成本。

4.1 交易成本到底有多“贵”?

很多人觉得手续费不就是万几吗?一买一卖也就万分之几,能有多少?

嗯,这里要注意。你想想看,一个高频换手的策略,假设每天换手率50%,一年250个交易日。单边手续费万三,双边就是万六。一年下来,光手续费就是:

0.05% × 250 = 12.5%

也就是说,你策略年化收益20%,扣掉手续费只剩7.5%。

这还没算滑点。实盘中,你看到的成交价和实际成交价之间,通常有0.1%到0.5%的差距。尤其小市值股票,滑点更大。

我在项目中遇到过一位朋友,他的多因子策略回测年化35%,换手率极高。实盘跑了半年,收益只有3%。一算账,手续费和滑点吃掉了32%。说白了,他是在给交易所打工。

4.2 常见的“成本陷阱”

我总结了几种最容易忽略交易成本的场景:

  • 高频因子轮动:每天根据因子排名调仓,换手率轻松超过100%
  • 小市值策略:流动性差,滑点大,一买就涨一卖就跌
  • 分钟级信号:信号频繁触发,每次交易成本累积惊人
  • 过度分散:持仓几百只股票,每只交易量小,成本占比高

为什么会这样?因为回测时,我们通常假设“以收盘价成交,无成本”。但实盘里,每一笔交易都在流血。

4.3 如何正确估算交易成本?

我个人习惯,在回测中至少考虑三部分成本:

成本类型 估算范围 说明
佣金 万1.5 - 万3 双边收取,可谈
印花税 万5(卖出) 国家收的,逃不掉
滑点 0.1% - 0.5% 取决于流动性和订单规模
冲击成本 0.2% - 1% 大单交易时尤其明显

我建议,回测时至少按双边千分之二(0.2%)来扣成本。如果策略还能赚钱,实盘才有希望。

小技巧:回测时用“成本后收益”作为主要评价指标。别只看总收益,那都是虚的。

4.4 降低交易成本的实战方法

我曾经犯过一个错误:为了追求高夏普,把换手率做到极致。结果实盘收益惨淡。后来我总结了几个降成本的方法:

  1. 降低换手频率:从日频降到周频,成本直接降80%
  2. 使用限价单:别用市价单,滑点能少一半
  3. 分批交易:大单拆成小单,减少冲击成本
  4. 选择流动性好的标的:沪深300成分股比小盘股成本低很多
  5. 优化调仓逻辑:只调那些信号变化大的股票,别频繁微调

你想想看,一个年化15%的策略,如果换手率从100%降到20%,成本从10%降到2%,实际收益就从5%变成了13%。这差距,比选什么因子都大。

4.5 一个简单的成本分析代码

下面是我常用的成本分析函数,帮你快速评估策略的真实收益:

def calculate_net_return(returns, turnover, cost_rate=0.002):
    """
    计算扣除交易成本后的净收益
    
    参数:
        returns: 策略日收益率序列
        turnover: 日换手率序列
        cost_rate: 单边交易成本比例,默认0.2%
    
    返回:
        net_returns: 扣除成本后的日收益率
    """
    import numpy as np
    
    # 每日交易成本 = 换手率 × 双边成本
    daily_cost = turnover * (cost_rate * 2)
    
    # 净收益 = 策略收益 - 交易成本
    net_returns = returns - daily_cost
    
    # 累计收益对比
    gross_cum = np.cumprod(1 + returns) - 1
    net_cum = np.cumprod(1 + net_returns) - 1
    
    return net_returns, gross_cum, net_cum

# 使用示例
# net_ret, gross, net = calculate_net_return(strategy_returns, daily_turnover)
# print(f"毛收益: {gross[-1]:.2%}, 净收益: {net[-1]:.2%}")

警告:别把回测里的“理想收益”当真。加上成本再看,很多策略其实根本不赚钱。

4.6 核心逻辑框架

下面这张图,是我对交易成本影响因子的理解框架:

交易成本对因子策略的影响框架 交易成本 佣金 + 印花税 滑点成本 冲击成本 换手率越高 → 成本越高 流动性越差 → 滑点越大 订单越大 → 冲击越猛 对策:降低换手 + 限价单 + 选流动性标的 + 分批交易 净收益 = 策略收益 - 交易成本

这张图想表达的核心就一句话:交易成本不是小数目,它是策略收益的“抽水机”。换手率越高、流动性越差、订单越大,抽得越狠。

4.7 避坑指南

我曾经踩过一个坑:回测时用了“理想成交”模型,没考虑滑点。结果实盘里,每次调仓都买在高点、卖在低点。后来我学乖了,回测时强制加0.3%的滑点成本,策略瞬间从“优秀”变成“及格”。

这里给你三个建议:

  • 回测必扣成本:至少0.2%双边,别偷懒
  • 实盘先跑小资金:用10万块跑三个月,看看实际成本是多少
  • 关注“成本后夏普”:别只看收益,夏普比率扣完成本才是真本事

记住:因子投资的核心不是找到高收益因子,而是找到“扣完成本还能赚钱”的因子。

好了,这一章就聊到这。交易成本这事,说大不大,说小不小。但往往就是这“不起眼”的几个点,决定了你是赚钱还是白忙活。


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