talib 安装与使用
I 安装
最简单的安装方式:
$ pip install TA-Lib
有可能遇到的问题:
func.c:256:28: fatal error: ta-lib/ta_libc.h: No such file or directorycompilation terminated.
这个问题的意思是找不到基础的TALIB库,所以我们不能用上面的简便方式安装。
Mac下安装方式:
$ brew install ta-lib
Windows下安装方式:
从ta-lib-0.4.0-msvc.zip 下载,并解压到路径C:\ta-lib
Linux下安装方式:
下载ta-lib-0.4.0-src.tar.gz 然后依次运行
$ untar and cd
$ ./configure --prefix=/usr
$ make
$ sudo make install
如果使用make -jx构建TA LIB可能会失败,需要在最后再加一条命令
$ mae -jX
II 使用
1、指数移动均线和MACD代码
import matplotlib.pyplot as plt
import numpy as np
import talib
df=ts.get_k_data('600600')
close = [float(x) for x in df['close']]
# 调用talib计算指数移动平均线的值
df['EMA12'] = talib.EMA(np.array(close), timeperiod=6)
df['EMA26'] = talib.EMA(np.array(close), timeperiod=12)
# 调用talib计算MACD指标
df['MACD'],df['MACDsignal'],df['MACDhist'] = talib.MACD(np.array(close),
fastperiod=6, slowperiod=12, signalperiod=9)
df.tail(12)
动量和RSI的函数
import tushare as ts
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import talib
df=ts.get_k_data('600600')
close = [float(x) for x in df['close']]
df['RSI']=talib.RSI(np.array(close), timeperiod=12) #RSI的天数一般是6、12、24
df['MOM']=talib.MOM(np.array(close), timeperiod=5)
df.tail(12)
2、K线图代码
#!/usr/bin/env python
# encoding: utf-8
#@author: 好
#@file: test0701.py
#@time: 2019/7/2 17:22
import pandas_datareader as pdr
import datetime
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import mpl_finance as mpf
import seaborn as sns
import talib as tl
start = datetime.datetime(2018,4,1)
df_300427 = pdr.DataReader('300427.SZ', 'yahoo', start=start)
df_300427.index = df_300427.index.format(formatter=lambda x: x.strftime('%Y-%m-%d'))
fig = plt.figure(figsize=(24, 8))
ax = fig.add_subplot(1, 1, 1)
ax.set_xticks(range(0, len(df_300427.index), 10))
ax.set_xticklabels(df_300427.index[::10])
mpf.candlestick2_ochl(ax, df_300427['Open'], df_300427['Close'], df_300427['High'],
df_300427['Low'], width=0.6, colorup='r', colordown='g', alpha=0.75);
#加均线
sma_10 = tl.SMA(np.array(df_300427['Close']), 10)
sma_30 = tl.SMA(np.array(df_300427['Close']), 30)
fig = plt.figure(figsize=(24, 8))
ax = fig.add_subplot(1, 1, 1)
ax.set_xticks(range(0, len(df_300427.index), 10))
ax.set_xticklabels(df_300427.index[::10])
mpf.candlestick2_ochl(ax, df_300427['Open'], df_300427['Close'], df_300427['High'],
df_300427['Low'], width=0.6, colorup='r', colordown='g', alpha=0.75)
plt.rcParams['font.sans-serif']=['Microsoft JhengHei']
ax.plot(sma_10, label='10日均线')
ax.plot(sma_30, label='30日均线')
ax.legend();
#加成交量
sma_10 = tl.SMA(np.array(df_300427['Close']), 10)
sma_30 = tl.SMA(np.array(df_300427['Close']), 30)
fig = plt.figure(figsize=(24, 15))
ax = fig.add_axes([0,0.2,1,0.5])
ax2 = fig.add_axes([0,0,1,0.2])
ax.set_xticks(range(0, len(df_300427.index), 10))
ax.set_xticklabels(df_300427.index[::10])
mpf.candlestick2_ochl(ax, df_300427['Open'], df_300427['Close'], df_300427['High'],
df_300427['Low'], width=0.6, colorup='r', colordown='g', alpha=0.75)
plt.rcParams['font.sans-serif']=['Microsoft JhengHei']
ax.plot(sma_10, label='10日均线')
ax.plot(sma_30, label='30日均线')
mpf.volume_overlay(ax2, df_300427['Open'], df_300427['Close'], df_300427['Volume'], colorup='r', colordown='g', width=0.5, alpha=0.8)
ax2.set_xticks(range(0, len(df_300427.index), 10))
ax2.set_xticklabels(df_300427.index[::10])
ax.legend();
#加上kd值
sma_10 = tl.SMA(np.array(df_300427['Close']), 10)
sma_30 = tl.SMA(np.array(df_300427['Close']), 30)
df_300427['k'], df_300427['d'] = tl.STOCH(df_300427['High'], df_300427['Low'], df_300427['Close'])
df_300427['k'].fillna(value=0, inplace=True)
df_300427['d'].fillna(value=0, inplace=True)
fig = plt.figure(figsize=(24, 20))
ax = fig.add_axes([0,0.3,1,0.4])
ax2 = fig.add_axes([0,0.2,1,0.1])
ax3 = fig.add_axes([0,0,1,0.2])
ax.set_xticks(range(0, len(df_300427.index), 10))
ax.set_xticklabels(df_300427.index[::10])
mpf.candlestick2_ochl(ax, df_300427['Open'], df_300427['Close'], df_300427['High'],
df_300427['Low'], width=0.6, colorup='r', colordown='g', alpha=0.75)
plt.rcParams['font.sans-serif']=['Microsoft JhengHei']
ax.plot(sma_10, label='10日均线')
ax.plot(sma_30, label='30日均线')
ax2.plot(df_300427['k'], label='K值')
ax2.plot(df_300427['d'], label='D值')
ax2.set_xticks(range(0, len(df_300427.index), 10))
ax2.set_xticklabels(df_300427.index[::10])
mpf.volume_overlay(ax3, df_300427['Open'], df_300427['Close'], df_300427['Volume'], colorup='r', colordown='g', width=0.5, alpha=0.8)
ax3.set_xticks(range(0, len(df_300427.index), 10))
ax3.set_xticklabels(df_300427.index[::10])
ax.legend();
ax2.legend();
plt.show()
【参考】:
1、https://www.cnblogs.com/zhuminghui/p/9196793.html
2、https://www.cnblogs.com/52shaidan/p/11125233.html
3、https://www.zhihu.com/question/39951384
4、https://zhuanlan.zhihu.com/p/36219963
5、https://www.ricequant.com/welcome/