工具准备:Python量化生态介绍
做量化投资,说白了就是跟数据打交道。你想想看,没有趁手的工具,再好的策略也跑不起来。这一章,我就带你看看Python量化生态里那些真正能打的库。
我个人习惯把量化工具分成三类:数据处理、回测框架、可视化。咱们一个一个来聊。
Pandas:量化研究的基石
Pandas这东西,我用了快十年了。刚入行时还在用Excel拉数据,后来发现那简直是折磨。Pandas处理时间序列数据,就像刀切黄油一样顺滑。
核心数据结构就两个:
- Series:一维数据,类似带标签的数组
- DataFrame:二维表格,每列可以是不同类型
举个例子,你拿到一份股票日线数据:
import pandas as pd
# 读取CSV文件
df = pd.read_csv('stock_data.csv', parse_dates=['date'], index_col='date')
# 计算5日均线
df['ma5'] = df['close'].rolling(window=5).mean()
# 计算日收益率
df['return'] = df['close'].pct_change()
# 筛选出上涨的日子
up_days = df[df['return'] > 0]
我在项目中遇到过最坑的事,就是时间索引没对齐。两个DataFrame合并时,索引类型不一致,结果全是NaN。嗯,这里要注意:永远先检查索引类型。
df.info() 检查数据类型的习惯。尤其是日期列,一定要转成datetime类型。
NumPy:高性能数值计算
Pandas底层其实依赖NumPy。NumPy的核心是ndarray,一个多维数组对象。它的计算速度比Python原生列表快几十倍。
为什么快?因为底层用C语言实现,而且支持向量化操作。说白了,就是一次操作整个数组,不用写循环。
import numpy as np
# 创建数组
prices = np.array([100, 102, 101, 105, 108])
# 向量化计算收益率
returns = np.diff(prices) / prices[:-1]
# 计算波动率
volatility = np.std(returns) * np.sqrt(252)
print(f'年化波动率: {volatility:.2%}')
我曾经犯过一个低级错误:用Python原生列表计算100万条数据的标准差,等了快两分钟。换成NumPy后,0.1秒就出结果了。从那以后,但凡涉及数值计算,我第一反应就是NumPy。
Matplotlib:可视化你的策略
做量化研究,光看数字不行。你得把曲线画出来,一眼就能看出问题。Matplotlib是Python最经典的可视化库,虽然界面有点老气,但功能绝对够用。
import matplotlib.pyplot as plt
# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 绘制净值曲线
plt.figure(figsize=(12, 6))
plt.plot(df.index, df['close'], label='收盘价', linewidth=1)
plt.plot(df.index, df['ma5'], label='5日均线', linestyle='--')
plt.title('股票价格走势')
plt.xlabel('日期')
plt.ylabel('价格')
plt.legend()
plt.grid(True, alpha=0.3)
plt.show()
plt.rcParams 全局设置,省得每个图都写一遍。
Backtrader:轻量级回测框架
回测是量化策略的核心环节。Backtrader是我用得最多的回测框架,原因很简单:上手快,够灵活。
它的核心概念就三个:
- Strategy:你的交易策略逻辑
- Data Feed:数据源
- Broker:模拟交易执行
写一个简单的双均线策略:
import backtrader as bt
class DualMAStrategy(bt.Strategy):
params = (('short', 5), ('long', 20),)
def __init__(self):
self.short_ma = bt.indicators.SMA(self.data.close, period=self.params.short)
self.long_ma = bt.indicators.SMA(self.data.close, period=self.params.long)
def next(self):
if self.short_ma[0] > self.long_ma[0] and not self.position:
self.buy()
elif self.short_ma[0] < self.long_ma[0] and self.position:
self.sell()
# 运行回测
cerebro = bt.Cerebro()
cerebro.addstrategy(DualMAStrategy)
data = bt.feeds.PandasData(dataname=df)
cerebro.adddata(data)
cerebro.run()
我个人习惯用Backtrader做快速验证。它内置了滑点、手续费、多品种支持,基本能满足90%的回测需求。
搭建本地量化研究环境
工欲善其事,必先利其器。我建议你用Anaconda来管理Python环境,省去很多依赖冲突的麻烦。
具体步骤:
- 安装Anaconda:去官网下载,一路下一步就行
- 创建虚拟环境:
conda create -n quant python=3.9 - 安装核心库:
conda install pandas numpy matplotlib - 安装Backtrader:
pip install backtrader - 安装Jupyter Notebook:
conda install jupyter
我个人强烈推荐用Jupyter Notebook做研究。它的交互式体验太适合量化分析了——写一段代码,立刻看到结果,不满意就改,改完再跑。
下面这张图,是我整理的Python量化生态全景:
这张图把量化生态分成了三层:底层是Python语言,中间是核心工具库,上层是具体应用。你想想看,从数据获取到策略回测,再到结果可视化,整个流程就串起来了。
好了,工具准备好了。下一章,我们就开始动手写第一个策略。记住,工具只是手段,策略才是核心。但话说回来,没有趁手的工具,再好的策略也跑不起来。