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

Pine Script中数组for循环未返回预期布尔值统计数的问题

Pine Script布尔值统计异常修复方案

你编写的Pine Script代码原本要统计默认设为true的7个输入项,但表格显示的是随品种和K线变化的5/6位大数,根本原因是变量初始化逻辑错误。

问题根源

代码中用var int tabNo = 0声明统计变量,var关键字会让变量在脚本启动时仅初始化一次,之后每根K线都会执行for循环累加tabNo,导致数值随K线数量持续增长,完全偏离预期的单次统计结果。

修复方案

有两种简单的修复方式:

方案1:每次统计前重置变量

移除var关键字,确保每根K线都重新统计:

//@version=5
indicator("test", overlay = true)
var int maxPos = 20

// 输入项部分保持不变
pL01_S = input.bool(true,  title="long pos 01", inline="L01-1", display=display.none)
pL02_S = input.bool(true,  title="long pos 02", inline="L02-1", display=display.none)
pL03_S = input.bool(false,  title="long pos 03", inline="L03-1", display=display.none)
pL04_S = input.bool(false,  title="long pos 04", inline="L04-1", display=display.none)
pL05_S = input.bool(false,  title="long pos 05", inline="L05-1", display=display.none)
pL06_S = input.bool(false,  title="long pos 06", inline="L06-1", display=display.none)
pL07_S = input.bool(false,  title="long pos 07", inline="L07-1", display=display.none)
pL08_S = input.bool(false,  title="long pos 08", inline="L08-1", display=display.none)
pL09_S = input.bool(false,  title="long pos 09", inline="L09-1", display=display.none)
pL10_S = input.bool(false,  title="long pos 10", inline="L10-1", display=display.none)
pS01_S = input.bool(true,  title="Short pos 01", inline="S01-1", display=display.none)
pS02_S = input.bool(true,  title="Short pos 02", inline="S02-1", display=display.none)
pS03_S = input.bool(true,  title="Short pos 03", inline="S03-1", display=display.none)
pS04_S = input.bool(true,  title="Short pos 04", inline="S04-1", display=display.none)
pS05_S = input.bool(true,  title="Short pos 05", inline="S05-1", display=display.none)
pS06_S = input.bool(false,  title="Short pos 06", inline="S06-1", display=display.none)
pS07_S = input.bool(false,  title="Short pos 07", inline="S07-1", display=display.none)
pS08_S = input.bool(false,  title="Short pos 08", inline="S08-1", display=display.none)
pS09_S = input.bool(false,  title="Short pos 09", inline="S09-1", display=display.none)
pS10_S = input.bool(false,  title="Short pos 10", inline="S10-1", display=display.none)

pShow = array.new_bool(20, false)
array.set(pShow, 0, pL01_S)
array.set(pShow, 1, pL02_S)
array.set(pShow, 2, pL03_S)
array.set(pShow, 3, pL04_S)
array.set(pShow, 4, pL05_S)
array.set(pShow, 5, pL06_S)
array.set(pShow, 6, pL07_S)
array.set(pShow, 7, pL08_S)
array.set(pShow, 8, pL09_S)
array.set(pShow, 9, pL10_S)
array.set(pShow, 10, pS01_S)
array.set(pShow, 11, pS02_S)
array.set(pShow, 12, pS03_S)
array.set(pShow, 13, pS04_S)
array.set(pShow, 14, pS05_S)
array.set(pShow, 15, pS06_S)
array.set(pShow, 16, pS07_S)
array.set(pShow, 17, pS08_S)
array.set(pShow, 18, pS09_S)
array.set(pShow, 19, pS10_S)

// 修复:每次统计前重置tabNo为0
int tabNo = 0
for i = 0 to maxPos - 1
    if array.get(pShow, i)
        tabNo := tabNo + 1

pTab = table.new(position.top_center, 4, 1, bgcolor=color.new(color.black, 56), frame_color=color.new(color.blue, 80), frame_width=1, border_color=color.new(color.blue, 80),border_width=1)
table.cell(pTab, 0, 0, text=str.tostring(tabNo))

方案2:用array.reduce简化统计(更高效)

直接用Pine Script内置的数组方法统计true的数量,避免手动循环:

//@version=5
indicator("test", overlay = true)
var int maxPos = 20

// 输入项部分保持不变
pL01_S = input.bool(true,  title="long pos 01", inline="L01-1", display=display.none)
pL02_S = input.bool(true,  title="long pos 02", inline="L02-1", display=display.none)
pL03_S = input.bool(false,  title="long pos 03", inline="L03-1", display=display.none)
pL04_S = input.bool(false,  title="long pos 04", inline="L04-1", display=display.none)
pL05_S = input.bool(false,  title="long pos 05", inline="L05-1", display=display.none)
pL06_S = input.bool(false,  title="long pos 06", inline="L06-1", display=display.none)
pL07_S = input.bool(false,  title="long pos 07", inline="L07-1", display=display.none)
pL08_S = input.bool(false,  title="long pos 08", inline="L08-1", display=display.none)
pL09_S = input.bool(false,  title="long pos 09", inline="L09-1", display=display.none)
pL10_S = input.bool(false,  title="long pos 10", inline="L10-1", display=display.none)
pS01_S = input.bool(true,  title="Short pos 01", inline="S01-1", display=display.none)
pS02_S = input.bool(true,  title="Short pos 02", inline="S02-1", display=display.none)
pS03_S = input.bool(true,  title="Short pos 03", inline="S03-1", display=display.none)
pS04_S = input.bool(true,  title="Short pos 04", inline="S04-1", display=display.none)
pS05_S = input.bool(true,  title="Short pos 05", inline="S05-1", display=display.none)
pS06_S = input.bool(false,  title="Short pos 06", inline="S06-1", display=display.none)
pS07_S = input.bool(false,  title="Short pos 07", inline="S07-1", display=display.none)
pS08_S = input.bool(false,  title="Short pos 08", inline="S08-1", display=display.none)
pS09_S = input.bool(false,  title="Short pos 09", inline="S09-1", display=display.none)
pS10_S = input.bool(false,  title="Short pos 10", inline="S10-1", display=display.none)

pShow = array.new_bool(20, false)
array.set(pShow, 0, pL01_S)
array.set(pShow, 1, pL02_S)
array.set(pShow, 2, pL03_S)
array.set(pShow, 3, pL04_S)
array.set(pShow, 4, pL05_S)
array.set(pShow, 5, pL06_S)
array.set(pShow, 6, pL07_S)
array.set(pShow, 7, pL08_S)
array.set(pShow, 8, pL09_S)
array.set(pShow, 9, pL10_S)
array.set(pShow, 10, pS01_S)
array.set(pShow, 11, pS02_S)
array.set(pShow, 12, pS03_S)
array.set(pShow, 13, pS04_S)
array.set(pShow, 14, pS05_S)
array.set(pShow, 15, pS06_S)
array.set(pShow, 16, pS07_S)
array.set(pShow, 17, pS08_S)
array.set(pShow, 18, pS09_S)
array.set(pShow, 19, pS10_S)

// 修复:用array.reduce统计true的数量
countTrue = array.reduce((acc, val) => acc + val, pShow, 0)

pTab = table.new(position.top_center, 4, 1, bgcolor=color.new(color.black, 56), frame_color=color.new(color.blue, 80), frame_width=1, border_color=color.new(color.blue, 80),border_width=1)
table.cell(pTab, 0, 0, text=str.tostring(countTrue))

效果验证

修复后,表格会稳定显示7,不会随K线或品种变化,符合预期的布尔值统计结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 21:45:55