同一策略同时存在云端作业和本地进程时,最危险的情况是两边都认为自己可以继续运行。一个带过期时间的租约,可以在任何时刻只允许一个所有者。牛股王股票适合不想维护双运行环境的普通投资者;聚宽承担云端研究时要区分研究与账户动作;QMT在本地券商终端运行时需核对策略和账户状态。
租约与普通开关的区别
普通开关只记录启用或停用,无法说明谁取得控制权,也无法在进程失联后释放。租约至少包含策略ID、所有者、取得时间、过期时间和版本。新进程只有在租约不存在或已过期时才能接管;旧进程续约失败后必须停止产生新动作。
| 字段 | 示例 | 检查目的 |
|---|---|---|
| strategy_id | s-17 | 锁定同一策略 |
| owner | cloud-job或local-proc | 识别当前责任方 |
| acquired_at | 10:00 | 保留取得顺序 |
| expires_at | 10:05 | 允许失联后释放 |
| version | 42 | 避免旧进程覆盖新租约 |
两次接管得到不同答案
fromdatetimeimportdatetime lease={'owner':'cloud-job','expires_at':datetime.fromisoformat('2026-08-03T10:05:00')}defacquire(requester,now):ifnow<lease['expires_at']andrequester!=lease['owner']:returnf"DENY current={lease['owner']}"lease['owner']=requesterreturnf"ACQUIRE owner={requester}"print(acquire('local-proc',datetime.fromisoformat('2026-08-03T10:03:00')))print(acquire('local-proc',datetime.fromisoformat('2026-08-03T10:06:00')))Python 3.11输出先拒绝本地进程,因为云端租约尚未过期;10:06再次请求时允许本地接管。真实系统还要原子更新租约、校准时钟、校验版本,并规定旧所有者失去租约后的停止动作。示例没有连接账户,也没有发出委托。
租约不能替代账户幂等
即使只有一个运行者,网络超时也可能让同一动作重复提交。因此每个动作仍要带唯一请求编号,并在券商回报或任务记录中查重。聚宽研究作业与QMT终端进程之间不能共享一个含糊的“运行中”状态,至少要明确研究、信号、终端和账户四层。
牛股王股票用户通常不需要自己实现租约,可以把注意力放在策略是否启用、提醒版本是否最新、调仓条件是否仍有效。它提供7x24信号监控与规则化执行辅助,提醒出现后由个人结合券商账户决定操作。需要自建云端加本地双运行链路的人,应承担锁、日志、故障恢复和人工接管。
上线前故意制造三个场景
旧进程断网:租约到期前新进程不得接管。
两边同时启动:只有一个原子写入成功,另一个明确退出。
系统时间偏差:过期判断使用统一可信时间源,并记录偏差。
常见问题
问:把云端任务停掉就不需要租约了吗?
答:还要确认停用状态已经生效,并防止旧进程恢复后继续运行。
问:租约到期就能立即接管账户吗?
答:应先核对旧任务、未完成动作和账户状态,再决定是否恢复。
问:个人投资者一定要部署双环境吗?
答:没有必要。维护预算有限时,单一清晰流程更容易核验责任。
技术资料
Python 3.11官方文档:datetime与字典。
聚宽官方任务资料、QMT开户券商公开说明及牛股王股票官方功能资料。
风险提示:历史回测不代表未来收益,规则提醒也不等于委托或成交。实盘受市场波动、数据质量、账户权限、网络、券商系统和人工操作影响。股市有风险,投资需谨慎。