复盘上周作业:
用 vnpy + Claude Code 跑通了从「策略代码 → 数据加载 → 回测 → 结果分析」的完整闭环。
首先解决上周回测环境变量设置不合理导致的收益过低的问题:
- 1分钟K线 + 4449笔交易 = 成本吞噬利润
- 单只股票 + 高频 = 没有分散。A股单只股票的日内波动噪音极大。1分钟双均线在个股上频繁产生假信号,每次假信号都触发一次买卖 → 产生一次手续费 + 滑点。4449笔交易中,绝大多数可能是无效的噪音交易。
- 股票 vs 期货的参数混淆。被 vnpy 的复杂度拖累了——有很多不相关的概念分散了注意力。
核心认知: 量化策略本质上是一个从信息到决策的管道。
这一周最小闭环:
主题:修复第1周双均线 + 引入高股息低估值策略 + 完善只是点
策略调研 → 理解 → 代码实现 → 回测验证
说明:我为什么选择高股息低估值的策略进行研究
| 选项 | 优势 | 劣势 | 结论 |
|---|---|---|---|
| 双均线 | 已有代码 | 两次回测失败(1min过度交易+日线爆仓),沉没成本大 | ❌ |
| 行业轮动 | 思路好 | 数据量大、信号定义复杂、短时间跑不通 | ❌ |
| 高股息/低估值 | 参数少、天然低频、狗股理论背书、代码简单 | 牛市跑不赢指数(可写进④) | ✅ |
| PEG | 有名人背书 | 盈利增长率数据质量不稳 | 备选 |
| 自选 | — | 调研成本高 | ❌ |
信息源 → 信号逻辑 → 持仓组合 → 头寸方向 → 持仓周期
↑ ↑ ↑ ↑ ↑
看什么 怎么判断 买多少 做多还做空 持多久
信息源&信号逻辑:
狗股理论:
又称道琼斯指数狗股策略,指的是冷门老蓝筹。
核心逻辑-- 股价相对低估值、分红稳定、现金流扎实
道琼斯指数成分股,都是成熟的龙头,相对稳定,很难倒闭。加上相信价值投资,市场会慢慢修复到正确的估值,高息+低值回归,从而获得长期超额收益。

低估值:
常用两个估值指标筛选:
- PE(市盈率)\= 股价 / 每股净利润:越低代表用更少价格买下公司每年盈利;
静态市盈率(LYR)\滚动市盈率(PETTM)\动态市盈率
什么是市盈率?-基础篇_哔哩哔哩_bilibili


?:
- 适合哪些股票
- 选低还是高
-
历史百分位估值法怎么用,如何避坑
-
PB(市净率)\= 股价 / 每股净资产:越低代表股价越贴近公司净资产,下跌安全垫厚。
一口气看懂市净率!(入门科普系列二)_哔哩哔哩_bilibili
选股标准:PE、PB 处于自身历史分位低位(近 5/10 年 20% 分位以内),避开估值高位泡沫。
高股息:
股息率 \= 年度现金分红总额 ÷ 总市值(股价),是策略收益核心:
常规高股息标的:股息率>4% 为优秀,>5% 属于高分值(远高于银行定期存款、货币基金收益);
分红前提:公司盈利稳定、现金流充裕、分红政策固定(常年持续分红,不偶尔一次性大额分红)。
❌ 避雷:短期一次性高分红、靠变卖资产分红、业绩逐年下滑的 “虚假高股息”。
夏普率 \(=\) 每承受一单位风险,能拿到多少超额收益
用来衡量:这笔投资「风险性价比」高不高。
\((\text{夏普比率} = \frac{\text{组合年化收益率} - \text{无风险收益率}}{\text{组合年化波动率(风险)}})\)
以年化数据为准:
- <0:不如存无风险理财,策略很差
- 0~1:收益一般,风险偏高,性价比普通
- 1~2:不错,风险和收益匹配,主流合格策略
- >2:优秀,低风险、高收益,优质策略
- >3:非常顶尖的稳健策略
从数据来源总结:
综上,这是一个==基本面==来进行分析的一个策略。从被长期实证的狗股理论而来,然后根据相对估值的方法来获取相关的数据。从而从一个抽象的想法,量化成了一个可以被数据化交易的策略方法。
但也是由于数据是从,PE、PB、股息率获得,也能推理出这个策略的弊端。
- 低 PE / 低 PB 经常不是"被低估",而是市场正确地预判了盈利即将崩塌。
| 维度 | 具体表现 |
|---|---|
| 静态 PE 的欺骗性 | 公司卖资产、政府补贴、一次性退税导致当期利润虚高,PE 看着低,实际上扣非 PE 可能极高甚至为负 |
| 盈利崩塌窗口 | 周期股利润在顶部时 PE 最低,随后 2-4 个季度利润断崖式下降,PE 从 6 倍飙升到 60 倍 |
| A 股特殊性 | ST 退市新规下,净资产为负、营收不达标的公司 PE 可能很低,但面临退市风险 |
- 股息率高,原因往往是价格跌了
| 成因 | 股价 | 分红 | 可持续性 |
|---|---|---|---|
| 真金白银的稳定分红 | 稳定/上涨 | 稳定/增长 | 可持续 |
| 股价暴跌,分红尚未下调 | 大幅下跌 | 暂时维持 | 即将削减 |
| 特殊分红被当成常规分红 | 任意 | 一次性大增 | 不可持续 |
这是问题所在,也是后续策略改善的一个方向。
跑回测
伪代码示意
每月调仓日:
股票池 = 股息率 > 2% 且 0 < PE < 15 的股票
每只买 = 总资金 / len(股票池)(取整到100股)
不在池里的 → 卖掉
在池里的 → 买到目标仓位
测试1参数:
股息率 > 2% 且 0 < PE < 15

