← 返回列表

Python 量化交易入门:从零写你的第一个回测(2026)

2026-09-09 · 约 11 分钟阅读
回测是什么?为什么量化交易必须先回测?本文用 Python 从零写一个最简单的均线策略回测,讲清数据从哪来、代码怎么写、回测结果怎么读。纯科普不构成投资建议。

一、为什么要先学回测?

回测(Backtesting),就是拿历史数据去"重放"你的交易规则,看看这套规则在过去表现如何。

量化交易和拍脑袋交易最大的区别就在这里:你的策略在上真金白银之前,先被历史数据检验过。

重要提醒:本文是 Python 回测的编程科普,不构成任何投资建议。回测结果好不代表实盘能赚钱,甚至回测本身也可能骗人——后面会讲原因。

二、写回测前,先准备什么?

只需要三样东西:

  1. Python 环境:推荐用 Anaconda 或直接装官方 Python 3,再安装 pandas(数据分析库)
  2. 历史 K 线数据:主流交易所都提供历史行情,也可通过 ccxt 等库直接拉取
  3. 一个想法:比如"金叉买入、死叉卖出"这种最简单的规则

如果你想同时熟悉交易所的行情接口和模拟盘,可以先去注册熟悉一下:币安 https://newbeebnb.cn/go?t=join https://newbeebnb.cn/go?t=okxo。数据拉取请遵守各平台的接口使用规范。

三、你的第一个回测:双均线策略

思路很简单:短期均线上穿长期均线(金叉)时持有,下穿(死叉)时空仓。

假设 df 是你从交易所下载的日线数据,包含收盘价 close,完整代码如下:

import pandas as pd

# 1. 计算快慢两条均线
df['ma_fast'] = df['close'].rolling(20).mean()  # 20 日均线

df['ma_slow'] = df['close'].rolling(60).mean()  # 60 日均线

# 2. 生成信号:快线在上方 = 1(持有),否则 = 0(空仓)
df['signal'] = (df['ma_fast'] > df['ma_slow']).astype(int)

# 3. 信号延迟一天生效,避免"偷看未来"
df['position'] = df['signal'].shift(1)

# 4. 计算每日收益并累乘,得到策略净值曲线
df['daily_ret'] = df['close'].pct_change()
df['strategy_ret'] = df['daily_ret'] * df['position']
df['equity'] = (1 + df['strategy_ret']).cumprod()

# 5. 看一眼结果
df[['close', 'ma_fast', 'ma_slow', 'equity']].tail()

跑完你会发现:代码只有十几行,真正的难点在后面怎么解读结果。

四、回测结果怎么读?

别只盯着"总收益率",至少要看这五个数字:

指标 含义
总收益率 策略整个区间的累计表现
最大回撤 从最高点最多亏了多少,衡量"难受程度"
胜率 盈利交易占总交易的比例
盈亏比 平均盈利和平均亏损的比例
交易次数 次数太少说明样本不足,结论不可靠

判断标准很简单:最大回撤你晚上睡得着觉吗? 睡不着,说明仓位和策略不适合你。

五、回测的坑:结果好不代表能赚钱

  • 过拟合:参数反复调到"历史完美",换个时间段就失效
  • 幸存者偏差:只回测现在还在的币,退市的币没人管,结果虚高
  • 忽略手续费和滑点:没扣成本的回测收益,实盘会大打折扣
  • 偷看未来:用了当天收盘才知道的数据去决定当天的买卖,属于作弊

所以回测结论要打折看:策略至少要在不同时间段、不同币种上表现稳定,才有参考价值。

六、下一步怎么走?

  1. 先把上面的代码跑通,看懂每一行在做什么
  2. 加上手续费和滑点,让回测更接近真实
  3. 用更多币种、更长历史验证稳定性
  4. 想实盘?先在交易所模拟盘/测试网用小资金流程跑通,再考虑真实资金

七、风险提示(重要)

⚠️ 量化回测与实盘请务必注意:

  • 回测不代表未来:历史表现不能保证未来收益,策略随时可能失效
  • 技术风险:程序 bug、网络中断、接口限流都可能导致实盘异常
  • 安全风险:API 密钥务必保管好,不要泄露给任何人或第三方工具
  • 合规风险:遵守所在国家或地区的法律法规与交易所使用条款

一起交流量化学习

写代码卡住、回测结果看不懂、想找人一起交流 Python 量化学习心得,欢迎加入我们:

我们会分享代码示例、学习路线和避坑经验,一起把量化基础打扎实!

📚 相关阅读

🧮 配套小工具(免费,无需注册)
📺 想看视频版?
我们把部分教程录成了视频,在 B站 持续更新:NEWBEE 的 B站空间
有问题也可以找我们:Telegram