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

ptrade 平台 is_trade 接口使用指南:实现回测与交易代码兼容

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

问题描述

is_trade接口使用问题

如何在一套代码中兼容回测和交易?

解决方案

在 ptrade 量化交易平台中,由于部分 API 函数仅限在回测或交易场景中使用(例如某些特定的主推事件或特定的下单接口),为了提高代码的复用性,避免维护两套几乎相同的代码,平台提供了 is_trade() 接口。

接口说明

is_trade() 用于提供业务代码执行场景的判断依据,明确标识当前业务代码运行场景为回测还是交易。通过该函数,你可以使用 if-else 逻辑来区分对应场景,从而在一套策略代码中同时兼容回测与交易。

返回值

  • 布尔类型 (bool)
    • 当前代码在**交易(实盘/模拟盘)**中运行,返回 True
    • 当前代码在回测中运行,返回 False

使用场景

仅在回测交易模块可用。

代码示例

以下是一个简单的示例,展示了如何在 handle_data 中使用 is_trade() 来区分打印不同的日志,或者执行不同的逻辑:

def initialize(context):
    # 初始化股票池
    g.security = '600570.SS'
    set_universe(g.security)

def handle_data(context, data):
    # 执行通用的下单逻辑
    _id = order(g.security, 100)
    
    # 使用 is_trade() 判断当前运行环境
    if is_trade():
        # 这里可以放置仅在交易环境中运行的代码
        # 例如:获取实时的 tick 数据、处理特定的交易主推等
        log.info("当前运行场景:交易")
    else:
        # 这里可以放置仅在回测环境中运行的代码
        # 例如:获取对账文件、打印特定的回测评估指标等
        log.info("当前运行场景:回测")

最佳实践建议

  1. 规避不支持的接口:在 initializebefore_trading_start 中,如果需要调用仅交易支持的接口(如 run_intervaltick_data 相关的设置),请务必将其包裹在 if is_trade(): 逻辑块中,防止回测报错。
  2. 参数设置差异化:回测和实盘可能需要不同的滑点、手续费设置。可以在 initialize 中通过 is_trade() 判断,如果是回测(False),则调用 set_slippageset_commission;如果是实盘,则跳过这些回测专属的设置函数。