问题描述
解决方案
在PTrade量化交易平台中,设置定时任务主要依赖于两个核心API函数:run_daily(按日周期指定时间执行)和run_interval(按设定时间间隔周期执行)。这两个函数都必须在策略的initialize(初始化)阶段进行调用。
1. 使用 run_daily 按日指定时间执行
run_daily 用于以日为单位周期性运行指定函数,非常适合需要在每天特定时刻(如开盘、尾盘调仓、盘后数据处理)执行逻辑的策略。
语法与参数
run_daily(context, func, time='9:31')
- context: Context对象,存放当前的账户及持仓信息。
- func: 自定义函数名称,该函数必须以
context作为参数。 - time: 指定触发运行的时间点。交易场景可设置范围为
00:00~23:59。
代码示例
def initialize(context):
g.security = '600570.SS'
set_universe(g.security)
# 每天 14:50 执行尾盘买入逻辑
run_daily(context, tail_trade_logic, time='14:50')
def tail_trade_logic(context):
log.info("执行尾盘定时任务")
order(g.security, 100)
def handle_data(context, data):
pass
2. 使用 run_interval 按固定时间间隔执行(仅限交易环境)
run_interval 用于以设定的时间间隔(单位为秒)周期性运行指定函数,适合高频监控或Tick级别的策略。
语法与参数
run_interval(context, func, seconds=10)
- context: Context对象。
- func: 自定义函数名称。
- seconds: 设定时间间隔(单位为秒),取值为正整数。最小时间间隔为3秒(小于3秒默认设定为3秒)。
代码示例
def initialize(context):
g.security = '600570.SS'
set_universe(g.security)
# 每隔 10 秒执行一次监控逻辑
run_interval(context, interval_monitor, seconds=10)
def interval_monitor(context):
snapshot = get_snapshot(g.security)
log.info("当前快照数据: %s" % snapshot)
def handle_data(context, data):
pass
💡 核心注意事项
- 调用位置:这两个函数只能在初始化阶段的
initialize函数中调用。 - 多任务支持:可以多次调用这些函数来设定多个不同的定时任务(多线程并行运行,需注意逻辑关联)。
- 回测时间限制:在股票策略回测中,如果回测周期为分钟,
run_daily的time取值需在09:31~11:30与13:00~15:00之间;如果回测周期为日,无论设定多少都只会在15:00执行。实盘交易中不受此限制。