第2章:Python环境搭建与金融库入门
做嵌入式出身的人,对Python往往又爱又恨。爱的是它写脚本真快,恨的是环境配置总出幺蛾子。但做金融回测,Python几乎是唯一的选择。没办法,生态太强了。
这一章,我们就把基础环境搭好。别嫌烦,环境搞定了,后面90%的问题都不会遇到。
2.1 Anaconda:一站式环境管理
我个人习惯用Anaconda来管理Python环境。为什么?因为金融回测依赖的库太多了——NumPy、Pandas、yfinance、matplotlib……一个个手动装,版本冲突能让你崩溃。
Anaconda自带conda包管理器,说白了就是帮你自动处理依赖关系。你只需要说“我要装Pandas”,它会把相关的底层库一并搞定。
- 去官网下载对应系统的安装包(Windows/macOS/Linux)
- 安装时勾选“Add Anaconda to my PATH environment variable”
- 安装完成后,打开终端输入
conda --version验证
2.2 Jupyter Notebook:交互式开发的利器
做嵌入式开发时,我们习惯写完整代码再编译烧录。但金融回测不一样——你需要反复试参数、看图表、调策略。这时候Jupyter Notebook就派上用场了。
它把代码、运行结果、图表、说明文字都放在一个页面里。你想想看,这比每次改参数都要重新跑整个脚本方便太多了。
启动方式很简单:
# 在终端输入
jupyter notebook
# 或者用Anaconda Navigator图形界面启动
启动后浏览器会自动打开一个页面。点击右上角的“New”按钮,选择“Python 3”就能新建一个笔记本。
2.3 Pandas与NumPy:金融数据的左膀右臂
做金融回测,你处理的数据无非两种:数值和表格。NumPy管数值计算,Pandas管表格操作。两者配合,天衣无缝。
NumPy基础
NumPy的核心是ndarray(N维数组)。说白了就是一个高性能的数组容器。我刚开始用的时候,最直观的感受就是:比Python原生的list快太多了。
import numpy as np
# 创建数组
prices = np.array([100.5, 101.2, 99.8, 102.1, 100.9])
# 向量化运算(不用写循环)
returns = (prices[1:] - prices[:-1]) / prices[:-1]
print(returns)
# 输出: [ 0.00697 -0.01383 0.02305 -0.01175]
注意看,计算收益率只需要一行代码。如果用原生Python写for循环,至少三四行,而且速度慢一个数量级。
Pandas基础
Pandas的DataFrame,你可以理解成Excel表格的Python版本。但它比Excel强在:可以自动化处理、可以跟数据库对接、可以做时间序列分析。
import pandas as pd
# 创建DataFrame
data = {
'日期': ['2024-01-02', '2024-01-03', '2024-01-04'],
'开盘价': [100.5, 101.2, 99.8],
'收盘价': [101.2, 99.8, 102.1]
}
df = pd.DataFrame(data)
# 查看前两行
print(df.head(2))
# 计算涨跌幅
df['涨跌幅'] = (df['收盘价'] - df['开盘价']) / df['开盘价'] * 100
print(df)
- 内置时间序列处理(日期索引、重采样)
- 缺失数据处理(金融数据常有停牌、节假日)
- 滚动窗口计算(移动平均线、波动率)
2.4 yfinance:免费获取股票数据
做回测第一步,得有数据。yfinance这个库可以从雅虎财经免费获取历史行情数据。我在项目中用过很多数据源,yfinance是最省心的——不需要API Key,不需要注册,直接pip安装就能用。
# 安装
# pip install yfinance
import yfinance as yf
# 获取苹果公司2024年1月的数据
aapl = yf.download('AAPL', start='2024-01-01', end='2024-01-31')
# 查看数据
print(aapl.head())
# 只保留收盘价
close_prices = aapl['Close']
print(close_prices)
返回的数据是Pandas DataFrame格式,直接就能用我们刚学的Pandas方法处理。你看,环环相扣。
2.5 本章知识体系
下面这张图把本章的核心内容串起来了。你可以把它当成一张地图,后面用到哪个工具,回来翻翻就行。
这张图里,Anaconda是地基,Jupyter是工作台,NumPy和Pandas是工具,yfinance是原材料。四者缺一不可。
2.6 实战:从零到获取第一份数据
光说不练假把式。我们走一遍完整流程:
- 打开终端,输入
jupyter notebook启动 - 新建一个Python 3笔记本
- 依次输入以下代码:
# 第一步:导入库
import numpy as np
import pandas as pd
import yfinance as yf
# 第二步:获取数据
spy = yf.download('SPY', start='2023-01-01', end='2023-12-31')
# 第三步:简单分析
spy['Daily_Return'] = spy['Close'].pct_change()
print(f"2023年SPY平均日收益率: {spy['Daily_Return'].mean():.4%}")
print(f"年化波动率: {spy['Daily_Return'].std() * np.sqrt(252):.2%}")
运行后,你会看到SPY(标普500 ETF)在2023年的收益率和波动率。嗯,这就是金融回测的起点。
Shift + Enter 运行当前单元格并自动创建下一个。这个快捷键我每天按几百次,比鼠标点快多了。
环境搭好了,数据拿到了。接下来就可以开始真正的策略回测了。