🚀 AI 一键生成 ptrade 策略代码

PTrade 策略实盘教程:如何配置 set_email_info 实现错误自动告警?

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

问题描述

我的策略在实盘中如果出错了能不能自动发邮件通知我?

解决方案

是的,PTrade 提供了原生的接口来实现策略报错自动发送邮件通知的功能。

您可以使用 set_email_info 函数在策略初始化时进行配置。当策略在实盘运行中因为异常(Exception)导致程序终止时,系统会自动向您指定的邮箱发送报警邮件。

以下是具体的实现方法和注意事项:

1. 核心函数说明

set_email_info(email_address, smtp_code, email_subject)

  • 使用场景:仅在交易模块(实盘)可用,通常在 initialize 中调用。
  • 功能:设置邮件信息,当交易报错终止时发送提示邮件。
  • 参数
    • email_address (str): 邮箱地址(通常仅支持 QQ 邮箱)。
    • smtp_code (str): 邮箱的 SMTP 授权码(注意:这不是邮箱登录密码,而是专门的授权码)。
    • email_subject (str): 邮件主题,例如 "【PTrade报警】策略异常终止"。

2. 代码示例

请将以下代码添加到您的策略中。建议放在 initialize 函数内。

def initialize(context):
    # 设置我们要操作的股票池
    g.security = '600570.SS'
    set_universe(g.security)
    
    # ---------------------------------------------------------
    # 设置异常报警邮件
    # 1. email_address: 您的QQ邮箱地址
    # 2. smtp_code: QQ邮箱的SMTP授权码 (需在QQ邮箱设置中开启POP3/SMTP服务获取)
    # 3. email_subject: 邮件标题
    # ---------------------------------------------------------
    # 请将下方的 "[email protected]" 和 "your_smtp_code" 替换为您真实的信息
    is_success = set_email_info("[email protected]", "your_smtp_code", "【严重警告】PTrade策略异常终止")
    
    if is_success:
        log.info("邮件报警服务配置成功")
    else:
        log.warn("邮件报警服务配置失败,请检查参数或咨询券商")

def handle_data(context, data):
    # 策略逻辑...
    pass

3. 重要注意事项

  1. 仅支持 QQ 邮箱:根据 PTrade 文档说明,当前通常仅支持设置 QQ 邮箱地址作为发送和接收方。
  2. SMTP 授权码
    • 您需要登录网页版 QQ 邮箱。
    • 进入“设置” -> “账户”。
    • 找到“POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务”部分。
    • 开启“POP3/SMTP服务”。
    • 系统会生成一串字符,那个就是 SMTP 授权码,请将其填入代码中 smtp_code 的位置。
  3. 券商权限:部分券商出于网络安全考虑,可能会在服务器端封锁邮件发送端口。如果您配置正确但无法收到邮件,请咨询您的开户券商确认当前环境是否支持发送邮件。
  4. 触发条件:该函数主要用于策略异常终止(Crash)时的通知。如果您希望在策略正常运行期间发送自定义通知(例如成交通知),需要使用 send_email 接口(如果券商支持)或通过 try...except 捕获异常后手动处理。

4. 手动异常捕获(进阶)

如果您不希望策略一报错就停止,而是希望捕获错误、记录日志并继续运行(防止因个别数据错误导致全盘停止),可以使用 Python 的 try...except 结构:

def handle_data(context, data):
    try:
        # 您的核心交易逻辑
        # 例如:order(g.security, 100)
        pass
    except Exception as e:
        # 捕获异常,打印错误日志,策略不会停止
        log.error("策略运行出现错误: %s" % e)
        # 如果券商支持 send_email,也可以在这里手动发邮件
        # send_email("[email protected]", "逻辑报错通知", "错误内容: %s" % e)

Q&A

Q: 为什么我填了正确的 QQ 密码却发送失败?
A: set_email_info 需要的是 SMTP 授权码,而不是您的 QQ 登录密码。这是为了安全考虑,您需要在 QQ 邮箱网页版的设置中开启 SMTP 服务来获取该授权码。

Q: 这个功能在回测中能用吗?
A: 不能。set_email_info 函数仅在交易模块(实盘或仿真交易)中可用,回测环境中调用可能会报错或无效。

Q: 除了发邮件,支持发微信通知吗?
A: PTrade 提供了 send_qywx 接口,支持发送企业微信通知。但这通常需要您有企业微信的配置权限(Webhook 地址等),且同样依赖于券商的网络环境支持。对于个人用户,邮件通知通常是最容易配置的方式。