使用Ta-lib计算MACD与KDJ

2015年6月23日 发表评论 阅读评论

一、MACD与KDJ计算原理

python Ta-lib的安装 篇中提到了ta-lib在python下的安装,不过安装的目的为了使用,这里就结合该库进行股票中MACD和KDJ值的计算和处理。如果不了解这两个指标的,可以自行科普。行情相关数据可以使用tushare包进行获取,具体可以参考 python stock数据包tushare

ta-lib中直接有MACD函数,其返回值有三个。而KDJ值对应的函数是Stochastic Oscillator Slow (Stoch),其返回值有两个,一个是快速确认线值,另外一个是慢速主干线值。MACD函数返回的三个值如下:

macd = 12 天 EMA - 26 天 EMA (DIFF)
signal = 9 天 MACD的EMA  (DEA)
hist = MACD - MACD signal (DIFF - DEA)

这个值对应的是DIFF  DEA  DIFF-DEA 三个值 。

KDJ值对应的四条随机线FASTK, FASTD, SLOWK and SLOWD的计算原理见下图:

talib-kdj

上面提到的stoch函数计算得到的是最下面的两条值,上面两个的值对应的是stochf函数。其中常见的K、D两个值对应的是SLOWK和SLOWD,而J值是不是对应上面的两个中的某个一个或者是否是通过再计算得出的,这个还未研究,不过J值一般只做为参考值,因为其变化太快。

>>> import talib as ta
>>> help(ta.STOCH)
Help on function STOCH in module talib._ta_lib:
STOCH(...)
    STOCH(high, low, close[, fastk_period=?, slowk_period=?, slowk_matype=?, slowd_period=?, slowd_matype=?])
    Stochastic (Momentum Indicators)
    Inputs:
        prices: ['high', 'low', 'close']
    Parameters:
        fastk_period: 5
        slowk_period: 3
        slowk_matype: 0
        slowd_period: 3
        slowd_matype: 0
    Outputs:
        slowk
        slowd
>>> help(ta.STOCHF)
Help on function STOCHF in module talib._ta_lib:
STOCHF(...)
    STOCHF(high, low, close[, fastk_period=?, fastd_period=?, fastd_matype=?])
    Stochastic Fast (Momentum Indicators)
    Inputs:
        prices: ['high', 'low', 'close']
    Parameters:
        fastk_period: 5
        fastd_period: 3
        fastd_matype: 0
    Outputs:
        fastk
        fastd

二、使用示例

1、计算MACD

import talib as ta
import tushare as ts
import pandas as pd
dw = ts.get_k_data("600600")
dw = dw[-50:]   # 取最后50天的数据
print(dw)
close = dw.close.values
print(close)
print(len(close))
dw['macd'], dw['macdsignal'], dw['macdhist'] = ta.MACD(close, fastperiod=12, slowperiod=26, signalperiod=9)
df = pd.DataFrame(data=dw)
row = df.iloc[-10:].values
print(row)

2、计算KDJ

import talib as ta
import tushare as ts
import pandas as pd
dw = ts.get_k_data("603236")
print(len(dw))
dw = dw[300:]   # 从第300天开始,直到最后
dw.index = range(len(dw))
dw['slowk'], dw['slowd'] = ta.STOCH(dw['high'].values,
                        dw['low'].values,
                        dw['close'].values,
                        fastk_period=9,
                        slowk_period=3,
                        slowk_matype=0,
                        slowd_period=3,
                        slowd_matype=0)
df = pd.DataFrame(data=dw)
row = df.iloc[-10:].values
print(row

注意这里计算的时候,MACD是最少要26天的数据,KDJ要至少最近9天的数据,所以在遇到新股时,计算会出错,所以批量处理时需要通过len(dw)进行判断过滤。

除此之外,还可以像很多软件一样,其有按天、周、月等统计的结果,这个只需要使用MA加权平均即可,比如,我们可以算5、10、20三种的加权平均时,可以使用如下代码:

slowkMA5 = ta.MA(slowk, timeperiod=5, matype=0)
slowkMA10 = ta.MA(slowk, timeperiod=10, matype=0)
slowkMA20 = ta.MA(slowk, timeperiod=20, matype=0)
slowdMA5 = ta.MA(slowd, timeperiod=5, matype=0)
slowdMA10 = ta.MA(slowd, timeperiod=10, matype=0)




本站的发展离不开您的资助,金额随意,欢迎来赏!

You can donate through PayPal.
My paypal id: itybku@139.com
Paypal page: https://www.paypal.me/361way

分类: 未分类 标签: ,