Python 实现 CR 指标计算 (带状能量线):股票技术分析的利器系列(13)

Python 实现 CR 指标计算 (带状能量线):股票技术分析的利器系列(13)

    • 介绍
      • 算法公式
    • 代码
      • rolling函数介绍
      • 核心代码
        • 计算MID
        • 计算CR
        • 计算移动平均
    • 完整代码


介绍

CR指标,又称带状能量线,通过计算股价的动能和变化率,帮助投资者判断市场趋势的强弱及转折点。

先看看官方介绍:

CR (带状能量线)
用法
1.CR>400时,其10日平均线向下滑落,视为卖出信号;CR<40买进;
2.CR 由高点下滑至其四条平均线下方时,股价容易形成短期底部;
3.CR 由下往上连续突破其四条平均线时,为强势买进点;
4.CR 除了预测价格的外,最大的作用在于预测时间;
5.BR、AR、CR、VR 四者合为一组指标群,须综合搭配使用。

算法公式

MID:=REF(HIGH+LOW,1)/2;
CR:SUM(MAX(0,HIGH-MID),N)/SUM(MAX(0,MID-LOW),N)*100;
MA1:REF(MA(CR,M1),1+M1/2.5);
MA2:REF(MA(CR,M2),1+M2/2.5);
MA3:REF(MA(CR,M3),1+M3/2.5);
MA4:REF(MA(CR,M4),1+M4/2.5);
优势详细说明
简单易懂的买卖信号CR指标提供了明确的买入和卖出信号,基于CR值的高低和其与平均线的关系进行判断,使得投资者能够快速做出决策。
辅助短期底部判断当CR从高点下滑至其平均线下方时,提供了短期底部的判断依据,有助于把握低点买入机会。
强势买入点的识别当CR连续突破其平均线时,标志着市场的强势,为买入提供了信号。
预测时间的能力CR不仅能预测价格趋势,还能较准确地预测时间,这对于投资者的持仓策略和交易时机的把握十分重要。
与其他指标综合使用CR与BR、AR、VR等指标组合使用,可以提高分析的综合性和准确性,为投资决策提供更多参考。
劣势详细说明
可能存在滞后性CR指标的买卖信号可能存在一定的滞后性,导致无法及时捕捉到市场变化。
假信号的产生由于市场波动的复杂性,CR指标也可能产生假信号,导致错误的交易决策。
依赖其他指标的配合CR指标作为单一指标,可能无法全面反映市场情况,需要结合其他指标进行综合分析,增加了分析的复杂度。
参数设置的依赖性CR指标的有效性和适用性与参数设置密切相关,如果参数设置不当,可能会影响指标的准确性和可靠性。

代码

rolling函数介绍

rolling 函数通常与其他函数(如 meansumstd 等)一起使用,以计算滚动统计量,例如滚动均值、滚动总和等。

以下是 rolling 函数的基本语法:

DataFrame.rolling(window, min_periods=None, center=False, win_type=None, on=None, axis=0, closed=None)
  • window: 用于计算统计量的窗口大小。
  • min_periods: 每个窗口最少需要的非空观测值数量。
  • center: 确定窗口是否居中,默认为 False
  • win_type: 窗口类型,例如 Noneboxcartriang 等,默认为 None
  • on: 在数据帧中执行滚动操作的列,默认为 None,表示对整个数据帧执行操作。
  • axis: 执行滚动操作的轴,默认为 0,表示按列执行操作。
  • closed: 确定窗口的哪一端是闭合的,默认为 None

核心代码

计算MID
# 计算MID
df['MID'] = (df['HIGH'].shift(1) + df['LOW'].shift(1)) / 2
  1. df['HIGH'].shift(1):这一部分是将“HIGH”列中的数据向下移动一行。由于正在计算每一行的MID,所以需要使用前一天的高价。

  2. df['LOW'].shift(1):这一部分是将“LOW”列中的数据向下移动一行。同样,需要使用前一天的低价。

  3. (df['HIGH'].shift(1) + df['LOW'].shift(1)):这一部分将前一天的高价和低价相加,得到前一天的价格总和。

  4. / 2:最后,将前一天的高低价总和除以2,以计算得到前一天的中间价(MID)。

计算CR
# 计算CR
df['HIGH_MINUS_MID'] = df['HIGH'] - df['MID']
df['MID_MINUS_LOW'] = df['MID'] - df['LOW']
df['CR'] = df['HIGH_MINUS_MID'].clip(lower=0).rolling(window=N).sum() / df['MID_MINUS_LOW'].clip(lower=0).rolling(window=N).sum() * 100
  1. df['HIGH_MINUS_MID'] = df['HIGH'] - df['MID']: 这一行创建了一个新的列 'HIGH_MINUS_MID',其中存储了每一天的高价与MID(前一天的(HIGH + LOW)/ 2)之间的差值。这个差值表示了价格上涨的部分。

  2. df['MID_MINUS_LOW'] = df['MID'] - df['LOW']: 这一行创建了另一个新的列 'MID_MINUS_LOW',其中存储了每一天的MID与低价之间的差值。这个差值表示了价格下跌的部分。

  3. df['CR'] = df['HIGH_MINUS_MID'].clip(lower=0).rolling(window=N).sum() / df['MID_MINUS_LOW'].clip(lower=0).rolling(window=N).sum() * 100: 这一行是CR指标的计算过程。首先,它计算了一个时间窗口内(长度为N)高价与MID之间的正差总和,然后除以同样时间窗口内MID与低价之间的正差总和。这里使用了 .clip(lower=0) 来将负值截断为0,因为只需要关心价格的上涨部分。最后,乘以100,得到百分比值。

