第二章:Python量化环境搭建
做量化投资,说白了就是跟数据打交道。而Python,就是咱们手里最顺手的工具。
我记得刚入行那会儿,光装环境就折腾了两天。各种库版本冲突、依赖报错,搞得我差点想放弃。后来摸清了门道,才发现——嗯,其实没那么复杂。
2.1 Anaconda与Jupyter配置
我个人习惯用Anaconda来管理Python环境。为什么?因为它把Python、常用库、包管理器都打包好了,省心。
安装步骤很简单:
- 去Anaconda官网下载对应系统的安装包
- 一路默认安装,记得勾选「Add Anaconda to my PATH」
- 打开终端或Anaconda Prompt,输入
conda --version验证
装完之后,咱们得创建一个独立的量化环境。你想想看,要是所有项目都混在一个环境里,迟早会出问题。
conda create -n quant python=3.9
conda activate quant
Jupyter Notebook是咱们写策略、做分析的主战场。安装也简单:
conda install jupyter
jupyter notebook
我个人建议装个Jupyter Lab,界面更现代,功能更强:
conda install jupyterlab
小技巧: 在Jupyter里按Tab可以自动补全代码,按Shift+Tab可以查看函数文档。这两个快捷键能帮你省下大量时间。
2.2 核心库安装:Pandas/Numpy/Matplotlib/Statsmodels
这四个库,是量化分析的基石。缺一个,你的分析链条就断了。
| 库名 | 作用 | 安装命令 |
|---|---|---|
| Numpy | 数值计算、矩阵运算 | conda install numpy |
| Pandas | 数据处理、时间序列 | conda install pandas |
| Matplotlib | 数据可视化、画图 | conda install matplotlib |
| Statsmodels | 统计建模、时间序列分析 | conda install statsmodels |
装完之后,建议跑个测试脚本,确认一切正常:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import statsmodels.api as sm
print("所有库导入成功!")
print(f"Numpy版本: {np.__version__}")
print(f"Pandas版本: {pd.__version__}")
注意: 我曾经遇到过Statsmodels和Numpy版本不兼容的问题,导致ARIMA模型死活跑不出来。后来发现是Numpy版本太新了。建议用
conda install 而不是 pip install,因为conda会自动处理依赖关系。
2.3 数据源API获取:Tushare与AkShare
做量化,数据是命根子。没有数据,再好的策略也是空中楼阁。
Tushare 是老牌的数据接口,数据质量高,但需要注册获取token:
pip install tushare
import tushare as ts
# 设置token(需要去tushare官网注册)
ts.set_token('你的token')
pro = ts.pro_api()
# 获取股票日线数据
df = pro.daily(ts_code='000001.SZ', start_date='20230101', end_date='20231231')
print(df.head())
AkShare 是后起之秀,完全免费,数据源覆盖广:
pip install akshare
import akshare as ak
# 获取股票日线数据
df = ak.stock_zh_a_hist(symbol="000001", period="daily",
start_date="20230101", end_date="20231231", adjust="qfq")
print(df.head())
我个人更推荐AkShare做日常研究,因为它不用注册,拿来就用。但Tushare的数据更规范,适合做生产环境。
避坑指南: 我曾经在凌晨跑策略时,发现Tushare接口返回空数据。后来才知道,Tushare每天有调用次数限制,而且凌晨是数据更新窗口。建议把数据提前下载到本地,用CSV或数据库存着,别每次都实时拉取。
2.4 回测框架Backtrader入门
Backtrader是我用得最多的回测框架。它轻量、灵活,而且社区活跃。
安装:
pip install backtrader
一个最简单的回测示例:
import backtrader as bt
# 1. 定义策略
class MyStrategy(bt.Strategy):
def next(self):
if not self.position:
# 没有持仓就买入
self.buy(size=100)
else:
# 有持仓就卖出
self.sell(size=100)
# 2. 创建Cerebro引擎
cerebro = bt.Cerebro()
# 3. 添加数据
data = bt.feeds.YahooFinanceData(dataname='AAPL',
fromdate='2023-01-01',
todate='2023-12-31')
cerebro.adddata(data)
# 4. 添加策略
cerebro.addstrategy(MyStrategy)
# 5. 设置初始资金
cerebro.broker.setcash(100000.0)
# 6. 运行回测
print(f'初始资金: {cerebro.broker.getvalue():.2f}')
cerebro.run()
print(f'最终资金: {cerebro.broker.getvalue():.2f}')
这个例子虽然简单,但包含了Backtrader的核心流程:
- 策略类:继承
bt.Strategy,重写next方法 - Cerebro引擎:负责调度整个回测流程
- 数据源:支持多种格式,CSV、数据库、API都行
- 资金管理:自动处理买卖、持仓、盈亏
个人经验: 刚开始用Backtrader时,我总想着把所有逻辑都塞进策略类里。后来发现,把数据预处理、信号生成、资金管理分开写,代码会清晰很多。记住——回测框架只是工具,核心是你的交易逻辑。
本章知识体系
下面这张图,帮你理清本章的核心脉络:
环境搭好了,数据能拉了,回测能跑了。接下来,你就可以开始真正的研究了。
记住一句话:工欲善其事,必先利其器。花点时间把环境整利索,后面会省下无数麻烦。