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

编程新手求助:TypeError: Cannot read property 'adx' of undefined错误解决

解决TypeError: Cannot read property 'adx' of undefined问题

嘿,兄弟,别慌!作为编程新手能花两天时间排查问题已经超棒了,咱们一步步来解决这个错误~

这个错误的意思很明确:你尝试读取一个undefined变量的adx属性。简单说就是,某个你以为是对象/数组的东西,实际上根本没赋值或者赋值失败变成了undefined,然后你去访问它的adx属性就炸了。结合你用的technicalindicators库,大概率是ADX指标的计算出了问题,咱们从这几个方向排查:

1. ADX计算参数不对,返回了undefined

technicalindicators里的ADX指标对输入数据有严格要求:

  • 必须传入period(默认14)、high、low、close四个参数,而且都是数组类型
  • 数组的长度必须大于等于period的值(比如period=14的话,每个数组至少要有14个数据点)
  • 参数名要严格小写(比如不能写成High或者Close,大小写敏感)

如果参数不满足要求,ADX.calculate()会直接返回undefined,这时候你去读adxResult.adx自然就报错了。举个正确的调用例子:

// 假设你有足够的历史K线数据
const highData = [2000, 2010, 2020, ...]; // 至少14个数值
const lowData = [1980, 1990, 2000, ...];
const closeData = [1995, 2005, 2015, ...];

const adxResult = ADX.calculate({
  period: 14,
  high: highData,
  low: lowData,
  close: closeData
});

// 注意:adxResult是一个数组,每个元素包含adx、diPlus、diMinus属性
// 要获取最新的ADX值,得取数组最后一个元素
if (adxResult && adxResult.length > 0) {
  const latestAdx = adxResult[adxResult.length - 1].adx;
  console.log('最新ADX值:', latestAdx);
} else {
  console.log('ADX计算失败:数据不足或参数错误');
}

2. 变量初始化/赋值出问题

你代码里的var adxVa...没写完,可能是这个变量在赋值前就被访问了,或者赋值过程中出错导致它变成undefined。比如:

  • 你可能写了var adxValues = ADX.calculate(...);但calculate返回了undefined,然后直接去adxValues.adx
  • 或者变量名拼写错误(比如把adxValues写成了adxVaules)

解决办法:在访问adx属性前,先加个判断,确保变量不是undefined:

if (adxValues && adxValues.length > 0) {
  // 安全访问adx属性
} else {
  // 处理变量未定义的情况
}

3. 异步数据加载的坑

如果你的K线数据是从BFXTrade接口异步获取的,很可能出现数据还没加载完就调用ADX计算的情况,导致传入的high/low/close数组是空的或者长度不够,进而ADX计算返回undefined。

这时候要确保在数据加载完成后再调用ADX,比如用async/await处理异步:

async function runStrategy() {
  // 先异步获取市场数据,确保数据拿到手再继续
  const marketData = await bfx.getHistoricalData('ETHBTC'); // 假设BFXTrade有这个异步方法
  
  // 提取所需的high、low、close数组
  const highData = marketData.map(item => item.high);
  const lowData = marketData.map(item => item.low);
  const closeData = marketData.map(item => item.close);
  
  // 再计算ADX
  const adxResult = ADX.calculate({
    period: 14,
    high: highData,
    low: lowData,
    close: closeData
  });
  
  // 后续逻辑...
}

runStrategy();

慢慢来,先从检查ADX的调用参数和变量是否存在开始,应该很快就能找到问题啦!

内容的提问来源于stack exchange,提问作者ILYA Shu.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:15:40