问题描述
貌似一直没有收到永久交易位的send message。是不是和设置运行时间有关,还是这个函数不能在永久交易位里面用了?哪位大神了解。多谢
解决方案
在 JoinQuant(聚宽)平台中,send_message 函数在模拟交易(即你提到的“永久交易位”)中是绝对有用且专门为此设计的。根据官方 API 文档,send_message 是“聚宽官网实时运行模拟交易专用API”。
如果你一直没有收到消息,通常不是因为该函数被禁用,而是由于以下几个常见限制或配置问题导致的。请逐一排查:
1. 微信绑定与通知设置问题
- 必须绑定微信:要使用模拟交易发送微信功能,必须在聚宽官网绑定微信。
- 绑定被覆盖:一个账号的模拟交易只能被一个用户绑定。如果你或他人用多个微信号绑定了该账号,前面的绑定会失效,以最后一个绑定的微信号为准。
2. 消息条数超限
- 每日 5 条限制:自定义消息(
send_message)每个账号每天最多只能发送 5 条。如果超出这个数量,消息会发送失败(如果需要更多条数,可以使用平台积分兑换)。 - 注意区分下单通知:下单通知是每天最多 60 条,这与
send_message的 5 条限制是分开计算的。
3. 消息内容格式违规
- 长度限制:自定义消息长度不得超过 200 个字符。
- 特殊字符限制(极易踩坑):消息内容中**不能包含回车(
\r)和换行(\n)**等特殊字符,否则会导致发送失败。
4. 运行环境问题
send_message只能在聚宽官网的实时运行模拟交易中使用。如果你是在“回测”环境中运行,该函数会被直接忽略,且没有任何报错提示。
5. 代码逻辑与运行时间问题
正如你猜测的,这也可能与运行时间或代码逻辑有关:
- 函数未被触发:请检查包含
send_message的函数是否真的被执行了。例如,如果你把它放在handle_data中,但加上了严格的买入/卖出条件,可能条件一直未满足。 - 定时运行设置错误:如果你使用
run_daily(func, time='xx:xx'),请确保时间设置正确,并且模拟交易在那个时间点处于正常运行状态。
排查建议
建议你写一个最简单的测试策略,挂在模拟交易中测试一下:
def initialize(context):
# 设置在每天开盘前 09:00 运行测试函数
run_daily(test_msg, time='09:00')
def test_msg(context):
# 打印日志,确认函数确实被执行了
log.info("准备发送微信消息...")
# 发送最简单的纯文本,不带任何换行符
success = send_message("这是一条来自模拟交易的测试消息")
# send_message 会返回 True 或 False,可以通过日志查看是否发送成功
if success:
log.info("消息发送成功!")
else:
log.error("消息发送失败,请检查条数限制或字符格式!")
总结:send_message 在模拟盘中完全可用。请重点检查是否包含换行符、是否超过每日 5 条限制以及微信绑定是否有效。同时,利用 send_message 的返回值(True/False)和 log.info 可以在模拟交易的日志中快速定位问题。