4、单策略开发:趋势跟踪策略设计、均值回归策略设计、突破策略设计、策略参数优化

好,咱们进入正题。单策略开发,说白了就是搭建交易系统的「积木」。你想想看,一个完整的策略组合,本质上就是把这些基础策略模块拼装起来。我个人习惯把策略分成三大类:趋势跟踪、均值回归、突破策略。今天咱们就把这三块讲透,顺带聊聊参数优化这个「磨人的小妖精」。

4.1 趋势跟踪策略设计

趋势跟踪,最经典的策略类型。它的核心逻辑就一句话:涨了买,跌了卖,跟着趋势走。我在项目中遇到过不少新手,总想抄底逃顶,结果被市场反复打脸。趋势跟踪的好处就是——不预测,只跟随。

4.1.1 双均线交叉策略

最简单的趋势跟踪,就是双均线交叉。短周期均线上穿长周期均线,做多;下穿,做空。嗯,这里要注意,均线周期怎么选?

参数 常见取值 特点
短周期 5、10、20 越短越敏感,噪音多
长周期 50、100、200 越长越平滑,滞后大

我建议你从(10, 50)开始试。为什么?因为10和50在日线级别上,刚好对应两周和两个半月的交易周期,逻辑上说得通。

核心代码片段(Python + Backtrader风格):

# 双均线交叉策略骨架
class DualMAStrategy(bt.Strategy):
    params = (('short', 10), ('long', 50))

    def __init__(self):
        self.ma_short = bt.indicators.SMA(self.data.close, period=self.params.short)
        self.ma_long = bt.indicators.SMA(self.data.close, period=self.params.long)
        self.crossover = bt.indicators.CrossOver(self.ma_short, self.ma_long)

    def next(self):
        if self.crossover > 0:  # 金叉
            self.buy()
        elif self.crossover < 0:  # 死叉
            self.sell()

4.1.2 趋势强度过滤

光有交叉还不够。你想想看,如果两根均线反复缠绕,交叉信号会频繁出现,这就是「假突破」。我曾经吃过这个亏,一天交易十几次,手续费都亏麻了。

解决办法:加一个趋势强度过滤器。比如用ADX指标,ADX > 25才开仓。ADX低于20,说明市场在震荡,别碰。

避坑指南: 我曾经在ETH上跑双均线,没加ADX过滤,结果横盘一个月亏了15%。后来加上ADX > 25的条件,回撤直接砍半。

4.2 均值回归策略设计

趋势跟踪的反面,就是均值回归。核心逻辑:价格偏离均值太远,就会拉回来。说白了,就是赌「物极必反」。

4.2.1 布林带策略

布林带是最常用的均值回归工具。中轨是均线,上下轨是均线±2倍标准差。价格碰到上轨做空,碰到下轨做多。

但这里有个坑:强势趋势中,价格会沿着上轨一直走。如果你在上轨做空,会被打爆。怎么办?

  • 加一个趋势判断:如果ADX > 30,放弃均值回归,改用趋势策略
  • 或者用「百分比布林带」:价格超出上轨2%才做空,留点缓冲

警告: 均值回归策略在单边行情中会死得很惨。我建议你只在震荡市中使用,或者搭配趋势过滤器。

4.2.2 配对交易

配对交易是均值回归的进阶版。找两个相关性高的币种,比如BTC和ETH。当价差偏离均值时,做多弱的,做空强的,等价差回归。

嗯,这里要注意,配对交易需要做协整检验。不是所有看起来相关的币种都适合。我一般用Engle-Granger两步法检验,p值小于0.05才用。

4.3 突破策略设计

突破策略,说白了就是「等行情启动再上车」。它和趋势跟踪有点像,但更强调「关键价位」的突破。

4.3.1 唐奇安通道突破

经典的海龟交易法则用的就是唐奇安通道。取过去N天的最高价和最低价,形成通道。价格突破上轨做多,跌破下轨做空。

我个人习惯用20天通道。为什么?因为海龟交易法则原版就是20天。虽然老,但有效。

# 唐奇安通道突破
class DonchianBreakout(bt.Strategy):
    params = (('period', 20),)

    def __init__(self):
        self.high = bt.indicators.Highest(self.data.high, period=self.params.period)
        self.low = bt.indicators.Lowest(self.data.low, period=self.params.period)

    def next(self):
        if self.data.close[0] > self.high[-1]:  # 突破上轨
            self.buy()
        elif self.data.close[0] < self.low[-1]:  # 跌破下轨
            self.sell()

4.3.2 突破过滤技巧

突破策略最大的问题是「假突破」。价格刚突破就掉头,你追进去就被套。我建议你加两个过滤:

  1. 成交量确认:突破时成交量放大,说明是真突破
  2. 时间过滤:突破后等1根K线确认,不急着进场

核心观点: 突破策略的胜率通常不高,但盈亏比高。一次大趋势能赚回十次小亏损。关键是别在假突破上亏太多。

4.4 策略参数优化

参数优化,是量化交易里最容易被误解的环节。很多人以为「找到最优参数就稳了」,其实不然。你想想看,参数优化本质上是「过拟合」——你是在历史数据上找最佳参数,但未来不一定重复。

4.4.1 优化方法

方法 说明 风险
网格搜索 遍历所有参数组合 计算量大,容易过拟合
随机搜索 随机采样参数空间 可能错过最优解
贝叶斯优化 基于概率模型搜索 实现复杂,但效果好

我个人习惯用随机搜索。为什么?因为网格搜索太死板,贝叶斯优化又太复杂。随机搜索在80%的情况下能接近最优解,而且快。

4.4.2 避免过拟合

这是参数优化的核心。我曾经见过一个策略,参数优化后夏普比率3.5,结果实盘直接亏成狗。为什么?过拟合了。

怎么避免?

  • 样本外测试:把数据分成训练集和测试集,7:3比例
  • 参数稳定性:最优参数附近的参数表现也应该好。如果参数稍微一变就亏钱,说明不稳定
  • 多周期验证:在日线、4小时、1小时上都跑一遍,如果都有效,才是真有效

避坑指南: 我曾经优化双均线参数,发现(12, 48)表现最好。但换成(13, 49)就亏钱。这种参数就是「伪最优」,千万别用。

4.4.3 优化目标

别只看收益率。收益率可以靠加杠杆堆出来,但风险也会放大。我建议你关注这几个指标:

  1. 夏普比率: 至少大于1.5
  2. 最大回撤: 不超过20%
  3. 胜率: 40%-60%之间,太高或太低都不好
  4. 盈亏比: 至少2:1

嗯,这里要注意,不同策略的指标侧重点不同。趋势跟踪胜率低但盈亏比高,均值回归胜率高但盈亏比低。别拿一个标准去套所有策略。

4.5 本章知识体系

下面这张图,是我梳理的本章核心逻辑。你可以把它当作「策略开发地图」来用。

单策略开发知识体系 单策略开发 趋势跟踪策略 均值回归策略 突破策略 双均线交叉 ADX趋势过滤 布林带策略 配对交易 唐奇安通道 成交量确认 策略参数优化 网格/随机/贝叶斯搜索 样本外测试/过拟合防范

这张图把三大策略和参数优化串起来了。你写代码的时候,可以对照着看,缺了哪块补哪块。


好了,单策略开发就讲到这里。记住,策略没有绝对的好坏,关键是适合当前市场环境。趋势跟踪在牛市中吃大肉,均值回归在震荡市中稳如狗,突破策略在行情启动时赚快钱。你得多试试,找到自己的「本命策略」。