问题描述
在阅读聚宽的文档时,发现常提到三个环境:回测环境、模拟环境、研究环境。
请问这三个环境有什么区别?以及什么情况用什么环境?
解决方案
在 JoinQuant(聚宽)量化平台中,研究环境、回测环境和模拟环境是量化策略开发生命周期中三个截然不同但又紧密相连的阶段。它们在底层逻辑、数据获取方式以及支持的 API 上都有所区别。
以下是这三个环境的详细区别及适用场景:
1. 研究环境 (Research Environment)
定义:研究环境是一个基于 Jupyter Notebook 的交互式数据分析工作台。
- 核心特点:自由度极高,支持即时运行代码并查看结果(如打印表格、绘制图表)。它主要用于静态数据分析,而不是事件驱动的交易。
- API 限制:不能使用策略专用的交易 API(如
initialize,handle_data,run_daily,order等)。但可以自由使用数据获取 API(如get_price,get_fundamentals,get_factor_values等)。 - 数据时间:获取财务数据等默认是最新日期(通常是昨天或今天),没有严格的“防未来函数”限制,需要开发者自己注意时间对齐。
- 适用场景:
- 策略灵感的初步验证与数据探索。
- 多因子模型的构建、单因子有效性分析(如使用
analyze_factor)。 - 机器学习模型的训练与测试。
- 复杂数据的清洗与可视化。
2. 回测环境 (Backtest Environment)
定义:回测环境是一个事件驱动的策略执行引擎,用于在历史数据上检验策略的逻辑和盈利能力。
- 核心特点:按照时间轴(天、分钟或 Tick)逐步推进,模拟历史上的交易过程。引擎会自动计算收益率、最大回撤、夏普比率等风险指标。
- API 限制:必须遵循聚宽的策略框架(包含
initialize等生命周期函数)。可以使用所有的下单 API(order_value,order_target等)。 - 数据时间:具有严格的时间上下文(
context.current_dt)。为了防止“未来函数”,API(如get_fundamentals)默认只能获取到当前逻辑时间点之前的数据(例如回测到 2018-01-05,获取的财务数据默认是 2018-01-04 及以前披露的)。 - 适用场景:
- 将研究环境中的逻辑转化为可执行的交易策略。
- 评估策略在历史长周期内的绩效表现。
- 策略参数调优。
3. 模拟环境 (Simulation / Live Trading Environment)
定义:模拟环境是基于回测成功的策略创建的,接入实时市场行情(通常有极小延迟)进行虚拟资金交易的引擎。
- 核心特点:与真实时间同步运行。每天交易结束后进程会休眠,第二天开盘前唤醒。支持更真实的盘口撮合逻辑(
match_with_order_book)。 - API 限制:与回测环境基本一致,但引入了持久化和重启机制。全局变量
g会被序列化(Pickle)保存到磁盘,不能序列化的对象(如数据库连接)需要在process_initialize中重新初始化。支持after_code_changed函数用于处理模拟盘运行中途修改代码的情况。 - 数据时间:获取的是当天的实时数据(如
get_current_data,get_current_tick)。 - 适用场景:
- 策略实盘前的最终检验(Out-of-sample testing)。
- 观察策略在真实市场波动、真实流动性下的表现。
- 结合
send_messageAPI 接收微信交易信号提醒,辅助手动实盘交易。
总结与开发流程建议
一个标准的量化策略开发流程通常是:
- 在【研究环境】中挖掘:获取历史数据,分析因子,验证某个选股逻辑是否有效。
- 在【回测环境】中实现:将有效的逻辑写成完整的交易代码,加入买卖规则、止盈止损和滑点手续费,跑出历史收益曲线。
- 在【模拟环境】中挂载:回测表现优异后,开启模拟交易,观察其在未来几周/几个月的实时表现,确认无误后方可作为实盘参考。