Skip to content
Go back

量化交易探索-基础知识(一)

Edit page

工具篇的两篇搞定了 AKShare 数据源和 vnpy 回测框架,海龟策略也跑通了。回过头看,会发现很多概念在写代码时默认自己懂,但真要说清楚”为什么这么算、为什么是这个值”其实说不出所以然——这是后端开发者接触量化最容易踩的坑:技术栈跑通了,但对领域知识只是模糊感知。

这一篇把量化研究需要的股票基础系统性补一遍。结构上按照一个自然的认知递进来组织:

市场是什么(交易对象与规则)→ 数据是什么(K 线与量价)→ 怎么分析(技术指标)→ 怎么形成策略(两大流派)→ 真实世界的摩擦(成本)→ 怎么活下来(风险管理)→ 怎么评估好坏(回测指标与陷阱)→ 闭环(重读海龟代码)

每一层都建立在前一层之上。读完你应该能完整解释工具篇(二)里策略代码的每一行为什么这么写。

Table of contents

Open Table of contents

第一层:市场是什么

写策略之前,先搞清楚交易的对象和市场的运行机制。这一层是所有后续内容的地基。

1.1 股票、指数、ETF:你交易的到底是什么

三个概念经常被混着说,但它们本质完全不同:

个股、指数、ETF 的关系

股票(Stock):一家公司的所有权凭证。买入 100 股平安银行,你就是平安银行的(微型)股东。可以直接交易。

指数(Index):按某种规则从一堆股票计算出来的一个数字。沪深300指数 = 沪深两市市值最大、流动性最好的 300 只股票按市值加权算出的值。指数本身不可交易——它只是个数字,就像”全班平均分”不能被买卖一样。

ETF(Exchange Traded Fund,交易型开放式指数基金):为了让普通人能”买指数”,基金公司按指数成分股的比例买入一篮子股票,打包成基金份额在交易所上市。像股票一样可以随时买卖。510300(沪深300ETF)就是跟踪沪深300指数的 ETF。

为什么个人量化从 ETF 起步是共识

工具篇里选 510300 做回测标的,就是这些原因。

1.2 市场怎么撮合:盘口、订单、价差

你在代码里写 self.buy(price, volume),这笔订单到了交易所之后发生了什么?答案藏在盘口(Order Book)里:

盘口:等待成交的挂单队列

盘口结构:任意时刻,市场上都有一堆没成交的挂单在排队。卖方挂单从低到高排(卖一最便宜),买方挂单从高到低排(买一出价最高)。卖一价和买一价之间的差叫买卖价差(Bid-Ask Spread)

两种基本订单类型

这跟回测的关系:vnpy 回测里 self.buy(bar.close_price, shares) 提交的是限价单,撮合引擎用”当 bar 的 low <= 挂单价即成交”来模拟。这个模拟忽略了排队——真实市场里同价位可能有几百万股排在你前面。这是回测天然比实盘乐观的原因之一,也是设置 slippage 参数的理论依据。

价差是隐性成本:主流 ETF 价差通常只有 0.001 元(一个最小报价单位),冷门品种可能差好几个价位。用市价单交易冷门品种,一买一卖光价差就能吃掉千分之几。

1.3 A 股游戏规则

跑过美国市场回测的策略直接搬到 A 股会踩坑,因为 A 股有几个独有约束:

A 股交易时间轴 + T+1 规则

交易时段:一天只有 4 小时。

盘后固定价格交易:2026 年 7 月 6 日起,适用范围由原来的科创板、创业板扩大到全部 A 股及沪深市场 ETF。以当日收盘价成交(投资者无法自主定价),按时间优先撮合。新股上市首日、退市整理期、当日停牌股票不适用。

注意别和美股的盘前盘后混为一谈:AKShare 里的 postVol/postAmt 是为美股盘前盘后行情准备的字段,与 A 股这个机制不是一回事——要用 A 股盘后数据,先确认你调的接口是否真的覆盖了它。

T+1 制度:今天买入的股票/ETF,最早明天才能卖。影响:

涨跌停:主板 ±10%、创业板/科创板 ±20%、北交所 ±30%。涨停买不进、跌停卖不出。回测引擎默认也不模拟这个——如果你的策略信号经常出现在涨跌停日,回测会严重高估。

