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

求编写自动绘制并重绘MACD红绿柱高低点水平线的脚本

实现MACD红绿柱区间自动重绘水平线的Pine Script脚本

核心功能说明

  • 绿柱区间:当MACD柱线为负时,追踪区间内MACD绿柱的新高(最接近0的柱值),同步记录该区间内K线的最高顶部并绘制虚线水平线;若后续绿柱再创新高且K线顶部更高,自动更新重绘水平线位置。
  • 红柱区间:当MACD柱线为正时,追踪区间内MACD红柱的新低(最接近0的柱值),同步记录该区间内K线的最低底部并绘制虚线水平线;若后续红柱再创新低且K线底部更低,自动更新重绘水平线位置。
  • 附带标签箭头标注水平线更新位置,匹配需求中的指向效果。

完整代码实现

//@version=5
indicator("MACD区间自动水平线", overlay=true)

// 获取MACD指标核心数据
[macdLine, signalLine, macdHist] = ta.macd(close, 12, 26, 9)

// 定义红绿柱状态
isGreenBar = macdHist < 0
isRedBar = macdHist > 0

// 识别红绿柱区间的起始点
greenZoneStart = ta.barssince(not isGreenBar) == 0
redZoneStart = ta.barssince(not isRedBar) == 0

// 追踪绿柱区间:MACD新高、K线最高顶部
var float greenZoneMacdHigh = na
var float greenZoneKlineHigh = na

if isGreenBar
    currentMacdHigh = math.max(macdHist, greenZoneMacdHigh)
    currentKlineHigh = math.max(high, greenZoneKlineHigh)
    // 区间初始化或MACD创出新高时,更新记录值
    if currentMacdHigh > greenZoneMacdHigh or greenZoneStart
        greenZoneMacdHigh := currentMacdHigh
        greenZoneKlineHigh := currentKlineHigh
else
    // 绿柱区间结束,重置变量
    greenZoneMacdHigh := na
    greenZoneKlineHigh := na

// 追踪红柱区间:MACD新低、K线最低底部
var float redZoneMacdLow = na
var float redZoneKlineLow = na

if isRedBar
    currentMacdLow = math.min(macdHist, redZoneMacdLow)
    currentKlineLow = math.min(low, redZoneKlineLow)
    // 区间初始化或MACD创出新低时,更新记录值
    if currentMacdLow < redZoneMacdLow or redZoneStart
        redZoneMacdLow := currentMacdLow
        redZoneKlineLow := currentKlineLow
else
    // 红柱区间结束,重置变量
    redZoneMacdLow := na
    redZoneKlineLow := na

// 绘制水平线(延伸100根K线,可自行调整长度)
if not na(greenZoneKlineHigh)
    line.new(bar_index, greenZoneKlineHigh, bar_index + 100, greenZoneKlineHigh, color=color.green, width=2, style=line.style_dashed)
if not na(redZoneKlineLow)
    line.new(bar_index, redZoneKlineLow, bar_index + 100, redZoneKlineLow, color=color.red, width=2, style=line.style_dashed)

// 绘制更新提示箭头标签
if not na(greenZoneKlineHigh) and ta.change(greenZoneKlineHigh)
    label.new(bar_index, greenZoneKlineHigh + ta.atr(10)*0.1, "绿柱新高线", color=color.green, textcolor=color.white, style=label.style_label_down)
if not na(redZoneKlineLow) and ta.change(redZoneKlineLow)
    label.new(bar_index, redZoneKlineLow - ta.atr(10)*0.1, "红柱新低线", color=color.red, textcolor=color.white, style=label.style_label_up)

关键逻辑解释

  1. 区间识别:通过ta.barssince判断红绿柱区间的起始点,确保每个区间独立追踪数据,互不干扰。
  2. 极值追踪:绿柱区间取MACD柱的最大值(最接近0的柱值)作为新高,红柱区间取MACD柱的最小值(最接近0的柱值)作为新低;同步记录区间内K线的高低点。
  3. 自动重绘:每当区间内MACD创出对应极值时,立即更新K线高低点记录,新的水平线会自动覆盖旧线的视觉效果(若需删除旧线,可添加line.delete逻辑优化)。
  4. 可视化优化:用ATR指标动态调整标签位置,避免与K线重叠,箭头标签清晰提示水平线的更新触发点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 05:01:00