IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 国内股票KDJ指标计算,Python实现KDJ指标计算,Talib实现KDJ指标计算 -> 正文阅读

[人工智能]国内股票KDJ指标计算,Python实现KDJ指标计算,Talib实现KDJ指标计算

0 引言

KDJ指标是最为常见的指标之一,股票每日的K线数据通过Tushare、Baostock等平台能够获取到个股及指数的Open、High、Low、Close、Volume等数据,KDJ、MACD等技术指标虽然同花顺等财经网站都算好了,但是这写指标确没有接口给“量化宽客”们使用。

1 计算公式

KDJ计算主要有4步:

(1)计算RSV:RSV=(Close(当日值)-Low(9日最低值)) /?(High(9日最高值)-Low(9日最低值))

(2)计算K:K=ema(RSV, com=2),ema为指数移动平均,参数com取2;

(3)计算D:D=ema(K, com=2),ema为指数移动平均,参数com取2;

(4)计算J:J=3.0*K-2.0*D

2 Python计算实现

Python实现KDJ指标的计算,主要基于Pandas库实现计算:

2.1 获取数据:

通过Baostock、Tushare、YahooFinance获取数据,这里以Baostock为例:

import baostock as bs
import pandas as pd

code = 'sh.600036'
start_date = '2021-01-01'
end_date = '2021-10-01'

#Step1: 获取数据
lg = bs.login()
rs = bs.query_history_k_data_plus(code,
                                  "date,code,open,high,low,close,volume",
                                  start_date=start_date, end_date=end_date, frequency="d", adjustflag='2')#注意adjustflag取2为前复权
data_list = []
while (rs.error_code == '0') & rs.next():
    data_list.append(rs.get_row_data())
df = pd.DataFrame(data_list, columns=rs.fields)
df[['open', 'high', 'low', 'close', 'volume']] = df[['open', 'high', 'low', 'close', 'volume']].astype(
    'float64')
df = df.rename(columns={'date': 'datetime'})
df.index = pd.DatetimeIndex(df['datetime'])
bs.logout()

得到结果如下:?

2.2?基于Python计算KDJ

利用Python的Pandas库进行计算:

lowList = df['low'].rolling(9).min() #计算low值9日移动最低
lowList.fillna(value=df['low'].expanding().min(), inplace=True)
highList = df['high'].rolling(9).max() #计算high值9日移动最高
highList.fillna(value=df['high'].expanding().max(), inplace=True)
rsv = (df.loc[:, 'close'] - lowList) / (highList - lowList) * 100
df.loc[:, 'kdj_k'] = rsv.ewm(com=2).mean()
df.loc[:, 'kdj_d'] = df.loc[:, 'kdj_k'].ewm(com=2).mean()
df.loc[:, 'kdj_j'] = 3.0 * df.loc[:, 'kdj_k'] - 2.0 * df.loc[:, 'kdj_d']

得到结果:

?对比财经网站结果,以2021-9-30为例,K、D、J三个指标与计算结果一致。

3?Ta-lib计算实现

发现用Python实现代码量比较多,是不是不够优雅,那么我们用股票技术指标分析利器Ta-lib进行尝试(Ta-lib安装自行百度):

Ta-lib计算KDJ的函数是STOCH,但是这个函数参数较多,按照默认配置是无法计算出和国内一致的结果:

def STOCH(*args, **kwargs): # reliably restored by inspect
    """
    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
    """
    pass

主要参数是这几个:

(1)fastk_period:对应9日移动平均,这里取值为9;

(2)slowk_period: 这个指标取值是计算的关键:

计算公式中提到了? “K=ema(RSV, com=2),ema为指数移动平均,参数com取2”

com=2,对应slowk_period应该取多少?通过查看Pandas官方教程:

?com=2时,α=1/3 ,??则span=5;

对应slowk_period=5;

(3)slowk_matype:

通过查看Ta-lib 中matype的类型说明:

MA_Type: 0=SMA, 1=EMA, 2=WMA, 3=DEMA, 4=TEMA, 5=TRIMA, 6=KAMA, 7=MAMA, 8=T3 (Default=SMA)

指数移动平均:slowk_matype应取1。

(4)slowd_period、slowd_matype同上。

(5)最后参数配置就都有了,直接上代码:

import talib
df['talib_K'], df['talib_D'] = talib.STOCH(df['high'].values,
                                           df['low'].values,
                                           df['close'].values,
                                           fastk_period=9,
                                           slowk_period=5,
                                           slowk_matype=1,
                                           slowd_period=5,
                                           slowd_matype=1)#计算kdj的正确配置

df.loc[:, 'talib_J'] = 3.0 * df.loc[:, 'talib_K'] - 2.0 * df.loc[:, 'talib_D']

结果展示:

?和之前的计算完全一致。(此结果为:2021.10.7前复权计算结果)

4 计算速度对比

把计算开始时间改为2002.4.9(600036:招商银行上市日),进行计算:

Pandas totally cost: 0.0050699710845947266
Talib totally cost: 0.0010001659393310547

计算方法天数计算时长
Pandas4735天0.00507秒
Talib4735天0.00100秒

总体Talib实现KDJ指标计算不仅更加优雅,而且速度比Pandas更快,小伙伴以后计算KDJ指标可以选择Talib了。


?

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-10-08 11:48:21  更:2021-10-08 11:49:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 10:38:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码