Pine Script如何实现每3天校验一次交易入场条件?
Pine Script 3日周期入场校验逻辑实现方案
核心实现逻辑是通过固定周期计数器+持久化变量存储校验结果,实现「T日校验、结果作用于T+1至T+3交易日、T+4日重校验」的规则,全程避免变量随K线重算被覆盖。
核心逻辑拆解
- 用
var修饰的持久化变量存储入场权限标记、周期计数器,保证3天有效期内数值不会被单根K线的行情波动重置 - 计数器归零当日触发条件校验,校验完成后将计数器重置为3,对应后续3个生效交易日
- 每经过1个完整交易日,计数器减1,减到0时自动触发下一轮校验
可直接复用的核心代码(Pine Script v5)
//@version=5 strategy("3日周期校验交易策略", overlay=true, initial_capital=100000, default_qty_type=strategy.cash, default_qty_value=10000, commission_type=strategy.commission.percent, commission_value=0.03) // ========== 可配置参数 ========== valid_period = input.int(3, title="单次校验结果生效交易日数", minval=1) // 请将下方entry_condition替换为你自己开发完成的入场校验逻辑 entry_condition = ta.rsi(close, 14) < 30 and ta.close > ta.sma(close, 60) // ========== 周期控制核心变量 ========== var int remain_valid_days = 0 var bool entry_permission = false // ========== 周期触发与校验逻辑 ========== // 适配多周期运行:仅在新交易日第一根K线触发计数 is_new_day = ta.change(time("D")) != 0 if remain_valid_days == 0 // 周期届满,执行当日校验 entry_permission := entry_condition remain_valid_days := valid_period else // 每过一个交易日,剩余有效天数减1 if is_new_day remain_valid_days := remain_valid_days - 1 // ========== 交易执行逻辑 ========== // 有权限且无持仓时开多,空单逻辑可按需求自行扩展 if entry_permission and strategy.position_size == 0 strategy.entry("Long", strategy.long) // 此处替换为你自己的出场逻辑即可,示例为持有5个交易日平仓 if strategy.position_size > 0 and bar_index - strategy.opentrades.entry_bar_index(0) >= 5 strategy.close("Long")
避坑说明
- 不要删除变量前的
var关键字:没有var修饰的变量会在每根K线重新计算赋值,会导致入场权限标记随行情实时变化,完全破坏3天锁定期的规则 - 多周期运行必须保留
is_new_day判断:如果在1小时、15分钟等小于日线的周期运行,该判断可以避免把小周期K线误算为交易日,保证计数准确 - 校验逻辑仅在
remain_valid_days == 0的交易日执行一次,其余时间不会重复触发校验,完全匹配规则要求
内容的提问来源于stack exchange,提问作者vignesh kanakavalli
相关产品推荐
相关产品推荐

