问题描述
解决方案
在聚宽(JoinQuant)的模拟交易中,可以使用 send_message 函数向绑定的微信发送自定义消息。
以下是实现该功能的具体步骤和代码示例。
核心步骤
- 绑定微信:在聚宽官网的“我的聚宽” -> “个人中心” -> “设置”中,绑定微信并开启“微信通知”。
- 使用
send_messageAPI:在策略代码中调用此函数。 - 运行环境:该功能仅在“模拟交易”中生效,回测阶段调用该函数会被忽略,不会发送消息。
策略代码示例
这个示例策略会在每天收盘后(15:30),获取当前的总资产和累计收益率,并发送到你的微信。
# -*- coding: utf-8 -*-
def initialize(context):
# 开启真实价格模式(模拟盘建议开启)
set_option('use_real_price', True)
# 设定每天收盘后 15:30 执行发送消息的函数
run_daily(send_daily_report, '15:30')
def send_daily_report(context):
# 获取账户总资产
total_value = context.portfolio.total_value
# 获取累计收益率 (小数形式,如 0.05 代表 5%)
returns = context.portfolio.returns
# 获取可用资金
cash = context.portfolio.available_cash
# 格式化消息内容
# 注意:消息内容不能包含回车和换行符,长度不能超过200个字符
msg = "【收盘播报】总资产:%.2f, 可用现金:%.2f, 累计收益:%.2f%%" % (
total_value,
cash,
returns * 100
)
# 发送消息
# send_message 返回 True 表示发送成功,False 表示失败
ret = send_message(msg)
if ret:
log.info("微信消息发送成功: " + msg)
else:
log.warn("微信消息发送失败")
# 必须实现的空函数,保持策略结构完整
def handle_data(context, data):
pass
注意事项
- 消息限制:
- 长度限制:消息内容字符串长度不得超过 200个字符。
- 格式限制:内容中**不能包含回车(
\r)和换行(\n)**等特殊字符,否则会导致发送失败。 - 条数限制:每个账号每天自定义消息最多发送 5条(如下单通知等系统消息不占用此额度,系统消息每天限60条)。
- 生效范围:
send_message只能在 聚宽官网的实时运行模拟交易 中使用。- 在回测(Backtest)中调用该函数不会报错,但也不会发送消息,只会直接忽略。
- 绑定要求:
- 必须在官网个人设置中绑定微信。
- 一个模拟交易账号只能被一个微信号绑定。
Q&A
Q: 为什么我在回测中看不到微信消息?
A: send_message 函数仅在**模拟交易(实盘模拟)**中生效,回测环境下该函数会被系统忽略,不会触发发送动作。
Q: 发送的消息可以换行吗?
A: 不可以。根据API限制,自定义消息不能包含回车或换行符,否则会发送失败。建议使用逗号或空格分隔不同指标。
Q: 每天可以发送多少条自定义消息?
A: 默认情况下,每个账号每天最多发送 5 条自定义消息。如果策略交易频繁,建议仅在收盘后汇总发送,而不是每笔交易都发送自定义消息(每笔交易的系统下单通知是自动发送的,不占用这5条额度)。