之前说过想写一个系列针对技术指标(均线、KD、RSI、MACD、布林通道)的教学和回测文章,但在写回测之前当然就是要能够把技术指标算出来, 这篇文章简单的介绍一个好用的 open source library:TA-Lib,之后的文章就会用这个工具来帮我们回测过去的资料
TA-Lib
TA-Lib 提供哪些技术指标?
TA-Lib 提供了150+的技术指标,基本上我们根本不会用到这么多(如果要直接无脑去比对特征值有效性另当别论), 实务上我们常用的技术指标像是 均线、KD、RSI、MACD ,TA-Lib 都有,这篇文章会直接简单实作
Windows 安装
TA-Lib 在 Windows 的安装不太友善,直接下 pip install ta-lib 会出现一堆错误讯息,官方提供的安装方法如下:https://github.com/TA-Lib/ta-lib-python#windows
- 方法一:相当复杂,看到还要安装 Visual Studio Community 2015 我就放弃了,不想试
- 方法二:unofficial,不过相对简单多了,先到 https://www.lfd.uci.edu/~gohlke/pythonlibs/#ta-lib 下载 whl 档,ex: 我 python 的版本是 3.9,电脑是 64 位元,所以选的就是
TA_Lib‑0.4.24‑cp39‑cp39‑win_amd64.whl
这个档案, 请依据自己的电脑环境选择对应的档案
然后在 cmd 模式执行
pip install TA_Lib‑0.4.24‑cp39‑cp39‑win_amd64.whl
就完成安装了
Colab 安装
这个 blog 会提供 Colab 程式码,如果不知道 Colab 怎么用的话,可以先看之前的教学【Google Colab(Colaboratory) 简易教学】
在 Colab 相对就单纯的多,直接将这几行 code 写在开始就可以
!wget http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz
!tar -xzvf ta-lib-0.4.0-src.tar.gz
%cd ta-lib
!./configure --prefix=/usr
!make
!make install
!pip install Ta-Lib
TA-Lib 实作
以下列了几个比较常见的技术指标,这篇文章不打算仔细说明技术指标的原理,仅仅说明如何用 TA-Lib 查询技术指标的值和简单的绘图
前置作业
使用 yfinance 取得 SPY 股价
如何取得股价可以参考之前的文章【如何使用Python取得历史股价,简介yfinance、ffn、FinMind】, 这里用的是 yfinance ,因为 TA-Lib 除了收盘价外,有些指标会需要用到像 最高价、最低价 之类的值,用 yfinance 取得 SPY 的价格很简单,只需要以下几行 code 就可以了
import yfinance as yf
df = yf.download("spy", "2021-01-01")
TA-Lib 大致分为两种用法
- 直接使用
- 使用 abstract 套件
其实结果是一样的,可以自行选择,以均线为例,直接使用的语法为
import talib
df['spy_sma_20'] = talib.SMA(df['Close'].values, timeperiod=20)
但以下的范例会使用 abstract 套件,abstract 套件会要求传入的 dataframe 有「open」「high」「low」「close」「volume」栏位,注意:这些栏位 yfinance 都有,但是都是大写,必须先自行转换成小写才能使用
from talib import abstract
df['spy_sma_20'] = abstract.SMA(df, 20)
均线
就刚才写的一行 code 解决,这里用的是 SMA(简单移动平均线),参数为 20日均线,可以自行修改参数
df_sma = abstract.SMA(df, 20)
画了一下图,看起来没有什么问题
KD
KD 也是一行 code 就解决,这里用的是台湾比较常用的参数 933,当然也是可以自行修改参数,不输入参数的话预设值是 533
df_kd = abstract.STOCH(df, fastk_period=9, slowk_period=3, slowd_period=3)
回传的值为 slowk, slowd, 就是俗称的 k值和 d值,同样画了一下图
RSI
RSI 也是一行 code 就解决,不输入参数的话预设值就是 14,一样可以自行修改参数
df_rsi = abstract.RSI(df, 14)
同样画了一下图
MACD
MACD 也是一行 code 就解决,不输入参数的话预设值(12,26,9),一样可以自行修改参数
df_macd = abstract.MACD(df, fastperiod=12, slowperiod=26, signalperiod=9)
回传值有 macd, macdsignal, macdhist,分别就是 快线、慢线、柱状图(国内外对名词定义有点不一样),图比较难画,先略过晚点再说
布林通道
布林通道也是一行 code 就解决,不输入参数的话预设值为5日平均线,2倍标准差,一样可以自行修改参数,这里改成 20日
df_bbnds = abstract.BBANDS(df, timeperiod=20, nbdevup=2.0, nbdevdn=2.0, matype=0)
回传值为 upperband, middleband, lowerband,分别为上限,平均值、下限
同样简单画了一下图,就只有画收盘价和上下限
小结
先这样吧,完整程式码我放在【Colab】, TA-Lib 算是很好用的工具,再来就是对这些技术指标来做回测看看这些技术指标到底有没有用了...