Backtesting.py实战:用SMA双均线回测苹果11.5年,101笔交易为何跑输买入持有1000%

一个 pip install 就能跑的量化回测库

Backtesting.py 是一个轻量级 Python 回测库,不需要 C++ 编译器、不需要 Docker、一个 pip install 就能跑。我拿它搭配 SMA 10/30 双均线策略回测了苹果过去 11.5 年的数据——101 笔交易、胜率 35.6%、总收益 +32.8%——但同期买入持有不动的话,收益是 +1,039%

本文用自然语言驱动的方式,把从安装到跑出 30+ 项绩效指标的完整报告压缩到了几分钟。最终产出是一个交互式 HTML 图表、一份逐笔交易 CSV、一份资金曲线 CSV 和一个可以独立运行的完整回测脚本。如果你正在找一款轻量的回测工具来验证策略想法,或者想知道为什么某些策略在超级牛股上反而不如不动,这篇文章应该对你有帮助。

起步:只需要装一个东西

EasyClaw 官网下载并安装。不需要手动 pip install backtesting、不需要装 Bokeh、不需要自己找数据源——这些后面都会自动处理。

打开之后,左侧找到「Skill」→「Skill Creator」。如果灰显点不了,去「设置 → 通用」打开「开发者模式」,重启就行。

问题解决方法
Skill Creator 灰显 启用开发者模式,重启
网络连接失败 检查代理设置

先把回测跑起来

打开 EasyClaw 的 Skill Creator,直接用自然语言告诉它你想做什么:

帮我把 GitHub 上的 Backtesting.py(https://github.com/kernc/backtesting.py)做成一个回测 Skill。我希望输入股票代码、起止日期和两个均线参数就能跑 SMA 交叉策略回测,输出 Bokeh 交互图表、逐笔交易明细和资金曲线 CSV。

就这一句话。EasyClaw 会自动去 GitHub 拉代码、分析项目结构、搞清楚 Backtest 类和 Strategy 基类的调用方式,然后把这个流程封装成一个可以直接用的 Skill。不需要手动配环境、不需要写策略代码、不需要折腾数据格式——这些它都自动处理了。

Skill 创建好之后,在对话框里输入:

用 Backtesting.py 回测 AAPL,从 2015 年初到 2026 年 7 月,SMA 快线 10 日、慢线 30 日

回测结果:101 笔交易,跑输买入持有 1000%

上面那条命令跑完,你会得到一份 30+ 指标的完整绩效报表。最扎眼的数据在这儿:

类别指标怎么看
收益 回测区间 2015-01-02 → 2026-07-23(11.5年) 覆盖了完整的牛熊周期
总收益率 +32.81% 绝对收益看起来还行……
买入持有收益 +1,039.37% ……但如果你什么都不做,赚了十倍
CAGR 2.49% 年化连通胀都跑不赢
风险 最大回撤 -55.12% 腰斩级别
最大回撤持续期 2,151 天(近6年) 回撤恢复时间极长
年化波动率 27.88% 波动很大
风险调整 夏普比率 0.089 几乎为零——承担的风险基本没换来回报
卡玛比率 0.045 回撤风险远超收益
Alpha 68.55% Alpha 虽高但 Beta 是负的(-0.03),没帮上忙
交易 总交易次数 101 远多于之前茅台策略的7笔
胜率 35.64% 约1/3的交易盈利
利润因子 1.24 勉强为正
最佳/最差单笔 +53.15% / -14.39% 盈亏比尚可

image

图表里能看到三条信息:上面的 OHLC 蜡烛图叠加了 SMA 10(橙)和 SMA 30(蓝),下面跟着成交量柱子;中间的权益曲线标注了每笔买卖点(绿色三角是买入、红色倒三角是卖出);最下面是持仓状态的变化。在浏览器里打开,鼠标悬停可以看每个数据点的具体数值。

为什么策略跑输了买入持有?

这不是 Backtesting.py 的问题,也不是策略代码写错了。问题出在标的本身。

过去 11.5 年,苹果涨了十倍。对于这种长期单边上涨的超级牛股,任何择时策略都会因为频繁踏空而跑输简单持有——你卖出的每一个时点,后来看都是错的。策略赚的 32.8% 里面,大部分可能是抓住了一段上涨,但错过了另外九段。

作为对比,同一套 SMA 交叉策略在谷歌上跑出来的结果是 +462% vs 买入持有 +607%,差距小得多。不同标的对均线策略的适配度天差地别——如果标的本身是长期单边上涨的,择时就是不划算的;如果标的是大区间震荡的,择时才有可能跑赢

还有一个容易被忽略的数据:最大回撤持续了 2,151 天,将近六年。六年里你的账户处于水下,不知道什么时候能回本——这个心理压力比 -55% 的数字本身更致命。

常用的参数调整

Skill 创建好之后,换标的、换参数都只需要说话就行,不用重新配置任何东西:

用 Backtesting.py 回测 NVDA,快线改成 5 日

用 Backtesting.py 回测 MSFT,从 2020 年到 2025 年,初始资金 5 万美元

常见报错与处理

错误原因解决方法
"No data found for symbol" 代码格式不对或日期区间没数据 美股用 ticker,确认区间内有交易
交易次数为 0 均线从未交叉 缩小 fast/slow 的差值,或拉长回测区间
Bokeh 图表打不开 路径含中文或特殊字符 输出到纯英文路径

这个策略适合什么、不适合什么

SMA 双均线交叉策略不是一个万能工具。根据这次回测的结果,它明显不适合下面几种情况:

  • 长期单边上涨的超级牛股。苹果就是最好的反面教材——持有不动赚十倍,来回交易赚三成。如果你看好一家公司长期前景,买入持有可能是更优解
  • 高波动但无趋势的市场。均线策略在震荡市会被反复打脸,手续费累积起来不是小数目
  • 无法承受大回撤的账户。夏普 0.089、回撤 -55%、水下近六年——如果你的资金有明确的使用期限,这个策略会让你睡不着觉

更适合的场景是趋势明显的市场——比如原版文档中谷歌的回测结果就好得多。A 股大盘蓝筹也可能是一个方向,波动比美股科技股小,趋势相对规律。

下一步可以做什么

  • 换标的测试——拿 NVDA、MSFT、GOOGL 各跑一遍,找哪些股票上择时比持有更好
  • Backtesting.py 自带 optimize() 方法,可以对 fast/slow 做网格扫描,自动找到夏普比率最高的参数组合

资源链接:

你遇到过策略跑输买入持有的情况吗?是继续优化参数还是直接放弃?欢迎聊聊你的经历。

posted @ 2026-07-27 14:25  PC修复电脑医生  阅读(10)  评论(0)    收藏  举报