halo 的技术博客

返回

在量化投资的世界里,趋势跟踪(Trend Following)是历史最悠久、经受了最长时间检验的策略类型之一。从1970年代的”海龟交易法则”到如今的CTA管理期货基金,趋势跟踪的核心思想始终未变:截断亏损,让利润奔跑

本文从零开始,带你理解趋势跟踪的底层逻辑,然后用Python完整实现一个多品种、多时间尺度的趋势跟踪系统。

为什么趋势跟踪有效?#

趋势跟踪的理论基础来自两个方向:行为金融和市场微观结构。

行为金融的角度:投资者不是理性的。当新信息出现时,市场不是立即跳转到新的均衡价格,而是逐步调整——锚定效应让投资者不愿意立即接受新价格,羊群效应让趋势在形成初期自我强化,而处置效应(过早卖出盈利股票、死扛亏损股票)进一步推动了趋势的延续。

市场微观结构的角度:大型机构投资者由于体量原因,无法在不影响市场价格的情况下快速建仓或清仓。当一个大型养老金基金决定增配新兴市场股票时,它的买入行为会持续数周甚至数月,这一过程中产生的价格影响就形成了可被识别的趋势。

实证证据:AQR Capital Management在2014年的一项经典研究中,回溯了过去140年、67个市场的趋势跟踪信号表现,得出了令人信服的结论:趋势跟踪信号在所有被研究的市场中均表现出正的长期超额收益,且这一收益在不同经济周期和货币政策环境下具有相当的稳定性。

趋势跟踪的核心组件#

一个完整的趋势跟踪系统包含以下核心组件:

1. 品种选择(Universe Selection)#

不是所有品种都适合趋势跟踪。理想的目标品种应具备:

  • 足够的流动性:减少滑点和交易成本对策略的侵蚀
  • 足够的波动性:波动太小则趋势信号强度不足
  • 独立的价格驱动因素:品种之间的低相关性有助于分散风险

在实践中,CTA策略通常覆盖四大类资产:股指期货、国债期货、商品期货、外汇期货。每类资产下选择2-5个流动性最好的品种。

2. 趋势信号计算(Signal Generation)#

趋势信号的计算方法经历了从简单到复杂的演进:

经典方法

  • 移动平均线交叉(MA Crossover):当短期均线上穿长期均线时做多,下穿时做空。参数通常选择50/200或20/60。
  • 通道突破(Channel Breakout):当价格突破过去N日最高价时做多,跌破过去N日最低价时做空。海龟交易法则使用的是N=20的通道。
  • 动量信号(Time-Series Momentum):计算过去M个月的超额收益,如果为正则做多,为负则做空。这是最常用的信号形式,参数M通常取1、3、6、12个月。

现代改进

  • 波动率标准化:对原始信号除以实现的波动率,使不同品种的信号具有可比性
  • 信号平滑:使用指数加权移动平均(EWMA)替代简单移动平均,给予最近数据更高的权重
  • 多信号融合:将不同参数(M=1,3,6,12)的趋势信号等权或加权组合,增加策略鲁棒性

3. 头寸管理(Position Sizing)#

这是趋势跟踪中最重要的环节。同样的信号,不同的头寸管理方式可能导致截然不同的风险收益特征。

波动率目标法(Volatility Targeting):头寸规模 = 目标波动率 / 品种当前波动率。目标波动率通常设为年化15%-25%,即莱斯特管理期货行业的常见水平。

风险平价(Risk Parity):分配相同的风险预算给每个品种,使得每个品种对投资组合波动的贡献相等。

Kelly准则:根据信号强度和胜率估计,动态分配资本。实践中通常使用分数Kelly(如1/4 Kelly)以控制回撤。

4. 止损与止盈#

趋势跟踪的胜率通常只有35%-45%,但盈亏比可达2:1到3:1甚至更高。这意味着风险控制——尤其是止损——至关重要。

  • ATR止损:止损距离 = N × ATR(平均真实波幅),常用N=2或3
  • 价格结构止损:基于关键支撑/阻力位设置止损
  • 时间止损:若持仓超过N日后仍未盈利,主动退出
  • 跟踪止损:随着盈利扩大,动态上调止损位以保护利润

趋势跟踪系统架构

Python完整实现#

以下是一个多品种趋势跟踪策略的Python实现,基于向量化回测框架:

信号质量的关键考量#

即使掌握了上述框架,在实际运行中仍面临几个关键挑战:

样本外稳健性:趋势跟踪策略的”甜蜜期”和”煎熬期”是交替出现的。2010-2018年是趋势跟踪的黄金十年,但2019-2023年则充满挑战。在策略设计时,必须测试多个不相连的时间窗口。

交易成本建模:在回测中假设一个固定的bps是不够的。真实的交易成本取决于品种流动性、订单量占市场比例、市场微观结构等因素。对于低流动性品种,还需要考虑市场冲击成本。

相关性管理:当多个品种都发出相同方向的信号时(例如2008年金融危机期间几乎所有风险资产都在下跌),组合的风险集中度会急剧上升。需要在头寸层面引入相关性调整。

参数敏感性:对关键参数(回看期、波动率目标)进行敏感性分析是必须的。如果一个策略的表现在参数小幅扰动下大幅波动,那么这个策略很可能过拟合了。

策略回测绩效指标

常见误区与反思#

误区1:趋势跟踪就是”追涨杀跌”

这是最大的误解。趋势跟踪的核心哲学是尊重市场趋势,而不是预测市场方向。它与散户的”追涨杀跌”有本质区别:散户的追涨通常基于情绪和FOMO,没有规则体系;而趋势跟踪是系统性的、有止损纪律的、跨品种分散的操作。

误区2:只要能抓住大趋势就能赚钱

趋势跟踪赚钱的前提不是”抓住大趋势”,而是在大部分时间里小亏、在少数趋势行情中大赚。统计显示,CTA趋势跟踪策略大约60%-65%的交易是亏损的,但少数盈利交易的利润足以覆盖所有亏损并产生正收益。

误区3:更复杂的信号一定更好

大量的实证研究表明,简单的趋势信号(如12个月动量)在多资产多市场中已经足够稳健。过度复杂的信号设计往往导致过拟合,样本外表现反而变差。保持简单是趋势跟踪领域被反复验证的经验法则。

总结#

趋势跟踪策略之所以能在量化投资领域长盛不衰,不是因为它的信号有多么精妙,而是因为它建立在一套完整的投资哲学之上:承认我们无法预测市场,但可以在趋势形成时跟随、在趋势逆转时离开。这种谦卑的态度,加上严格的风险管理纪律,构成了趋势跟踪的长期生存基础。

对于想要入门量化投资的朋友,CTA趋势跟踪是一个极好的起点——它足够简单让你可以快速实现和验证,也足够深刻让你能不断迭代和精进。

CTA趋势跟踪策略:从原理到Python实战(附完整代码)
https://blog.halo26812.eu.org/blog/cta-trend-following-strategy
Author halo
Published at 2026年7月10日
版权声明 CC BY-NC-SA 4.0
Comment seems to stuck. Try to refresh?✨