3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 ptrade 量化平台中,回测引擎的底层分钟级别触发频率是每分钟执行一次,并没有直接提供“每五分钟触发一次”的引擎级别选项。但是,您完全可以通过代码逻辑控制和获取5分钟K线数据来实现每五分钟执行一次的量化回测策略。
根据 ptrade API 文档,策略的运行周期主要分为:
handle_data(context, data) 函数会每分钟被调用一次。既然 handle_data 是每分钟触发的,我们可以在该函数内部获取当前的时间,通过判断当前分钟数是否能被 5 整除(例如 05分、10分、15分...),来决定是否执行核心的交易逻辑。
同时,ptrade 的行情获取接口(如 get_history 和 get_price)是支持直接获取 5m(5分钟线)频率的数据的。
以下是一个在 ptrade 中实现每 5 分钟执行一次逻辑的策略模板:
def initialize(context):
# 设置我们要操作的股票池
g.security = '600570.SS'
set_universe(g.security)
def handle_data(context, data):
# 获取当前回测时间的分钟数
current_minute = context.blotter.current_dt.minute
# 判断当前分钟数是否是 5 的倍数(即每 5 分钟执行一次)
# 注意:A股开盘是 9:30,第一根5分钟K线结束是 9:35
if current_minute % 5 == 0:
# 记录日志,确认执行时间
log.info("当前时间:%s,执行5分钟周期逻辑" % context.blotter.current_dt)
# 获取过去 10 根 5分钟线 的收盘价数据
# frequency='5m' 表示获取5分钟级别数据
hist_data = get_history(10, frequency='5m', field='close', security_list=g.security)
if hist_data is not None and not hist_data.empty:
# 获取最新的5分钟收盘价
current_close = hist_data['close'].iloc[-1]
# 在这里编写您的 5分钟级别 交易信号判断逻辑
# 例如:简单的价格突破逻辑
if current_close > 40.0 and get_position(g.security).amount == 0:
order_value(g.security, 10000)
log.info("触发买入信号")
elif current_close < 38.0 and get_position(g.security).amount > 0:
order_target(g.security, 0)
log.info("触发卖出信号")
handle_data。context.blotter.current_dt.minute % 5 == 0 过滤时间,使核心代码每 5 分钟运行一次。get_history(..., frequency='5m', ...) 获取标准的 5 分钟 K 线数据进行指标计算。