Matplotlib应用-股票技术分析实战

MACD

Moving Average Convergence/Divergence,意为异同移动平均线。它刻画的是股价变化的速度

MACD算法

指标含义公式
短期EMA短期收盘价指数移动均线(12天)前一日EMA(12)11/13 +今日收盘价2/13
长期EMA长期收盘价指数移动均线(26天)前一日EMA(26)25/27 +今日收盘价2/27
DIF短期EMA与长期EMA差值EMA(12)-EMA(26)
DEADIF线的M日指数移动均钱前一日DEA8/10 +今日DEA2/10
MACDDIF线与DEA线的差*2(DIF-DEA)*2

MACD实现

ewm
Pandas中指数加权移动窗口函数采用ewm函数+mean()快捷计算MACD
bar
Matplotlib柱状图函数,高效绘制MACD中的柱状

class TestMACD(TestCase):
    def cal_macd(self,df,fastperiod=12,slowperiod=26,signalperiod=9):
        ewma12 = df['close'].ewm(span=fastperiod,adjust=False).mean()
        ewma26 = df['close'].ewm(span=slowperiod,adjust=False).mean()
        df['dif'] = ewma12 - ewma26
        df['dea'] = df['dif'].ewm(span=signalperiod,adjust=False).mean()
        df['bar'] = (df['dif'] - df['dea']) * 2
        return df

    def test_MACD(self):
        file_name = "D:\lhjytest\demo.csv"
        df = pd.read_csv(file_name)
        df.columns = ["stock_id","date","close","open","high","low","volume"]
        df = df[["date","close","open","high","low","volume"]]
        df["date"] = pd.to_datetime(df["date"])

        df_macd = self.cal_macd(df)
        print(df_macd)

        plt.figure()
        df_macd['dea'].plot(color="red",label='dea')
        df_macd['dif'].plot(color="blue",label='dif')
        plt.legend(loc='best')

        pos_bar = []
        pos_index = []
        neg_bar = []
        neg_index = []

        for index,row in df_macd.iterrows():
            if(row['bar'] > 0) :
                pos_bar.append(row['bar'])
                pos_index.append(index)
            else:
                neg_bar.append(row['bar'])
                neg_index.append(index)

        # 大于0用红色表示
        plt.bar(pos_index,pos_bar,width=0.5,color='red')
        # 小于等于0则用绿色表示
        plt.bar(neg_index,neg_bar,width=0.5,color='green')

        major_index = df_macd.index[df_macd.index]
        major_xtics = df_macd['date'][df_macd.index]
        plt.xticks(major_index,major_xtics)
        plt.setp(plt.gca().get_xticklabels(),rotation=30)

        plt.grid(linestyle='-.')
        plt.title('000001平安银行MACD图')
        plt.rcParams['axes.unicode_minus'] = False
        plt.rcParams['font.sans-serif'] = ['SimHei']
        plt.show()

image.png

KDJ

中文名叫随机指数。通过价格波动的真实波幅来反映价格走势的强弱和超买超卖现象,在价格尚未上升或下降之前发出买卖信号的一种技术分析指标,适用于短期行情走势分析

KDJ算法

指标含义公式
RSV未成熟随机指标值(Cn-Ln)/(Hn-Ln)x100(N日)
K当天K值2/3x前一日K值+1/3x当日RSV
D当天D值2/3x前一日D值+1/3x当日K值
J当天J值3当日K值-2当日D值
备注若无前一日K 值与D值,则可分别用50来代替

KDJ实现

rolling
Pandas中移动窗口函数
每个窗口都是指定的固定大小,快捷计算Ln与Hn
expanding
Pandas中扩展窗口函数
只设置最小的观测值数量,不固定窗口大小,实现累计计算,即不断扩展,连用expanding().max()->创新高

