python股票量化交易(4)---金叉与死叉

article/2025/9/19 7:33:17

纯是济世之心,则为端。苟有一毫媚世之心,即为曲。纯是爱人之心,则为端。有一毫愤世之心,即为曲。纯是敬人之心,则为端。有一毫玩世之心,即为曲。

文章目录

  • 什么是金叉与死叉
  • 金叉与死叉的运算
  • 绘制金叉与死叉

什么是金叉与死叉

在前文中,我们提到了移动平均线。要了解金叉,我们需要了解另一个概念,移动平均线交叉。它是指不同周期的移动平均线随着交易时间的推进出现相互交叉的现象。

最常见的比如我们绘制的5日均线与10日均线,如果它们交叉,就称为移动平均线交叉现象。而金叉指的是,当短周期的均线从长期均线下方,向上穿越较长周期的均线,形成的交点。

如果出现这种金叉现象,可视为市场由空头转为多头的指标(看涨);反之,当短周期均线由上向下跌破长周期均线时,我们称为死叉,可视为市场由多头转空头的指标(看跌)。

我们先来看一张图,如下图所示:
在这里插入图片描述
上图也就第1篇博文的K线图与均线图,其中橙色为10日均线,蓝色为5日均线。其中,1标记的交叉点是短周期5日均线向上突破长周期10日均线,也就是看涨(金叉)。2标记的交叉点是10日长周期均线向下跌破5日短周期均线,就会看跌(死叉)。

不过,从歌尔股份这个图来看,这1,2交叉点均只符合2日行情。反而,第3个交叉点确实连涨了很多天。所以,对于股票来说,单独看这种金叉死叉参考意义不大,需要结合其他指标进行观察。

金叉与死叉的运算

这里,我们需要重新获取一个股票的数据,毕竟对于均线来说,一个月的数据参考意义不大,我们需要获取至少3个月的股票数据,具体代码如下:

import akshare as ak
df = ak.stock_zh_a_daily(symbol="sz002241", start_date="20200101", end_date="20210115",adjust="qfq")
df.to_excel("歌尔股份year.xlsx")

这里,我们获取歌尔股份3个月的数据,并绘制其20日与30日均线,具体代码如下:

df = pd.read_excel("歌尔股份year.xlsx")
df['date'] = pd.to_datetime(df['date'])
df['date'] = df['date'].apply(lambda x: x.strftime('%Y-%m-%d'))
df["SMA20"]=df["close"].rolling(20).mean()
df["SMA30"]=df["close"].rolling(30).mean()
fig = plt.figure(figsize=(12, 8))
ax = fig.add_subplot(111)
ax.plot(df["date"],df["SMA20"])
ax.plot(df["date"],df["SMA30"])
ax.xaxis.set_major_locator(ticker.MaxNLocator(20))
def format_date(x, pos=None):if x < 0 or x > len(df['date']) - 1:return ''return df['date'][int(x)]
ax.xaxis.set_major_formatter(ticker.FuncFormatter(format_date))
plt.setp(plt.gca().get_xticklabels(), rotation=45, horizontalalignment='right')
plt.show()

运行之后,显示的效果图如下所示:
在这里插入图片描述
如上图所示,一般来说,这种图看着非常费劲,毕竟没有给你标记交叉点。如果交叉点非常多的话,自己去找往往非常耗时,为了让自己炒股的图更加的直观,我们需要标记交叉点。不过,标记之前,我们需要找到交叉点的位置。

代码如下所示:

diff=np.sign(df["SMA20"]-df["SMA30"])

sign()是Python的Numpy中的取数字符号(数字前的正负号)的函数。观察上图你就会发现,当SMA20在SMA30上方时,差值为正,反之为负。

对于相减后得到的序列diff使用DataFrame.shift()函数向右平移1个数值得到一个新的序列,再将这个序列相减后取符号,就可以得到2条均线的交叉信号。当符号为负,就是死叉,当符号为正,就是金叉。对应的代码如下所示:

signal=np.sign(diff-diff.shift(1))
down_cross=df[signal<0]
up_cross=df[signal>0]

绘制金叉与死叉

