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

PineScript中b1[1]的取值来源及计算逻辑疑问

PineScript中Purple Cloud策略b1变量的赋值逻辑解析

你对b1[1]的取值逻辑理解有误,PineScript的历史引用[1]指向的是上一根K线的变量值,而非初始赋值的0.0,下面分场景拆解:

1. 第一根K线的执行逻辑

当脚本运行到第一根K线时:

  • 首先执行b1 = 0.0,给当前K线的b1赋初始值0.0
  • 接着用:=重新赋值,此时判断na(b1[1]):因为第一根K线没有上一根K线,b1[1]是na(空值),所以条件成立,b1被赋值为ta.sma(close,14)(或完整策略中的ta.sma(close, x1))
  • 最终第一根K线的b1值是对应周期收盘价的SMA,而非0.0

2. 第二根及后续K线的执行逻辑

从第二根K线开始:

  • na(b1[1])判断为false,因为上一根K线已经有计算好的b1值(不是空值)
  • 此时执行公式(b1[1]*(x1-1)+close)/x1,这是递归式移动平均计算,和SMA的滚动更新逻辑完全一致:

    新平均值 = (旧平均值 × (周期数-1) + 当前收盘价) ÷ 周期数

  • 所以每一根K线的b1值,都是基于上一根K线的b1值滚动计算而来,和初始的0.0没有关系

为什么你看到b1[1]不是0?

你打印b1[1]时,查看的是当前K线的上一根K线的b1值:

  • 如果是第二根K线,b1[1]是第一根K线计算出的SMA值
  • 如果是后续K线,b1[1]是前一根K线的递归平均结果
  • 初始赋值的0.0只会在第一根K线的b1 = 0.0步骤短暂存在,随后就被:=的赋值覆盖了

可以用以下简化代码验证逻辑:

// 测试代码:对比递归计算和原生SMA
x1 = 14
b1 = 0.0
b1 := na(b1[1]) ? ta.sma(close, x1) : (b1[1] * (x1 - 1) + close) / x1
plot(b1, color=color.blue)
plot(ta.sma(close,14), color=color.red, style=plot.style_dashed)
// 两条线会完全重合,说明递归计算和SMA结果一致

内容的提问来源于stack exchange,提问作者윤석민

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 05:48:14