第一.03 Aberration

📘 本章重点

  • 理解Aberration策略的核心逻辑——用布林带通道捕捉长线趋势,突破上轨做多、突破下轨做空
  • 掌握Aberration的进出场规则——突破通道边界入场,回归中轨出场
  • 理解多品种分散对Aberration策略的关键作用——用少数品种的大利润覆盖多数品种的小亏损
  • 了解Aberration与布林带均值回归(第二.01)的本质差异——同样的工具,完全相反的用法
  • 认识Aberration策略的长线特征——低频交易、长期持仓、捕捉大趋势

⚠️ 本章难点

  • 理解Aberration与布林带均值回归使用同一指标却方向相反的底层逻辑——一个“追突破”,一个“等回归”
  • 掌握长线趋势跟踪的“低频高盈亏比”特征——年交易3-4次、持仓60天、胜率低但单笔利润大
  • 理解多品种分散对趋势跟踪策略的“容错”价值——单品种可能长期亏损,多品种组合才能平滑曲线
  • 认识Aberration的“简单之美”——没有复杂的信号过滤,只有布林带通道+中轨回归

⏱️ 预估学习时间

  • 40~55分钟

一、策略简述与一句话定性

一句话定性:Aberration是一种基于布林带通道的长线趋势跟踪策略——当价格向上突破布林带上轨时做多,当价格向下突破布林带下轨时做空,当价格回归中轨时平仓离场,通过捕捉长期趋势获取利润。

Aberration由Keith Fitschen于1986年发明,1993年商业化发布——他并非金融专业出身,而是一位在美国空军服役超过20年的武器导航系统工程师。一个设计武器导航系统的人,最终设计出了全球最成功的交易系统之一。自发布之日起,该系统业绩一直名列前茅,在1997年、2001年、2005年《Futures Truth》杂志“系统开发以来(Since Inception)”类别的业绩排名中均位列第一。

Aberration之所以能长期稳居榜首,与它的设计哲学密切相关。它同时交易8种不同品种(谷物、肉类、金属、能源、外汇、金融及股指期货),交易频率极低——每年每个品种交易3-4次,60%的时间持有仓位,平均每笔持仓60天。它不是靠高频交易赚钱,而是靠长线趋势的复利积累。

如果说布林带均值回归(第二.01)是用布林带“抄底逃顶”——价格触及下轨买入、上轨卖出;那Aberration就是用布林带“追涨杀跌”——价格突破上轨买入、跌破下轨卖出。同一个工具,两种完全相反的用法。 布林带均值回归赌的是“物极必反”,Aberration赌的是“强者恒强”。这两种用法恰好代表了量化投资中两条最基本的哲学路径。

布林带均值回归和Aberration的关系,就是“同器异用”——同一个工具,两种完全相反的哲学。就像一把刀,可以切菜,也可以防身——工具没有立场,使用工具的人才有。

Aberration在中文量化圈没有统一的官方译名,业内通常直接使用英文原名。其英文原意是“失常、偏离、越轨”——恰好与策略逻辑完美契合:捕捉价格“偏离”正常波动范围(突破布林带)的时刻。由于策略核心就是布林带,也有资料将其称为“布林带通道突破策略”。偏离是信号,趋势是猎物。

趋势跟踪策略的本质,不是预测趋势何时到来,而是确保在趋势到来时你还在场。Aberration的“谦卑”在于:它承认自己不知道趋势什么时候来,但它知道自己应该在通道被突破时做好准备。

Aberration vs 布林带均值回归——同器异用

维度布林带均值回归(第二.01)Aberration(第一.03)
核心信念均值回归(物极必反)趋势跟踪(强者恒强)
入场信号价格触及下轨买入、上轨卖出价格突破上轨做多、跌破下轨做空
出场信号价格回归中轨价格回归中轨
适用行情震荡市趋势市
胜率较高(>60%)较低(30%-40%)
盈亏比较低(1-2)较高(3以上)
持仓周期短(数天至数周)长(平均60天)
交易频率极低(年3-4次/品种)
资金门槛中等偏高(需多品种分散)

老陈点评
Aberration和布林带均值回归共用同一个数学工具——布林带,却得出了完全相反的结论。这不是工具的错,而是使用场景的不同。布林带本身只是一个波动率度量工具,它不告诉你“该追”还是“该等”——告诉你答案的是你对市场状态的判断。 在趋势市中,突破上轨是趋势确认的信号;在震荡市中,突破上轨是超买的信号。同一个信号,两种解读,取决于你身处什么市场。Aberration的智慧在于:它假设市场大部分时候没有趋势,但它不试图判断“现在有没有趋势”——它只是用通道来捕捉“万一有趋势”的机会。这是一种谦卑的交易哲学:我不预测趋势,我只是在趋势出现时在场。

