2. CTA策略基础

CTA(Commodity Trading Advisor,商品交易顾问)基金是管理期货策略的典型载体。它最初受美国《商品交易法》监管,为投资者提供商品期货、金融期货与场外衍生品的受托管理服务。发展到今天,CTA早已不局限于“商品”,而是覆盖股指、国债、外汇、能源、金属、农产品等多元资产,成为与股票、债券相关性较低的一类绝对收益策略。理解CTA,是进入时间序列动量策略开发的第一道门槛。

一、CTA基金概述:它赚的是什么钱

CTA基金的核心收益来源可以拆成三块:趋势/动量收益、期限结构与展期收益、波动率与风险溢价收益。其中趋势跟踪是CTA最经典、占比最大的收益引擎。CTA通常采用多品种、多周期、多策略的组合方式,通过分散化降低单品种回撤,并用杠杆放大低波动品种的收益贡献。

从产品形态看,CTA基金常见以下几类:

  • 公募/私募管理期货产品:面向合格投资者,策略透明度和杠杆约束因监管而异。
  • FOF/MOM配置:通过配置多个CTA子策略分散管理人风险。
  • 海外Managed Futures基金:如AHL、Winton等,规模大、品种全、周期长。

CTA的业绩特征通常表现为:与股债低相关、危机Alpha属性、收益偏右尾、回撤周期较长。这些特征决定了CTA在资产配置中更多扮演“分散器”而非“收益发动机”。

二、策略分类:从信号来源到持仓周期

CTA策略的分类维度很多,最实用的是按信号来源和持仓周期两个维度切分。按信号来源,可分为趋势跟踪、均值回归、套利、基本面量化;按持仓周期,可分为高频、日内、短周期(1-5天)、中周期(1-4周)、长周期(1-6个月)。

分类维度 类型 典型信号 持仓周期 代表策略
信号来源 趋势跟踪 价格突破、均线交叉 中长周期 时间序列动量
均值回归 价差偏离、布林带 短周期 配对交易
套利 跨期、跨品种价差 日内至数日 期现套利
基本面量化 库存、基差、宏观 中长周期 展期收益策略
持仓周期 短周期 1-5天 高频换手 日内动量
中周期 1-4周 中等换手 周度突破
长周期 1-6个月 低换手 月度动量
实战中,多数CTA产品并非单一策略,而是“趋势+套利+基本面”的多策略组合。分类的意义在于明确每个子策略的收益来源和风险暴露,而不是给产品贴标签。

三、时间序列动量与截面动量的区别与联系

这是本节最核心的概念。两者都叫“动量”,但比较的基准不同。

时间序列动量(Time-Series Momentum, TSMOM):对单个品种自身的历史收益率做判断。例如,过去60个交易日收益为正则做多,为负则做空。它回答的问题是:“这个品种自己,过去涨了还是跌了?”

截面动量(Cross-Sectional Momentum, XSMOM):在同一时点,把所有品种按历史收益率排序,做多排名靠前的、做空排名靠后的。它回答的问题是:“在所有品种里,谁比谁更强?”

时间序列动量 vs 截面动量:比较基准与信号生成 时间序列动量 TSMOM 比较基准:品种自身历史 品种A 过去60日收益 = +8% 品种B 过去60日收益 = -5% 信号:A做多,B做空 每个品种独立判断,可全多或全空 截面动量 XSMOM 比较基准:同期其他品种 排名1:品种C +12% → 做多 排名N:品种D -9% → 做空 信号:多强空弱,市场中性 多空对冲,暴露相对强弱 对比

两者的联系在于:都基于“过去收益可预测未来收益”的动量假设,都可用相同的回看窗口和波动率调整方法。区别在于组合构建逻辑:TSMOM是“绝对方向”判断,XSMOM是“相对排序”判断。TSMOM天然带有市场方向暴露,XSMOM则更接近市场中性。

关键结论:TSMOM的收益主要来自“趋势延续”,XSMOM的收益主要来自“强者恒强”。在商品期货中,两者相关性并不高,组合使用往往能提升夏普比率。

四、案例与误区复盘

假设我们有一个包含20个商品期货品种的池子,回看窗口60日,持有期20日。用TSMOM,每个品种独立判断方向,最终可能持有15个多头、5个空头,组合净暴露较大。用XSMOM,做多前5名、做空后5名,组合净暴露接近零。2020年3月全球市场暴跌时,TSMOM因多数品种转空而大幅盈利,XSMOM则因多空对冲,收益相对温和。

常见误区有三个:

  1. 把动量等同于趋势跟踪:动量是信号,趋势跟踪是策略框架,两者不能划等号。
  2. 忽略波动率调整:不同品种波动差异巨大,未做波动率归一化会导致高波动品种主导组合。
  3. 回看窗口过拟合:在历史数据上反复调参,容易把噪声当成信号。
复盘时务必区分“信号失效”和“执行损耗”。滑点、手续费、展期成本在短周期动量策略中可能吃掉大部分理论收益。建议在回测中至少加入双边万三的手续费和一跳滑点进行压力测试。
# 时间序列动量信号示例(伪代码)
for symbol in universe:
    ret = close[symbol].pct_change(lookback)
    vol = close[symbol].pct_change().rolling(lookback).std()
    signal = sign(ret) * (target_vol / vol)
    position[symbol] = signal

# 截面动量信号示例(伪代码)
ret_all = {s: close[s].pct_change(lookback) for s in universe}
ranked = sorted(ret_all, key=ret_all.get)
longs = ranked[-5:]
shorts = ranked[:5]
position = {s: +1 for s in longs}
position.update({s: -1 for s in shorts})

掌握TSMOM与XSMOM的区别与联系,是后续开发时间序列动量CTA策略的逻辑起点。只有先明确“和谁比、比什么、怎么下注”,才能进入参数设计、组合优化与风险管理的实战环节。