量化投资实战(二)之KDJ交易策略

2024-01-10 12:30

本文主要是介绍量化投资实战(二)之KDJ交易策略,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

点赞、关注再看,养成良好习惯
Life is short, U need Python
量化投资实战系列,不断更新中


1. KDJ指标概述

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

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

2. KDJ指标原理

随机指标KDJ是以最高价、最低价及收盘价为基本数据进行计算,得出的K值、D值和J值分别在指标的坐标上形成的一个点,连接无数个这样的点位,就形成一个完整的、能反映价格波动趋势的KDJ指标。它主要是利用价格波动的真实波幅来反映价格走势的强弱和超买超卖现象,在价格尚未上升或下降之前发出买卖信号的一种技术工具。它在设计过程中主要是研究最高价、最低价和收盘价之间的关系,同时也融合了动量观念、强弱指标和移动平均线的一些优点,因此,能够比较迅速、快捷、直观地研判行情。由于KDJ线本质上是一个随机波动的观念,故其对于掌握中短期行情走势比较准确。

3. KDJ指标公式

(1)RSV(未成熟随机指标)计算

在这里插入图片描述
其中,原始参数值 n = 9 n = 9 n=9

  • RSV的K线图解释
    在这里插入图片描述
  • RSV的Python代码实现
# 导入包(三剑客)
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt# 中文设置
plt.rcParams['font.sans-serif'] = ['SimHei']  # 读取标普500的指数数据
GSPC = pd.read_csv('GSPC.csv',index_col='Date')
GSPC = GSPC.iloc[:,1:]
GSPC.index = pd.to_datetime(GSPC.index)# 提取收盘价、最高价、最低价数据
close_price = GSPC.Close
high_price = GSPC.High
low_price = GSPC.Low# 获取日期数据
date = close_price.index.to_series()
ndate = len(date)# 定义初始变量最高价High,取值为0
periodHigh = pd.Series(np.zeros(ndate-8),index=date.index[8:])
# 定义初始变量最低价Low,取值为0
periodLow = pd.Series(np.zeros(ndate-8),index=date.index[8:])
# 定义初始变量RSV,取值为0
RSV = pd.Series(np.zeros(ndate-8),index=date.index[8:])# 计算RSV的值
for j in range(8,ndate):period = date[j-8:j+1]i = date[j]periodHigh[i] = high_price[period].max()periodLow[i] = low_price[period].min()RSV[i] = 100*(close_price[i]-periodLow[i])/(periodHigh[i]-periodLow[i])periodHigh.name = 'periodHigh'periodLow.name = 'periodLow'RSV.name = 'RSV'# 绘制标普500指数收盘价曲线图和RSV曲线图
close_price_1 = close_price['2015']
RSV_1 = RSV['2015']
Cl_RSV = pd.DataFrame([close_price_1,RSV_1]).transpose()
Cl_RSV.plot(subplots=True,title='未成熟随机指标RSV')plt.show()

结果如图所示:
在这里插入图片描述
从上可以归纳出一个规律,当市场处于连续上涨行期时,未成熟随机指标 RSV 取值也逐渐增大,而且可能在较多日期中取值为 100;当市场处于连续下跌行期时,RSV 取值可能在较多日期中取值为0。当 RSV 连续多期取值 100 或者 0 时,RSV 则会出现所谓“钝化”的现象,例如,当收盘价在上涨行情高位变化时,RSV 在一段时间内取值均为 100,不随收盘价的变化而波动,则失去了捕捉收盘价变化的作用。此外,从上图中可以观察到,RSV 值的波动幅度较大,也可能会造成“假信号”。其中一种可能状况是,在上涨行期中收盘价上涨幅度稍微增大,则可能造成 RSV 取值过大,进而释放出市场处于“超买”行期的“假信号”。

(2)K、D 指标计算

为了解决 RSV 波动幅度较大的问题,引入 K 指标,它是对 RSV 值进行平滑得到的结果。
K 值由前一日的 K 值和当期 RSV 值经过一定权重调整后相加而得到,一般来说,K 值的计算为:
在这里插入图片描述
其中, K t K_t Kt为第 t t t K K K 值, K t − 1 K_{t-1} Kt1为第 t − 1 t-1 t1 K K K值,RSV t _t t 表示第 t t t日的 RSV 值。
D 值由前一日的 D 值和当期 K 值经过一定权重调整后相加而得到,一般来说,D 值的计算为:
在这里插入图片描述
其中, D t D_t Dt为第 t 日 D 值, D t − 1 D_{t-1} Dt1为第 t-1 日 D 值, K t K_t Kt 表示第 t 日的 K 值。