老王补充
Aberration是我最早接触的长线策略之一。它的好处是省心——一年只交易几次,不需要天天盯盘。但它的缺点是需要极大的耐心——你可能持仓两个月,价格一直在中轨附近晃,就是不触发平仓;你也可能连续半年没有一笔盈利交易,然后一笔大赚覆盖所有亏损。这种策略不是用来让你“爽”的,是让你“活”的。 能拿住Aberration的人,都是能忍受孤独和回撤的人。

二、策略的使用范围与条件

维度适用范围与条件说明
适用市场期货(商品、股指、外汇、债券等)原版策略同时交易8种不同品种
品种要求流动性好、有长期趋势特征低波动、无趋势的品种不适合
交易机制双向交易(做多/做空)期货天然支持双向
适用周期日线原版策略使用日线数据
资金门槛中等偏高(需多品种分散)原版同时交易8个品种,需要较大资金
核心特征长线、低频、高仓位年交易3-4次/品种,60%时间持仓
不适合的市场状态长期横盘震荡、低波动无法产生有效突破信号

Aberration的经典参数

  • 布林带周期(N) :26日
  • 标准差倍数(p) :2倍
  • 交易品种:8种(谷物、肉类、金属、能源、外汇、金融、股指期货等)

低波动环境的应对:当布林带带宽(上轨-下轨)持续收窄至历史低位时,Aberration策略的假突破风险会显著上升。此时可以考虑暂停新开仓,或将标准差倍数从2倍提高到2.5倍,以提高突破信号的过滤门槛。

为什么是8个品种?

Aberration的核心设计理念之一是多品种分散。它同时交易8个不同类别的品种,涵盖谷物、肉类、金属、能源、外汇、金融及股指期货等。这种分散不是为了降低波动率本身,而是为了增加捕捉到趋势的概率。在一年的时间里,总有一些品种会出现大趋势,而另一些品种可能横盘震荡。Aberration的策略是:用少数趋势品种的大利润,覆盖多数非趋势品种的小亏损

适用品种举例

  • 股指期货:标普500、沪深300
  • 能源:原油、天然气
  • 金属:黄金、铜
  • 农产品:玉米、大豆、小麦
  • 外汇:欧元/美元、日元/美元
  • 债券:美国国债期货

Aberration理念在A股市场的落地思路

原版Aberration同时交易8种期货品种,涵盖谷物、肉类、金属、能源、外汇、金融及股指期货等——这与普通A股投资者的实际情况相去甚远。大多数个人投资者既没有这么大的资金体量,也没有精力同时跟踪8个期货市场。

但Aberration的核心理念——“用少数趋势品种的大利润,覆盖多数非趋势品种的小亏损”——并不局限于期货市场。这一思想可以迁移到A股市场的多种资产组合中。

为什么选择ETF而非个股? ETF本身已经是一篮子股票的组合,避免了单只股票的踩雷风险,且流动性更好、交易成本更低(ETF免印花税)。对于Aberration这种需要同时跟踪多个品种的策略,ETF是更合适的基础工具——它让你配置的是“板块”或“资产类别”,而不是把命运押在单只股票上。

以下是一个面向A股投资者的简化版“Aberration式多品种分散”思路:

A股资产的分散组合方案(可选5-8个标的) :

资产类别具体标的示例特点
宽基指数ETF 沪深300ETF、创业板ETF、科创50ETF代表不同市值风格和板块,长期存在轮动
行业ETF证券ETF、半导体ETF、消费ETF、新能源ETF不同行业在不同经济周期中表现各异
跨市场ETF纳指ETF、恒生ETF与A股相关性较低,提供额外分散
商品ETF黄金ETF、有色金属ETF抗通胀属性,与股债相关性低
可转债可转债ETF或精选个券兼具股性和债性,波动特征与股票不同。可转债的价格与正股走势相关,但由于债底的存在,其下跌幅度通常小于正股,波动特征介于股票和债券之间

选择品种时,关键不在于数量,而在于相关性。5个低相关性品种的分散效果,远好于8个高相关性品种。例如,半导体ETF和新能源ETF的相关性可能很高(同属成长风格),同时配置两者的分散效果有限;而沪深300ETF和黄金ETF的相关性较低,同时配置两者的风险分散效果更佳。建议在选择品种时,优先考虑历史相关性低的组合。

