🚀 AI 一键生成 ptrade 策略代码
立即体验
👉 AI 生成代码 👈

ptrade量化平台回测与研究环境的区别解析

ptrade | 发布时间: 2026/5/29
以下内容由 EasyQuant 生成。

问题描述

回测与研究有什么区别?为什么研究环境无法调用order下单函数?

/

解决方案

在ptrade量化交易平台中,**研究环境(Research)回测环境(Backtest)**有着截然不同的定位和底层架构。理解它们的区别,就能明白为什么在研究环境中无法调用order等下单函数。

1. 回测与研究环境的核心区别

  • 研究环境(Research)
    • 定位:主要用于数据获取、数据分析、因子挖掘、模型训练和策略逻辑的初步验证。它类似于一个交互式的Jupyter Notebook环境。
    • 运行机制:线性执行代码,没有时间轴的推进概念。你可以自由地调用历史行情(如get_historyget_price)和财务数据(如get_fundamentals)进行静态分析。
  • 回测环境(Backtest)
    • 定位:用于验证交易策略在历史真实市场环境下的表现,评估策略的收益率、回撤等绩效指标。
    • 运行机制:基于事件驱动框架。它拥有一个模拟的撮合引擎和时间轴,代码会按照设定的频率(日线或分钟线)在特定的时间点(如initializebefore_trading_starthandle_data)被系统自动触发执行。

2. 为什么研究环境无法调用 order 下单函数?

根据ptrade API文档,orderorder_targetorder_value等交易相关函数,其使用场景明确标注为“仅在回测、交易模块可用”。原因如下:

  1. 缺乏撮合引擎order函数的作用是将委托单发送给撮合引擎。研究环境是一个纯粹的数据分析环境,底层并没有挂载模拟撮合引擎,因此无法处理订单的撮合、成交和滑点计算。
  2. 缺乏账户上下文(Context):在回测和交易中,所有的下单操作都会影响账户的资金和持仓。这些信息存储在context.portfolio对象中。研究环境没有账户的概念,也没有context对象来记录可用资金(cash)和持仓(positions),因此无法进行买卖操作。
  3. 缺乏时间轴推进:下单操作需要明确的“当前时间”来确定委托价格和成交价格。回测环境通过handle_data(context, data)按周期推进时间,而研究环境是静态的,没有“当前交易日/分钟”的动态概念。

3. API 使用场景总结

在编写ptrade代码时,请务必注意API文档中注明的使用场景

  • 仅回测/交易可用order系列下单函数、cancel_orderget_open_ordersget_positionset_universeinitializehandle_data等。
  • 研究、回测、交易均可用:数据获取类函数,如get_priceget_historyget_fundamentalsget_stock_infoget_trading_day等。

开发建议:标准的量化开发流程是,先在研究环境中调用get_price等接口获取数据,完成策略逻辑的推演和指标计算;确认逻辑无误后,将核心逻辑迁移到回测环境handle_data函数中,结合contextorder函数进行动态的历史回测。