问题描述
/
解决方案
问题原因解答
在 ptrade 量化交易平台中,当您使用 run_interval 函数设置 seconds=2 时,实际执行间隔变为 3 秒,这是因为 ptrade 引擎对 run_interval 的最小时间间隔做了硬性限制。
根据 ptrade API 文档的明确规定:
seconds设置最小时间间隔为3秒,小于3秒默认设定为3秒。
因此,任何小于 3 秒的设定(如 1 秒或 2 秒),系统都会自动将其强制转换为 3 秒执行一次。这是为了保护服务器性能,防止过高频的无效轮询导致系统资源耗尽。
如何正确设置秒级定时任务
如果您需要使用 run_interval 进行秒级周期处理,请确保 seconds 参数的值 大于或等于 3。
正确的代码示例
def initialize(context):
# 初始化股票池
g.security = '600570.SS'
set_universe(g.security)
# 正确设置:设置时间间隔为 3 秒(或以上)
run_interval(context, interval_handle, seconds=3)
def interval_handle(context):
# 每 3 秒执行一次的逻辑
snapshot = get_snapshot(g.security)
if snapshot:
log.info("最新价: %s" % snapshot[g.security].get('last_px'))
def handle_data(context, data):
pass
补充建议:高频策略的替代方案
如果您编写的是高频策略,极度依赖 Tick 级别的行情触发,除了 run_interval,您还可以使用 tick_data 事件函数。
tick_data(context, data):该函数专门用于处理 tick 级别策略的交易逻辑,同样是每隔 3 秒执行一次。它的优势在于入参data中直接包含了丰富的逐笔委托(order)、当前 tick 数据(tick)和逐笔成交(transcation)信息,非常适合做盘口分析和高频打单。
注意:无论是 run_interval 还是 tick_data,在 ptrade 平台上的最高执行频率目前均被限制为 3秒/次。请在设计策略逻辑时充分考虑这一频率上限。