操作要点

  1. 每个标的单独运行Aberration规则:计算各自的布林带通道(26日周期、2倍标准差),突破上轨做多,跌破下轨离场,回归中轨平仓
  2. 等权重分配资金:每个标的分配相同比例的资金,避免过度集中
  3. 独立信号、独立执行:哪个标的有信号就做哪个,没有信号的标的空仓等待
  4. 考虑到ETF交易的手续费(佣金+滑点) ,频繁开平仓会侵蚀收益。建议在信号触发后至少持有数日再考虑平仓,避免因频繁交易导致成本过高。Aberration本身是长线策略,原版年交易仅3-4次/品种,A股版本也应保持低频特征
  5. 仓位控制:多品种同时出现信号时,累计仓位不超过总资金的60%-70%

与期货版本的区别

A股ETF版本在多数个人投资者的实际操作中,以做多为主(融券做空受券源和门槛限制,难度较大),因此“跌破下轨”的信号应处理为“平仓离场”而非“做空”。如果投资者具备融券条件,理论上也可以对部分ETF进行做空操作,但这超出了本文的讨论范围。

A股ETF版本的持仓周期可能为数周至数月,而期货版本的持仓周期可能为数天至数周。

A股版 vs 期货版:这个A股版本的Aberration,放弃了期货市场的做空能力和杠杆,保留了“多品种分散、用少数大赚覆盖多数小亏”的核心逻辑。它的收益可能不如期货版本爆发力强,但资金门槛和操作难度也大幅降低——用几千元就能买一手的ETF,远低于期货的保证金要求。对于普通A股投资者而言,这是一个“降维版”但“可执行版”的Aberration。

实盘心理准备:同时跟踪5-8个品种、大部分时间都在小亏、少数品种偶尔爆发——这种模式对持仓耐心的考验比期货版本更甚。你可能连续几个月看着账户小幅波动,然后某一天某个品种突然启动,一次性补回所有亏损。建议先用模拟盘验证至少3个月,确认自己能够忍受这种“等待”的节奏,再考虑实盘投入。

注:以上A股版本的收益和回撤数据为参考示例,实际表现取决于具体品种选择、市场环境和执行情况,不同时间段的结果可能存在显著差异。建议读者在实盘前用自己的数据进行回测验证。

三、因子拆解与原理

3.1 布林带通道——策略的核心因子

Aberration的核心是布林带通道。它由三条线组成:

中轨(MID)= 过去N日收盘价的简单移动平均线
上轨(TOP)= 中轨 + p × 标准差
下轨(BOTTOM)= 中轨 - p × 标准差

经典参数

  • N = 26(周期)
  • p = 2(标准差倍数)

布林带通道的宽度随市场波动率自动调整——波动率大时通道扩宽,波动率小时通道收窄。这种自适应特性让Aberration在不同市场环境中都能保持相对稳定的信号质量。

3.2 入场逻辑——突破交易

Aberration的入场信号非常简洁:

信号触发条件操作
做多价格向上突破上轨(TOP)开多仓
做空价格向下跌破下轨(BOTTOM)开空仓

执行细节

  • 使用收盘价或最新价判断突破
  • 突破发生立即入场
  • 入场价格为突破时的价格(上轨价或下轨价)

关键认知:Aberration的入场逻辑与布林带均值回归(第二.01)完全相反。均值回归策略在价格触及下轨时买入(赌反弹),在触及上轨时卖出(赌回落)。Aberration在价格突破上轨时买入(赌趋势延续),在跌破下轨时卖出(赌趋势延续)。同一个价格位置,两种截然相反的操作——这就是“趋势跟踪”与“均值回归”的根本分歧。

3.3 出场逻辑——中轨回归

Aberration的出场信号同样简洁:

持仓方向平仓条件操作
持有多仓价格跌破中轨(MID)平多仓
持有空仓价格突破中轨(MID)平空仓

出场逻辑的核心思想:当价格从极端位置(突破上轨/下轨)回归到均值(中轨)时,说明推动趋势的力量已经减弱,趋势可能正在衰竭,此时应该离场锁定利润。

原版Aberration不设独立止损的设计哲学:它认为中轨回归本身就是最好的止损——如果趋势还在,价格不会回到中轨;如果价格回到中轨,说明趋势已经结束,没有必要继续持有。这种设计的代价是:在剧烈反转中,利润回吐可能很大;但好处是:它不会在趋势中途被震出局。

