使用barssince()返回值作为MA长度参数时报错的原因是什么
barssince()返回值类型及MA传参报错原因 barssince()的返回值不属于始终有效的整数数据类型,这是触发报错的核心原因。
该函数的返回逻辑为:当指定判断条件从历史K线到当前K线从未满足时,会返回na(空值);在历史行情中,判断条件第一次成立之前的所有K线位置,函数返回值同样为na,并非可直接参与计算的有效整数。- 传入MA长度参数触发报错的直接原因是参数校验不通过:
MA指标的length(长度)参数有严格的准入要求,仅接受大于0的有效正整数,空值na、0、浮点数、负数都会触发类型/数值非法报错。当barssince()返回空值、或者条件在当前K线刚成立返回0时,直接传入就会触发错误。 - 可参考以下修复方案:
用nz()函数对barssince()的返回值做空值兜底,同时处理返回值为0的边界情况,保证传入MA的参数始终是合法正整数,示例代码(Pine Script环境):
// 自定义判断条件 trigger_condition = close > ta.ema(close, 20) // 获取条件成立到当前的周期数 raw_len = ta.barssince(trigger_condition) // 兜底处理:空值默认取20,同时+1避免返回0值,最终得到合法长度参数 valid_len = nz(raw_len, 20) + 1 // 传入合法参数计算MA ma_line = ta.sma(close, valid_len)
内容的提问来源于stack exchange,提问作者TheSulun
相关产品推荐
相关产品推荐

