如何在PineScript中获取过去365天的每日收盘价?
获取过去365天每个交易日收盘价的实现方案
你使用ta.sma(close, 365)得到的是最近365根K线的简单移动平均值,而非原始收盘价数据。要获取过去365天内每个交易日的收盘价,需要通过数据存储的方式实现,以下以Pine Script(TradingView)为例给出具体方案:
核心思路
通过数组存储每日收盘价,并实时清理超出365天范围的旧数据,确保数组内始终保留目标时间区间内的所有交易日收盘价。
代码实现
//@version=5 indicator("过去365天收盘价收集", overlay=false) // 目标天数 target_days = 365 // 初始化数组,用于存储收盘价 var float[] daily_closes = array.new_float() // 计算365天前的时间戳(1天 = 86400000毫秒) target_timestamp = time - target_days * 86400000 // 每根新K线触发时,更新数组 if barstate.isnew // 将当前收盘价加入数组 array.push(daily_closes, close) // 移除早于目标时间的旧数据 while array.size(daily_closes) > 0 and time[array.size(daily_closes)-1] < target_timestamp array.remove(daily_closes, 0) // 最后一根K线时,在图表上显示数组内容(可在数据窗口查看详细数据) if barstate.islast label.new(bar_index, high, str.tostring(daily_closes), color=color.blue, textcolor=color.white)
代码说明
var float[] daily_closes = array.new_float():用var声明数组,确保脚本运行时仅初始化一次target_timestamp:计算365天前的时间节点,用于过滤旧数据barstate.isnew:确保每根K线仅执行一次数据更新操作,避免重复计算while循环:持续移除数组中早于目标时间的收盘价,保证数组内数据始终是过去365天的交易日收盘价
注意事项
- 如果使用非日线时间框架(如小时线),需要调整时间戳的计算逻辑,先统计365天对应的K线数量,或通过日期判断来过滤数据
- 数组内的收盘价可以用于后续的自定义计算(如手动计算平均值、统计分布等)
内容的提问来源于stack exchange,提问作者Alexandre César Barbosa
相关产品推荐
相关产品推荐

