Pinescript新手求助:30分钟周期调用日线ATR的30%判断箱体颜色
问题排查与代码修正
核心问题拆解
- 计算逻辑错误:你写的
sessionHighPrice - sessionHighPrice结果恒为0,永远无法满足大于ATR的条件,正确逻辑应该计算箱体的实际高度:sessionHighPrice - sessionLowPrice - ATR周期不匹配:当前
ta.atr(5)获取的是30分钟周期的ATR,而需求是日线ATR,必须通过跨周期调用获取日线级别数据
修正后的代码片段
// STEP 5: // During the session, update that session's existing box if inSession box.set_top(sessionBox, sessionHighPrice) box.set_bottom(sessionBox, sessionLowPrice) box.set_right(sessionBox, bar_index + 1) // 获取日线周期的5期ATR dailyATR = request.security(syminfo.tickerid, "D", ta.atr(5)) // 计算箱体实际高度 boxHeight = sessionHighPrice - sessionLowPrice // 箱体高度超过日线ATR的30%时设为绿色,否则红色 if boxHeight > dailyATR * 0.3 box.set_bgcolor(sessionBox, upBoxColor) box.set_border_color(sessionBox, upBorderColor) else box.set_bgcolor(sessionBox, downBoxColor) box.set_border_color(sessionBox, downBorderColor)
补充说明
- 跨周期数据调用
request.security需要确保图表加载了足够的日线历史数据,否则初始阶段可能出现数据缺失 - 若
upBoxColor、downBoxColor等颜色变量未提前定义,需补充如下定义示例:upBoxColor = color.new(color.green, 80) upBorderColor = color.green downBoxColor = color.new(color.red, 80) downBorderColor = color.red
内容的提问来源于stack exchange,提问作者Alberto Ambrogio
相关产品推荐
相关产品推荐

