工具准备:Python环境搭建、Jupyter Notebook、Pandas与NumPy快速入门
做量化交易,说白了就是跟数据打交道。你想想看,没有趁手的工具,再好的策略也跑不起来。我个人习惯把Python比作交易员的瑞士军刀——小巧、锋利、什么都能干。这一章,咱们就把这把刀磨好。
一、Python环境搭建:别让环境问题卡住你
我记得刚入行那会儿,光装环境就折腾了两天。后来发现,其实就三步:
- 装Python——建议直接上Anaconda,省心
- 建虚拟环境——每个项目独立,互不干扰
- 装核心库——Pandas、NumPy、Matplotlib、Scikit-learn
具体命令长这样:
# 创建量化专用环境
conda create -n quant_trading python=3.9
# 激活环境
conda activate quant_trading
# 安装核心库
pip install pandas numpy matplotlib scipy scikit-learn
pip install jupyter notebook
pip install yfinance # 获取行情数据用的
二、Jupyter Notebook:交互式交易的利器
Jupyter Notebook这东西,说白了就是一个能写代码、能记笔记、能画图的“活文档”。做量化研究时特别顺手——你写一段代码,马上就能看到结果,不满意就改,改完再跑。
启动方式很简单:
# 在终端里
jupyter notebook
浏览器会自动打开一个页面。新建一个Notebook,你就能开始干活了。
我个人习惯把Notebook分成几个区块:
- 数据获取区——拉取行情、财务数据
- 数据处理区——清洗、对齐、计算指标
- 策略逻辑区——写买卖规则
- 回测区——跑历史数据看效果
- 可视化区——画收益曲线、回撤图
三、NumPy:高性能数值计算的基石
NumPy是Python科学计算的基石。做量化交易,你每天都要跟数组、矩阵打交道——价格序列、收益率矩阵、协方差矩阵……NumPy让这些操作变得飞快。
为什么快?因为它的底层是C语言写的。你想想看,Python的循环慢得像蜗牛,但NumPy的向量化操作快得像高铁。
import numpy as np
# 创建价格数组
prices = np.array([100.5, 101.2, 102.8, 103.1, 102.5])
# 计算日收益率(向量化操作,一行搞定)
returns = np.diff(prices) / prices[:-1]
print(returns)
# 输出: [0.00697 0.01581 0.00292 -0.00582]
# 计算均值、标准差
mean_return = np.mean(returns)
std_return = np.std(returns)
print(f"平均收益率: {mean_return:.4f}, 标准差: {std_return:.4f}")
常用的NumPy函数:
| 函数 | 用途 | 量化场景 |
|---|---|---|
| np.array() | 创建数组 | 把行情数据转成数组 |
| np.mean() | 计算均值 | 平均收益率 |
| np.std() | 计算标准差 | 波动率 |
| np.corrcoef() | 计算相关系数 | 资产间相关性 |
| np.percentile() | 计算百分位 | VaR风险价值 |
四、Pandas:量化交易的数据处理核心
Pandas是量化交易中最常用的库,没有之一。它把Excel的便利性和编程的灵活性结合在了一起。你想想看,用Excel处理100万行数据会卡死,但Pandas几秒钟就搞定。
Pandas有两个核心数据结构:
- Series——一维数据,相当于带标签的数组
- DataFrame——二维数据,相当于带标签的表格
import pandas as pd
# 创建时间序列数据
dates = pd.date_range('2024-01-01', periods=5, freq='D')
prices = pd.Series([100.5, 101.2, 102.8, 103.1, 102.5], index=dates)
print(prices)
# 输出:
# 2024-01-01 100.5
# 2024-01-02 101.2
# 2024-01-03 102.8
# 2024-01-04 103.1
# 2024-01-05 102.5
# 创建DataFrame,包含多只股票
data = {
'AAPL': [150.0, 151.2, 152.8, 153.1, 152.5],
'GOOGL': [2800, 2810, 2825, 2815, 2830],
'TSLA': [700, 710, 695, 720, 715]
}
df = pd.DataFrame(data, index=dates)
print(df)
常用的Pandas操作:
# 读取CSV数据
df = pd.read_csv('stock_data.csv', index_col=0, parse_dates=True)
# 查看前5行
df.head()
# 计算滚动均值(20日均线)
df['MA20'] = df['close'].rolling(window=20).mean()
# 计算日收益率
df['return'] = df['close'].pct_change()
# 处理缺失值
df.dropna(inplace=True) # 删除空值
# 或者
df.fillna(method='ffill', inplace=True) # 用前值填充
五、知识体系总览
下面这张图,把本章的核心逻辑串起来了。你一看就明白:
说白了,这套工具链就是:环境搭好 → 用Notebook写代码 → NumPy算数字 → Pandas处理表格数据。环环相扣,缺一不可。
六、实战小练习:动手试试
光看不练假把式。我建议你现在就打开Jupyter Notebook,跑一下这段代码:
import numpy as np
import pandas as pd
# 模拟两只股票的价格数据
np.random.seed(42)
dates = pd.date_range('2024-01-01', periods=100, freq='D')
stock_a = 100 + np.cumsum(np.random.randn(100) * 0.5)
stock_b = 100 + np.cumsum(np.random.randn(100) * 0.5)
# 创建DataFrame
df = pd.DataFrame({'Stock_A': stock_a, 'Stock_B': stock_b}, index=dates)
# 计算收益率
returns = df.pct_change().dropna()
# 计算相关性
corr = returns['Stock_A'].corr(returns['Stock_B'])
print(f"两只股票的相关性: {corr:.4f}")
# 计算滚动相关性(20天窗口)
rolling_corr = returns['Stock_A'].rolling(20).corr(returns['Stock_B'])
print(rolling_corr.tail())
跑完之后,你看看滚动相关性的变化。你会发现——相关性不是一成不变的,它会随时间波动。这就是跨资产比价关系的核心逻辑之一。
嗯,工具就准备到这儿。记住一句话:工具是死的,人是活的。别在环境搭建上花太多时间,够用就行。真正值钱的是你的策略思路和交易逻辑。