问题描述
解决方案
在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: 块内的逻辑只在回测中执行。