AI 入门第一步:用 Python 搭建你的第一个策略回测
零基础学会安装 Python 环境、下载金融数据,并跑通一个简单的移动平均线回测代码。
想用 AI 做量化交易,第一步不是写复杂模型,而是先学会回测——用历史数据验证你的交易策略是否靠谱。本文带你从零开始,装好工具、跑通第一个回测,避开新手最容易掉进去的坑。
准备环境:安装 Python 和必备库
你需要一个能运行 Python 的环境。如果你是纯新手,推荐直接装 Anaconda(一个打包了 Python 和常用数据科学库的发行版,省去一个个安装的麻烦)。
- 去 Anaconda 官网(anaconda.com)下载对应你系统的安装包,安装时选“Add Anaconda to my PATH environment variable”(方便后续在命令行使用)。
- 安装完成后,打开终端(Mac/Linux)或 Anaconda Prompt(Windows),输入
conda list,如果看到一堆包名就说明成功了。 - 接下来安装回测需要的两个库:pandas(处理表格数据)和 yfinance(免费获取股票历史数据)。在终端里依次输入:
conda install pandas和pip install yfinance。如果遇到网络慢,可以换成国内镜像,比如pip install yfinance -i https://pypi.tuna.tsinghua.edu.cn/simple。
获取数据:下载股票历史价格
回测需要真实的历史价格。我们用 yfinance 获取苹果(AAPL)过去两年的日线数据。
- 打开你喜欢的代码编辑器(比如 VS Code 或 Jupyter Notebook),新建一个 Python 文件。
- 输入以下代码并运行:
import yfinance as yf
data = yf.download('AAPL', start='2022-01-01', end='2024-01-01')
print(data.head()) - 你会看到包含开盘价、收盘价等列的表格。注意:数据默认是未复权的,回测前需要调整。yfinance 下载时加参数
auto_adjust=True就能拿到复权价格(已处理分红、拆股等事件),避免价格出现假跳变。
跑通第一个回测:移动平均线策略
现在写一个最简单的策略:当短期均线上穿长期均线时买入,反之卖出。代码不到 40 行,但要注意一个关键细节——避免未来信息(即回测时用了未来才有的数据,这会让结果虚高)。
- 计算两条均线:
short_ma = data['Close'].rolling(window=20).mean()和long_ma = data['Close'].rolling(window=50).mean()。 - 生成交易信号:当 short_ma 从下方穿过 long_ma 时买入(信号为1),反之卖出(信号为-1)。关键一步:用
.shift(1)把信号往后移一天,这样模拟的是“收盘后产生信号,第二天开盘才交易”,而不是当天收盘价买卖(那相当于作弊)。 - 计算每日收益:假设每次交易都按第二天开盘价成交,并扣除手续费(比如万分之三)。
- 最后比较策略收益与简单“买入持有”的收益。如果策略跑不过买入持有,那就别实盘。
完整的代码示例(复制即可运行):
import pandas as pd
import yfinance as yf
# 下载数据
data = yf.download('AAPL', start='2022-01-01', end='2024-01-01', auto_adjust=True)
close = data['Close']
# 计算均线
short = close.rolling(20).mean()
long = close.rolling(50).mean()
# 生成信号(避免未来信息)
signal = pd.Series(0, index=close.index)
signal[short > long] = 1
signal[short < long] = -1
signal = signal.shift(1) # 重要:后移一天
# 计算策略收益(假设无手续费)
daily_ret = close.pct_change()
strategy_ret = (signal * daily_ret).dropna()
cumulative = (1 + strategy_ret).cumprod()
# 比较买入持有
buy_hold = (1 + daily_ret).cumprod()
print('策略累计收益:', cumulative.iloc[-1])
print('买入持有累计收益:', buy_hold.iloc[-1])常见坑与下一步
- 检查数据质量:用
data.isnull().sum()看有没有缺失值,用data.index.duplicated().sum()看有没有重复日期。脏数据会导致回测结果完全失真。 - 避免幸存者偏差:如果你只测试当前仍存在的股票(比如只测标普500现在的成分股),就忽略了那些已经退市或破产的公司——你的策略可能恰好避开了它们。建议用全历史成分股列表或指数本身来测试。
- 多试参数:向量化回测很快,你可以测试几十组均线参数,找出稳健的组合,而不是靠一个参数碰运气。
现在你已经装好了环境、拿来了数据、跑通了第一个回测。下一步可以尝试加入止损、交易成本,或者换成其他策略(比如 RSI 背离)。记住:回测最大的作用不是让你自信,而是让你发现自己的策略到底有多脆弱。保持怀疑,才能进步。
内容来源
DEV Machine Learning
发布时间
2026-07-08 01:35