web-dev-qa-db-ja.com

TA-Libのテクニカルインジケーターをpandas in python

私は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で利用できる同様のライブラリはありますか?.

10
Eka

試してみてください。

print ta.RSI(np.array(f.Close))
5
Tim

問題は、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の2番目のパラメーターはオプションです。

お役に立てれば。

3
sayantan ghosh

で試してみてください

ta.RSI(f["Close"].values)
2
ywllyht

ta.RSIは値の配列が処理されることを期待していますが、データフレームを取得します。したがって、データフレームを配列に変換する必要があります。これを試して:

ta.RSI(f.Close.values、2)を出力します

0
Hamza Sabir