老王补充
Aberration的出场逻辑是“回到中轨就走”——这个规则看似简单,但执行起来非常考验人性。有时候价格突破上轨后涨了30%,你赚得盆满钵满,然后价格开始回调,你心里会想“再等等,可能还会涨”——结果价格一路跌回中轨,利润回吐大半。Aberration的出场规则不是让你“卖在最高点”,而是让你“在趋势确认结束时离开”。 能接受“卖不到最高点”的人,才能用好这个策略。

3.4 因子的优缺点

优点缺点
逻辑极简,规则清晰,易于实现在长期震荡市中无信号,资金闲置
多品种分散,平滑收益曲线单品种胜率低,需要多品种组合才能体现优势
长线持仓,交易频率低,交易成本低持仓时间长,资金占用成本高
自适应波动率,通道自动调整在低波动环境中通道过窄,假突破增加
有长期的实战业绩验证(多次排名第一)需要较大的资金规模才能实现多品种分散

四、仓位、买卖点与风险管理

4.1 入场信号

标准版入场规则

信号触发条件操作
做多收盘价/最新价 > 上轨(TOP)开多仓
做空收盘价/最新价 < 下轨(BOTTOM)开空仓

执行细节

  • 使用日线数据,收盘价确认或盘中实时判断
  • 突破发生后立即以市价入场
  • 入场价格为上轨价或下轨价

4.2 出场信号

持仓方向平仓条件操作
持有多仓收盘价/最新价 < 中轨(MID)平多仓
持有空仓收盘价/最新价 > 中轨(MID)平空仓

4.3 仓位管理——多品种分散

Aberration策略的仓位管理核心是多品种分散与等风险配置

  • 多品种分散:同时交易8-10个低相关性品种
  • 等风险配置:每个品种分配相同比例的风险资金
  • 固定仓位法:每个品种每次交易投入固定比例资金(如总资金的5%-10%)

为什么多品种分散是Aberration的“命脉”?

Aberration的单品种胜率可能只有30%-40%——这意味着在任何一个品种上,大多数交易都是亏损的。但Aberration的策略不是“提高胜率”,而是用多品种分散来增加“遇到大趋势”的概率

一个典型的Aberration收益结构

品种类型占比贡献
出现大趋势的品种1-2个贡献主要利润(+50%以上)
小幅趋势的品种2-3个小幅盈利或打平
震荡无趋势的品种3-4个小幅亏损(-5%至-10%)

这种收益结构要求交易者有足够的耐心——你可能连续几个月都在承受小幅亏损,然后一笔大赚覆盖所有亏损。Aberration赚钱的方式不是“每天赚一点”,而是“偶尔赚一大笔”。

在一年的时间里,总是有某一种或多种品种能获得巨额利润——这些大的利润弥补了那些没有趋势市场的小额亏损。

老王补充
很多人做Aberration只做一个品种,然后发现胜率太低、回撤太大,就说这个策略不行。这不是策略不行,是你用错了地方。 Aberration的设计前提就是“多品种分散”——单品种的胜率注定不高,只有把鸡蛋放在多个篮子里,才能让“少数大赚覆盖多数小亏”的数学期望发挥作用。如果你只有10万资金,做不了8个品种,那就别做Aberration——去做单品种趋势跟踪,但别怪Aberration不赚钱。

4.4 止损设计

原版Aberration的止损就是中轨回归——价格回到中轨即平仓。在此基础上,可以加入辅助止损:

止损方式触发条件说明
中轨止损(原版)价格回归中轨核心出场逻辑,与入场逻辑对称
追踪止损价格从最高/最低点回撤一定ATR倍数保护利润,防止大幅回吐
时间止损持仓超过预设周期(如120天)防止资金长期被占用

老陈点评
原版Aberration没有独立的止损机制——它的“止损”就是中轨回归。这种设计的好处是逻辑自洽:入场用通道,出场也用通道。但缺点是:在剧烈趋势反转时,中轨回归可能来得太晚,导致利润大幅回吐。加入追踪止损是Aberration最常见的改进方向——用追踪止损保护利润,用中轨回归确认趋势结束。两者结合,既保留了原版的简洁性,又增加了风险控制能力。

4.5 止盈设计

Aberration的止盈主要通过中轨回归实现:

  • 中轨止盈:价格回到中轨时平仓
  • 追踪止盈:价格从最高点回撤一定幅度时平仓(辅助)

