Python实现某只股票的MACD、KDJ指标的单双金叉点判定

本文介绍了金叉理论在股票分析中的应用,通过Python使用pandas库处理数据,计算MACD和KDJ指标,并判断金叉情况。数据来源于锐思数据库,最终将分析结果导出为CSV文件,可用于进一步的股票策略检验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

金叉理论介绍

在股票K线图中,短期的收盘价均线向上穿越长期均线即为金叉,但如果长期均线向下或变缓,同时短期均线向上穿越就不能称之为金叉。
对于MACD指标,若差离值线由下向上突破移动平均线,即DIF值前一天小于DEA值,当天大于DEA值,可视为金叉;对于KDJ指标,若K线由下向上突破D线,即K值前一天小于D值,当天大于J值,可视为金叉。

参考链接:baike.baidu.com/item/%E5%9D%87%E7%BA%BF%E9%87%91%E5%8F%89
zhuanlan.zhihu.com/p/110334826#

数据获取

选取某一只股票,在一些常见的数据库(如锐思数据库)中下载该股票各交易日的最高价、最低价、收盘价数据(如下图所示),整理成csv格式文件

在这里插入图片描述

数据分析代码

指标计算代码参考了这位博主首页的两篇相关文章
https://blog.csdn.net/yifengdongying?type=blog

import pandas as pd

'''---- 读入源数据 ----'''
data=pd.read_csv('sourceData.csv',sep=',',encoding='unicode_escape',header='infer')#此处文件名需要根据自己的路径进行修改

'''--- MACD指标计算 ---'''
data['ema12']=data['Clpr'].ewm(span=12).mean()
data['ema26']=data['Clpr'].ewm(span=26).mean()
data['DIFF']=data['ema12']-data['ema26']
data['DEA']=data['DIFF'].ewm(span=9).mean()
data['MACD']=2*(data['DIFF']-data['DEA'])

'''--- KDJ指标计算 ---'''
data['low9']=data['Lopr'].rolling(9).min()
data['high9']=data['Hipr'].rolling(9).max()
data['rsv']=(data['Clpr']-data['low9'])/(data['high9']-data['low9'])
data['K']=data['rsv'].ewm(com=2).mean()
data['D']=data['K'].ewm(com=2).mean()
data['J']=3.0*data['K']-2.0*data['D']

'''--- 金叉情况判断 ---'''
# 创建金叉情况标记列
data['MACD_jincha']='0'
data['KDJ_jincha']='0'
data['MACD_KDJ_jincha']='None'
for i in range(9,len(data)):
    # 从第9条数据开始遍历(前一天开始有kdj值,保持统一)
    # 如果DIFF线上穿DEA线,MACD指标金叉    
    if data['DIFF'][i-1]<data['DEA'][i-1] and data['DIFF'][i]>data['DEA'][i]:
        data['MACD_jincha'][i]='1'
for j in range(9,len(data)):     
    # 从第9条数据开始遍历(前一天开始有kdj值)
    # 如果K线上穿D线,KDJ指标金叉      
    if data['K'][j-1]<data['D'][j-1] and data['K'][j]>data['D'][j]:
        data['KDJ_jincha'][j]='1'
for k in range(9,len(data)):
    # 优先判断双指标金叉,其次判断单指标金叉
    if data['MACD_jincha'][k]=='1' and data['KDJ_jincha'][k]=='1':
        print(data['Date'][k]+'双指标金叉')
        data['MACD_KDJ_jincha'][k]='Double'     
    elif data['MACD_jincha'][k]=='1' or data['KDJ_jincha'][k]=='1':
        #print(data['Date'][k]+'单指标金叉')
        data['MACD_KDJ_jincha'][k]='Single'

#导出结果数据
data.to_csv('resultData.csv') 

结果示例如下。经过在股票软件上观察日K线图,可以做数据分析结果的进一步检验。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ryo_Yuki

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值