Python 实现股票指标计算——RSI

news2024/9/22 17:24:22

RSI - 相对强弱指标

1 公式

1.1 第一种计算公式

假设A为N日(N一般取值为6、14、21)内收盘价的正数之和

B为N日内(N一般取值为6、14、21)收盘价的负数之和乘以(-1)

这样,A和B均为正,将A、B代入RSI计算公式,则

RSI(N) = \frac{A}{A+B}\times 100
1.2 第二种计算公式

RS(相对强度)= N日内收盘价涨数和之均值÷N日内收盘价跌数和之均值
RSI(相对强弱指标)= 100-\frac{100}{1+RS}

2 数据准备

我们以科创50指数 000688 为例,指数开始日期为2019-12-31,数据格式如下:

3 计算过程

3.1 公式1
def calculate_rsi(df: pd.DataFrame, window: int = 14) -> pd.DataFrame:
    """
    计算给定DataFrame中股票的相对强弱指数(Relative Strength Index, RSI)。

    参数
    ----------
    df : pd.DataFrame
        包含股票价格信息的DataFrame,必须包含'date'和'close'两列。
    window : int, optional
        用于计算RSI的周期窗口长度,默认为14天。

    返回值
    -------
    data : pd.DataFrame
        原始DataFrame,附加了名为'rsi'的新列,该列包含了计算出的RSI值。

    """

    # 创建DataFrame的副本,避免修改原始数据
    data = df.copy()
    
    # 确保'date'列是datetime类型,这对于时间序列分析很重要
    data['date'] = pd.to_datetime(data['date'])

    # 计算每日收盘价的变化量
    delta = data['close'].diff()

    # 将变化量分为正收益(gain)和负收益(loss),非正收益设为0,非负收益取相反数
    gain = delta.where(delta > 0, 0)
    loss = -delta.where(delta < 0, 0)

    # 使用滚动窗口计算过去N天的累计收益和累计损失
    gain_sum = gain.rolling(window).sum()
    loss_sum = loss.rolling(window).sum()

    # 计算RSI
    rsi = gain_sum / (gain_sum + loss_sum) * 100

    # 将计算出的RSI值添加到DataFrame中
    data['rsi'] = rsi

    # 返回带有RSI值的DataFrame
    return data
3.2 公式2
def calculate_rsi(df: pd.DataFrame, window: int = 14) -> pd.DataFrame:
    """
    计算给定DataFrame中股票的相对强弱指数(Relative Strength Index, RSI)。

    参数
    ----------
    df : pd.DataFrame
        包含股票价格信息的DataFrame,必须包含'date'和'close'两列。
    window : int, optional
        用于计算RSI的周期窗口长度,默认为14天。

    返回值
    -------
    data : pd.DataFrame
        原始DataFrame,附加了名为'rsi'的新列,该列包含了计算出的RSI值。

    """

    data = df.copy()
    
    # 确保'date'列是datetime类型
    data['date'] = pd.to_datetime(data['date'])

    # 计算每日收盘价变化
    delta = data['close'].diff()

    # 将变化量分为正收益(gain)和负收益(loss)
    gain = delta.clip(lower=0)
    loss = (-delta).clip(lower=0)

    # 计算平均收益和平均损失的EMA
    avg_gain = gain.ewm(com=window-1, min_periods=window).mean()
    avg_loss = loss.ewm(com=window-1, min_periods=window).mean()

    # 避免分母为零的情况,如果avg_loss为零,则设RS为极大值
    rs = avg_gain / avg_loss
    rs = rs.fillna(0)  # 将NaN替换为0
    rs[rs == float('inf')] = 1000000  # 将无穷大替换为极大值

    # 计算RSI
    rsi = 100 - (100 / (1 + rs))

    # 当avg_loss为零时,确保RSI为100
    rsi[avg_loss == 0] = 100

    # 将计算出的RSI值添加到DataFrame中
    data['rsi'] = rsi

    return data

4 注意事项

公式2计算的结果与股票软件上显示的结果一致

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

小红书笔记怎么写才能上热门?