此外,在计算第1期的 K 值和 D 值时,如果没有指定,则 K 值和 D 值默认取值为50。在K值和D值的求解过程中,平滑权重 2/3 和 1/3 是较为常用的权重,这两个权重也可以根据股价走势的特点进行适当修改。

K 1 K_1 K1 = 50, D 1 D_1 D1= 50,通过递归和迭代,可以推出K值是由未成熟随机指标 RSV 通过指数移动平均而得到。同理,D 值是 K 值的指数移动平均数(Exponential Moving Average, EMA)。

  • Python计算 K 值和 D 值
详见资源包!

结果如图所示:
在这里插入图片描述

(3)J 指标计算

J 指标是 KD 指标的辅助指标,进一步反映了 K 指标和 D 指标的偏离程度。第 t 日 J 值计算公式为:
在这里插入图片描述
其中, J t J_t Jt 为第 t 日 J 值, K t K_t Kt 为第 t 日 K 值, D t D_t Dt 为第 t 日 D 值。

  • Python计算 J 值
# 计算J值:J = 3K-2D
JValue = 3*KValue - 2*DValue
JValue.name = 'JValue'

4. KDJ指标简要分析

不再多说了,直接上代码分析吧!

详见资源包!

结果如图所示:
在这里插入图片描述
KDJ 指标的四种线图与收盘价曲线走势大致相同,在 KDJ 指标的四种线图中,RSV线的波动幅度较大,K 线与 D 线的走势很类似,J 线与 K 线、D 线走势相比波动略大。在四种指标的取值上,RSV、K 值和 D 值的取值范围都在 0~100 之间;而 J 值的取值可以超过 100,也可以低于0,例如,从 J 线图中可以看出J值的取值范围为 -20~120。

5. KDJ指标交易策略

【1】在 KDJ 指标的取值上,K 值与 D 值的取值范围是 0~100。

  • 依据K值与D值可以划分出超买、超卖区,一般而言,K值或者D值取值在80以上为超买区;K值或者D值取值在20以下为超卖区。

【2】对于J 值,当J值大于 100,可以视为超买区,当J值小于 0,视为超卖区。

【3】此外,在 K 线、D 线的交叉情况也可以释放出买入、卖出信号。

  • 当K线由下向上穿过 D 线时,即出现所谓“黄金交叉”现象,隐含股票价格上涨的动量较大,释放出买入信号;当 K 线由上向下穿过 D 线时,出现“死亡交叉”现象,股票有下跌的趋势,释放出卖出信号。

6. KDJ 指标交易实测

【1】KD 指标交易策略

将 KDJ 指标运用于标普500中,通过 K 线、D 线分别捕捉超买点和超卖点,构造交易策略函数,计算 KD 指标交易策略的收益率,再对 KD 指标交易策略进行评价。

  • 计算 KD 指标释放的买卖信号
详见资源包!
  • 定义交易策略函数
详见资源包!
  • KD 指标交易策略回测及评价
详见资源包!

结果如图所示:
在这里插入图片描述
汉代散文家桓宽曾提出:“明者因时而变,知者随事而制”。在金融市场投资实战中,更是如此。对比上图可以看出,KD 指标在2014年上半年绩效表现优秀,但在2014年下半年和2015年表现较差。在实际运用 KD 指标时,除了谨记指标有一定的适用情境以外,更要因时制宜,才能趋利避害。

【2】KDJ 指标交易策略

J 线综合了 K 线和 D 线的信息,对于市场超买、超卖行情的判断也有一定的作用。J 值取值范围不局限于0~100之间,但 J 值低于 0 或者高于 100 出现的时机不多,当 J 值低于 0 时或者高于100 时,预示着市场多空双方的力量可能会出现一些微妙的变化,该指标往往会有较高的可靠程度。接下来,在 KD 指标的基础上,加入 J 指标交易策略,修改买卖点交易信号,并进行交易后测。

详见资源包!

结果如图所示:
在这里插入图片描述
从上图可以看出,KDJ 指标和KD指标交易策差别并没体现出来(有待进一步探讨及设置新的投资策略)。其实,如果仔细观察2014年10月10日之前的绩效,反而KD指标交易策略比KDJ指标交易策略要好的(当然这与对应策略买卖点的策略值的设置有关,感兴趣的博友不妨编个程序遍历跑一下,看看能不能选到最优的策略值)!

7. 展望

下一步,博主将继续探讨KDJ指标的其它交易策略(比如,KDJ策略的‘金叉’和‘死叉’等策略),敬请期待中!

