run_interval用法及运行时间
/
问题描述
解决方案
ptrade 中 run_interval 函数详解
在 ptrade 量化交易平台中,run_interval 是一个非常重要的定时周期性函数,主要用于实现高频的定时任务。它可以让策略以设定的时间间隔(精确到秒)周期性地执行指定的自定义函数。
1. 函数简介与使用场景
- 函数定义:
run_interval(context, func, seconds=10) - 使用场景:仅在交易模块可用(回测模块不支持)。
- 接口说明:用于以设定时间间隔(单位为秒)周期性运行指定函数,可对运行触发时间间隔进行指定。
2. 运行时间规则
run_interval 设定的任务主要在盘中交易时间运行(通常为 9:30~11:30 和 13:00~15:00,具体以券商实际配置为准)。
3. 参数说明
- context:
Context对象,存放有当前的账户及持仓信息。 - func: 自定义函数名称。此函数必须以
context作为唯一参数(例如def my_func(context):)。 - seconds: 设定时间间隔(单位为秒),取值为正整数(
int)。
4. 重要注意事项
- 调用位置:该函数只能在初始化阶段的
initialize函数中调用。 - 最小时间间隔:
seconds设置的最小时间间隔为 3秒。如果传入的值小于 3 秒,系统会默认将其设定为 3 秒。 - 多线程并行:该函数可以多次设定,以实现多个不同的定时任务。这些任务会以多个线程并行运行,因此在编写策略时,务必小心处理不同线程之间的逻辑关联和变量共享问题,避免出现竞态条件。
5. 代码示例
以下是一个完整的策略示例,展示了如何使用 run_interval 每隔 10 秒获取一次指定股票的行情快照:
# 定义一个周期处理函数,每10秒执行一次
def initialize(context):
# 设定每 10 秒运行一次 interval_handle 函数
run_interval(context, interval_handle, seconds=10)
# 设置全局变量和股票池
g.security = '600570.SS'
set_universe(g.security)
# 自定义周期运行函数,必须包含 context 参数
def interval_handle(context):
# 获取股票的实时行情快照
snapshot = get_snapshot(g.security)
# 打印快照信息到日志
log.info("每10秒获取的行情快照: %s" % snapshot)
# 盘中处理函数(必选结构,即使为空也需要保留)
def handle_data(context, data):
pass
通过合理使用 run_interval,您可以轻松实现如高频监控、动态撤单、盘口数据抓取等复杂的交易逻辑。