文末领取小红书电商开店运营教程&#xff01; 小红书作为一个拥有亿级用户的社交电商平台&#xff0c;无数人通过这里分享自己的生活点滴和购物心得。 你是不是也想让自己的小红书笔记上热门&#xff0c;获得更多的曝光和关注呢&#xff1f; 今天&#xff0c;我们就来揭秘一…

2024最新MidJourney设计Logo教程+提示词原理

你是否已经看过许多别人分享的 MJ 咒语&#xff0c;却仍无法按照自己的想法画图&#xff1f;通过学习 MJ 的提示词逻辑后&#xff0c;你将能够更好地理解并创作自己的“咒语”。本文将详细拆解使用 MJ 设计 Logo 的逻辑&#xff0c;让你在阅读后即可轻松上手&#xff0c;制作出…

应急靶场(2):Windows Server 2022 - Web1

目录 一、攻击者的shell密码 二、攻击者的IP地址 三、攻击者的隐藏账户名称 四、攻击者挖矿程序的矿池域名(仅域名) 五、有实力的可以尝试着修复漏洞 下载好靶场&#xff08;前来挑战&#xff01;应急响应靶机训练-Web1&#xff09;并搭建好环境&#xff0c;无需密码直接进入靶…

[Spring] Spring Web MVC案例实战

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…

【堆 优先队列 第k大】2551. 将珠子放入背包中

本文涉及知识点 堆 优先队列 第k大 LeetCode2551. 将珠子放入背包中 你有 k 个背包。给你一个下标从 0 开始的整数数组 weights &#xff0c;其中 weights[i] 是第 i 个珠子的重量。同时给你整数 k 。 请你按照如下规则将所有的珠子放进 k 个背包。 没有背包是空的。 如果第…

数据采集监控平台:挖掘数据价值 高效高速生产!

在当今数字化的时代&#xff0c;数据已成为企业非常宝贵的资产之一。然而&#xff0c;要充分发挥数据的潜力&#xff0c;离不开一个强大的数据采集监控平台&#xff0c;尤其是生产制造行业。它不仅是数据的收集者&#xff0c;更是洞察生产的智慧之眼&#xff0c;高效高速处理产…

韦东山嵌入式linux系列-驱动进化之路:总线设备驱动模型-课后作业

在内核源码中搜索 platform_device_register 可以得到很多驱动&#xff0c;选择 一个作为例子&#xff1a; ① 确定它的名字 ② 根据它的名字找到对应的 platform_driver ③ 进入 platform_device_register/platform_driver_register 内部&#xff0c;分析 dev 和 drv 的匹配过…

[WUSTCTF2020]level4题解 入土为安的第三天

二叉树 Practice my Data Structure code..... Typing....Struct.....char....*left....*right............emmmmm...OK! Traversal! Traversal type 1:2f0t02T{hcsiI_SwA__r7Ee} Traversal type 2:20f0Th{2tsIS_icArE}e7__w Traversal type 3: //type3(&x[22]); No w…

Ubuntu/Linux 安装ITKSnap

文章目录 1. 安装ITKSnap1.1 下载后安装 2.进入opt文件夹改名3. 更改启动项4. 创建硬链接5. 添加桌面启动方式6. 即可使用 1. 安装ITKSnap http://www.itksnap.org/pmwiki/pmwiki.php?nMain.HomePage 1.1 下载后安装 找到下载的文件夹&#xff0c;文件夹内打开terminal。复…

Windows系统中MySQL的安装和卸载(详细包含msi和zip下载方式,以及完全卸载方法,易出现问题及解决方案等)

MySQL的安装: 第一种:msi安装(交简单,但是不能自定义安装路径) 下载地址:https://dev.mysql.com/downloads/installer/ 选择历史版本 选择安装版本,这里我选择的是8.0.37的版本,然后点击Download下载离线安装包 如下图即为下载好的版本,双击打开安装 出现如下情况,…

Git操纵本地仓库和远程仓库