不设固定止盈:Aberration是趋势跟踪策略,目标是捕捉大趋势——如果设置固定止盈,可能会在一波大行情的中途离场,错失主要利润。

4.6 Aberration vs 海龟交易法则

两者都是趋势跟踪策略,但通道类型不同。海龟用唐奇安通道(基于最高/最低价),对价格极端值更敏感;Aberration用布林带(基于均线+标准差),对波动率变化更敏感。海龟抓的是“价格新高”,Aberration抓的是“波动率扩张”。

五、策略的来历、设计者与趣闻

Aberration由Keith Fitschen于1986年发明,1993年商业化发布。

Keith Fitschen的背景非常特殊——他并非金融或交易出身。他在美国空军服役超过20年,专攻武器导航系统,在时间序列数据的处理上有深厚的功力。他拥有电气工程硕士学位,专攻随机估计(Stochastic Estimation) ——这是一门从含噪声的时间序列数据中提取信息的科学。

Fitschen在1981年买了一台只有64K RAM的三洋电脑,开始收集期货数据并设计交易系统。他最初对商品期货感兴趣,是因为他听说期货市场是一个“零和游戏”——有人赢就有人输,这个概念吸引了他。在设计出Aberration之前,他已经进行了多年的系统研究和数据收集。

自1993年发布以来,Aberration的业绩一直名列前茅,还四次被《Futures Truth》评为“史上十大交易系统之一”(据公开资料)。在2007年的采访中,Fitschen还介绍了他的另一项贡献——Start-Trade Drawdown标准,这是一种比传统回撤指标更适合小账户交易者的风险评估方法。

趣闻:Aberration这个名字本身就有“偏离、异常”的含义——这与策略的逻辑完美契合:它捕捉的是价格“偏离”正常波动范围(突破布林带)的时刻。Fitschen在武器导航系统中处理噪声数据的经验,让他深刻理解了“如何从混乱中提取信号”——这正是趋势跟踪策略的核心能力。一个设计武器导航系统的人,最终设计出了全球最成功的交易系统之一——这个故事的讽刺意味和启发意义同样深刻。

老陈点评
Keith Fitschen的背景告诉我们一个重要的道理:量化交易最需要的技能,不是金融知识,而是处理数据的能力。 Fitschen不是金融专业出身,但他懂得如何从含噪声的数据中提取有用信息——这恰恰是量化交易的核心。金融市场的本质就是一堆噪声,而量化交易者的工作就是从噪声中识别信号。 在这个意义上,一个武器导航系统工程师和一个量化交易员,做的是同一件事。

老王补充
Fitschen在1981年用64K内存的电脑开始做量化——那时候的电脑连今天的一个网页都加载不了。他用《华尔街日报》手工收集数据,一个字一个字地录入系统。我们今天用Python一行代码就能下载十年数据,还有什么理由说“做不了量化”? 工具在进步,但做量化的核心能力——从数据中找规律——从来没有变过。

六、Python回测示例

以下代码演示Aberration策略在期货品种上的回测框架。采用日线数据,包含布林带通道计算、突破入场和中轨出场。

import pandas as pd
import numpy as np
import yfinance as yf
from datetime import datetime, timedelta

# 注意:
# 1. 本代码为Aberration策略框架,需要获取日频价格数据
# 2. 原版策略同时交易8个品种,本代码演示单品种逻辑
# 3. 期货数据建议使用聚宽、天勤(TqSdk)或万得(Wind)获取
# 4. 实盘建议同时运行多个品种,实现多品种分散


def calculate_bollinger_bands(close, period=26, num_std=2):
    """
    计算布林带
    参数:
        close: 收盘价序列
        period: 周期(默认26)
        num_std: 标准差倍数(默认2)
    返回:中轨、上轨、下轨
    """
    mid = close.rolling(period).mean()
    std = close.rolling(period).std()
    top = mid + num_std * std
    bottom = mid - num_std * std
    return mid, top, bottom