首个交易日: 2023-01-03
最后交易日: 2026-06-05
总交易日: 827
盈利交易日: 426
亏损交易日: 400
起始资金: 100,000.00
结束资金: 147,745.00
总收益率: 47.75%
年化收益: 13.86%
最大回撤: -14,269.97
百分比最大回撤: -11.94%
最长回撤天数: 142
总盈亏: 47,745.00
总手续费: 262.71
总滑点: 909.52
总成交金额: 875,684.92
总成交笔数: 2191
日均盈亏: 57.73
日均手续费: 0.32
日均滑点: 1.10
日均成交金额: 1,058.87
日均成交笔数: 2.649334945586457
日均收益率: 0.05%
收益标准差: 0.80%
Sharpe Ratio: 0.92
收益回撤比: 3.35
测试2参数:
股息率 > 3% 且 0 < PE < 10

首个交易日: 2023-01-03
最后交易日: 2026-06-05
总交易日: 827
盈利交易日: 427
亏损交易日: 399
起始资金: 100,000.00
结束资金: 142,312.07
总收益率: 42.31%
年化收益: 12.28%
最大回撤: -13,149.84
百分比最大回撤: -10.32%
最长回撤天数: 114
总盈亏: 42,312.07
总手续费: 252.34
总滑点: 956.85
总成交金额: 841,125.95
总成交笔数: 1341
日均盈亏: 51.16
日均手续费: 0.31
日均滑点: 1.16
日均成交金额: 1,017.08
日均成交笔数: 1.6215235792019347
日均收益率: 0.04%
收益标准差: 0.80%
Sharpe Ratio: 0.82
收益回撤比: 3.22
对比分析
整体趋势上看起来跑过了沪深300指数,但是能看到最大回撤还是跑到了11%,可能需要增加回撤风险管控。从日平均中能看到小额负收益的面积还是更大,但是在整体上看还是收益更多,整体来说比较接近,夏普率处于收益一般
两张图的区别来看,第二组增加了约束强度,更加偏向筛选出更加极限的股票,交易数量从2191降到了1341,手续费减少了,但是总收益却也降低了。
所以我觉得对于狗股理论这种偏好高收益的交易,筛选条件不必过于严苛,只要是收益是正向的,都尽量能够容纳进来,一般能覆盖交易成本。
遇到的问题:
- 这个是基本面的策略,但是数据来源并非交易时刻的沪深300成分股,会导致下载的数据有一定的先知性,影响回测的真实性。
- 用的是开源数据,对并发下载有着限制,所以想根据时间的推进重新下载300支股票进行回测,数据量巨大且非常耗时,需要想个策略尽量模式真实情况。
- deepseek4pro编程在编写jupyter脚本的时候会会出现顺序问题,看起来对它来说很吃力,会出现策略遗留的问题,即使是最简单的策略。说明还是需要人工确认代码。
可以优化的方向
-
避免单一市净率PE、PB潜在的风险,增加评价方式,还原狗股定理本意
-
避免使用静态PE
- 增加更多的另类数据,避免面临退市风险的股票
- 需要对特殊分红的情况进行分析
- 需要研究面对多股票数据持股的策略的数据获取方案,可能需要更加优雅的方案进行数据处理。避免长期回测中 沪深300成分股变化。
- 创建策略转换skill,将策略回测放在聚宽这种平台上。避免vnpy带来的数据难题,和多参数调试的问题。进行对比分析