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

PineScript跨时间框架绘制量能失衡K线箱体问题求助

PineScript 量能失衡箱体:跨周期对齐与回补修正实现

核心问题拆解

  1. 跨周期对齐失效:使用request.security时未锚定4小时K线的完整时间区间,导致1小时周期下箱体无法对应到正确的4小时时段。
  2. 回补修正缺失:现有脚本未跟踪价格是否回补箱体区间,无法区分有效/失效的量能失衡箱体。

解决方案实现

1. 跨周期对齐修复

通过request.security获取4小时周期的关键数据(开盘价、收盘价、成交量、10周期均量),同时记录4小时K线的开始/结束时间戳,在1小时周期内精准匹配箱体的时间范围,确保绘制位置完全对应目标4小时K线。

2. 回补修正功能

用数组存储每个触发箱体的区间、时间范围及回补状态,当后续价格触及箱体上下边界时,标记该箱体为已回补,通过颜色变化直观区分有效/失效箱体。

完整代码

//@version=5
indicator("4H量能失衡箱体(带回补修正)", overlay=true)

// 参数配置
tf = "240"                  // 4小时周期
volMultiplier = 1.5         // 量能阈值倍数
avgVolLength = 10           // 均量计算周期

// 获取4小时周期核心数据
[h4_open, h4_close, h4_vol, h4_avgVol, h4_time] = request.security(syminfo.tickerid, tf, [open, close, volume, ta.sma(volume, avgVolLength), time])

// 判断4小时K线是否触发量能失衡
isImbalance = h4_vol > h4_avgVol * volMultiplier

// 存储箱体数据与状态
var float[] imbalanceOpen = array.new_float()
var float[] imbalanceClose = array.new_float()
var int[] imbalanceStartTime = array.new_int()
var int[] imbalanceEndTime = array.new_int()
var bool[] isMitigated = array.new_bool()

// 触发失衡时记录箱体信息(避免重复添加)
if ta.barstate.islast and isImbalance
    lastStartTime = array.size(imbalanceStartTime) > 0 ? array.get(imbalanceStartTime, array.size(imbalanceStartTime)-1) : 0
    if h4_time != lastStartTime
        array.push(imbalanceOpen, h4_open)
        array.push(imbalanceClose, h4_close)
        array.push(imbalanceStartTime, h4_time)
        array.push(imbalanceEndTime, h4_time + 240 * 60000) // 计算4小时K线结束时间
        array.push(isMitigated, false)

// 检查并更新箱体回补状态
for i = 0 to array.size(imbalanceOpen)-1
    if not array.get(isMitigated, i)
        boxLow = math.min(array.get(imbalanceOpen, i), array.get(imbalanceClose, i))
        boxHigh = math.max(array.get(imbalanceOpen, i), array.get(imbalanceClose, i))
        // 价格触及箱体上下边界即标记为已回补
        if low <= boxLow or high >= boxHigh
            array.set(isMitigated, i, true)

// 绘制箱体(根据回补状态切换颜色)
var box[] imbalanceBoxes = array.new_box()
for i = 0 to array.size(imbalanceOpen)-1
    startTime = array.get(imbalanceStartTime, i)
    endTime = array.get(imbalanceEndTime, i)
    boxLow = math.min(array.get(imbalanceOpen, i), array.get(imbalanceClose, i))
    boxHigh = math.max(array.get(imbalanceOpen, i), array.get(imbalanceClose, i))
    mitigated = array.get(isMitigated, i)
    
    boxColor = mitigated ? color.new(color.gray, 70) : color.new(color.blue, 50)
    if array.size(imbalanceBoxes) <= i
        newBox = box.new(startTime, boxHigh, endTime, boxLow, color=boxColor, border_color=color.blue, border_width=1)
        array.push(imbalanceBoxes, newBox)
    else
        existingBox = array.get(imbalanceBoxes, i)
        box.set_left(existingBox, startTime)
        box.set_top(existingBox, boxHigh)
        box.set_right(existingBox, endTime)
        box.set_bottom(existingBox, boxLow)
        box.set_color(existingBox, boxColor)

// 可选:添加回补标记
plotshape(ta.barstate.islast and mitigated, title="已回补", location=location.belowbar, color=color.red, style=shape.labelup, text="已回补", textcolor=color.white)

代码说明

  • 跨周期对齐:通过时间戳精准锁定4小时K线的起止时段,确保1小时周期下箱体完全覆盖目标K线区间。
  • 回补修正:实时检测价格是否触及箱体边界,自动更新箱体状态并切换颜色,直观区分有效(蓝色)/失效(灰色)箱体。
  • 重复添加防护:通过对比最新K线时间戳,避免同一4小时K线因多次触发而重复生成箱体。

内容的提问来源于stack exchange,提问作者J Lo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 14:43:03