python股票量化交易(2)---震荡类指标KDJ

简介: 汝之命,未知若何?即命当荣显,常做落寞想;即时当顺利,常做拂逆想;即眼前足食,常作贫窭想;即人相爱敬,常作恐惧想;即家世望重,常作卑下想;即学问颇优,常作浅陋想。

什么是KDJ


说到KDJ,我们首先需要提到威廉指数,该指标的计算首先选定一个特定的时间跨度,比如14天,然后找出这一特定时间的最高价和最低价,构成一个价格变化区间,而后分析这一时间跨度最后一个时间点的收盘价与期间最高价和最低价的相对位置,以此来衡量市场的超买或超卖现象。


而KDJ指标最早是由芝加哥期货交易商George Lane提出的KD指标,该指标还被称为随机震荡指标。与威廉指数不同的是,该指标在收盘价与最高价和最低价的相对位置的比值上,融合了移动平均的思想,用更多的信息来捕捉市场的超买与超卖。顾名思义,KDJ就是比威廉指数多了一个J线,进一步提高了数据的准确度。


KDJ的计算公式


关于KDJ的计算,我们可以分为4个步骤:


(1)首先,需要计算RSV值,它的公式如下:


RSV=(第n天的收盘价-最近n天内的最低价)÷(最近n天内的最高价-最近n天内的最低价)*100


这个公式中,n为时间跨度,具体应用之时,视你需要观察的数据时间长度而定。而RSV取值范围在0~100之间,取值越大说明收盘价在价格区间中的相对位置越高,市场可能出现超买的现象,反之则出现超卖的现象。


(2)计算K值,K值由RSV值的指数移动平均(EMA)计算得到,即前一日的K值和当前RSV值经过一定权重调整后相加所得,计算公式如下:


K值=2/3前一日的K值+1/3当日RSV值


(3)计算D值,D值由K值的指数移动平均计算而来,即前一日的D值和当期K值经过一定权重调整后相加得到,计算公式如下:


D值=2/3前一日D值+1/3当日K值


(4)计算J值,J值是KD的辅助指标,进一步反映了K指标和D指标的乘离程度,计算公式如下:


J值=3K值-2D值


计算KDJ的值


这里,我们选择时间跨度为9日,也就是和之前讲解的均线一样。但和均线不同的是,前8日依旧有RSV值,但无效,第9日以及之后的数据才有效。


根据上面的公式,我们首先需要计算最近9天内的最低价以及最近9天内的最高价。这里,我们依旧使用前一章开头获取的歌尔股份k.xlsx文件中的股票数据。具体代码如下:

low_list = df["close"].rolling(9, min_periods=1).min()
high_list = df["high"].rolling(9, min_periods=1).max()


得到这2个值后,我们就可以计算RSV值,具体的代码如下所示(套用公式1):

rsv = (df["close"] - low_list) / (high_list - low_list) * 100

得到RSV值之后,我们可以分别根据上面的公式推导出KDJ的值,具体代码如下所示:

df["K"] = rsv.ewm(com=2, adjust=False).mean()
df["D"] = df["K"].ewm(com=2, adjust=False).mean()
df["J"] = 3 * df["K"] - 2 * df["D"]


我们首先来分析一下ewm方法,其具体的定义如下:

DataFrame.ewm(self, com=None, span=None, halflife=None, alpha=None, min_periods=0, adjust=True, ignore_na=False, axis=0)

该方法为指数加权函数,当adjust为False时,是以递归方式计算加权平均值,公式如下所示:

当com为2时,则a=1/3,套用上图第2个公式,得出K值为(2/3)前一日的K值+1/3当日的RSV值,所以使用ewm就可以计算出K值。


而D值同样如此,只是RSV换成了K值。至于最后的J值,是最简单的,直接套用即可。


绘制KDJ曲线


既然KDJ的值都被计算出来了,那么曲线自然可以直接绘制出来,我们直接将3值代入到绘图库的方法中即可,具体代码如下所示(完整代码):

import matplotlib.pyplot as plt
plt.figure(figsize=(12, 8))
df = pd.read_excel("歌尔股份k.xlsx")
low_list = df["close"].rolling(9, min_periods=1).min()
high_list = df["high"].rolling(9, min_periods=1).max()
rsv = (df["close"] - low_list) / (high_list - low_list) * 100
df["K"] = rsv.ewm(com=2, adjust=False).mean()
df["D"] = df["K"].ewm(com=2, adjust=False).mean()
df["J"] = 3 * df["K"] - 2 * df["D"]
plt.plot(df["date"], df["K"], label ="K")
plt.plot(df["date"], df["D"], label ="D")
plt.plot(df["date"], df["J"], label ="J")
plt.legend()
plt.show()


运行之后,显示的KDJ曲线如下:

KDJ指标我们就讲到这里,下一篇介绍MACD指标图绘制。

