第四讲:Python量化环境搭建
说实话,做高频做市这么多年,我见过太多人一上来就写策略,结果环境没配好,回测数据对不上,实盘直接翻车。嗯,今天咱们就把这第一步走稳了。
量化环境搭建,说白了就是给你的策略找个靠谱的「家」。我个人习惯把这件事分成三块:Python发行版选型、IDE配置、回测框架选择。咱们一个一个来。
4.1 Anaconda安装:别小看这一步
为什么选Anaconda?因为它自带conda包管理器,能帮你隔离不同项目的依赖。我在项目中遇到过好几次,两个策略用的numpy版本不一样,互相打架。有了conda环境,这种问题就再也没出现过。
核心要点:Anaconda不是唯一的Python发行版,但它是量化领域最省心的选择。
安装步骤其实很简单,但我提醒你注意几点:
- 版本选择:建议下载Python 3.8或3.9版本。为什么?因为很多量化库(比如vnpy的某些旧版本)对3.10以上支持不太好。我曾经踩过这个坑,折腾了两天才发现是Python版本问题。
- 安装路径:不要有中文和空格。C:\Anaconda3 就挺好。
- 环境变量:安装时勾选「Add Anaconda to my PATH environment variable」。虽然安装向导会提醒你不推荐,但相信我,做量化的人需要频繁切换环境,加上反而省事。
避坑指南:我曾经在Windows上装Anaconda时忘了勾选环境变量,结果后面装Jupyter怎么都找不到python命令。排查了半小时才发现是PATH没配好。所以这一步别偷懒。
4.2 Jupyter配置:交互式开发的利器
Jupyter Notebook是我做策略原型验证时最常用的工具。你想想看,写一段代码,立刻看到结果,还能画图,这对高频策略的快速迭代太重要了。
配置Jupyter其实就几步:
# 安装Jupyter
conda install jupyter
# 生成配置文件
jupyter notebook --generate-config
# 设置密码(可选,但建议)
jupyter notebook password
我个人习惯在Jupyter里装几个扩展:
- jupyter_contrib_nbextensions:提供代码折叠、目录生成等功能
- ipywidgets:交互式控件,调试参数时特别好用
- autopep8:自动格式化代码,保持整洁
小技巧:在Jupyter里写回测代码时,我习惯把策略逻辑放在一个单元格,参数配置放在另一个单元格。这样改参数时不用重新跑整个notebook,效率高很多。
4.3 回测框架选择:Backtrader vs vnpy
这是今天最核心的部分。做高频做市,回测框架选错了,后面全是坑。我两个框架都用过,说说我的真实感受。
先看一张对比图,帮你快速建立认知:
4.3.1 Backtrader:快速验证的首选
Backtrader的设计哲学是「简单」。你写一个策略类,继承bt.Strategy,实现next方法,就完成了核心逻辑。我刚开始做高频策略时,用Backtrader三天就搭出了第一个做市策略的原型。
看个最简单的例子:
import backtrader as bt
class SimpleMarketMaker(bt.Strategy):
def __init__(self):
self.bid_price = None
self.ask_price = None
def next(self):
# 获取当前价格
current_price = self.data.close[0]
# 设置做市报价:买一价低0.5%,卖一价高0.5%
self.bid_price = current_price * 0.995
self.ask_price = current_price * 1.005
# 下单
self.buy(price=self.bid_price, size=1)
self.sell(price=self.ask_price, size=1)
# 运行回测
cerebro = bt.Cerebro()
data = bt.feeds.YahooFinanceData(dataname='AAPL', fromdate='2023-01-01')
cerebro.adddata(data)
cerebro.addstrategy(SimpleMarketMaker)
cerebro.run()
个人经验:Backtrader的next方法里,我习惯用self.data.close[0]获取当前价格,用self.data.close[-1]获取上一根K线的价格。这个细节在计算价差时特别重要。
4.3.2 vnpy:生产级的选择
vnpy是专门为国内期货市场设计的。它内置了CTP、XTP等柜台接口,回测完可以直接切到实盘。我在做高频做市策略时,最终上线用的就是vnpy。
但说实话,vnpy的学习曲线确实陡一些。它的架构分了好几层:
- 底层:事件驱动引擎,处理行情和订单
- 中间层:策略模板,提供
on_tick、on_order等回调 - 上层:GUI界面,可视化操作
安装vnpy时要注意:
# 推荐用pip安装
pip install vnpy
# 如果需要回测功能,额外安装
pip install vnpy_ctastrategy
pip install vnpy_ctabacktester
避坑指南:我曾经在Mac上装vnpy,结果因为缺少ta-lib库,折腾了一整天。后来发现用conda install -c conda-forge ta-lib就能解决。所以建议Windows用户直接用Anaconda环境,省心很多。
4.4 我的选择建议
如果你问我怎么选,我的建议是:
| 场景 | 推荐框架 | 理由 |
|---|---|---|
| 快速验证策略想法 | Backtrader | 代码量少,十分钟就能跑起来 |
| 多合约做市策略 | vnpy | 原生支持多合约,订单管理完善 |
| 从回测到实盘 | vnpy | 接口统一,切换成本低 |
| 学习量化框架 | Backtrader | 文档清晰,适合入门 |
我个人习惯是:先用Backtrader快速验证策略逻辑,等策略稳定了,再迁移到vnpy做精细化回测和实盘。这样既保证了开发效率,又确保了生产环境的可靠性。
最后说一句:环境搭建这件事,看起来简单,但做不好后面全是坑。我见过太多人因为环境问题浪费了一周时间。所以,花半天时间把这一步做扎实,绝对值得。