如果我理解正确的话。计算指标时,需要一定的周期,例如,对于布林线,至少需要 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,当你尝试计算一些你没有任何输入的东西时,这就是你得到这个错误的原因。
这是交易所的一个例子。
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。