如何用PineScript在TradingView价格图表底部叠加带悬停提示的图标或形状?
在TradingView底部添加事件图标(带悬停说明)
实现步骤与代码示例
以下是完整的PineScript代码,模拟分红、财报、新闻三类事件,在图表底部绘制不同图标,鼠标悬停时显示事件详情:
//@version=5 indicator("底部事件图标", overlay=true, shorttitle="Event Icons") // 定义事件数据:日期、类型、说明 var eventData = array.new_tuple( timestamp("2024-03-15"), "分红", "每股分红$0.5", timestamp("2024-04-20"), "财报", "Q1营收同比增长12%", timestamp("2024-05-10"), "新闻", "宣布收购竞争对手" ) // 计算底部偏移量(用ATR避免被价格覆盖) bottomOffset = low - ta.atr(10) * 0.6 // 遍历事件数据,绘制对应图标 for i from 0 to array.size(eventData)/3 - 1 eventTime = array.get(eventData, i*3) eventType = array.get(eventData, i*3+1) eventDesc = array.get(eventData, i*3+2) // 判断当前K线是否对应事件日期 isEventBar = time == eventTime // 根据事件类型选择图标样式和颜色 if isEventBar if eventType == "分红" plotshape(series=isEventBar, title=eventDesc, location=location.absolute, y=bottomOffset, style=shape.labeldown, color=color.green, text="分红", textcolor=color.white, size=size.small) elif eventType == "财报" plotshape(series=isEventBar, title=eventDesc, location=location.absolute, y=bottomOffset, style=shape.labeldown, color=color.orange, text="财报", textcolor=color.white, size=size.small) elif eventType == "新闻" plotshape(series=isEventBar, title=eventDesc, location=location.absolute, y=bottomOffset, style=shape.labeldown, color=color.blue, text="新闻", textcolor=color.white, size=size.small)
关键细节说明
- 底部定位:用
low - ta.atr(10)*0.6计算偏移量,确保图标始终在K线下方,不会被价格走势覆盖;ATR的倍数可根据图表缩放调整。 - 悬停说明:
plotshape()的title参数直接设置事件详情,鼠标悬停图标时会自动显示该文本。 - 图标区分:通过
style(如shape.labeldown、shape.triangledown等)、color和text区分不同事件类型,你也可以用plotchar()自定义字符图标。 - 事件数据管理:用
var array存储事件信息,方便批量添加或修改事件,也可以结合TradingView内置的事件数据源(如ta.dividends())实现动态加载。
扩展优化
- 如果需要在非K线对齐的时间点显示事件,可以用
label.new()直接指定时间坐标绘制。 - 若事件较多,可添加输入参数控制不同类型事件的显示/隐藏。
内容的提问来源于stack exchange,提问作者Thomas
相关产品推荐
相关产品推荐