⚠️ 2026 年 7 月 6 日起 ST 股规则有变:主板 ST/*ST 股的涨跌幅由 ±5% 上调至 ±10%,与主板其他股票一致,涉及约 150 只个股。同时,连续三个交易日收盘价涨跌幅偏离值的异常波动披露阈值由 ±12% 调整为 ±20%。用历史数据回测时要注意这个时间分界——2026 年 7 月 6 日之前的 ST 股行情仍受 ±5% 约束。

最小交易单位:买入必须是 100 股(1 手)的整数倍,卖出可以卖零头。海龟策略代码里 int(shares/100)*100 就是在满足这个约束。

第二层:数据是什么

搞清楚市场规则后,第二层认知是:策略看到的”市场”,其实是一串 OHLCV 数据。理解这串数据怎么来的、有什么坑,是数据清洗的第一课。

2.1 K 线:市场的最小信息单元

一根 K 线压缩了一个时间周期(1 分钟/1 天/1 周)内的四个价格:开盘 Open、最高 High、最低 Low、收盘 Close,加上成交量 Volume 合称 OHLCV。

K 线的构成:OHLC 四个价格 + 涨跌颜色

颜色规则注意:A 股和美股是反的。A 股红涨绿跌,美股绿涨红跌。很多海外量化库默认西方配色,画 A 股图会跟直觉相反。

实体与影线的信息

为什么用 K 线不用折线图:折线图只有收盘价,丢掉了日内的博弈信息。“大幅震荡但收平”的一天,折线图上什么都看不见,K 线上是一根长上下影线的十字星——完全不同的市场含义。

K 线序列:连续多根 K 线揭示趋势结构

一段 K 线序列能读出趋势、震荡、突破。海龟策略里 if bar.close_price > entry_up 本质就是把”突破”这个视觉直觉数学化:今天的收盘价穿过了过去 N 天所有 K 线的最高点 = 创出新高 = 突破

2.2 复权:数据清洗第一课

AKShare 接口的 adjust 参数有三个取值:""(不复权)、"qfq"(前复权)、"hfq"(后复权)。选错了,整个回测都是错的。

复权:处理分红送股导致的价格跳变

问题的来源:公司送股(10 送 10)、派息(每股分 0.5 元)时,股价会跳空低开——不是公司变差了,只是每股代表的份额变小了。10 送 10 后股价直接砍半,但股东总市值不变(股数翻倍了)。

不复权的数据直接跑回测会发生什么

前复权 vs 后复权

回测用前复权,理由:策略要用当前价格下单,前复权保证下单价真实;指标计算需要连续序列。唯一的代价是历史价格会随每次新除权而变化——对回测无影响,但如果你把数据存进本地数据库长期用,记得定期全量刷新而不是增量追加。

2.3 量价关系:数据的另一半

价格告诉你市场”最终往哪走”,成交量告诉你”这个决定有多大力量在推动”。只看价格不看量,等于只看结论不看论据

volume(成交量,股数)和 amount(成交额,金额)的关系:amount / volume ≈ 当日均价

量价关系:价格突破配合放量 = 高质量信号

几个业内共识

量价组合解读
价涨 + 量增高质量上涨(真实资金推动)
价涨 + 量缩弱势上涨(后继乏力,易回调)
突破前高 + 放量高质量突破(很多策略的过滤条件)
急跌 + 巨量恐慌抛售(可能接近短期底部)

在策略里的应用:海龟策略是纯价格突破,没看量。真实改进方向是加一个量能过滤——“突破 20 日高点 当日量 > 20 日均量 × 1.5”——能过滤掉相当一部分假突破。这是后续因子增强的第一步。

第三层:怎么分析——技术指标体系

有了干净的数据,第三层是从数据里提取信号。技术指标本质上都是对 OHLCV 的数学变换,按用途分三类:趋势类、波动类、动量类

3.1 趋势类:均线家族

先说它解决什么问题。每天的收盘价是一串跳来跳去的数字,今天涨 2%、明天跌 1.5%,光看单日根本判断不出方向。这就像每天早上称体重:单日数字受喝水、进食影响上下浮动一斤很正常,你不会因为今天重了半斤就认定自己胖了——但如果看最近七天的平均值在稳步上升,那才是真的在长胖。

均线做的就是这件事:用平均值把”每天的随机波动”抹平,只留下方向。用信号处理的话说,这是一个低通滤波器,滤掉高频噪声、保留低频趋势。

MA(N) = 最近 N 天收盘价的平均

手算一遍就懂了。假设某只 ETF 最近 5 天收盘价是 10, 11, 12, 11, 13

MA5 = (10 + 11 + 12 + 11 + 13) / 5 = 11.4

第六天收盘 15,此时窗口向前滑动一格——去掉最早的 10,加入新的 15:

MA5 = (11 + 12 + 11 + 13 + 15) / 5 = 12.4

均线从 11.4 抬到 12.4,这个”抬头”才是趋势信号。注意关键点:均线上不上行,取决于新进来的价格比被挤出去的价格高还是低。新价 15 高于被挤出的 10,所以均线上行。理解了这一点,你就知道为什么均线天然滞后——它反映的是过去 N 天的平均状态,价格已经涨了好几天,均线才慢慢跟上来。

不同周期的移动平均线反映不同层级的趋势

周期怎么选:N 越大越平滑、越滞后。常用的几个周期各自对应一个观察尺度:

周期对应时间用途
MA5一周短期情绪,噪声大
MA20一个月最常用的中期趋势线
MA60一季度中长期趋势
MA250一年年线,常被视为牛熊分界

为什么是 5/20/60/250 这几个数?因为 A 股一周 5 个交易日、一月约 20 个、一季约 60 个、一年约 250 个。这些数字没有任何数学上的神圣性,只是交易日历的自然产物——别把它们当成经过验证的最优参数。

三种算法变体,区别只在”怎么给每天分配权重”:

举个能看出差别的例子:价格连续 20 天横盘在 10 元,第 21 天突然跳到 15 元。SMA20 只会从 10 涨到 10.25(多出来的 5 元被 20 天摊薄),而 EMA20 大约会跳到 10.48——EMA 对新价格的反应快接近一倍。代价是它也更容易被单日异常值带偏。趋势策略常用 EMA 求快,滤波去噪常用 SMA 求稳。

图上怎么看

经典信号:金叉(短均线上穿长均线,视为买入)、死叉(短均线下穿长均线,视为卖出)。

局限,也是最常见的误用:金叉死叉在震荡市会反复打脸。价格上蹿下跳但没有方向时,短均线会来回穿越长均线,每一次都产生信号,每一次都是假的。一个月内出现五六次金叉死叉、每次都在小亏中止损,手续费还照收不误——这种”反复挨刀”是新手用均线策略亏钱的头号原因。

更根本的问题是:均线交叉只能告诉你”过去两个时间尺度的平均值发生了交叉”,它不包含任何关于”现在是不是趋势市”的信息。而它偏偏只在趋势市有效。

这正是海龟策略选择”突破”而非”金叉”的原因:bar.close_price > entry_up(收盘价创 20 日新高)是比均线交叉更强的条件——震荡市里价格来回摆动,很难持续创出新高,天然过滤掉了一部分假信号。

3.2 趋势类进阶:MACD

均线告诉你”在往哪走”,MACD 想回答的是下一个问题:“走得还有没有劲?”

用开车打个比方。均线相当于速度表——告诉你当前多快。而 MACD 更像加速度:车速还是 100 码,但油门已经松了、速度在缓慢下降,这个变化速度表要过一会儿才体现,加速度立刻就知道。趋势也一样:价格还在涨,但涨势的力度可能已经在衰减了。

DIF  = EMA(12) - EMA(26)      快慢均线的差
DEA  = EMA(DIF, 9)             DIF 再平滑一次
MACD = 2 × (DIF - DEA)         柱状图

逐行拆开看

第一行 DIF:快均线减慢均线。为什么这个差值有意义?因为 EMA12 反应快、EMA26 反应慢,价格上涨时快线先动、涨得比慢线多,两者的差距会拉大;上涨乏力时,快线先停下来,差距开始收窄。所以 DIF 本质是”快慢两条线的张口大小”,张口越大说明趋势越强。

第二行 DEA:把 DIF 再做一次 9 日 EMA 平滑,得到一条更迟钝的参考线。它的作用就是给 DIF 当”基准”——DIF 比自己的近期平均值高,说明动能正在加速。

第三行柱状图2 × (DIF - DEA),画成红绿柱。柱子变长=动能加速,柱子缩短=动能减速。注意柱子缩短不等于下跌——它只是说”还在涨,但涨得没那么猛了”。

MACD 指标:短期均线与长期均线的差值

图上怎么看,按重要性从低到高:

  1. 金叉死叉:DIF 上穿 DEA 为金叉,下穿为死叉。最直观,但也最滞后。
  2. 零轴位置:DIF 在零轴上方运行 = 处在多头格局;零轴附近反复穿越 = 震荡市,这时候所有 MACD 信号都不可信。
  3. 柱状图的伸缩节奏:连续几根柱子逐根缩短,往往早于金叉死叉给出预警。

背离,最值得关注的信号。价格创出新高,但 MACD 的 DIF 没有同步创新高,这叫顶背离

价格:  高点 A (10.0元)  →  高点 B (10.5元)   ← 价格创新高
DIF :  高点 A (0.35)    →  高点 B (0.22)     ← 动能反而变弱

含义很直白:这一波新高是”硬撑”上去的,推动它的力量比上一波小了。很多资深交易员宁信背离不信交叉,因为背离反映的是能量层面的变化,而交叉只是价格层面的滞后确认。底背离同理,方向相反。

常见误用

3.3 波动类:ATR 与布林带

前面两类指标都在回答”往哪走、有多大劲”。波动类回答的是另一个维度的问题:“这条路有多颠簸?”

这个维度极其重要,却最容易被新手忽略。同样是预期赚 5%,一只每天波动 1% 的股票和一只每天波动 8% 的股票,风险完全不是一回事——后者可能在到达目标前就先把你震出局。仓位该买多少、止损该设多远,全都取决于波动率,而不是取决于你多看好它。

ATR:波动率的尺子

ATR 全称 Average True Range,中文叫平均真实波幅,衡量的就是”最近平均每天波动多少钱”。

为什么不直接用”最高价 − 最低价”?因为它会漏掉跳空。假设某只股票昨天收在 10.0 元,今天受利好影响直接从 10.8 开盘,全天在 10.8~11.0 之间窄幅整理:

当日振幅  = 11.0 − 10.8 = 0.2 元     ← 看起来"很平静"
实际波动  = 11.0 − 10.0 = 1.0 元     ← 相对昨收,其实动了 10%

只看日内振幅会得出”今天很平静”的错误结论。所以 True Range 取三者中的最大值

TR = max(
  当日最高 − 当日最低,      ← 日内振幅
  |当日最高 − 昨日收盘|,     ← 向上跳空的情况
  |当日最低 − 昨日收盘|      ← 向下跳空的情况
)

上面那个例子里,三个值分别是 0.2、1.0、0.8,取最大值 1.0——跳空被正确捕捉到了。ATR 就是把 TR 做 N 日平均(通常 N=14 或 20)。

ATR 的数值怎么读:ATR 是绝对金额,不是百分比。某 ETF 价格 4.00 元、ATR = 0.06,意思是”最近平均每天上下动 6 分钱”,约合 1.5%。所以跨品种比较时必须换算成 ATR / 价格 才有可比性——直接比较两只不同价位股票的 ATR 数值是没有意义的。

海龟策略用它做两件事,这也是 ATR 最经典的用法:

risk_cash = 100_000 × 0.02 = 2000# 单笔愿承担的风险
unit_risk = 2 × ATR = 2 × 0.06 = 0.12# 每份承担的风险
shares    = 2000 / 0.12 → 约 1600# ① 算仓位
long_stop = 4.002 × 0.06 = 3.88# ② 定止损

注意这个设计的精妙之处:波动越大,ATR 越大,算出来的 shares 越小。策略自动地在颠簸的路上少装货、在平坦的路上多装货,让每一笔交易承担的风险金额大致相等,而不是每一笔买入相同的股数或相同的金额。这是海龟策略最值得借鉴的一点,比它的入场信号重要得多。

布林带:把波动率画成通道

布林带是均线 ± 2 倍标准差构成的上下轨。标准差就是统计学里衡量”数据有多分散”的那个量——数据越散,带子越宽。

中轨 = MA20
上轨 = MA20 + 2 × 标准差
下轨 = MA20 − 2 × 标准差

为什么是 2 倍?因为正态分布下约 95% 的样本落在均值 ±2 个标准差以内。所以理论上价格有 95% 的时间应该待在通道里,触及边界属于”相对少见”的事件。

但要清醒一点:股价收益率并不服从正态分布,它的尾部比正态分布厚得多(极端行情出现的频率远高于理论值)。所以”95%“只是个粗略的心理参照,不能当作严格的概率保证——真实市场里价格沿着上轨走十几天不回头是很常见的。

布林带:均值 ± 2 倍标准差

图上最该看的其实是带子的宽窄变化,而不是价格碰到哪条线:

两种互斥的用法,注意方向完全相反:

均值回归框架突破框架
触及上轨超买,卖出强势启动,买入
触及下轨超卖,买入破位,卖出
适用市况震荡市趋势市

同一个”价格触及上轨”的信号,两种框架下操作完全相反。这不是谁对谁错,而是它们对当前市场状态的假设不同。用哪一种,取决于你判断现在是震荡市还是趋势市——而这个判断本身,恰恰是最难的部分。这个矛盾正是第四层要展开的核心话题。

3.4 动量类:RSI

动量类指标回答第四个问题:“最近这段时间,买方和卖方谁的力气更大?”

RSI 的思路非常朴素——把最近 N 天分成上涨日和下跌日两堆,比一比两堆的总幅度谁大。全是上涨日就接近 100,全是下跌日就接近 0,势均力敌就在 50 附近。

RS  = N 日内平均涨幅 / N 日内平均跌幅
RSI = 100 − 100 / (1 + RS)

这个式子等价于下面这个更直观的形式:

RSI = 100 × 平均涨幅 / (平均涨幅 + 平均跌幅)

手算一遍。取 N=6,某只股票这 6 天的日涨跌幅是 +2%, +1%, −1%, +3%, −0.5%, +1.5%

上涨日:+2, +1, +3, +1.5  → 总涨幅 7.5,平均涨幅 7.5/6 = 1.25
下跌日:−1, −0.5          → 总跌幅 1.5,平均跌幅 1.5/6 = 0.25

RS  = 1.25 / 0.25 = 5
RSI = 100 − 100/(1+5) = 83.3

83.3 说明这 6 天里买方力量压倒性占优。注意分母用的是 N(总天数)而不是下跌日的天数——这是标准算法,很多人手推时会算错这一步。

常规读法

但这个”常规读法”恰恰是 RSI 最大的坑。强趋势里 RSI 会长期钉在极值区:连涨 20 天,RSI 可能一直在 75~85 之间徘徊,一次都不回到 70 以下。如果你机械地按”超买就卖”操作,会在行情刚启动时就下车,然后眼睁睁看着它再涨 50%——这是新手用 RSI 亏钱最典型的方式。

原因不难理解:RSI 衡量的是相对强度,而不是绝对高度。它说的是”最近买方比卖方强得多”,这在强势行情里本来就是常态,是趋势健康的表现,不是”太高了要跌”的信号。

所以更靠谱的用法有两个

  1. 背离,而不是绝对值。价格创新高但 RSI 没创新高,说明这一波的推动力弱于上一波——和 MACD 背离是同一个逻辑,只是换了个衡量动能的口径。
  2. 做过滤器,而不是做主信号。例如趋势策略只在 RSI < 70 时才允许开新仓,避免在最疯狂的位置追进去;或者反过来,只在 RSI > 50 时才接受买入信号,确保顺着中期强弱方向做。

一句话总结这一节:RSI 适合用来”否决”信号,不适合用来”产生”信号。


四类指标讲完了,可以看出一条清晰的脉络:它们分别回答方向(均线)、动能(MACD)、波动(ATR / 布林带)、强弱(RSI)四个不同维度的问题。

但请注意一个贯穿始终的事实:所有技术指标都是 OHLCV 的数学变换,没有任何一个引入了新信息。它们只是把同一份价量数据换个角度呈现出来,帮你看清某个侧面。这意味着——

第四层:怎么形成策略——两大流派

指标只是原材料,策略是把指标组织成”什么时候买、什么时候卖”的完整规则。所有策略归根结底属于两大流派之一:

趋势跟踪 vs 均值回归:同一信号两种相反解读

4.1 趋势跟踪(Trend Following)

信念:涨了还会涨,跌了还会跌(动量效应)。

行为:追涨杀跌。突破新高买入,跌破新低卖出。不求买在最低卖在最高,只求吃到趋势的中段。

盈亏特征低胜率 + 高赔率。大部分交易小亏(假突破被止损),少数几笔大赚(抓住真趋势)。海龟策略 4 年 14 笔交易大部分亏损、靠 2024 年 9 月一波翻正,就是教科书式的呈现。

适合市场:单边趋势市。最怕震荡市(反复假突破)。

4.2 均值回归(Mean Reversion)

信念:涨多了要跌回来,跌多了要涨回去(价格围绕价值波动)。

行为:低买高卖。偏离均值过远时反向操作,回到均值时平仓。

盈亏特征高胜率 + 低赔率。大部分交易小赚(价格确实回归了),偶尔巨亏(价格一去不回头——“这次不一样”的时候)。

适合市场:震荡市。最怕单边市(接飞刀接在半山腰)。

4.3 没有普适的圣杯

两个流派的盈亏结构互为镜像,没有谁绝对更好——关键是策略与市场状态的匹配。A 股大部分时间在震荡(这是工具篇海龟策略 Sharpe 只有 0.2 的根本原因),但趋势一旦来了幅度巨大(2024 年 9 月)。成熟的做法是:

这是后续”多策略组合”的理论基础。

第五层:真实世界的摩擦——交易成本

回测里每一笔交易都要付”过路费”。成本模型不准,回测就是自欺欺人。

5.1 A 股成本结构

项目费率说明
佣金万 1.5 - 万 3券商收,可协商,单笔最低 5 元
印花税千分之一只在卖出时收,国家税收
过户费万 0.1沪市股票专属

股票双边合计约万 4 到万 6.5

ETF 免印花税——这是 ETF 对量化最友好的一点,总成本只有股票的 1/2 到 1/10。工具篇里 rate=2.5e-5(万 0.25)就是 ETF 的典型佣金。

5.2 滑点:更隐蔽的成本

滑点 = 想按 4.150 成交、实际按 4.152 成交的差额。来源就是第一层讲的盘口机制:买卖价差、排队、大单冲击。回测里用固定值模拟(slippage=0.001),故意估高一点是好习惯——能提前淘汰”回测赚钱实盘亏钱”的边缘策略。

5.3 成本敏感度与交易频率

海龟策略 4 年 14 笔,总成本几十块钱,对 6.89% 的收益微不足道。但把同样的成本模型套到日内策略(一天 10 笔)上:4 年 1 万多笔,成本瞬间放大 1000 倍,直接决定策略生死。

规律:策略越活跃,对成本越敏感。这也是散户做高频永远打不过机构的结构性原因——机构佣金能谈到万 0.5 以下,散户谈不下来。个人量化选择低频策略(持仓数天到数月),某种意义上是在成本约束下的最优解。

第六层:怎么活下来——风险管理

策略决定你能赚多少,风控决定你能活多久。海龟策略里 risk_per_trade=0.02 这个数字,来自一个严肃的数学推理。

6.1 核心问题:连续判断错误时,账户能撑几笔?

每笔按固定比例 x 亏损,连亏 n 笔后剩余资金 = 本金 × (1−x)^n:

连续 50 笔全亏时不同单笔风险的资金衰减对比

单笔风险连亏 10 笔连亏 20 笔连亏 50 笔
1%剩 90%剩 82%剩 61%
2%剩 82%剩 67%剩 36%
5%剩 60%剩 36%剩 8%
10%剩 35%剩 12%基本归零

6.2 亏损与收益的不对称性

这是风控里最反直觉也最重要的数学事实:

回撤越深,回本难度指数级上升。保住本金不是保守,是数学最优

6.3 为什么是 2%

这个值来自 Van K. Tharp 对大量交易者行为数据的统计,与凯利公式的建议区间吻合。5% 是能力上限,10% 以上是赌博

第七层:怎么评估——回测指标与陷阱

跑完回测,拿什么标准判断策略好坏?以及,为什么回测好看的策略实盘经常崩?

7.1 核心评估指标

工具篇(二)的 calculate_statistics() 输出过这些,系统整理一下:

指标含义参考标准
总收益率(期末−期初)/期初必须跑赢同期指数,否则不如买 ETF 躺平
年化收益折算成每年的复合收益A 股长期指数年化约 8%,策略应显著高于此
最大回撤从峰值到谷底的最大跌幅个人策略 <20% 较好,>30% 心态很难扛
Sharpe 比率超额收益 ÷ 波动率<0 亏钱; 0.5-1 一般; 1-2 不错; >2 优秀; >3 可疑
胜率盈利笔数占比趋势策略 30-40% 正常,均值回归 60-70% 正常
盈亏比平均盈利 ÷ 平均亏损与胜率联合看:胜率 35% × 盈亏比 3:1 = 赚钱
收益回撤比年化收益 ÷ 最大回撤>1 及格,>2 良好

胜率和盈亏比必须联合看——这是第四层策略流派的量化呈现:趋势策略低胜率高盈亏比,均值回归反之。单看胜率会误杀所有趋势策略。

期望收益公式:E = 胜率 × 平均盈利 − (1−胜率) × 平均亏损。E > 0 且样本足够多,策略才成立。

7.2 回测的三大陷阱

回测好看只是必要条件,不是充分条件。三个最危险的陷阱:

过拟合:参数越多、回测越好看,实盘越危险

陷阱一:过拟合(Overfitting)

参数调得越多、越精细,策略就越”记住”了历史数据的噪声而不是规律。20 个参数精调出年化 40% 的回测,实盘大概率崩溃;2 个参数的简单策略回测平庸,但样本外往往依然稳定。

对策:参数尽量少;样本内调参、样本外验证(比如用 2019-2022 调参,2023-2024 验证);参数微调后结果剧变的策略不可信(参数平原 > 参数尖峰)。

陷阱二:前视偏差(Look-ahead Bias)

策略用了”当时不可能知道”的信息。经典错误:用当日收盘价决定当日买入(收盘价 15:00 才确定,但你 14:00 就”用”它下单了);用未来数据算的指标。海龟策略里 high_array[-N:-1] 特意不含当日,就是在防这个。

陷阱三:幸存者偏差(Survivorship Bias)

只用”活到今天”的股票回测。退市股从数据源里消失了,回测天然跳过了所有暴雷标的,结果系统性乐观。用 ETF 回测天然规避了大部分这个问题(指数会自动调出问题股),这是 ETF 起步的又一个隐藏优点。

第八层:闭环——重读海龟策略

现在把八层知识叠起来,重读工具篇(二)的核心代码,每一行都能说清楚”为什么”:

# 【第二层】唐奇安通道 = K 线序列前 N 天的最高点(不含当日,防前视偏差【第七层】)
self.entry_up = am.high_array[-self.entry_window:-1].max()

# 【第三层】ATR = 波动率度量,同时服务于仓位和止损
self.atr_value = am.atr(self.atr_window)

if self.pos == 0:
    # 【第二层+第四层】收盘价突破 K 线序列高点 = 趋势跟踪流派的入场信号
    if bar.close_price > self.entry_up:
        # 【第六层】单笔风险 2%:连亏 20 笔仍有翻身资本的数学解
        risk_cash = self.fixed_capital * self.risk_per_trade
        unit_risk = 2 * self.atr_value
        # 【第一层】A 股 100 股整数倍约束
        shares = int(risk_cash / unit_risk / 100) * 100

        # 【第一层】限价单进入盘口撮合;回测滑点模拟真实价差【第五层】
        self.buy(bar.close_price, shares)
        # 【第三层+第六层】止损位 = 入场价 - 2 倍波动:给正常波动留空间,超出即认错
        self.long_stop = bar.close_price - 2 * self.atr_value

策略回测出 Sharpe 0.2、胜率约 30%、最大回撤 -8.4%——用第七层的标准看:胜率低是趋势流派的正常特征(第四层),Sharpe 低是策略与震荡市场不匹配(第四层),回撤控制良好是 2% 风控的功劳(第六层)。每个数字都有出处,这就是体系化认知和碎片化知识的区别。

下一步

基础三件套齐了:工具(工具篇一、二)+ 领域知识(本篇)+ 跑通的完整策略。后续方向:

  1. 策略增强:量能过滤、市场状态过滤、MACD 背离检测叠加到海龟骨架上
  2. A 股规则建模:把 T+1、涨跌停约束加进 vnpy 回测,消除回测与实盘的系统性偏差
  3. 基础知识(二):基本面维度(PE/PB/ROE 怎么读、怎么用财务指标筛股)和市场结构(板块轮动、风格切换)

参考资料


Edit page
Share this post on:

Next Post
量化交易探索-工具篇(二):vnpy回测框架接入海龟策略