问题描述
解决方案
在 PTrade 量化交易平台中,为了应对平台升级导致的 API 变动,系统提供了一个专门的检测函数 check_strategy。
该函数位于研究模块中,可以自动扫描您的策略代码,并返回代码中涉及到的已变更或过期的 API 接口及 Python 第三方库列表。
以下是具体的使用方法和步骤:
核心函数说明
check_strategy(strategy_content=None, strategy_path=None)
- 适用场景:仅限 研究模块。
- 参数:
strategy_content(str): 策略代码的内容字符串。strategy_path(str): 策略文件的路径(需先上传至研究目录)。
- 返回:返回一个包含变动信息的字典(List),主要包含
api_change_list(API 变更列表)和package_change_list(库变更列表)。
方法一:直接检查代码字符串(推荐用于快速检查)
您可以直接将策略代码复制并粘贴到 check_strategy 函数的 strategy_content 参数中进行检查。
# 在研究环境中运行以下代码
# 将您的策略代码粘贴在三引号之间
my_strategy_code = """
def initialize(context):
g.security = "600570.SS"
set_universe(g.security)
def handle_data(context, data):
# 假设这里调用了一些可能过期的API
get_history(100, frequency="1d", field=["close"], security_list=g.security)
order(g.security, 100)
"""
# 调用检查函数
check_result = check_strategy(strategy_content=my_strategy_code)
# 打印检查结果
print("策略检查结果:")
print(check_result)
方法二:检查策略文件(推荐用于长代码)
如果您的策略代码较长,或者已经保存在研究目录的文件中(例如 my_strategy.py),可以通过文件路径进行检查。
步骤:
- 将策略代码保存为
.py或.txt文件(必须是 utf-8 编码)。 - 上传该文件到 PTrade 的“研究”根目录或子目录下。
- 运行以下代码:
# 在研究环境中运行
# 假设您的策略文件名为 'my_strategy.py',且位于当前目录下
file_path = './my_strategy.py'
# 调用检查函数
# 注意:如果同时传入 content 和 path,系统仅检查 content
check_result = check_strategy(strategy_path=file_path)
# 打印检查结果
print("文件检查结果:")
print(check_result)
检查结果解读
函数返回的结果通常是一个字典结构,包含以下两个关键字段:
api_change_list: 列出了策略中使用的、在升级过程中发生变动或过期的 PTrade 原生 API 名称。package_change_list: 列出了策略中导入的、在升级后版本发生变化或不再支持的 Python 第三方库名称。
返回示例:
{
"api_change_list": [
"get_history",
"margincash_open"
],
"package_change_list": [
"pandas"
]
}
- 如果列表为空,说明您的策略代码中未检测到已知的过期或变动 API。
- 如果列表中有内容,请务必参考最新的 PTrade API 文档对相关接口进行调整。
Q&A
Q: check_strategy 函数可以在回测或交易界面直接运行吗?
A: 不可以。该函数仅在 研究模块 可用。您需要将代码复制到研究环境的 Notebook 中运行检查。
Q: 检查出 API 变动后,我该如何修改代码?
A: 您需要查阅 PTrade 官方 API 文档中对应函数的说明。通常变动涉及参数名称的修改、返回数据结构的改变(如从 Panel 变为 DataFrame)或函数名称的更替。
Q: 为什么我传入了 strategy_path 却报错找不到文件?
A: 请确认文件已上传至研究环境,且路径填写正确。通常使用相对路径 ./文件名 即可。同时确保文件编码为 utf-8 格式。
Q: 这个函数能检查出所有的逻辑错误吗?
A: 不能。check_strategy 仅用于静态扫描代码中是否包含已知变动的 API 或库,它无法检测策略的交易逻辑错误或运行时错误。