下面,我们来绘制金叉与死叉,具体代码如下所示:

#标记金叉
for key, val in df.items():for index, today in up_cross.iterrows():x_posit = df.index.get_loc(index-1)ax.annotate("{}\n{}".format("金叉",today["date"]), xy=(x_posit, today["SMA20"]),xytext=(-30,-up_cross["SMA20"].mean()+100), xycoords="data",fontsize=18, textcoords="offset points", arrowprops=dict(arrowstyle="simple", color="r"))
#标记死叉
for key, val in df.items():for index, today in down_cross.iterrows():x_posit = df.index.get_loc(index-1)ax.annotate("{}\n{}".format("死叉",today["date"]), xy=(x_posit, today["SMA20"]),xytext=(-30,-down_cross["SMA20"].mean()-100), xycoords="data",fontsize=18, textcoords="offset points", arrowprops=dict(arrowstyle="simple", color="g"))

这里我们通过annotate辅助标记图像上的交叉点,具体的代码就是遍历刚才的分类交叉点,然后分别绘制出来。

完整的代码如下所示:

import matplotlib.pyplot as plt
import pandas as pd
import matplotlib.ticker as ticker
import numpy as npdf = pd.read_excel("歌尔股份year.xlsx")
df['date'] = pd.to_datetime(df['date'])
df['date'] = df['date'].apply(lambda x: x.strftime('%Y-%m-%d'))
df["SMA20"] = df["close"].rolling(20).mean()
df["SMA30"] = df["close"].rolling(30).mean()
diff = np.sign(df["SMA20"] - df["SMA30"])
signal = np.sign(diff - diff.shift(1))
down_cross = df[signal < 0]
up_cross = df[signal > 0]
fig = plt.figure(figsize=(12, 8))
ax = fig.add_subplot(111)
plt.rcParams['font.sans-serif'] = ['SimHei']
ax.plot(df["date"], df["SMA20"])
ax.plot(df["date"], df["SMA30"])
for key, val in df.items():for index, today in up_cross.iterrows():x_posit = df.index.get_loc(index-1)ax.annotate("{}\n{}".format("金叉",today["date"]), xy=(x_posit, today["SMA20"]),xytext=(-30,-up_cross["SMA20"].mean()+100), xycoords="data",fontsize=18, textcoords="offset points", arrowprops=dict(arrowstyle="simple", color="r"))for key, val in df.items():for index, today in down_cross.iterrows():x_posit = df.index.get_loc(index-1)ax.annotate("{}\n{}".format("死叉",today["date"]), xy=(x_posit, today["SMA20"]),xytext=(-30,-down_cross["SMA20"].mean()-100), xycoords="data",fontsize=18, textcoords="offset points", arrowprops=dict(arrowstyle="simple", color="g"))
ax.xaxis.set_major_locator(ticker.MaxNLocator(20))def format_date(x, pos=None):if x < 0 or x > len(df['date']) - 1:return ''return df['date'][int(x)]ax.xaxis.set_major_formatter(ticker.FuncFormatter(format_date))
plt.setp(plt.gca().get_xticklabels(), rotation=45, horizontalalignment='right')
plt.show()

运行之后,显示的效果如下图所示:
在这里插入图片描述
细心的读者肯定发现,我们获取时间时,是将索引向前移动了一位(index-1),这是因为我们为了方便计算金叉与死叉,使用了函数shift向右平移了1个数值,为了让箭头与交叉点对应,我们需要反过来移回时间点。(因为三个月数据的交叉点太多,所以这里我们只用了后半部分均线)

金叉与死叉我们就讲解到这里,下一篇我们介绍股价跳空缺口可视化。


http://chatgpt.dhexx.cn/article/cXlRCwEi.shtml

相关文章

量化交易——双均线策略(金叉死叉)

一、双均线概念 均线&#xff1a;对于每一个交易日&#xff0c;都可以计算出前N天的移动平均值&#xff0c;然后把这些平均值连起来&#xff0c;成为一条线&#xff0c;就叫做N日移动平均线。移动平均线常用线有5日、10日、30日、60日、120日的指标。 5日和10日的是短线操作参照…

