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

Pine Script:如何访问数组中的Box并实现蜡烛穿越警报?

Pine Script数组存储Box后读取边界触发警报的解决方案

错误原因

你遇到的报错核心是类型不匹配:box.get_bottom()、box.get_top()这类API仅接受单个Box对象作为参数,而你直接传入了整个box[]类型的数组,自然会触发类型错误提示。

解决思路

要实现价格穿越Box的警报逻辑,需要逐个处理数组内的Box元素:

  • 用array.size()获取数组中Box的总数量
  • 通过for循环遍历数组,用array.get()取出单个Box对象
  • 对每个取出的Box调用box.get_bottom()和box.get_top()获取边界值
  • 对比当前K线的开盘价/收盘价与Box边界,判断是否发生穿越,满足条件则触发警报

代码示例

以下是结合买入/卖出Box场景的完整修正代码,你可以替换其中的Box创建逻辑为自己的业务规则:

//@version=5
indicator("Box穿越警报", overlay=true)

// 初始化存储买入/卖出Box的数组
var box[] buyBoxes = array.new_box()
var box[] sellBoxes = array.new_box()

// 示例:创建买入Box的触发条件(替换为你的实际逻辑)
buyTrigger = ta.crossover(ta.sma(close, 5), ta.sma(close, 20))
if (buyTrigger)
    newBuyBox = box.new(bar_index - 1, low, bar_index + 3, high, color=color.new(color.green, 80))
    array.push(buyBoxes, newBuyBox)

// 遍历买入Box数组,检测价格穿越
buyBoxCount = array.size(buyBoxes)
for i = 0 to buyBoxCount - 1
    targetBox = array.get(buyBoxes, i)
    boxBot = box.get_bottom(targetBox)
    boxTop = box.get_top(targetBox)
    
    // 检测收盘价向上穿Box底部/向下穿Box顶部
    crossUp = ta.crossover(close, boxBot)
    crossDown = ta.crossunder(close, boxTop)
    
    if (crossUp or crossDown)
        alertcondition(true, title="买入Box穿越", message="价格穿越买入Box边界")

// 卖出Box的检测逻辑(与买入逻辑一致)
sellTrigger = ta.crossunder(ta.sma(close, 5), ta.sma(close, 20))
if (sellTrigger)
    newSellBox = box.new(bar_index - 1, high, bar_index + 3, low, color=color.new(color.red, 80))
    array.push(sellBoxes, newSellBox)

sellBoxCount = array.size(sellBoxes)
for i = 0 to sellBoxCount - 1
    targetBox = array.get(sellBoxes, i)
    boxBot = box.get_bottom(targetBox)
    boxTop = box.get_top(targetBox)
    
    crossUp = ta.crossover(close, boxBot)
    crossDown = ta.crossunder(close, boxTop)
    
    if (crossUp or crossDown)
        alertcondition(true, title="卖出Box穿越", message="价格穿越卖出Box边界")

额外提示

  • 若数组中存在已过期的Box(比如超出当前图表显示范围),可以在循环中加入box.get_left(targetBox) > bar_index - 50这类判断,跳过过期Box以减少无效计算
  • 若需要检测开盘价穿越,只需将代码中的close替换为open即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 02:35:55