参考资料:
  • 蔡立耑. 量化投资以Python为工具[M]. 北京:电子工业出版社,2017.
资源包下载:
  • 链 接:https://pan.baidu.com/s/1C590b-uAJ9UWxizlFE1fTA
  • 提取码:1234

  • 写作不易,切勿白剽
  • 博友们的点赞关注就是对博主坚持写作的最大鼓励
  • 持续更新,未完待续…

这篇关于量化投资实战(二)之KDJ交易策略的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/qq_33499889/article/details/105767719
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/590815

相关文章

SpringBoot如何通过Map实现策略模式

《SpringBoot如何通过Map实现策略模式》策略模式是一种行为设计模式,它允许在运行时选择算法的行为,在Spring框架中,我们可以利用@Resource注解和Map集合来优雅地实现策略模式,这... 目录前言底层机制解析Spring的集合类型自动装配@Resource注解的行为实现原理使用直接使用M

Python实战之屏幕录制功能的实现

《Python实战之屏幕录制功能的实现》屏幕录制,即屏幕捕获,是指将计算机屏幕上的活动记录下来,生成视频文件,本文主要为大家介绍了如何使用Python实现这一功能,希望对大家有所帮助... 目录屏幕录制原理图像捕获音频捕获编码压缩输出保存完整的屏幕录制工具高级功能实时预览增加水印多平台支持屏幕录制原理屏幕

最新Spring Security实战教程之Spring Security安全框架指南

《最新SpringSecurity实战教程之SpringSecurity安全框架指南》SpringSecurity是Spring生态系统中的核心组件,提供认证、授权和防护机制,以保护应用免受各种安... 目录前言什么是Spring Security?同类框架对比Spring Security典型应用场景传统

最新Spring Security实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)

《最新SpringSecurity实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)》本章节介绍了如何通过SpringSecurity实现从配置自定义登录页面、表单登录处理逻辑的配置,并简单模拟... 目录前言改造准备开始登录页改造自定义用户名密码登陆成功失败跳转问题自定义登出前后端分离适配方案结语前言

OpenManus本地部署实战亲测有效完全免费(最新推荐)

《OpenManus本地部署实战亲测有效完全免费(最新推荐)》文章介绍了如何在本地部署OpenManus大语言模型,包括环境搭建、LLM编程接口配置和测试步骤,本文给大家讲解的非常详细,感兴趣的朋友一... 目录1.概况2.环境搭建2.1安装miniconda或者anaconda2.2 LLM编程接口配置2

基于Canvas的Html5多时区动态时钟实战代码

《基于Canvas的Html5多时区动态时钟实战代码》:本文主要介绍了如何使用Canvas在HTML5上实现一个多时区动态时钟的web展示,通过Canvas的API,可以绘制出6个不同城市的时钟,并且这些时钟可以动态转动,每个时钟上都会标注出对应的24小时制时间,详细内容请阅读本文,希望能对你有所帮助...

Redis 内存淘汰策略深度解析(最新推荐)

《Redis内存淘汰策略深度解析(最新推荐)》本文详细探讨了Redis的内存淘汰策略、实现原理、适用场景及最佳实践,介绍了八种内存淘汰策略,包括noeviction、LRU、LFU、TTL、Rand... 目录一、 内存淘汰策略概述二、内存淘汰策略详解2.1 ​noeviction(不淘汰)​2.2 ​LR

Spring AI与DeepSeek实战一之快速打造智能对话应用

《SpringAI与DeepSeek实战一之快速打造智能对话应用》本文详细介绍了如何通过SpringAI框架集成DeepSeek大模型,实现普通对话和流式对话功能,步骤包括申请API-KEY、项目搭... 目录一、概述二、申请DeepSeek的API-KEY三、项目搭建3.1. 开发环境要求3.2. mav

Python与DeepSeek的深度融合实战

《Python与DeepSeek的深度融合实战》Python作为最受欢迎的编程语言之一,以其简洁易读的语法、丰富的库和广泛的应用场景,成为了无数开发者的首选,而DeepSeek,作为人工智能领域的新星... 目录一、python与DeepSeek的结合优势二、模型训练1. 数据准备2. 模型架构与参数设置3

Java实战之利用POI生成Excel图表

《Java实战之利用POI生成Excel图表》ApachePOI是Java生态中处理Office文档的核心工具,这篇文章主要为大家详细介绍了如何在Excel中创建折线图,柱状图,饼图等常见图表,需要的... 目录一、环境配置与依赖管理二、数据源准备与工作表构建三、图表生成核心步骤1. 折线图(Line Ch