You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求协助:将基于前日高低点的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 21:40:16