git是一个代码托管的平台&#xff0c;我们可以对我们的代码进行分支 推送提交 打标签等等操作&#xff0c;而且git使用过程中也是支持一些linux语言的 比如cd呀 touch mkdir啊等等等 git的具体安装过程就不再赘述 我个人认为 好多东西就是 代码也好 文字 文档 也好&…

Centos7 桌面版安装ToDesk远程控制;linux安装Todesk远程控制;linux远程桌面方案

获取安装包&#xff1a; https://dl.todesk.com/linux/todesk-v4.7.2.0-c7-x86_64.rpm 得到 这个文件就是linux的安装包&#xff0c;后缀名就是rpm&#xff0c;类似windows下的exe 将此文件以你的方式&#xff0c;放到linux中&#xff0c;放哪都行 我使用的FileZila&#xf…

新手教学系列——简单的服务配置项集中管理

前言 在开发和运维过程中&#xff0c;配置管理是一个非常重要但经常被忽视的环节。常用的配置文件格式包括env、ini和yaml等&#xff0c;它们非常适合模块级别的系统配置&#xff0c;尤其是一些敏感信息的配置&#xff0c;例如数据库连接字符串和密码等。但是&#xff0c;对于…

【系统架构设计】数据库系统(一)

数据库系统&#xff08;一&#xff09; 数据库模式与范式数据库的结构与模式数据模型关系代数数据的规范化反规范化 数据库设计事务管理备份与恢复分布式数据库系统数据仓库数据挖掘NoSQL大数据 数据库模式与范式 数据库的结构与模式 数据库技术中采用分级的方法将数据库的结…

释放DOE的能量,快速确定最佳工艺设置,节省时间、成本和资源

您是否希望降低成本、提高生产效率&#xff0c;并最大限度地减少行业对环境的影响&#xff1f; 所有行业&#xff0c;尤其是钢铁、铝、水泥和石化等能源密集型行业&#xff0c;都面临着应对这些挑战的持续压力。供应链压力、可持续发展、严格的监管环境、日益增长的消费者预期…

Transformer中高级位置编码的介绍和比较:Linear Rope、NTK、YaRN、CoPE

在处理诸如文本之类的序列时&#xff0c;排序信息显然是至关重要的。为了结合排序信息而不是将序列视为集合&#xff0c;对位置信息进行编码是至关重要的。位置编码通过为每个位置分配嵌入向量并将其添加到相应的标记表示来实现这一点。绝对和相对位置编码是最常见的两种位置编…

外贸行业汽车销售配件展示企业网站源码系统 带完整的源代码包以及搭建教程

系统概述 随着全球贸易的不断深化&#xff0c;外贸行业对于高效、专业的网站需求日益凸显。特别是对于汽车销售配件企业而言&#xff0c;一个功能全面、展示效果出色的网站源码系统&#xff0c;无疑是企业开拓海外市场、提升品牌形象的关键。本文将详细介绍一款专为外贸行业汽…

【Linux】文件管理常用命令【超详细】

文章目录 预防rm事故-血的教训&#x1f622;1. 使用别名&#xff1a;2. 启用回收站&#xff1a;3. 只读文件系统&#xff1a; 一、文件管理1.1 touch-文件创建1.2 rm-文件删除1.3 mkdir-目录创建1.4 rmdir-目录删除1.5 pwd-显示当前目录1.6 cd-切换当前目录1.7 ls-列出文件和目…

鸿蒙语言基础类库:【@system.device (设备信息)】

设备信息 说明&#xff1a; 从API Version 6开始&#xff0c;该接口不再维护&#xff0c;推荐使用新接口[ohos.deviceInfo]进行设备信息查询。本模块首批接口从API version 3开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import dev…

AI绘画Stable Diffusion 零基础入门 —AI 绘画原理与工具介绍,万字解析AI绘画的使用教程

大家好&#xff0c;我是设计师阿威 想要入门 AI 绘画&#xff0c;首先需要了解它的原理是什么样的。 其实很早就已经有人基于深度学习模型展开了对图像生成的研究了&#xff0c;但在那时&#xff0c;生成的图像分辨率和内容都非常抽象。 直到近两年&#xff0c;AI 产出的图像…