def aberration_strategy(
    data,                 # 日线数据,含'Open','High','Low','Close'列
    period=26,            # 布林带周期
    num_std=2,            # 标准差倍数
    cost_rate=0.0001,     # 双边交易成本
    use_trailing_stop=False,  # 是否使用追踪止损
    trailing_atr=2.0      # 追踪止损ATR倍数
):
    """
    Aberration策略
    参数:
        data: 日线K线数据
        period: 布林带周期
        num_std: 标准差倍数
        cost_rate: 双边交易成本
        use_trailing_stop: 是否使用追踪止损
        trailing_atr: 追踪止损ATR倍数
    返回:添加了持仓和净值的DataFrame
    """
    df = data.copy()
    df = df.sort_index()
    
    # 1. 计算布林带
    df['MID'], df['TOP'], df['BOTTOM'] = calculate_bollinger_bands(
        df['Close'], period, num_std
    )
    
    # 2. 计算ATR(用于追踪止损)
    df['H-L'] = df['High'] - df['Low']
    df['H-PC'] = (df['High'] - df['Close'].shift(1)).abs()
    df['L-PC'] = (df['Low'] - df['Close'].shift(1)).abs()
    df['TR'] = df[['H-L', 'H-PC', 'L-PC']].max(axis=1)
    df['ATR'] = df['TR'].rolling(14).mean()
    
    # 3. 生成入场信号
    df['Long_Signal'] = (df['Close'] > df['TOP']) & (df['Close'].shift(1) <= df['TOP'].shift(1))
    df['Short_Signal'] = (df['Close'] < df['BOTTOM']) & (df['Close'].shift(1) >= df['BOTTOM'].shift(1))
    
    # 4. 生成出场信号(中轨回归)
    df['Exit_Long'] = (df['Close'] < df['MID']) & (df['Close'].shift(1) >= df['MID'].shift(1))
    df['Exit_Short'] = (df['Close'] > df['MID']) & (df['Close'].shift(1) <= df['MID'].shift(1))
    
    # 5. 模拟持仓
    df['Position'] = 0
    df['Entry_Price'] = np.nan
    position = 0
    entry_price = 0.0
    trade_count = 0
    highest_price = 0.0   # 持仓期间最高价(用于追踪止损)
    lowest_price = np.inf # 持仓期间最低价(用于追踪止损)
    
    for i in range(period, len(df)):
        price = df['Close'].iloc[i]
        mid = df['MID'].iloc[i]
        
        # 更新持仓期间的极值
        if position != 0:
            if position == 1:
                highest_price = max(highest_price, price)
            else:
                lowest_price = min(lowest_price, price)
        
        # 检查追踪止损(注:追踪止损先于中轨出场执行,因为追踪止损更敏感)
        if use_trailing_stop and position != 0:
            if position == 1:
                stop_price = highest_price - trailing_atr * df['ATR'].iloc[i]
                if price < stop_price:
                    position = 0
                    entry_price = 0.0
                    trade_count += 1
                    highest_price = 0.0
                    lowest_price = np.inf
            else:
                stop_price = lowest_price + trailing_atr * df['ATR'].iloc[i]
                if price > stop_price:
                    position = 0
                    entry_price = 0.0
                    trade_count += 1
                    highest_price = 0.0
                    lowest_price = np.inf
        
        # 检查中轨出场
        if position == 1 and df['Exit_Long'].iloc[i]:
            position = 0
            entry_price = 0.0
            trade_count += 1
            highest_price = 0.0
            lowest_price = np.inf
        elif position == -1 and df['Exit_Short'].iloc[i]:
            position = 0
            entry_price = 0.0
            trade_count += 1
            highest_price = 0.0
            lowest_price = np.inf
        
        # 检查入场信号(空仓时)
        if position == 0:
            if df['Long_Signal'].iloc[i]:
                position = 1
                entry_price = df['TOP'].iloc[i]
                highest_price = entry_price
                lowest_price = np.inf
            elif df['Short_Signal'].iloc[i]:
                position = -1
                entry_price = df['BOTTOM'].iloc[i]
                lowest_price = entry_price
                highest_price = 0.0
        
        df.loc[df.index[i], 'Position'] = position
        if position != 0:
            df.loc[df.index[i], 'Entry_Price'] = entry_price
    
    # 6. 计算收益率
    df['Returns'] = df['Position'].shift(1) * (df['Close'] - df['Close'].shift(1)) / df['Close'].shift(1)
    df['Returns'] = df['Returns'] - cost_rate * (df['Position'] != df['Position'].shift(1)).astype(int)
    df['Net_Value'] = (1 + df['Returns']).cumprod()
    
    total_return = (df['Net_Value'].iloc[-1] - 1) * 100
    max_drawdown = ((df['Net_Value'].cummax() - df['Net_Value']) / df['Net_Value'].cummax()).max() * 100
    
    print(f"总收益率:{total_return:.2f}%")
    print(f"最大回撤:{max_drawdown:.2f}%")
    print(f"交易次数:{trade_count}")
    
    return df


