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

如何在Pine Script中无视图表时间框架获取最近N日收盘价并计算均线

问题解决方法

核心问题原因

你遇到的索引不匹配问题是Pine Script security 函数的固有特性:该函数返回的序列会和当前图表的K线做对齐,你在函数外使用sec[i]时,i对应的是当前图表的K线偏移量,而非你指定的日线级别偏移量。

最简解决方案

如果你的需求只是跨周期计算均线,不需要单独提取多根日线收盘价,直接把指标计算逻辑放到security函数的第三个参数内即可,这样所有计算都会在你指定的日线周期下完成,完全不受当前图表周期影响:

//@version=4
study(title='跨周期10日均线', overlay=true) 
// 后两个参数用来关闭未来函数,避免重绘
daily_ma10 = security("SPY", "D", sma(close, 10), barmerge.gaps_on, barmerge.lookahead_off)
plot(daily_ma10, color=color.red, linewidth=2)

如需提取多根历史日线收盘价的处理方式

如果你有自定义计算需求,确实需要拿到最近N根日线的收盘价数组,需要在security函数内部完成历史值的提取,再将数组返回到当前图表周期:

//@version=4
study(title='提取多根日线收盘价示例', overlay=false) 

lookback = 10
// 在security内部构造最近10天的收盘价数组
get_10day_closes() =>
    var arr = array.new_float()
    array.clear(arr)
    for i = 0 to lookback - 1
        array.push(arr, close[i])
    arr

daily_closes_arr = security("SPY", "D", get_10day_closes(), barmerge.gaps_on, barmerge.lookahead_off)
// 示例:自行计算均线验证结果
sum = 0.0
for i = 0 to lookback - 1
    sum := sum + array.get(daily_closes_arr, i)
custom_ma = sum / lookback
plot(custom_ma, color=color.green)

关于var关键字的疑问解答

var是Pine Script的初始化修饰符,被var修饰的变量只会在脚本首次运行时初始化1次,后续所有K线计算、函数调用都会复用同一个变量实例,不会重新创建:

  • 你代码中var arr_daily_closes = array.new_float()全局只有一份数组实例,每次调用函数都是往同一个数组里加元素,所以必须每次调用前执行array.clear()清空旧数据,否则数组长度会持续增长
  • 同理var float sum = 0.0只会在第一次赋值为0,后续计算都会复用同一个sum变量,所以每次计算前必须重置为0,否则会累加之前所有计算的结果
    如果去掉var修饰符,这些变量会在每次函数调用、每次K线计算时重新创建,就不需要手动清空和重置了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 07:06:04