请求实现15m周期下单但4小时周期内仅执行一次的交易策略
15分钟信号触发+4小时周期单次订单限制实现方案
核心逻辑
解决同一4小时K线内多次触发15分钟信号的问题,核心是跟踪当前4小时周期的唯一标识,并记录该周期内是否已执行过订单。每次15分钟信号触发时,先验证这两个条件,仅当进入新的4小时周期且未执行过订单时,才允许下单操作。
代码实现(以Pine Script为例)
//@version=5 strategy("15m Signal with 4hr Single Order Cap", overlay=true, default_qty_type=strategy.cash, default_qty_value=1000) // 识别当前周期 is_15m_timeframe = timeframe.period == "15" new_4hr_bar = ta.barssince(timeframe.new("D", 0, 4)) == 0 // 存储当前4小时K线的唯一标识(用开盘时间) var float current_active_4hr_bar = na if new_4hr_bar current_active_4hr_bar := ta.time // 记录上一次执行订单的4小时周期标识 var float last_order_4hr_bar = na // 替换为你的实际交易信号逻辑 fast_ma = ta.sma(close, 10) slow_ma = ta.sma(close, 20) buy_signal = ta.crossover(fast_ma, slow_ma) sell_signal = ta.crossunder(fast_ma, slow_ma) // 订单执行控制 if is_15m_timeframe // 检查:当前4小时周期未执行过订单 if current_active_4hr_bar != last_order_4hr_bar if buy_signal strategy.entry("Long", strategy.long) last_order_4hr_bar := current_active_4hr_bar // 标记该周期已执行 if sell_signal strategy.entry("Short", strategy.short) last_order_4hr_bar := current_active_4hr_bar // 标记该周期已执行
关键细节说明
- 周期标识跟踪:通过
current_active_4hr_bar记录当前4小时K线的开盘时间,每当新的4小时K线启动时更新该值,确保周期判断的准确性。 - 订单执行标记:
last_order_4hr_bar存储最近一次下单所在的4小时周期标识,只要当前周期与该标识不同,就允许新的订单触发。 - 信号隔离:仅在15分钟周期内检查交易信号,避免其他周期的干扰。
适配其他平台的注意事项
如果使用其他交易脚本语言(如MQ4/5、Python量化框架),核心逻辑保持不变:
- 实现4小时周期的切换检测,生成唯一周期ID。
- 维护一个全局变量记录上一次下单的周期ID。
- 信号触发时,对比当前周期ID与记录的ID,不一致才执行下单,并更新记录ID。
内容的提问来源于stack exchange,提问作者Brad P
相关产品推荐
相关产品推荐