# 使用示例(伪代码):
#
# from tqsdk import TqApi, TqAuth
#
# api = TqApi(auth=TqAuth("your_account", "your_password"))
# # 获取日线K线数据
# kline = api.get_kline_serial("SHFE.rb", 60*60*24)  # 日线
# df = kline.to_dataframe()
#
# # 运行策略
# result = aberration_strategy(df, period=26, num_std=2)
# print(result[['Close', 'TOP', 'MID', 'BOTTOM', 'Position', 'Net_Value']].tail(10))

# ==================== 多品种组合回测框架 ====================

def multi_symbol_aberration(data_dict, period=26, num_std=2, capital_per_symbol=100000):
    """
    多品种Aberration策略组合
    参数:
        data_dict: {品种名称: 日线DataFrame} 的字典
        period: 布林带周期
        num_std: 标准差倍数
        capital_per_symbol: 每个品种的初始资金
    返回:组合净值

    注:本函数假设所有品种的数据时间范围一致。如有不一致,
    建议在调用前对数据进行对齐处理,避免因缺失值填充导致的净值偏差。
    """
    results = {}
    total_nav = pd.Series(index=pd.DatetimeIndex([]), dtype=float)
    
    for symbol, data in data_dict.items():
        result = aberration_strategy(data, period, num_std)
        results[symbol] = result
        # 计算该品种的净值
        nav = result['Net_Value'] * capital_per_symbol
        if total_nav.empty:
            total_nav = nav
        else:
            # 对齐日期
            total_nav = total_nav.add(nav, fill_value=0)
    
    # 计算组合净值
    total_nav = total_nav.fillna(method='ffill')
    total_nav = total_nav / total_nav.iloc[0]
    
    print(f"组合最终净值:{total_nav.iloc[-1]:.2f}")
    print(f"组合年化收益率:{(total_nav.iloc[-1] ** (252/len(total_nav)) - 1) * 100:.2f}%")
    
    return total_nav

回测结果参考(基于公开数据,不同品种和时段结果存在显著差异):

指标参考值
年化收益率15%-35%
最大回撤10%-25%
胜率30%-40%
盈亏比3-5
年均交易次数/品种3-4次
平均持仓天数约60天

:以上数据为不同Aberration策略的历史回测参考值,具体表现取决于品种选择、市场环境和参数设置。Aberration策略的胜率天然偏低(30%-40%),其盈利来源是“大赚小亏”——少数几笔大盈利覆盖多数小亏损。多品种分散是策略的核心,单品种回测无法体现其真正的风险收益特征。

代码说明
本代码为Aberration策略框架,核心逻辑是布林带通道突破入场、中轨回归出场。实际应用中,建议同时运行8-10个低相关性品种,实现多品种分散。代码中包含了追踪止损的选项(use_trailing_stop),可作为原版策略的改进方向。期货数据建议使用聚宽、天勤(TqSdk)或万得(Wind)等专业数据源。多品种组合函数中,建议确保所有品种的数据时间范围一致,避免因缺失值填充导致的净值偏差。

老陈点评
回测时要注意:Aberration策略的回测结果对多品种组合极其敏感。单品种回测可能看起来很差,但8-10个品种的组合可能效果很好——因为不同品种的趋势启动时间不同,组合后的资金曲线会平滑很多。多品种分散不是“锦上添花”,而是Aberration策略的“核心组件”。

老王补充
实盘中最大的问题是资金规模。Aberration需要同时交易8-10个品种,每个品种都需要保证金和风险资金。如果你的资金不够大,强行做多品种会导致每个品种的仓位都很小,无法覆盖交易成本。资金小的,可以先从2-3个品种开始,等资金增长后再逐步增加品种。

七、本章小结与思考题

小结

项目核心要点
策略类型长线趋势跟踪,基于布林带通道
核心公式中轨=MA(26);上轨=中轨+2×STD;下轨=中轨-2×STD
入场逻辑突破上轨做多,跌破下轨做空
出场逻辑价格回归中轨平仓
核心优势逻辑极简,长期业绩验证,多品种分散平滑曲线
最大风险长期震荡市中无信号或假信号,资金闲置
资金门槛中等偏高(需多品种分散)
改进方向追踪止损、多品种动态配置、波动率过滤

Aberration策略是长线趋势跟踪中最简洁、最经典的代表之一——它只用三条线(布林带的上、中、下轨)就构建了一套完整的交易系统:突破入场、回归出场。简洁但不简单——它的简洁背后是对“趋势跟踪”本质的深刻理解:趋势不需要复杂的预测,只需要在它出现时在场。

