TA-lib 异常:输入都是 NaN 错误?
TA-lib Exception: inputs are all NaN error?
我正在尝试 运行 使用 zipline 进行回测,我使用 TA-lib 进行一些技术分析。我的数据集很大(大小为千兆位)。因为我希望我的数据在 zipline 中工作,所以 我有很多数据都包含零作为多年的所有值一次 就这样可以将公司数据读入 zipline(因为 zipline 要求您拥有策略交易的整个持续时间的交易日历)。
错误信息:
_func.pxi in talib._ta_lib.MACD()
_func.pxi in talib._ta_lib.check_begidx1()
Exception: inputs are all NaN
我听说其他人也遇到了 TA-lib 的这个错误,而且没有好的方法来修复它。我该如何解决这个问题?是否需要我为 MACD 创建自己的函数?
令我惊讶的是,像 TA-lib 这样大的库无法处理超过一定大小的数据集。
如果我没理解错的话。指标计算的时候,需要一定的周期,比如布林线,至少需要20个周期,所以小于20就是NaN。因此,您需要检查您的列表中的这些值。
import math
x = float('nan')
math.isnan(x)
return True or False
import numpy as np
values = [float('nan'), np.nan, 55, "string", lambda x : x]
for value in values:
print(f"{repr(value):<8} : {is_nan(value)}")
这里是高亮显示的 magdi 设置,需要计算周期。任何小于此的值都将是 NaN,当您尝试计算您没有任何输入的内容时,这就是您收到此错误的原因。
Here's an example from the exchange.
def MACD(data, fastperiod, slowperiod, signalperiod):
macd, macdsignal, macdhist = [], [], []
fast_ema = EMA(data, fastperiod)
slow_ema = EMA(data, slowperiod)
diff = []
for k, fast in enumerate(fast_ema):
if math.isnan(fast) or math.isnan(slow_ema[k]):
macd.append(math.nan)
macdsignal.append(math.nan)
else:
macd.append(fast-slow_ema[k])
diff.append(macd[k])
diff_ema = EMA(diff, signalperiod)
macdsignal = macdsignal + diff_ema
for k, ms in enumerate(macdsignal):
if math.isnan(ms) or math.isnan(macd[k]):
macdhist.append(math.nan)
else:
macdhist.append(macd[k] - macdsignal[k])
return macd, macdsignal, macdhist
macd, macdsignal, macdhist = MACD(closes, 12, 26, 9)
这个函数计算macd。
如果传递 100 个值的列表,则 macd - 12 个值将为 nan,macdsignal - 26 将为 nan,macdhist - 9 将为 nan。
我正在尝试 运行 使用 zipline 进行回测,我使用 TA-lib 进行一些技术分析。我的数据集很大(大小为千兆位)。因为我希望我的数据在 zipline 中工作,所以 我有很多数据都包含零作为多年的所有值一次 就这样可以将公司数据读入 zipline(因为 zipline 要求您拥有策略交易的整个持续时间的交易日历)。
错误信息:
_func.pxi in talib._ta_lib.MACD()
_func.pxi in talib._ta_lib.check_begidx1()
Exception: inputs are all NaN
我听说其他人也遇到了 TA-lib 的这个错误,而且没有好的方法来修复它。我该如何解决这个问题?是否需要我为 MACD 创建自己的函数?
令我惊讶的是,像 TA-lib 这样大的库无法处理超过一定大小的数据集。
如果我没理解错的话。指标计算的时候,需要一定的周期,比如布林线,至少需要20个周期,所以小于20就是NaN。因此,您需要检查您的列表中的这些值。
import math
x = float('nan')
math.isnan(x)
return True or False
import numpy as np
values = [float('nan'), np.nan, 55, "string", lambda x : x]
for value in values:
print(f"{repr(value):<8} : {is_nan(value)}")
这里是高亮显示的 magdi 设置,需要计算周期。任何小于此的值都将是 NaN,当您尝试计算您没有任何输入的内容时,这就是您收到此错误的原因。 Here's an example from the exchange.
def MACD(data, fastperiod, slowperiod, signalperiod):
macd, macdsignal, macdhist = [], [], []
fast_ema = EMA(data, fastperiod)
slow_ema = EMA(data, slowperiod)
diff = []
for k, fast in enumerate(fast_ema):
if math.isnan(fast) or math.isnan(slow_ema[k]):
macd.append(math.nan)
macdsignal.append(math.nan)
else:
macd.append(fast-slow_ema[k])
diff.append(macd[k])
diff_ema = EMA(diff, signalperiod)
macdsignal = macdsignal + diff_ema
for k, ms in enumerate(macdsignal):
if math.isnan(ms) or math.isnan(macd[k]):
macdhist.append(math.nan)
else:
macdhist.append(macd[k] - macdsignal[k])
return macd, macdsignal, macdhist
macd, macdsignal, macdhist = MACD(closes, 12, 26, 9)
这个函数计算macd。 如果传递 100 个值的列表,则 macd - 12 个值将为 nan,macdsignal - 26 将为 nan,macdhist - 9 将为 nan。