金叉理论介绍
在股票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线图,可以做数据分析结果的进一步检验。