当输入包含nan时,如何解决TAlib给出错误结果的问题



我有一个二维数组,其中包含许多nan。当计算每列的MA时,每列都有244个非浮点数,函数给出正确的结果

`np.sum(~np.isnan(talib.MA(b[:,0],5)))`
`Out[106]: 240`
`np.sum(~np.isnan(talib.MA(b[:,1],5)))`
`Out[107]: 240`

然而,当将2D阵列展平为1D阵列时,MA函数的输出只有240个而不是nan数据。检查结果后,我发现它丢失了第二列的结果。

`np.sum(~np.isnan(talib.MA(b.flatten(order = 'F'),5)))`
`Out[108]: 240`

有没有一些解决方案可以解决这个问题,此外,talib函数是否支持直接使用2d数组?

事实上,我发现塔利布不会计算它之后的价值,除非在一开始。

例如。

f = np.array([nan, 1, 2, 3, 4, 5, 6, nan, nan, 3, 4, 5, 6, 7])
f2 = talib.MA(f,2) 

将产生类似的结果

f2 array([nan, nan, 1.5, 2.5, 3.5, 4.5, 5.5, nan, nan, nan, nan, nan, nan,nan])

这个问题有解决办法吗?

TA-Lib是一个用C编写的库,您可以通过John Benediktsson制作的python包装器访问它。C库根本不支持2d数组。如果只有C库函数需要类似OHLC的输入,那么python包装器可以接受这样的数组。在这种情况下,它将解释名为";打开"高""低"关闭";等等作为相应的输入数据。没有任何2d阵列以您期望的方式支持。请参阅包装器的文档和示例。

TA Lib不希望输入任何NAN,您永远不应该将它们传递给它。任何使用NAN的操作都会导致NAN,并且您会得到不正确的结果。

示例输出中的第一个NAN与输入中的NAN没有任何关系。它们是您在MA构造函数中传递的timeperiod=2的结果。移动平均值不能为每个输入值计算,它们有一个预热期。C库在这段时间内不返回任何内容,只回复它能够提供结果的数据索引。所以在这种情况下,它的结果比输入数组短。Python包装器将NAN插入到C-Library应答中,以使输出与输入大小相同。

相关内容

最新更新