什么是金叉、死叉

转载自&#xff1a;http://blog.sina.com.cn/s/blog_1578c31fd0102wuxu.html 均线系统最基本最简单第一大战法就是“金叉做多&#xff0c;死叉做空”&#xff0c;它是趋势发生转变的重要信号。金叉也称“黄金交叉”&#xff0c;就是一条短期均线成功上穿另一条长期均线&#xf…

“鬼影”浅析 - 反病毒,信息安全,网络安全,反木马,病毒资讯平台,安全解决方案,电脑使用技巧,杀毒软件交流,anti-virus,民间反病毒联盟

访问原文 这个鬼影病毒相信大家都比较熟悉&#xff0c;但是最近似乎那个什么XX工作室已经宣布停止开发了&#xff0c;所以逐渐淡出的人们的视线&#xff0c;但是这个病毒的技术含量比较高&#xff0c;值得去学习…… 鬼影主体:WMPLAYER.EXE MD5:f377e0f7c8f1a37cd5c92cf7aea3c8…

写计算机病毒吗,会写计算机病毒很牛吗

满意答案 djipuh90 2016.02.11 采纳率&#xff1a;52% 等级&#xff1a;12 已帮助&#xff1a;8216人 先假设你说的病毒是os系统病毒&#xff0c;以windows系统为例 类似熊猫烧香这种层次的病毒&#xff0c;大概只能算是非常非常普通的&#xff0c;技术上也没有什么特别之处…

鬼影3分析笔记

这是学习笔记&#xff0c;供自己再次调试回忆&#xff0c;别人看没什么价值&#xff0c;因为写的太乱了。而且有些点自己也没理清 前面是wowocock老师的文档 首先根据教程了解到感染好mbr之后存在磁盘最后的区段的信息有 1.ProtectMode Code是Hook了OsLoader.exe之后获得控制…

鬼影病毒分析报告

鬼影病毒分析报告 一、 鬼影病毒概述 这是一个***下载器&#xff0c;使用了ring3恢复内核钩子、感染磁盘引导区&#xff08;MBR&#xff09;、多种方法结束杀毒软件等 技术自启动并对抗杀毒软件。完全感染后&#xff0c;是一个看不到可疑文件、没有启动项、普通重装系统也无法解…

用友与鬼影病毒

昨天一客户打电话&#xff0c;说软件无法登陆。 上门查看现象如下&#xff1a; 用友服务无法启动&#xff0c;双击启动&#xff0c;报错&#xff1a;本地计算机上的用友通服务启动后又停止了。一些服务自动停止&#xff0c;如果它们没有什么可做的&#xff0c;例如性能和日志警…

鬼影病毒

鬼影病毒是指寄生在磁盘 主引导记录&#xff08;MBR&#xff09;&#xff0c;即使格式化重装系统&#xff0c;也无法清除的病毒。 2010年3月15日&#xff0c;国内某安全中心发现一种被命名为“鬼影”的电脑病毒&#xff0c;由于该病毒成功运行后&#xff0c;在进程中、系统启动…

鬼影病毒6.0分析

原理图 文件名功能1001.exe主模块camhgzsswk.sys释放模块p2phook.sys释放模块的克隆p2pc.ini攻击模块配置文件safemon.dll注入攻击模块beep.sys持久化攻击模块 主模块1001.exe [1]创建用户mima1&#xff0c;运行ipconfig进行掩饰。 [2]释放病毒驱动sys文件。 [3]将病毒驱动注…

鬼影病毒和浏览器锁狼狈为奸,用户浏览器遭强行劫持

鬼影病毒和浏览器锁狼狈为奸&#xff0c;用户浏览器遭强行劫持 据金山毒霸安全实验室监测&#xff0c;发现鬼影病毒变种再次高发&#xff0c;其中一个伪装成阿里旺旺的变种感染量就达1.6万台/天。中毒电脑桌面出现多个图标&#xff0c;浏览器被锁定为go2000.com或soolaa.com&am…

新鬼影病毒

