如何在Pine Script策略中设置交易间隔 实现平仓后延迟开单
Pine Script交易冷却时间实现方案
完全可以实现,核心逻辑是记录平仓时间,在开仓条件中新增冷却时间校验即可,具体实现如下:
实现步骤
- 声明持久化变量存储上一次平仓的时间戳,需用
var关键字保证变量在K线刷新时不会被重置 - 每次触发平仓(包含手动平仓、止盈止损平仓)时,更新记录的平仓时间
- 计算冷却时间对应的毫秒值(Pine Script中
time函数返回的是毫秒级Unix时间戳) - 在原有开仓条件中新增校验:当前时间与上一次平仓时间的差值大于等于设定的冷却时长
示例代码
//@version=5 strategy("带冷却时间的交易策略", overlay=true, initial_capital=10000) // 可自定义冷却时长,示例为1小时 cooldown_hour = input.int(1, title="平仓后冷却时长(小时)") cooldown_ms = cooldown_hour * 60 * 60 * 1000 // 存储上一次平仓时间,var关键字保证变量持久化 var last_exit_time = 0 // 示例开仓/平仓条件,可替换为你自己的逻辑 long_condition = ta.crossover(ta.sma(close, 5), ta.sma(close, 10)) close_condition = ta.crossunder(ta.sma(close, 5), ta.sma(close, 10)) // 平仓时更新平仓时间 if close_condition and strategy.position_size != 0 strategy.close("多头持仓") last_exit_time := time // 开仓新增冷却校验:无持仓 + 过了冷却期 + 原开仓条件满足 if strategy.position_size == 0 and time - last_exit_time >= cooldown_ms and long_condition strategy.entry("多头持仓", strategy.long)
补充说明
如果你是用策略自带的止盈止损参数平仓,不需要手动写平仓逻辑,可以直接调用官方接口获取最近一笔平仓的时间,不需要自己维护last_exit_time变量,开仓校验可以写成:
// 没有平仓记录时直接跳过冷却校验,有平仓记录时校验冷却时间 cooled_down = strategy.closedtrades == 0 or time - strategy.closedtrades.exit_time(strategy.closedtrades - 1) >= cooldown_ms
如果需要按K线根数设置冷却(比如平仓后3根K线不能开仓),也可以把时间记录替换为bar_index,判断当前K线序号和平仓时的K线序号差值即可。
内容的提问来源于stack exchange,提问作者Asad Ali
相关产品推荐
相关产品推荐