计算移动平均
# 计算移动平均
df['MA1'] = df['CR'].rolling(window=M1).mean().shift(1 + int(M1/2.5))
df['MA2'] = df['CR'].rolling(window=M2).mean().shift(1 + int(M2/2.5))
df['MA3'] = df['CR'].rolling(window=M3).mean().shift(1 + int(M3/2.5))
df['MA4'] = df['CR'].rolling(window=M4).mean().shift(1 + int(M4/2.5))

完整代码

import pandas as pdimport a_get_datadata = {'CLOSE': 填每日收盘的数据,'HIGH': 填每日最高的数据,'LOW': 填每日最低的数据'OPEN': 填每日开盘的数据'VOL': 填每日交易量的数据
}df = pd.DataFrame(data)N = 26
M1 = 10
M2 = 20
M3 = 40
M4 = 62# 计算MID
df['MID'] = (df['HIGH'].shift(1) + df['LOW'].shift(1)) / 2# 计算CR
df['HIGH_MINUS_MID'] = df['HIGH'] - df['MID']
df['MID_MINUS_LOW'] = df['MID'] - df['LOW']
df['CR'] = df['HIGH_MINUS_MID'].clip(lower=0).rolling(window=N).sum() / df['MID_MINUS_LOW'].clip(lower=0).rolling(window=N).sum() * 100# 计算移动平均
df['MA1'] = df['CR'].rolling(window=M1).mean().shift(1 + int(M1 / 2.5))
df['MA2'] = df['CR'].rolling(window=M2).mean().shift(1 + int(M2 / 2.5))
df['MA3'] = df['CR'].rolling(window=M3).mean().shift(1 + int(M3 / 2.5))
df['MA4'] = df['CR'].rolling(window=M4).mean().shift(1 + int(M4 / 2.5))# 删除中间计算的列
df.drop(['MID', 'HIGH_MINUS_MID', 'MID_MINUS_LOW', "HIGH", "HIGH", "LOW", "OPEN", "VOL"], axis=1, inplace=True)print(df)

在这里插入图片描述

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

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

相关文章

MySQL的21个SQL经验

