第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 验证
避坑指南: 我曾经在Windows上装Anaconda时没勾选PATH选项,结果后面每次用conda都要先切到安装目录。嗯,那感觉就像每次用串口都要重新插拔线一样烦。

2.2 Jupyter Notebook:交互式开发的利器

做嵌入式开发时,我们习惯写完整代码再编译烧录。但金融回测不一样——你需要反复试参数、看图表、调策略。这时候Jupyter Notebook就派上用场了。

它把代码、运行结果、图表、说明文字都放在一个页面里。你想想看,这比每次改参数都要重新跑整个脚本方便太多了。

启动方式很简单:

# 在终端输入
jupyter notebook

# 或者用Anaconda Navigator图形界面启动

启动后浏览器会自动打开一个页面。点击右上角的“New”按钮,选择“Python 3”就能新建一个笔记本。

我的习惯: 我会把每个策略单独建一个笔记本,文件名用“策略名称_日期”的格式。比如“双均线策略_20240101.ipynb”。这样找起来特别方便。

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)
为什么Pandas适合金融数据?
  • 内置时间序列处理(日期索引、重采样)
  • 缺失数据处理(金融数据常有停牌、节假日)
  • 滚动窗口计算(移动平均线、波动率)

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方法处理。你看,环环相扣。

注意: yfinance获取的是美股数据。如果你要做A股回测,股票代码后面要加后缀。比如贵州茅台是“600519.SS”,腾讯是“0700.HK”。我曾经因为这个后缀问题折腾了半天,后来才发现是代码格式不对。

2.5 本章知识体系

下面这张图把本章的核心内容串起来了。你可以把它当成一张地图,后面用到哪个工具,回来翻翻就行。

Python金融回测环境 Anaconda 环境管理 & 包管理 Jupyter Notebook 交互式开发 & 可视化 NumPy 数值计算 & 数组运算 Pandas 表格处理 & 时间序列 yfinance 免费获取股票数据 安装 → 配置 → 验证 启动 → 新建 → 运行 数组 → 运算 → 统计 DataFrame → 清洗 → 分析 下载 → 处理 → 回测

这张图里,Anaconda是地基,Jupyter是工作台,NumPy和Pandas是工具,yfinance是原材料。四者缺一不可。

2.6 实战:从零到获取第一份数据

光说不练假把式。我们走一遍完整流程:

  1. 打开终端,输入 jupyter notebook 启动
  2. 新建一个Python 3笔记本
  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 运行当前单元格并自动创建下一个。这个快捷键我每天按几百次,比鼠标点快多了。

环境搭好了,数据拿到了。接下来就可以开始真正的策略回测了。


专注资料整理