class TestKDJ(TestCase):
    def cal_kdj(self,df):
        low_list = df['low'].rolling(9,min_periods=9).min()
        low_list.fillna(value=df['low'].expanding().min(),inplace=True)
        high_list = df['high'].rolling(9,min_periods=9).max()
        high_list.fillna(value=df['high'].expanding().max(),inplace=True)
        rsv = (df['close'] - low_list) / (high_list - low_list) * 100
        df['k'] = pd.DataFrame(rsv).ewm(com=2).mean()
        df['d'] = df['k'].ewm(com=2).mean()
        df['j'] = 3 * df['k'] - 2 * df['d']
        return df

    def test_KDJ(self):
        file_name = "D:\lhjytest\demo.csv"
        df = pd.read_csv(file_name)
        df.columns = ["stock_id","date","close","open","high","low","volume"]
        df = df[["date","close","open","high","low","volume"]]
        df["date"] = pd.to_datetime(df["date"])

        df_kdj = self.cal_kdj(df)
        print(df_kdj)

        plt.figure()
        df_kdj['k'].plot(color="red",label='k')
        df_kdj['d'].plot(color="yellow",label='d')
        df_kdj['j'].plot(color="blue",label='j')
        plt.legend(loc='best')

        major_index = df_kdj.index[df_kdj.index]
        major_xtics = df_kdj['date'][df_kdj.index]
        plt.xticks(major_index,major_xtics)
        plt.setp(plt.gca().get_xticklabels(),rotation=30)

image.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/358305.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

qt5-入门-组件布局

参考: Qt学习之路_w3cschool 本地环境: win10专业版,64位 组件布局 绝对定位:给出确切的坐标值和尺寸,缺点是当用户改变窗口大小时,需要写函数响应变化(或者禁止用户改变大小) 布…

openGauss学习笔记-210 openGauss 数据库运维-常见故障定位案例-谓词下推引起的查询报错

文章目录 openGauss学习笔记-210 openGauss 数据库运维-常见故障定位案例-谓词下推引起的查询报错210.1 谓词下推引起的查询报错210.1.1 问题现象210.1.2 原因分析210.1.3 处理办法 openGauss学习笔记-210 openGauss 数据库运维-常见故障定位案例-谓词下推引起的查询报错 210.…

Likeshop社区团购源码系统-社区团购更加便捷

一、什么是社区团购? 社区团购是一种基于社区的一种团购模式,依托于社区居民的消费需求,由社区团长组织发起,通过集中采购、批量销售的方式,为社区居民提供优质、优惠的商品。这种模式既满足了消费者对于优惠、便捷的…

Unity 观察者模式(实例详解)

文章目录 简介示例1 - 简单的文本更新通知示例2 - 多观察者监听游戏分数变化示例3 - 事件系统实现观察者模式示例4 - 泛型观察者和可序列化的事件系统示例5 - 使用C#委托简化版 简介 在Unity中实现观察者模式,我们可以创建一个Subject(目标/主题&#x…

Redis -- 背景知识

目录 特性 为啥Redis快? 应用场景 Redis不能做什么? Redis是在内存中存储数据的一个中间件,用作为数据库,也可以用作为缓存,在分布式中有很高的威望。 特性 In-memory data structures:在内存中存储数据key-val…

微信开放平台第三方授权(第三篇)-获取auth_access_token

1.AuthAcsessToken的获取 继续上文,上文提到了想要发送消息,就要获取授权单独的authtoken,通过这个token才能调用微信发送消息接口。有六个步骤,少一步也获取不到这个authaccesstoken。 Token生成说明 | 微信开放文档 这里需要…

SV-8003V 网络寻呼话筒

SV-8003V是深圳锐科达电子有限公司的一款桌面式对讲主机SV-8003V同样作为广播对讲系统的核心组成部分,集成有全区广播、分区广播、单点呼叫、点对点对讲、以及监听等功能。SV-8003V使用铝合金拉丝面板,并配有高性能的鹅颈麦克风以及高保真的全频喇叭&…

Linux(CentOS7)与用户电脑传输文件(sz与rz)云与云(scp)

rz和sz是Linux/Unix同Windows进行Zmodem文件传输的命令工具 rz和sz中的z为Zmodem文件传输协议的首字母 s为send发送 r为receive接收,都是相对与Linux来看的接收和发送 Linux发送文件到电脑: sz命令 把文件发送到Windows sz 文件直接按回车就可以选择发送…

