TradingView Pine Script v5策略第二个if代码块从未执行问题排查
Pine Script v5 策略if代码块不执行问题定位与修复
核心问题原因
- 第一类错误:
thisyear和thisweek取值逻辑错误。你调用了timenow取当前系统时间对应的年、周,而非策略运行时当前遍历K线对应的时间,导致判断条件year[i] == thisyear and weekofyear[i] == thisweek只有回测周期末尾的当年当周K线才有可能满足,所有历史K线的时间都无法匹配,while循环直接跳过,内部的if代码块自然永远不会执行。 - 第二类潜在问题:
request.security中使用了barmerge.lookahead_on参数,会引入未来函数,导致回测结果和实盘运行结果存在明显偏差,不符合实盘交易的逻辑要求。 - 逻辑校验:外层if先判断当前收盘价处于上周低点、上周高低点中线区间,后续又查找本周内出现过收盘价突破上周高点的情况,意味着仅当价格先突破上周高点、再跌回中线下方才会触发信号,逻辑本身可运行,但需要确认是否符合你的策略设计初衷。
修复后可正常运行的代码
//@version=5 strategy("Week High Low - Buy Strategy") // 修正为取当前K线对应的年、周,而非系统当前时间 thisyear = year(time) thisweek = weekofyear(time) // 关闭未来函数开关,保证回测结果可复现 lastweekhigh = request.security(syminfo.tickerid, 'W', high[1], barmerge.gaps_off, barmerge.lookahead_off) lastweeklow = request.security(syminfo.tickerid, 'W', low[1], barmerge.gaps_off, barmerge.lookahead_off) halfline = (lastweekhigh + lastweeklow) / 2 buysignal = false if close < halfline and close > lastweeklow i = 1 // 匹配当前K线对应周的历史K线 while year[i] == thisyear and weekofyear[i] == thisweek if close[i] > lastweekhigh buysignal := true break i += 1 strategy.entry("long", strategy.long, 1, when = buysignal)
内容的提问来源于stack exchange,提问作者user3415602
相关产品推荐
相关产品推荐

