为什么需要每天代码重置
在QMT量化交易中,很多策略需要在每个交易日开始时进行初始化操作。这可能包括:
- 重置每日统计变量(如当日成交量、最大回撤等)
- 重新计算每日参数(如当日目标仓位、阈值等)
- 清理前一交易日的数据缓存
- 初始化每日的交易状态标志
如果不进行每日重置,可能会导致数据累积错误、状态混乱等问题,影响策略的正常运行。
QMT的自动初始化机制
QMT提供了系统级的自动初始化功能,可以在系统设置中配置每天固定时间自动重启终端。但这种方式会导致整个终端重启,可能会影响正在运行的策略。
更好的做法是在策略代码中实现每日重置逻辑,这样可以更精细地控制初始化过程。
实现每天执行一次的函数
使用定时任务(推荐)
QMT支持使用run_time来设置定时任务,可以在指定时间执行函数。
run_time函数的具体使用参数和解释说明,可以参考官方文档(pdf 版本)
1 | from datetime import datetime, date |
注意事项
1. 避免重复重置
使用日期判断或定时任务时,要确保每天只执行一次重置。
2. 处理节假日
如果使用固定时间的定时任务,需要考虑节假日的情况:
(如何判断当天是不是交易日,可以参考我的博客文章:讯投 QMT 使用小技巧 -如何判断今天是不是交易日
1 | def daily_reset(ContextInfo): |
3. 日志记录
在重置函数中添加日志记录,方便排查问题:
1 | def daily_reset(ContextInfo): |
4. 发送通知到手机
每天重置完成了之后,可以发送邮件或其他提醒到手机上,具体参考我的博客文章QMT 与手机通信 - 邮件推送实现方法,或用即时性更好的 策略消息推送到微信的几种方案。
总结
通过设置每日重置函数,可以确保策略在每个交易日开始时都处于一个干净、已知的状态。这对于维护策略的稳定性和准确性非常重要。
推荐使用定时运行的函数方式设置定时任务,这样可以精确控制执行时间,避免在交易过程中频繁检查日期。