相关文章
|
4月前
|
数据可视化 数据挖掘 数据安全/隐私保护
Python实现时间序列动量策略:波动率标准化让量化交易收益更平稳
时间序列动量策略(TSMOM)是一种基于资产价格趋势的量化交易方法,通过建立多头或空头头寸捕捉市场惯性。然而,传统TSMOM策略因风险敞口不稳定而面临收益波动问题。波动率调整技术通过动态调节头寸规模,维持恒定风险水平,优化了策略表现。本文系统分析了波动率调整TSMOM的原理、实施步骤及优势,强调其在现代量化投资中的重要地位,并探讨关键参数设定与实际应用考量,为投资者提供更平稳的风险管理体验。
151 4
Python实现时间序列动量策略:波动率标准化让量化交易收益更平稳
|
5月前
|
人工智能 Python
[oeasy]python083_类_对象_成员方法_method_函数_function_isinstance
本文介绍了Python中类、对象、成员方法及函数的概念。通过超市商品分类的例子,形象地解释了“类型”的概念,如整型(int)和字符串(str)是两种不同的数据类型。整型对象支持数字求和,字符串对象支持拼接。使用`isinstance`函数可以判断对象是否属于特定类型,例如判断变量是否为整型。此外,还探讨了面向对象编程(OOP)与面向过程编程的区别,并简要介绍了`type`和`help`函数的用法。最后总结指出,不同类型的对象有不同的运算和方法,如字符串有`find`和`index`方法,而整型没有。更多内容可参考文末提供的蓝桥、GitHub和Gitee链接。
115 11
|
8月前
|
测试技术 Python
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
325 31
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
|
6月前
|
存储 C语言 Python
[oeasy]python077_int类型怎么用_整数运算_integer_进制转化_int类
本文主要讲解了Python中`int`类型的应用与特性。首先回顾了`int`词根的溯源,探讨了整型变量的概念及命名规则(如匈牙利命名法)。接着分析了整型变量在内存中的存储位置和地址,并通过`type()`和`id()`函数验证其类型和地址。还介绍了整型变量的运算功能,以及如何通过`int()`函数将字符串转化为整数,支持不同进制间的转换(如二进制转十进制)。此外,文章提及了关键字`del`的使用场景,对比了Python与C语言中`int`的区别,并总结了整型与字符串类型的差异,为后续深入学习奠定基础。
103 1
|
7月前
|
存储 数据采集 数据库
Python爬虫实战:股票分时数据抓取与存储
Python爬虫实战:股票分时数据抓取与存储
|
9月前
|
数据采集 存储 XML
python实战——使用代理IP批量获取手机类电商数据
本文介绍了如何使用代理IP批量获取华为荣耀Magic7 Pro手机在电商网站的商品数据,包括名称、价格、销量和用户评价等。通过Python实现自动化采集,并存储到本地文件中。使用青果网络的代理IP服务,可以提高数据采集的安全性和效率,确保数据的多样性和准确性。文中详细描述了准备工作、API鉴权、代理授权及获取接口的过程,并提供了代码示例,帮助读者快速上手。手机数据来源为京东(item.jd.com),代理IP资源来自青果网络(qg.net)。
|
11月前
|
数据采集 人工智能 自然语言处理
AI Agent 金融助理0-1 Tutorial 利用Python实时查询股票API的FinanceAgent框架构建股票(美股/A股/港股) AI Finance Agent
金融领域Finance AI Agents方面的工作,发现很多行业需求和用户输入的 query都是和查询股价/行情/指数/财报汇总/金融理财建议相关。如果需要准确的 金融实时数据就不能只依赖LLM 来生成了。常规的方案包括 RAG (包括调用API )再把对应数据和prompt 一起拼接送给大模型来做文本生成。稳定的一些商业机构的金融数据API基本都是收费的,如果是以科研和demo性质有一些开放爬虫API可以使用。这里主要介绍一下 FinanceAgent,github地址 https://github.com/AI-Hub-Admin/FinanceAgent
|
11月前
|
Java C++ Python
Python基础---类
【10月更文挑战第10天】Python类的定义
152 2
|
11月前
|
索引 Python
python-类属性操作
【10月更文挑战第11天】 python类属性操作列举
100 1
|
11月前
|
机器学习/深度学习 数据挖掘 Serverless
手把手教你全面评估机器学习模型性能:从选择正确评价指标到使用Python与Scikit-learn进行实战演练的详细指南
【10月更文挑战第10天】评估机器学习模型性能是开发流程的关键,涉及准确性、可解释性、运行速度等多方面考量。不同任务(如分类、回归)采用不同评价指标,如准确率、F1分数、MSE等。示例代码展示了使用Scikit-learn库评估逻辑回归模型的过程,包括数据准备、模型训练、性能评估及交叉验证。
506 1

热门文章

最新文章

推荐镜像

更多