1. 写完SQL先explain查看执行计划(SQL性能优化) 日常开发写SQL的时候,尽量养成这个好习惯呀:写完SQL后,用explain分析一下,尤其注意走不走索引。 explain select userid,name,age from user where userid =10086 or age =18;2、操作delete或者update语句,加个limit(S…

BTC网络 vs ETH网络

设计理念 BTC 网络 比特币是一种数字货币&#xff0c;旨在作为一种去中心化的、不受政府或金融机构控制的电子货币。其主要目标是实现安全的价值传输和储存&#xff0c;比特币的设计强调去中心化和抗审查。 ETH 网络 以太坊是一个智能合约平台&#xff0c;旨在支持分散的应…

计网Lesson15 - TCP可靠传输

文章目录 1. 停止等待ARQ协议2. 连续ARQ协议与滑动窗口协议 1. 停止等待ARQ协议 ARQ&#xff08;Automatic Repeat–reQuest&#xff09;自动重传请求 几种重传情况 发送端丢失 发送方过久没有接收到接收方的确认报&#xff0c;这种情况会触发超时重传机制&#xff0c;发送方…

瑞_Redis_Redis客户端

文章目录 1 Redis客户端1.1 Redis命令行客户端1.2 图形化桌面客户端1.2.1 资源准备1.2.2 安装1.2.3 建立连接 &#x1f64a; 前言&#xff1a;本文章为瑞_系列专栏之《Redis》的基础篇的Redis客户端章节。由于博主是从B站黑马程序员的《Redis》学习其相关知识&#xff0c;所以本…

适配器模式(Adapter Pattern) C++

上一节&#xff1a;原型模式&#xff08;Prototype Pattern&#xff09; C 文章目录 0.理论1.组件2.类型3.什么时候使用 1.实践1.基础接口和类2.类适配器实现3.对象适配器实现 0.理论 适配器模式&#xff08;Adapter Pattern&#xff09;是一种结构型设计模式&#xff0c;它允…

通过Power automate上传文件到SharePoint

上传文件到SharePoint 背景过程Apps开发准备Flow开发SharePoint数据库测试 背景 我们通常都可以通过一些form表单直接上传文件&#xff0c;但是有些时候我们需要对文件名字等信息做一些处理。这个时候我们就需要将文件的内容json流化&#xff0c;然后在流中还原回来。 过程 …

OpenHarmony分布式购物车案例展示~

简介 分布式购物车demo 模拟的是我们购物时参加满减活动&#xff0c;进行拼单的场景&#xff1b;实现两人拼单时&#xff0c;其他一人添加商品到购物车&#xff0c;另外一人购物车列表能同步更新&#xff0c;且在购物车列表页面结算时&#xff0c;某一人结算对方也能实时知道结…

STM32存储左右互搏 QSPI总线FATS文件读写FLASH W25QXX

STM32存储左右互搏 QSPI总线FATS文件读写FLASH W25QXX FLASH是常用的一种非易失存储单元&#xff0c;W25QXX系列Flash有不同容量的型号&#xff0c;如W25Q64的容量为64Mbit&#xff0c;也就是8MByte。这里介绍STM32CUBEIDE开发平台HAL库Quad SPI总线实现FATS文件操作W25Q各型号…

第12章-生成树协议

1. STP产生背景 1.1 桥接网络&#xff1a;网桥 1.2 交换机网络 1.3 解决方案 2. STP生成树协议 2.1 概念 2.2 BPDU(Bridge Protocol Data Unit) 2.3 选举机制&#xff08;网桥&#xff1a;一进一出&#xff09; 2.4 例题 2.5 端口状态 2.6 STP计时器 2.7 STP的问题 …

家装服务管理:Java技术的创新应用

✍✍计算机毕业编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java、…

C++ //练习 9.16 重写上一题的程序,比较一个list<int>中的元素和一个vector<int>中的元素。

C Primer&#xff08;第5版&#xff09; 练习 9.16 练习 9.16 重写上一题的程序&#xff0c;比较一个list中的元素和一个vector中的元素。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块 /**********************************…

C++ //练习 9.14 编写程序,将一个list中的char*指针(指向C风格字符串)元素赋值给一个vector中的string。

C Primer&#xff08;第5版&#xff09; 练习 9.14 练习 9.14 编写程序&#xff0c;将一个list中的char*指针&#xff08;指向C风格字符串&#xff09;元素赋值给一个vector中的string。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim…

基于 ResNet50和 SVM + 决策树的人脸口罩检测

欢迎收看&#xff0c;这篇文章是关于我如何使用 ResNet50作为特征提取器来构建掩码检测&#xff0c;然后使用支持向量机(SVM) 决策树和叠加集成方法作为分类器的一个快速解释。 为了向研究人员致敬&#xff0c;这个应用程序是基于研究论文&#xff0c;题目是“在2019冠状病毒…

智慧公厕:让城市更智慧、更环保

在现代社会&#xff0c;智慧公厕作为城市管理的重要一环&#xff0c;是智慧城市的重要组成部分&#xff0c;其建设的价值十出突出&#xff0c;是公共厕所信息化升级改造的核心方案。如智慧公厕源头厂家广州中期科技有限公司&#xff0c;所自主研发的智慧公厕整体解决方案&#…

最新Sora人工智能视频资源网址分享

1&#xff0c;了解什么是Sora * 什么是 OpenAI Sora&#xff1f; Sora 是由 OpenAI 开发的文本到视频模型。它可以按照用户的提示生成长达一分钟的高质量和一致的视频。 * 如何使用 OpenAI Sora 模型&#xff1f; 目前&#xff0c;OpenAI Sora 模型处于内测阶段&#xff0c;并将…

继电器测试中需要注意的安全事项有哪些?

继电器广泛应用于电气控制系统中的开关元件&#xff0c;其主要功能是在输入信号的控制下实现输出电路的断开或闭合。在继电器测试过程中&#xff0c;为了确保测试的准确性和安全性&#xff0c;需要遵循一定的安全事项。以下是在进行继电器测试时需要注意的安全事项&#xff1a;…

消息中间件篇之Kafka-高可用机制

一、 集群模式 1. Kafka的服务器端由被称为Broker的服务进程构成&#xff0c;即一个Kafka集群由多个Broker组成。 2. 这样如果集群中某一台机器宕机&#xff0c;其他机器上的 Broker 也依然能够对外提供服务。这其实就是 Kafka 提供高可用的手段之一。 二、分区备份机制 1. 一个…

LeetCode56题:合并区间(python3)

我们用数组 merged 存储最终的答案。 首先&#xff0c;我们将列表中的区间按照左端点升序排序。然后我们将第一个区间加入 merged 数组中&#xff0c;并按顺序依次考虑之后的每个区间&#xff1a; 如果当前区间的左端点在数组 merged 中最后一个区间的右端点之后&#xff0c;那…

mac flutter 配置

下载Flutter Sdk 直接访问官网无法下载&#xff0c;需要访问中国镜像下载 Flutter SDK 归档列表 - Flutter 中文文档 - Flutter 中文开发者网站 - Flutter Start building Flutter Android apps on macOS - Flutter 中文文档 - Flutter 中文开发者网站 - Flutter 下载后解压…

万户OA ezoffice text2Html接口存在任意文件读取漏洞

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…