今天和明天是最后两天宿舍有空调的日子啦,暑假宿舍没空调啊,悲催T__T 好吧,今天是最精华的部分啦对于鬼影3的分析,剩下的都是浮云啦,alg.exe不准备分析了,能用OD调试的货.分析起来只是时间问题.但是MBR和之后的保护模式的代码就不一样啦同学们,纯静态分析,伤不起啊,各种硬编码,…

股票量化分析指标公式是什么?

股票量化分析指标公式是什么&#xff1f;其公式为&#xff1a;量比现成交总手/(过去5日平均每分钟成交量当日累计开市时间)。 股票量化分析指标API调用流程&#xff08;部分&#xff09; “股票量化分析指标”是指可以用具体数据反映的指标&#xff0c;比如成交量、市盈率和日…

基于macd、kdj、ma技术指标分析股票多空方向——应用开发4 分析技术指标一系列形态结果

接上一节&#xff0c;我们计算获取了技术指标的结果total_df&#xff0c;结果如下图 我们需要显示股票最近10天的分析结果&#xff0c;对此我们只需要截取total_df前12天数据就可以了。 #获取前12天的数据 total_dftotal_df.iloc[-12:,:] total_df 对应列的数字0&#xff5e;9…

波段炒股看什么指标最准,怎么才能把股票波段做好?

波段炒股看什么指标最准&#xff0c;怎么才能把股票波段做好&#xff1f;股票有不少盈利方式&#xff0c;可是这样的盈利方式&#xff0c;你会吗&#xff1f;做波段盈利的好处在哪里呢&#xff1f; 股票做波段赢利率&#xff0c;针对股票市场的波段操作特点&#xff0c;波段操作…

基于macd、kdj、ma技术指标分析股票多空方向——应用开发3 计算股票相关技术指标数据

接上一节&#xff0c;我们获取了000001.SZ股票过去一年的历史数据stock_df&#xff0c;接下来我们就计算技术指标 所用包 pandas_ta import pandas_ta as ta 关于pandas_ta 可以在GitHub - twopirllc/pandas-ta: Technical Analysis Indicators - Pandas TA is an easy to …

股票 - - 常用指标【下】

股票 - - 常用指标【下】 接上一篇文章,文章地址&#xff1a;八、巴菲特最看重的指标1. 简介 九、快速读懂股票的估值1.前言2.市盈率3.知识点 十、筹码分布 - - 一个一用就上瘾的指标1.一个关于筹码的故事2.关于筹码的形态单峰密集状态双峰密集状态多峰密集形态 3.上述三种形态…

常用技术指标之一文读懂KDJ指标

什么是KDJ指标&#xff1f; KDJ中文名又叫随机指标&#xff0c;英文名叫Stochastic oscillator&#xff0c;由乔治莱恩&#xff08;George Lane&#xff09;于20世纪50年代首创&#xff0c;最早用于期货市场。KDJ指标能比较迅速、直观地研判行情&#xff0c;主要用于分析中短期…

史上最全股票指标图文详解(原创)

炒股要把风险放在第一位,盈利放在第二位。 1、成交量(VOL)指标: 定义:股市中的成交量,是指股票或者大盘当日成交量的总手数。成交量指标一般是用柱状图来表示。左面的坐标值与柱子的横向对应处,就是当日当时的成交总手。如当天收盘价高于当天开盘价,成交柱呈红色;…

期货投资心得

期货的K线是什么 K线就是股票期货某个时间段的价格趋势&#xff0c;有四个数据构成&#xff0c;一个是开盘价&#xff0c;收盘价&#xff0c;最高价&#xff0c;最低价。其中k线红色时表示&#xff0c;收盘价高于收盘价&#xff1b;其中k线绿色时表示&#xff0c;收盘价低于收…

量化分析(8)——唐安奇通道

唐安奇通道和布林通道差不多&#xff0c;都是判断超买和超卖的工具&#xff0c;我还是喜欢rsi强度来判断超买和超卖&#xff0c;不过这二者可以相互印证一下。这里简单的画一下图&#xff0c;介绍一下。 # -*- coding: utf-8 -*- """ Created on Thu Oct 19 11…