如何在strategy.entry开仓后15天平仓?Pine Script语法求助
解决Pine Script开仓后15天自动平仓的问题
嘿,我明白你现在的困扰——直接把15传给strategy.exit的when参数肯定达不到预期效果,因为Pine Script里when需要的是布尔条件,数字15会被解析成true,导致一开仓就立刻触发平仓了。咱们来调整代码,实现真正的“开仓15天后平仓”逻辑:
核心思路
要实现时间区间平仓,关键是记录开仓时间,然后持续计算当前时间与开仓时间的差值,当差值达到15天时触发平仓。
完整修正代码
//@version=5 strategy("15天自动平仓策略", overlay=true) // 这里替换成你实际的delta指标,下面是示例模拟 delta = ta.sma(close, 10) - ta.sma(close, 20) // 用var变量存储开仓时间,确保只初始化一次 var float entryTimestamp = na // 开多仓逻辑:交叉时开仓并记录时间 if (ta.crossover(delta, 0)) strategy.entry("Long", strategy.long, comment="Long") entryTimestamp := time // 记录当前K线的开盘时间戳(毫秒级) // 计算开仓后已过去的天数(1天=86400000毫秒) daysSinceEntry = (time - entryTimestamp) / 86400000 // 平仓条件:开仓满15天,且当前持有多仓 exitCondition = daysSinceEntry >= 15 and strategy.position_size > 0 // 执行平仓 strategy.exit("Exit", "Long", when=exitCondition)
关键细节说明
var关键字的作用:var float entryTimestamp = na确保这个变量只会在脚本初始化时创建一次,不会每根K线都重置,这样才能准确保留开仓时的时间戳。- 时间差计算:Pine Script中
time的单位是毫秒,一天等于24*60*60*1000=86400000毫秒,用当前时间减去开仓时间再除以这个数值,就能得到实际过去的日历天数。 - 持仓判断:加上
strategy.position_size > 0可以避免在没有持仓时,entryTimestamp为na导致的计算错误,同时确保只有持仓时才检查平仓条件。 - 周期兼容性:不管你用的是日线、小时线还是日内小周期,这个逻辑都能按实际日历天数计算,不会受K线数量影响。
你可以先把天数改成2、3天来测试,确认逻辑正常后再改回15天。如果你的delta指标是自定义的,直接替换掉示例中的delta计算部分就行。
内容的提问来源于stack exchange,提问作者Mike Mann
相关产品推荐
相关产品推荐

