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

Pine Script仅绘制部分日期标记问题求助

问题原因与修复方案

你遇到的仅显示部分标记的问题,核心原因主要有两个:


1. 合约代码匹配失败

代码中通过syminfo.ticker == array.get(symbols, i)判断合约是否匹配,但TradingView的合约代码格式可能和你写的"ZC1!"不一致:

  • 部分连续合约的代码是"ZC!"而非"ZC1!"
  • 不同市场的合约后缀可能有差异(比如是否包含交易所标识)

验证方法:在图表上右键查看当前合约的实际ticker,替换代码中数组里的合约字符串;或者添加一行调试代码:

plotchar(syminfo.ticker == "ZC1!", "合约匹配", "", location.bottom)

如果图表底部没有出现标记,说明合约代码不匹配。

2. K线周期导致日期不匹配

如果你的图表使用的不是日线周期,会出现大部分日期无法匹配的情况:

  • 周线/月线:每个bar覆盖多天/多月,只有你设置的日期恰好是该周期bar的起始/结束日时,current_date才会匹配
  • 日内周期:同一个日期会生成多个bar,标签可能重叠在一起,或者你没有滚动到对应时间段查看

验证方法:暂时切换到日线周期,查看是否所有标记都能正常显示。


优化后的代码

同时优化数组初始化逻辑(避免空元素),并确保标签创建逻辑更稳定:

//@version=5
indicator("Custom Callout", overlay=true)

// 用var定义数组,仅初始化一次,避免重复创建
var symbols = array.new_string()
var dates = array.new_int()
var labels = array.new_string()
var colors = array.new_color()

// 动态添加数据,无需预先指定数组大小
array.push(symbols, "ZC1!")
array.push(dates, 20241108)
array.push(labels, "Bullish")
array.push(colors, color.green)

array.push(symbols, "ZC1!")
array.push(dates, 20241011)
array.push(labels, "Bullish")
array.push(colors, color.green)

array.push(symbols, "ZC1!")
array.push(dates, 20240510)
array.push(labels, "Bearish")
array.push(colors, color.red)

array.push(symbols, "ZC1!")
array.push(dates, 20240411)
array.push(labels, "Bullish")
array.push(colors, color.green)

array.push(symbols, "ZC1!")
array.push(dates, 20240208)
array.push(labels, "Bearish")
array.push(colors, color.red)

array.push(symbols, "ZC1!")
array.push(dates, 20240112)
array.push(labels, "Bearish")
array.push(colors, color.red)

array.push(symbols, "ZC1!")
array.push(dates, 20231109)
array.push(labels, "Bearish")
array.push(colors, color.red)

array.push(symbols, "ZC1!")
array.push(dates, 20230811)
array.push(labels, "Bullish")
array.push(colors, color.green)

array.push(symbols, "ZC1!")
array.push(dates, 20230512)
array.push(labels, "Bearish")
array.push(colors, color.red)

// 转换当前bar日期为YYYYMMDD格式
current_date = year * 10000 + month * 100 + dayofmonth

// 遍历数组创建标签
for i = 0 to array.size(symbols) - 1
    if syminfo.ticker == array.get(symbols, i) and current_date == array.get(dates, i)
        label.new(bar_index, high, array.get(labels, i), 
                  style=label.style_label_down, 
                  color=array.get(colors, i),
                  textcolor=color.white,
                  size=size.small)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 17:53:16