第三章 交易环境搭建:Python量化环境配置、数据源选择与API对接
做套利交易,第一步不是写策略,而是搭环境。
我见过太多人,策略逻辑想得天花乱坠,结果环境配了三天还没跑通。说白了,环境搭不好,后面全是白费功夫。今天我就把这几年的经验捋一捋,帮你把这条路走顺。
3.1 Python量化环境配置
我个人习惯用Anaconda来管理Python环境。为什么?因为它自带了一堆科学计算库,省得你一个个装。
核心环境要求:
- Python 3.8+(我推荐3.9,兼容性最好)
- NumPy、Pandas(数据处理必备)
- Matplotlib、Seaborn(可视化)
- Scikit-learn(机器学习辅助)
- Statsmodels(统计检验)
安装命令很简单:
conda create -n quant_env python=3.9
conda activate quant_env
pip install numpy pandas matplotlib seaborn scikit-learn statsmodels
嗯,这里要注意。千万别用系统自带的Python。我在项目中遇到过,系统Python和量化库版本冲突,折腾了两天才发现是环境问题。从那以后,我每个项目都单独建虚拟环境。
我的小技巧:把常用的库写到一个requirements.txt里,下次直接pip install -r requirements.txt,省时省力。
3.2 数据源选择:Tushare/Wind/聚宽
数据是量化交易的血液。选数据源,说白了就是选靠谱程度。
| 数据源 | 优点 | 缺点 | 适合场景 |
|---|---|---|---|
| Tushare | 免费、数据全、社区活跃 | 有积分限制、频率有限 | 个人研究、小规模回测 |
| Wind | 数据权威、更新快、接口稳定 | 收费高、需要本地客户端 | 机构实盘、专业研究 |
| 聚宽 | 云端运行、自带回测框架 | 数据导出有限制 | 快速原型、策略验证 |
我个人建议:初期用Tushare就够了。为什么?因为套利交易对数据频率要求高,Tushare的分钟级数据完全够用。我曾经用Tushare跑过股指期货的期现套利,效果不错。
但如果你做高频套利,比如ETF申赎套利,那Wind是必须的。它的Tick级数据,Tushare给不了。
避坑指南:我曾经在Tushare上遇到过数据缺失的情况,特别是节假日前后。解决办法是:每次拉数据前,先检查数据完整性,用isnull()看看有没有空值。
3.3 API接口对接
API对接,说白了就是让Python和数据源对话。
以Tushare为例,对接流程很简单:
import tushare as ts
# 设置token(在Tushare官网注册获取)
ts.set_token('你的token')
# 初始化pro接口
pro = ts.pro_api()
# 获取股票日线数据
df = pro.daily(ts_code='000001.SZ', start_date='20230101', end_date='20231231')
print(df.head())
Wind的对接稍微麻烦点,需要先启动Wind客户端:
from WindPy import w
w.start()
# 获取数据
data = w.wsd("000001.SZ", "close", "2023-01-01", "2023-12-31")
print(data.Data)
聚宽就更简单了,直接在云端写策略,数据自动对接。
我的经验:API对接最容易出问题的是网络超时。我建议加个重试机制,比如用tenacity库,自动重试3次。
3.4 回测框架选型
回测框架,就是你的策略试验田。选对了,事半功倍。
市面上主流的回测框架有:
- Backtrader:功能全面,社区活跃,适合复杂策略
- Zipline:Quantopian出品,但已停止维护
- PyAlgoTrade:轻量级,适合简单策略
- vn.py:国内团队开发,支持实盘
我个人推荐Backtrader。为什么?因为它对套利策略支持很好,可以同时处理多个资产。
一个简单的套利回测框架示例:
import backtrader as bt
class PairTradingStrategy(bt.Strategy):
def __init__(self):
self.spread = self.datas[0].close - self.datas[1].close
def next(self):
if self.spread[0] > self.spread.mean() + 2 * self.spread.std():
self.sell(data=self.datas[0], size=100)
self.buy(data=self.datas[1], size=100)
elif self.spread[0] < self.spread.mean() - 2 * self.spread.std():
self.buy(data=self.datas[0], size=100)
self.sell(data=self.datas[1], size=100)
cerebro = bt.Cerebro()
cerebro.addstrategy(PairTradingStrategy)
cerebro.run()
注意:回测框架不是万能的。我曾经用Backtrader跑了一个看起来很完美的套利策略,结果实盘一跑就亏。为什么?因为回测忽略了滑点和手续费。所以,回测时一定要加上这两个因素。
3.5 知识体系总览
下面这张图,是我整理的环境搭建核心逻辑。你照着这个流程走,基本不会出错。
你看,整个流程是线性的。但实际做的时候,经常要回头调整。比如数据源选错了,就得重新配API。所以,别怕折腾,这是必经之路。
最后说一句:环境搭建没有标准答案。你习惯用哪个框架、哪个数据源,就用哪个。关键是跑起来,别卡在第一步。
公众号:蓝海资料掘金营,微信deep3321