编程新手求助: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.
相关产品推荐
相关产品推荐

