问题描述
解决方案
是的,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. 重要注意事项
- 仅支持 QQ 邮箱:根据 PTrade 文档说明,当前通常仅支持设置 QQ 邮箱地址作为发送和接收方。
- SMTP 授权码:
- 您需要登录网页版 QQ 邮箱。
- 进入“设置” -> “账户”。
- 找到“POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务”部分。
- 开启“POP3/SMTP服务”。
- 系统会生成一串字符,那个就是 SMTP 授权码,请将其填入代码中
smtp_code的位置。
- 券商权限:部分券商出于网络安全考虑,可能会在服务器端封锁邮件发送端口。如果您配置正确但无法收到邮件,请咨询您的开户券商确认当前环境是否支持发送邮件。
- 触发条件:该函数主要用于策略异常终止(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 地址等),且同样依赖于券商的网络环境支持。对于个人用户,邮件通知通常是最容易配置的方式。