14

我是 python 和 pandas 的新手,主要是学习它来丰富我的编程技能以及 python 作为通用程序语言的优势。在这个程序中,我使用它从 yahoo 获取历史数据,并使用 talib 中的函数进行一些技术分析

import pandas_datareader.data as web
import datetime
import talib as ta

start = datetime.datetime.strptime('12/1/2015', '%m/%d/%Y')
end = datetime.datetime.strptime('2/20/2016', '%m/%d/%Y')
f = web.DataReader('GOOG', 'yahoo', start, end)
print 'Closing Prices'
print f['Close'].describe()
print f.Close
print ta.RSI(f.Close,2)
print ta.SMA(f.Close,2)
print ta.SMA(f.Volume,4)
print ta.ATR
print ta.ATR(f.High,f.Low,f.Close,3)

上面的代码一直有效,print f.Close但随后显示此错误

 print ta.RSI(f.Close,2)
TypeError: Argument 'real' has incorrect type (expected numpy.ndarray, got Series)

我使用 R 及其库对股票进行技术分析,它有一个名为的内置库Quantmod,它使技术分析更容易,代码更少。

library(quantmod)
symbol=getSymbols(AAPL)
SMA=SMA(Cl(Symbol),2)

是否有任何可用于 Python 的类似库?

4

4 回答 4

7

试试看;

print ta.RSI(np.array(f.Close))
于 2017-07-22T15:25:17.803 回答
3

尝试

ta.RSI(f["Close"].values)
于 2018-04-29T13:14:44.053 回答
3

问题是您正在尝试使用 pandas 系列调用 SMA / RSI 等函数,但如果您浏览 TALIB 文档,它表明它们需要一个 numpy 数组作为参数。

所以你可以使用这个:

Close=np.array(f['close'][1:])
Modclose=np.zeroes(len(Close))
For i in range(len(Close)):
       Modclose[i]=float(Close[i])

ta.SMA(Modclose,timestamp)

SMA 中的第二个参数是可选的。

希望这可以帮助。

于 2018-04-30T13:14:56.343 回答
0

ta.RSI 期望处理值数组,但它获取数据帧。因此,您必须将数据框转换为数组。尝试这个:

打印 ta.RSI(f.Close.values, 2)

于 2018-08-10T06:02:31.690 回答