编写TradingView首个Pine Script遇语法错误:赋值语句报错
解决Pine Script v5的数组赋值语法错误
错误原因
你遇到的Syntax error at input '='是因为Pine Script v5不支持直接用数组名[索引] = 值的方式修改数组元素,不管用=还是:=都不行,必须使用官方提供的array.set()函数来修改数组元素。另外你的循环逻辑还存在数组索引越界问题:数组初始化长度为n,索引范围是0到n-1,但你循环从n开始,会访问超出数组范围的索引。
修正后的代码
//@version=5 indicator("Range Probability") // v5中建议用indicator替代study,功能一致 n = input(title="Number of bars", type=input.integer, defval=100, minval=1) // 初始化存储过去n个bar范围的数组 past_ranges = array.new_float(n, 0.0) // 将数组元素向后移位(从最后一位到第二位,依次复制前一位的值) for i = n-1 downto 1 array.set(past_ranges, i, array.get(past_ranges, i-1)) // 将当前bar的范围放入数组第一个位置 current_range = abs(high - low) array.set(past_ranges, 0, current_range) // 计算均值和标准差 mean_range = array.avg(past_ranges) std_dev = array.stdev(past_ranges) // 计算当前范围的概率 prob = normcdf(current_range, mean_range, std_dev) // 绘制概率曲线 plot(prob, title="Range Probability", color=color.blue)
关键修改点
- 用
array.set(数组名, 索引, 值)替代直接索引赋值,用array.get(数组名, 索引)获取数组元素 - 调整循环范围为
n-1 downto 1,避免数组索引越界 - 用
indicator替代study(Pine v5中推荐使用,两者功能等价) - 简化变量定义,避免重复计算
abs(high - low)
内容的提问来源于stack exchange,提问作者alessm
相关产品推荐
相关产品推荐

