Python量化:获取历史行情数据并计算KDJ指标

KDJ指标又叫随机指标,是一种相当新颖、实用的技术分析指标,它起先用于期货市场的分析,后被广泛用于股市的中短期趋势分析,是期货和股票市场上最常用的技术分析工具。

随机指标KDJ一般是用于股票分析的统计体系,根据统计学原理,通过一个特定的周期(常为9日、9周等)内出现过的最高价、最低价及最后一个计算周期的收盘价及这三者之间的比例关系,来计算最后一个计算周期的未成熟随机值RSV,然后根据平滑移动平均线的方法来计算K值、D值与J值,并绘成曲线图来研判股票走势。

KDJ指标在应用时需要考虑的几大方面:

1.K与D的取值,范围是0-100,80以上行情呈现超买现象,20以下呈现超卖现象。2.买进信号:K值在上涨趋势中﹤D值,K线向上突破D线时;卖出信号:K值在下跌趋势中﹥D值,K线向下跌破D线。

3.交易不活跃、发行量小的股票并不适用KD指标,而对大盘和热门大盘的准确性却很高。

4.在KD处在高位或低位,如果出现与股价走向的背离,则是采取行动的信号。

5.J的取值﹥100为超买,﹤0为超卖,都属于价格的非正常区域。

6.短期转势预警信号:K值和D值上升或者下跌的速度减弱,倾斜度趋于平缓,通常K、D、J三值在20-80之间为徘徊区,宜观望.

就敏感度而言,最强的是J值,其次是K,最慢的则是D了,而从安全性来讲,就刚刚相反。

一般的股票行情软件都提供了KDJ的值,以及参数自定义的功能,在程序和交易中,需要自己去计算KDJ的值。好在现在有类库提供各种指标的计算,尤其是python。很多人都听过一个叫做TA-lib的python包,可以计算多种的技术指标。另外就是需要下载历史行情数据,我们使用另一个免费开源的python股票数据接口BaoStock,来下载想要的数据,计算出这只股票的KDJ。

 

首先默认已经安装python,且版本是3.5或者以上。
安装pandas: pip insall pandas
安装numpy: pip install numpy
安装baostock数据接口包:pip installbaostock。

baostock提供免费历史k线的下载,包括前后复权的数据。
如果有问题,请去官网下载再安装:http://www.baostock.com,不需要注册。


安装TA-Lib库 pip install ta-lib(如果安装不成功,可进入“https://www.lfd.uci.edu/~gohlke/pythonlibs/#ta-lib”下载如“TA_Lib‑0.4.17‑cp35‑cp35m‑win32.whl”相对应的版本,使用pip install xx.whl进行本地安装)。

程序首先下载股票上一个交易日之前的日K线行情数据,然后计算上一交易日的KDJ指标

 

import baostock as bs
import pandas as pd
import numpy as np
import talib as ta
import datetime

 

 

stockcodelist =['sh.600000', 'sz.300009', 'sz.300128',

login_result =bs.login(user_id='anonymous', password='123456')
print('login respond error_msg:'+login_result.error_msg)

startdate = '2018-01-01'
today = datetime.datetime.now()
delta = datetime.timedelta(days=1)
#
获取截至上一个交易日的历史行情
predate = today - delta
strpredate = datetime.datetime.strftime(predate, '%Y-%m-%d')

for stockcode in stockcodelist:
###
获取沪深A股行情和估值指标(日频)数据并返回收盘价20日均线 ####
# date 日期
# code 股票代码

# high最高价

# low最低价
# close
收盘价

# preclose 前收盘价
# volume 交易量
# amount 交易额
# adjustflag 复权类型
# turn 换手率
# tradestatus 交易状态
# pctChg 涨跌幅
# peTTM 动态市盈率
# psTTM 市销率
# pcfNcfTTM 市现率
# pbMRQ 市净率
rs = bs.query_history_k_data("%s" % stockcode,
"date,code,close,preclose,volume,amount,adjustflag,turn,tradestatus,pctChg,peTTM,pbMRQ,psTTM,pcfNcfTTM",
start_date=startdate, end_date=strpredate,
frequency="d", adjustflag="2")
print('query_history_k_data respond error_code:' + rs.error_code)
print('query_history_k_data respond error_msg:' + rs.error_msg)

####
打印结果集 ####
result_list = []
while (rs.error_code == '0') &rs.next():
#
获取一条记录,将记录合并在一起
result_list.append(rs.get_row_data())
result = pd.DataFrame(result_list, columns=rs.fields)

closelist = [float(price) for price in list(result['close'])]
highlist =  
[float(price) for price in list(result[high])]

lowlist =  [float(price) for price in list(result[low])]

 

有了最高最低价和收盘价,就可以方便的计算KDJ指标了。

 

你可能感兴趣的:(量化)