PineScript需求:将绘制水平位扩展至当前交易时段末端
解决方案
要让水平位从当前交易日开始就显示并贯穿整个时段,我们可以通过在每日开盘时锁定水平位数值,并持续绘制该数值的方式实现,同时保留原代码的防重绘逻辑。修改后的代码如下:
//@version=5 indicator(title="fff", overlay=true) // 用户输入 disableRepaint = input.bool(title ="Disable Repainting?", defval=true) // 获取当日高低价(防重绘处理) pdl = request.security(syminfo.tickerid, "D", low[disableRepaint and barstate.isconfirmed ? 0 : 1]) pdh = request.security(syminfo.tickerid,"D", high[disableRepaint and barstate.isconfirmed ? 0 : 1]) // 计算水平位 P1 = pdh - (pdh - pdl) * 0.756 P2 = pdl + (pdh - pdl) * 0.790 // 用var变量存储当日的水平位,避免每根bar重置 var float daily_P1 = na var float daily_P2 = na // 检测每日第一个K线,更新当日水平位 is_new_day = ta.change(time("D")) if is_new_day daily_P1 := P1 daily_P2 := P2 // 绘制贯穿全日的水平位 plot(daily_P1, style=plot.style_line, color=color.white, linewidth=2) plot(daily_P2, style=plot.style_line, color=color.white, linewidth=2)
关键修改点
- 使用
var关键字声明daily_P1和daily_P2:这两个变量只会初始化一次,后续不会被自动重置,确保当日的水平位数值能被持续保留。 - 新增
is_new_day判断:通过ta.change(time("D"))检测每日的第一个K线,此时更新当日的水平位数值,保证每个交易日的水平位基于当日开盘后的高低价计算。 - 直接绘制
daily_P1和daily_P2:替换原代码中仅当数值不变时才绘制的逻辑,让水平位从交易日开始就显示,并持续到当日结束。
内容的提问来源于stack exchange,提问作者AKHIL ASHOK
相关产品推荐
相关产品推荐