亚信安慧AntDB:AntDB-M元数据锁(五)

IS_DESTROYED: 标识锁对象将被释放。 HAS_OBTRUSIVE:标识锁对象下有obtrusive锁,新的锁申请必须进入慢速申请路径,释放锁时,也要先加锁以保护已授予锁链表。 HAS_SLOW_PATH: 标识锁对象下是否有unobtrusive锁。 5.3.2 干扰型(o…

船舶船体结构型面/曲面精度一致性三维检测海船提取结构几何参数

船舶船体结构型面三维扫描测量是一种高科技的测量方法,它利用三维激光扫描仪对船体表面进行高精度测量,以获取船体结构型面的三维数据。这种测量方法在船舶设计和制造中具有重要意义,可以为船舶工程师提供精确的数据支持,帮助他们…

《HTML 简易速速上手小册》第8章:HTML 表单高级技术(2024 最新版)

文章目录 8.1 数据收集与处理8.1.1 基础知识8.1.2 案例 1:创建一个注册表单8.1.3 案例 2:创建一个调查问卷表单8.1.4 案例 3:创建一个动态添加输入字段的表单 8.2 定制化表单元素8.2.1 基础知识8.2.2 案例 1:创建一个带有定制选择…

【Java】Lombok的使用

一、Lombok是什么? Lombok是一个Java库,能自动插入编辑器并构建工具,简化Java开发。通过添加注解的方式,不需要为类编写getter或eques方法,同时可以自动化日志变量🚀 在我们封装一个类时,最常用…

JMeter 性能测试基本过程及示例

jmeter 为性能测试提供了一下特色: jmeter 可以对测试静态资源(例如 js、html 等)以及动态资源(例如 php、jsp、ajax 等等)进行性能测试 jmeter 可以挖掘出系统最大能处理的并发用户数 jmeter 提供了一系列各种形式的…

【UE 材质】闪电材质

效果 步骤 1. 新建一个材质这里命名为“M_Lighting” 打开“M_Lighting”,设置混合模式为半透明,着色模型为无光照 在材质图表中添加如下节点 其中,纹理采样节点的纹理是一个线条 此时预览窗口中效果如文章开头所示。

基于链表实现贪吃蛇游戏

本文中,我们将使用链表和一些Win32 API的知识来实现贪吃蛇小游戏 一、功能 (1)游戏载入界面 (2)地图的绘制 (3)蛇身的移动和变长 (4)食物的生成 (5&…

数学建模学习笔记||灰色关联分析

灰色系统 信息绝对透明的是白色系统,信息绝对秘密的是黑色系统,灰色系统介于两者之间 关联分析 即系统的分析因素 包含多种因素的系统中,哪些因素是主要的,哪些因素是次要的,哪些因素影响大,哪些因素影响小…

vue3+typescript+Vite基础简单项目

gitee地址 数据大屏 菜单管理

【Java反序列化】Shiro-550漏洞分析笔记

目录 前言 一、漏洞原理 二、Shiro环境搭建 三、Shiro-550漏洞分析 解密分析 加密分析 四、URLDNS 链 前言 shiro-550反序列化漏洞大约在2016年就被披露了,在上学时期也分析过,最近在学CC链时有用到这个漏洞,重新分析下并做个笔记&…

希尔伯特变换的在信号解调时的示例

1.希尔伯特变换的应用场景 希尔伯特变换,在数学上的含义是清晰的。它是一个数字移相器,可以把通过它的任何一个信号相移-90度。这个数学工具在信号解调时,会有非常有用的特性出现。可以看示例: 解释一下: 1.最上面的…

Nuget包缓存存放位置迁移

本文介绍了如何通过环境变量修改Nuget包缓存的存放位置。 一、背景 默认情况下,NuGet会将项目中使用的包缓存到C盘,随着项目开发积累nuget包越来越多,这会逐渐挤占大量C盘空间,所以我们可以将nuget包缓存位置指定到其他盘中存放…