如何在Pine Script中创建最近15个收阳K线的收盘价数组?
Pine Script 实现最近15个收阳K线收盘价数组
核心思路
要实现这个需求,关键是逐K线判断是否收阳,并将符合条件的收盘价存入数组,同时保持数组长度不超过15(超过时移除最早的记录)。Pine Script里数组操作需要注意用var关键字初始化数组,避免每根K线重复创建。
完整代码
//@version=5 indicator("最近15个收阳K线收盘价数组", overlay=true) // 初始化空数组,用var确保只在第一根K线创建一次 var float[] upCloseArray = array.new_float() // 每根K线判断是否收阳 isUpCandle = close > open if isUpCandle // 将当前收盘价加入数组 array.push(upCloseArray, close) // 如果数组长度超过15,移除最早的那个元素 if array.size(upCloseArray) > 15 array.shift(upCloseArray) // 可选:在最后一根K线显示数组内容 if barstate.islast label.new(bar_index, high, str.tostring(upCloseArray), color=color.green, textcolor=color.white)
代码解释
var float[] upCloseArray = array.new_float():用var声明数组,保证只在脚本启动时初始化一次,不会每根K线重置数组内容。isUpCandle = close > open:简单判断当前K线是否为收阳K线。array.push(upCloseArray, close):把收阳K线的收盘价添加到数组末尾。array.shift(upCloseArray):当数组长度超过15时,移除数组的第一个元素(最早的收阳收盘价),确保数组始终只保留最近15条有效记录。- 最后用
label.new在图表最后一根K线的高位显示数组内容,方便直观查看;也可以替换成println在控制台输出。
关键说明
Pine Script是逐K线运行的,这也是它和其他一次性处理数据的语言逻辑不同的地方——你不能一次性遍历所有历史K线筛选数据,必须跟着每根K线的更新逐步维护数组,这是你觉得复杂的核心原因。如果需要调用数组里的具体元素,用array.get(upCloseArray, index)即可,比如array.get(upCloseArray, array.size(upCloseArray)-1)能拿到最近的收阳收盘价。
内容的提问来源于stack exchange,提问作者DrH
相关产品推荐
相关产品推荐