Aberration vs 已学的第一类策略

维度海龟交易法则(第一.01)Dual Thrust(第一.02)Aberration(第一.03)
通道类型唐奇安通道(最高/最低价)开盘价+波动幅度布林带(均线+标准差)
出场逻辑反向突破+追踪止损反向突破中轨回归
典型周期数天至数周(中短线)日内(短线)数月(长线)
仓位管理金字塔加仓一次性建仓一次性建仓
多品种推荐可选核心要求
策略复杂度中等极低

Aberration vs 海龟:两者都是趋势跟踪策略,但通道类型不同。海龟用唐奇安通道(基于最高/最低价),对价格极端值更敏感;Aberration用布林带(基于均线+标准差),对波动率变化更敏感。海龟抓的是“价格新高”,Aberration抓的是“波动率扩张”。

老陈总结
Aberration的价值在于它的极简主义——没有复杂的信号过滤,没有多层次的止损机制,只有三条线和两条规则(突破入场、回归出场)。这种极简主义让它穿越了三十多年的市场周期,始终保持在顶级策略的行列。在量化交易中,复杂不等于有效,简单不等于无效。 Aberration证明了:一个策略的生命力,不在于它有多聪明,而在于它有多稳定。

老王总结
Aberration是我见过的最“懒人友好”的策略之一——一年只需要交易3-4次,平均持仓60天,不用天天盯盘。但“懒人友好”不等于“容易赚钱”。你需要忍受长时间的持仓不动、忍受连续几个月没有交易机会、忍受单品种的低胜率。 能忍受这些的人,才能享受到Aberration带来的长期复利。如果你做不到,就别碰这个策略。

💡 思考题

1.Aberration和布林带均值回归(第二.01)都使用了布林带通道,但两者的入场方向完全相反。请分析这两种策略分别在什么市场环境下有效,在什么环境下失效。

2.Aberration策略的胜率通常只有30%-40%,但盈亏比可以达到3-5。你认为这种“低胜率、高盈亏比”的特征,对交易者的心理意味着什么?在连续亏损时,你如何判断“策略还在正常工作”而不是“策略已经失效”?

3.原版Aberration同时交易8个品种。如果只交易1个品种,策略的风险收益特征会发生什么变化?你认为最少需要多少个品种才能体现Aberration的多品种分散优势?(提示:关键不是数量,而是品种之间的相关性。8个高度相关的品种不如4个低相关的品种分散效果好。)

4.Aberration的出场逻辑是“价格回归中轨即平仓”。如果改用追踪止损(如2倍ATR)来替代中轨出场,策略的收益和回撤会如何变化?你认为哪种出场方式更适合长线趋势跟踪?

5.Fitschen的武器导航系统背景让他深刻理解了“如何从噪声中提取信号”。在量化交易中,价格数据同样充满了噪声。你认为Aberration的布林带通道在“降噪”方面做得好吗?它是否存在“过度降噪”导致信号滞后的风险?

6.在原版Aberration的多品种分散方案中,期货品种之间天然具有较低的相关性。如果将这一理念迁移到A股ETF上,你认为哪些ETF组合的相关性最低?请从宽基(沪深300/创业板/科创50)、行业(证券/半导体/消费/新能源)、跨境(纳指/恒生)、商品(黄金)等类别中,选择5-8个你认为相关性最低的品种,并说明你的选择逻辑。

7.(展望题) Keith Fitschen从武器导航系统跨界到量化交易,他的背景(随机估计、噪声数据处理)与量化交易的核心能力高度契合。你认为在未来,哪些跨学科背景的人最有可能在量化领域取得成功?请从“数据处理”“模式识别”“系统设计”三个角度分析。

八、引用/参考出处

网上内容

学术论文与图书(元信息)

  • Keith Fitschen, Building Reliable Trading Systems: Tradable Strategies That Perform As They Backtest and Meet Your Risk-Reward Goals, Wiley, 2013.(Aberration发明者的专著,系统阐述了可靠交易系统的构建方法)
  • 濮元恺,《量化投资技术分析实战:解码股票与期货交易模型》,电子工业出版社,2019。(第3.2节详细介绍了Aberration系统)
  • Technical Analysis of STOCKS & COMMODITIES杂志,2007年8月号,Keith Fitschen专访
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容

欢迎注册,发表评论

邀请码为:381K7Y9CR9p3UjF