请求协助:将基于前日高低点的Pivot水平位显示至次日
问题描述
我已经基于前一日的高点(high)和低点(low)计算出了相关水平位,但希望将这些水平位显示在次日的K线图上,尝试多次均未成功,恳请技术人士提供帮助。
以下是我编写的Pine Script代码:
//@version = 4 study(title="Previous days highs and lows00", overlay = true) PrevBars = input(title = "Show previous highs and lows?", type =input.bool, defval=true) condition = not(timeframe.isweekly or timeframe.ismonthly) h = security(syminfo.tickerid,"D",high,barmerge.gaps_off,barmerge.lookahead_on) l = security(syminfo.tickerid,"D",low,barmerge.gaps_off,barmerge.lookahead_on) //plotshape(series = condition and PrevBars ? h[1] : na, title = "Previous high",color = #0E6720,location=location.absolute ,transp=0,editable = true) //plotshape(series = condition and PrevBars ? l[1] : na, title = "Previous low",color =#AF0D26,location = location.absolute ,transp=0, editable = true) // Draw lines from the previous highs and lows newSession = change(time('D')) count = barssince(newSession) vR1 = h + (h - l) * 0.10 vR2 = h + (h - l) * 0.30 vS1 = l - (h - l) * 0.10 vS2 = l - (h - l) * 0.30 vP1 = h - (h - l) * 0.50 vP2 = l + (h - l) * 0.50 plotshape(series = condition and PrevBars ? vR1[1] : na, title = "Previous high",color = #0E6720,location=location.absolute ,transp=0,editable = true) plotshape(series = condition and PrevBars ? vR2[1] : na, title = "Previous high",color = #0E6720,location=location.absolute ,transp=0,editable = true)
解决方案
你的核心问题有两个:一是security函数启用了barmerge.lookahead_on,引入未来数据导致显示逻辑混乱;二是当前代码仅在单根K线显示水平位,未实现前一日水平位在当日所有K线上持续展示。
修改后的代码如下:
//@version = 4 study(title="Previous Days Levels on Current Day", overlay = true) // 输入选项 showLevels = input(title="显示前一日水平位?", type=input.bool, defval=true) condition = not(timeframe.isweekly or timeframe.ismonthly) // 获取前一日高低点(关闭未来数据) prevDayHigh = security(syminfo.tickerid, "D", high[1], barmerge.gaps_off, barmerge.lookahead_off) prevDayLow = security(syminfo.tickerid, "D", low[1], barmerge.gaps_off, barmerge.lookahead_off) // 计算前一日衍生水平位 range = prevDayHigh - prevDayLow vR1 = prevDayHigh + range * 0.10 vR2 = prevDayHigh + range * 0.30 vS1 = prevDayLow - range * 0.10 vS2 = prevDayLow - range * 0.30 vP1 = prevDayHigh - range * 0.50 vP2 = prevDayLow + range * 0.50 // 判断新交易日触发点 newDay = change(time('D')) != 0 // 用var变量保存水平位,确保当日所有K线持续显示同一组数据 var float currentR1 = na var float currentR2 = na var float currentS1 = na var float currentS2 = na var float currentP1 = na var float currentP2 = na // 每个新交易日更新一次水平位 if newDay currentR1 := vR1 currentR2 := vR2 currentS1 := vS1 currentS2 := vS2 currentP1 := vP1 currentP2 := vP2 // 绘制持续水平线(用hline比plotshape更适配水平位显示) if condition and showLevels hline(currentR1, "前一日R1", color=#0E6720, linestyle=hline.style_solid) hline(currentR2, "前一日R2", color=#0E6720, linestyle=hline.style_dashed) hline(currentS1, "前一日S1", color=#AF0D26, linestyle=hline.style_solid) hline(currentS2, "前一日S2", color=#AF0D26, linestyle=hline.style_dashed) hline(currentP1, "前一日P1", color=#808080, linestyle=hline.style_dotted) hline(currentP2, "前一日P2", color=#808080, linestyle=hline.style_dotted)
修改说明
- 将
security的lookahead_on改为lookahead_off,避免未来数据干扰,直接通过high[1]和low[1]获取前一日高低点。 - 使用
var类型变量存储水平位,确保每个新交易日仅更新一次,当日所有K线都能显示同一组水平位。 - 改用
hline函数绘制持续水平线,相比plotshape更适合展示水平位标记,若偏好点标记可自行换回plotshape。 - 优化变量命名,提升代码可读性。
内容的提问来源于stack exchange,提问作者pkdhake
相关产品推荐
相关产品推荐

