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

如何在价格首次站上Ichimoku Cloud时仅绘制一次向上箭头?

需求说明

希望在价格站上Ichimoku云(一目均衡表云层)时仅绘制一次向上箭头,箭头不会重复显示,直到下一次价格站上云的事件发生。

现有代码

//@version=5
indicator(title='My Ichimoku Cloud', shorttitle='Ichimoku', overlay=true)
conversionPeriods = input.int(9, minval=1, title='Conversion Line Periods')
basePeriods = input.int(26, minval=1, title='Base Line Periods')
laggingSpan2Periods = input.int(52, minval=1, title='Lagging Span 2 Periods')
displacement = input.int(26, minval=1, title='Displacement')

donchian(len) =>
    math.avg(ta.lowest(len), ta.highest(len))

conversionLine = donchian(conversionPeriods)
baseLine = donchian(basePeriods)
leadLine1 = math.avg(conversionLine, baseLine)
leadLine2 = donchian(laggingSpan2Periods)
plot(conversionLine, color=color.new(#00e5ff, 0), title='Conversion Line')
plot(baseLine, color=color.new(color.orange, 0), title='Base Line')
plot(close, offset=-displacement + 1, color=color.new(#459915, 0), title='Lagging Span', display=display.none)
p1 = plot(leadLine1, offset=displacement - 1, color=color.new(color.green, 0), title='Lead 1', display=display.none)
p2 = plot(leadLine2, offset=displacement - 1, color=color.new(color.red, 0), title='Lead 2', display=display.none)
fill(p1, p2, color=leadLine1 > leadLine2 ? color.new(color.green, 90) : color.new(color.red, 90))

topOfCloudLine = float(na)
priceAboveCloud = bool(na)
if leadLine1 > leadLine2
    topOfCloudLine := leadLine1
else
    if leadLine1 < leadLine2
        topOfCloudLine := leadLine2

if close > topOfCloudLine
    priceAboveCloud := true

plotshape(priceAboveCloud, style=shape.arrowup, location=location.abovebar, color=color.new(color.green, 0), size=size.tiny, offset = displacement + 1)

当前问题

现有代码会在价格处于云层上方的每一根K线都绘制向上箭头,无法实现“仅触发一次”的需求。

修改后的代码

//@version=5
indicator(title='My Ichimoku Cloud', shorttitle='Ichimoku', overlay=true)
conversionPeriods = input.int(9, minval=1, title='转换线周期')
basePeriods = input.int(26, minval=1, title='基准线周期')
laggingSpan2Periods = input.int(52, minval=1, title='延迟线2周期')
displacement = input.int(26, minval=1, title='偏移量')

donchian(len) =>
    math.avg(ta.lowest(len), ta.highest(len))

// 计算一目均衡表各线
conversionLine = donchian(conversionPeriods)
baseLine = donchian(basePeriods)
leadLine1 = math.avg(conversionLine, baseLine)
leadLine2 = donchian(laggingSpan2Periods)

// 绘制各线与云层
plot(conversionLine, color=color.new(#00e5ff, 0), title='转换线')
plot(baseLine, color=color.new(color.orange, 0), title='基准线')
plot(close, offset=-displacement + 1, color=color.new(#459915, 0), title='延迟线', display=display.none)
p1 = plot(leadLine1, offset=displacement - 1, color=color.new(color.green, 0), title='领先线1', display=display.none)
p2 = plot(leadLine2, offset=displacement - 1, color=color.new(color.red, 0), title='领先线2', display=display.none)
fill(p1, p2, color=leadLine1 > leadLine2 ? color.new(color.green, 90) : color.new(color.red, 90))

// 确定云层顶部
topOfCloudLine = leadLine1 > leadLine2 ? leadLine1 : leadLine2

// 检测首次站上云层的信号:当前收盘价在云层上方,且前一根K线不在云层上方
priceCrossAboveCloud = close > topOfCloudLine and close[1] <= topOfCloudLine[1]

// 仅在首次站上云层时绘制箭头
plotshape(priceCrossAboveCloud, style=shape.arrowup, location=location.abovebar, 
          color=color.new(color.green, 0), size=size.tiny, offset = displacement + 1)

关键修改点

  • 简化topOfCloudLine的赋值逻辑,用三元运算符替代嵌套if,更简洁高效
  • 新增priceCrossAboveCloud变量,通过对比当前和前一根K线的收盘价与云层顶部的位置,判断是否为首次站上云层的时刻
  • 修改plotshape的触发条件为priceCrossAboveCloud,确保箭头仅在价格从云层下方突破到上方的那根K线显示,后续持续在云层上方时不再重复绘制

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 02:30:44