🚀 AI 一键生成 ptrade 策略代码

PTrade 策略精细化管理:如何用 get_user_name 和 get_trade_name 区分不同实例?

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

问题描述

怎样在代码里知道当前跑的是哪个账号和哪个策略?

解决方案

在PTrade中,你可以通过调用特定的API函数来获取当前运行的资金账号和交易任务(策略)名称。

以下是具体的实现方法和代码示例:

1. 获取当前资金账号

使用 get_user_name() 函数。

  • 功能:获取登录终端的资金账号。
  • 返回值:字符串(String),如果获取失败返回 None
  • 适用范围:回测、交易模块。

2. 获取当前策略(交易)名称

使用 get_trade_name() 函数。

  • 功能:获取当前交易任务的名称(即你在交易端建立的策略交易任务名称)。
  • 返回值:字符串(String)。
  • 适用范围仅交易模块(实盘或模拟交易)。在回测模式下通常无法获取该名称。

3. 代码示例

以下是一个完整的策略示例,展示了如何在初始化阶段获取并打印这些信息:

def initialize(context):
    # 初始化策略
    g.security = '600570.SS'
    set_universe(g.security)
    
    # 1. 获取资金账号
    # get_user_name() 在回测和交易中均可用
    current_account = get_user_name()
    log.info("当前运行的资金账号为: %s" % current_account)
    
    # 2. 获取策略(交易)名称
    # get_trade_name() 仅在交易模块(实盘/仿真)可用
    # 为了防止在回测中报错,建议先判断运行场景
    if is_trade():
        try:
            strategy_name = get_trade_name()
            log.info("当前运行的策略任务名称为: %s" % strategy_name)
        except Exception as e:
            log.info("获取策略名称失败: %s" % e)
    else:
        log.info("当前处于回测模式,无法获取交易任务名称")

def handle_data(context, data):
    pass

4. 补充说明

  • is_trade(): 这是一个非常有用的辅助函数,返回布尔值。如果当前是在交易(实盘或仿真)环境中运行,返回 True;如果是回测,返回 False。利用它可以区分环境,避免在回测中调用仅限实盘的API。
  • 注意事项: get_trade_name() 获取的是你在PTrade交易端创建交易任务时填写的“交易名称”,而不是策略文件的文件名。

Q&A

Q: get_user_name() 在回测中返回什么?
A: 在回测模式下,get_user_name() 通常会返回 None 或者模拟的默认账号信息,具体取决于券商服务器的配置,但在实盘交易中它会返回实际登录的资金账号。

Q: 为什么我在回测里调用 get_trade_name() 报错或没反应?
A: get_trade_name() 是交易专用函数,仅在实盘或仿真交易模块中有效。在回测引擎中,并没有“交易任务名称”这个概念,因此建议配合 is_trade() 判断使用。

Q: 如何在代码中区分我是不是在做实盘?
A: 使用 is_trade() 函数。if is_trade(): 代码块内的逻辑只会在实盘/仿真交易中执行,else: 块内的逻辑只在回测中执行。