跳到主要内容

如何使用Python产生技术指标? TA-Lib简易教学

· 6 分钟阅读
Eric Cheng

之前说过想写一个系列针对技术指标(均线、KD、RSI、MACD、布林通道)的教学和回测文章,但在写回测之前当然就是要能够把技术指标算出来, 这篇文章简单的介绍一个好用的 open source library:TA-Lib,之后的文章就会用这个工具来帮我们回测过去的资料

TA-Lib

官网】、【Github

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 这个档案, 请依据自己的电脑环境选择对应的档案

talib-download

然后在 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)

画了一下图,看起来没有什么问题 talib-sma

KD

KD 也是一行 code 就解决,这里用的是台湾比较常用的参数 933,当然也是可以自行修改参数,不输入参数的话预设值是 533

df_kd = abstract.STOCH(df, fastk_period=9, slowk_period=3, slowd_period=3)

回传的值为 slowk, slowd, 就是俗称的 k值和 d值,同样画了一下图 talib-kd

RSI

RSI 也是一行 code 就解决,不输入参数的话预设值就是 14,一样可以自行修改参数

df_rsi = abstract.RSI(df, 14)

同样画了一下图 talib-rsi

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,分别为上限,平均值、下限

同样简单画了一下图,就只有画收盘价和上下限 talib-bbands

小结

先这样吧,完整程式码我放在【Colab】, TA-Lib 算是很好用的工具,再来就是对这些技术指标来做回测看看这些技术指标到底有没有用了...


加入fb粉絲團!第一時間取得網站更新訊息

版權聲明

,轉載請註明出處
本文連結: https://havocfuture.tw/blog/python-indicators-talib