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

使用TTR包中ATR()函数时遇下标越界错误的排查求助

问题分析与解决

核心问题

调用ATR()函数的方式错误:该函数需要传入包含High、Low、Close列的数据集对象,而非列名字符串向量c("High", "Low", "Close")。错误的输入导致函数无法识别行情数据结构,触发下标越界错误。

正确实现方式

方法1:直接传入数据框(推荐)

ATR()可直接接收包含目标列的数据框,无需单独指定列名,注意提取返回结果中的atr列:

delta <- raw.Delta %>%
  mutate(dATR = ATR(., n=50, maType="SMA")$atr)

方法2:显式构造HLC对象

用quantmod包的HLC()函数构造标准行情对象,再传入ATR():

delta <- raw.Delta %>%
  mutate(dATR = ATR(HLC(.), n=50, maType="SMA")$atr)

报错原因解析

当传入c("High", "Low", "Close")字符向量时,函数会将其当作行情数据处理,但该向量长度远小于计算窗口n=50,且不具备ATR计算所需的高低收数据结构,最终触发HLC[-NROW(HLC), 3]下标越界——因字符向量行数不足,取反后下标超出有效范围。

补充提示

  • 当前数据仅6行,设置n=50会导致所有结果为NA(无足够历史数据计算50期ATR),可先改用n=2等小窗口验证代码正确性。
  • SMA()能运行是因为它支持直接接收数据框并对全列计算,但ATR()对输入结构有严格要求,必须是包含高低收字段的行情数据对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 12:05:19