Python 实现 CCI 指标计算:股票技术分析的利器系列(8)

Python 实现 CCI 指标计算:股票技术分析的利器系列(8)

    • 介绍
      • 算法解释
    • 代码
      • rolling函数介绍
      • 核心代码
        • 计算 CCI
          • apply 函数
          • abs 函数
    • 完整代码


介绍

CCI指标的数值波动通常在一个区间内,常见的情况是在-100到+100之间。当CCI超过+100时,通常表示价格处于超买状态,可能会出现回调或下跌的趋势;当CCI低于-100时,通常表示价格处于超卖状态,可能会出现反弹或上涨的趋势。因此,CCI可以帮助交易者确认价格的转折点,并作为买入或卖出的参考依据。

先看看官方介绍:

CCI(商品路径指标)
用法
1.CCI 为正值时,视为多头市场;为负值时,视为空头市场;
2.常态行情时,CCI 波动于±100 的间;强势行情,CCI 会超出±100 ;
3.CCI>100 时,买进,直到CCI<100 时,卖出;
4.CCI<-100 时,放空,直到CCI>-100 时,回补。

算法解释

TYP:=(HIGH+LOW+CLOSE)/3;
CCI:(TYP-MA(TYP,N))/(0.015*AVEDEV(TYP,N));
  1. 计算TYP(典型价格):

    • TYP 是指通过将最高价(HIGH)、最低价(LOW)和收盘价(CLOSE)相加,然后除以3得到的值。这个值代表了一定时间段内的典型价格。
  2. 计算CCI(商品通道指数):

    • 首先,从TYP序列中减去TYP的N期简单移动平均(MA(TYP, N)),其中N是指定的周期数,通常是20。
    • 接着,将差值除以一个常数(0.015)与TYP的N期平均绝对偏差(AVEDEV(TYP, N))的乘积。
    • 平均绝对偏差是指TYP序列中每个数据点与序列的平均值的绝对差的平均值。
    • 最终得到的值就是CCI指标,用来衡量价格相对于其平均价格的差异程度。

这个指标主要用于判断市场是否处于超买或超卖状态。CCI越高,说明价格偏离其平均值越多,可能意味着市场处于超买状态;而CCI越低,可能意味着市场处于超卖状态。

代码

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

核心代码

计算 CCI
# 计算 CCI
def calculate_CCI(data, n):typ = (data['HIGH'] + data['LOW'] + data['CLOSE']) / 3typ_ma = typ.rolling(window=n).mean()mean_deviation = typ.rolling(window=n).apply(lambda x: (x - x.mean()).abs().mean())cci = (typ - typ_ma) / (0.015 * mean_deviation)return cci
apply 函数

apply函数是pandas库中的一个重要函数,它能够将指定的函数应用到DataFrame或Series的行或列上。apply函数的灵活性使得我们能够对数据进行各种自定义的处理和计算。

DataFrame.apply(func, axis=0, raw=False, result_type=None, args=(), **kwds)
Series.apply(func, convert_dtype=True, args=())
  • func:要应用的函数,可以是一个Python函数、lambda函数或者其他可调用的对象。
  • axis:指定函数是沿着DataFrame的行(axis=0)还是列(axis=1)进行应用,默认是沿着列方向。
  • raw:布尔值,表示是否将整行或整列的数据传递给函数,默认为False,表示传递的是每个元素。
  • result_type:结果的数据类型,默认为None,表示返回结果的数据类型与输入的数据类型相同;如果指定为’expand’,则返回一个DataFrame;如果指定为’reduce’,则返回一个Series。
  • args:要传递给函数的其他位置参数。

apply函数能够接受的函数有很多种,包括lambda函数、自定义函数、numpy函数等。通常情况下,我们会使用lambda函数或者自定义函数来对数据进行处理,然后通过apply函数将其应用到DataFrame或Series上。

下面是一个示例,演示如何使用apply函数将一个自定义函数应用到DataFrame的列上:

import pandas as pd# 自定义函数,用于计算平方
def square(x):return x ** 2# 创建DataFrame
df = pd.DataFrame({'A': [1, 2, 3, 4, 5], 'B': [6, 7, 8, 9, 10]})# 将自定义函数应用到DataFrame的每一列上
result = df.apply(square)
print(result)
abs 函数

abs() 函数是 Python 的内置函数之一,用于返回指定数字的绝对值。

在数学上,一个数的绝对值是该数到零的距离,因此无论该数是正数还是负数,它的绝对值都是非负数。

abs() 函数接受一个参数,并返回该参数的绝对值。如果参数是整数或浮点数,则返回相应的数值的绝对值;如果参数是复数,则返回该复数的模。

下面是一个简单的示例:

# 整数的绝对值
print(abs(-5))  # 输出:5# 浮点数的绝对值
print(abs(-3.14))  # 输出:3.14# 复数的模
print(abs(3 + 4j))  # 输出:5.0

完整代码

import pandas as pdimport a_get_datadata = {'CLOSE': 填每日收盘的数据,'HIGH': 填每日最高的数据,'LOW': 填每日最低的数据
}# 计算 CCI
def calculate_CCI(data, n):typ = (data['HIGH'] + data['LOW'] + data['CLOSE']) / 3typ_ma = typ.rolling(window=n).mean()mean_deviation = typ.rolling(window=n).apply(lambda x: (x - x.mean()).abs().mean())cci = (typ - typ_ma) / (0.015 * mean_deviation)return ccidf = pd.DataFrame(data)n = 14# 计算CCI指标
df["CCI"] = calculate_CCI(df, n)
print(df)

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习 LangChain 的 LCEL

学习 LangChain 的 LCEL 0. 引言1. 基本示例&#xff1a;提示模型输出解析器​1-1. Prompt​1-2. Model1-3. Output parser1-4. Entire Pipeline 0. 引言 LCEL(LangChain Expression Language) 可以轻松地从基本组件构建复杂的链&#xff0c;并支持开箱即用的功能&#xff0c;…

基于springboot+vue的精准扶贫管理系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

Spring Bean 相关注解

目录 Autowired Component,Repository,Service, Controller RestController Scope Configuration Autowired 自动导入对象到类中&#xff0c;被注入进的类同样要被 Spring 容器管理比如&#xff1a;Service 类注入到 Controller 类中。 Service public class UserService …

「Qt Widget中文示例指南」如何实现文档查看器?(一)

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写&#xff0c;所有平台无差别运行&#xff0c;更提供了几乎所有开发过程中需要用到的工具。如今&#xff0c;Qt已被运用于超过70个行业、数千家企业&#xff0c;支持数百万设备及应用。 文档查看器是一个显…

IDEA配置有道翻译插件

目录 安装Translation插件有道云配置翻译APIIDEA配置有道翻译引擎 关于IDEA Translation插件中有道智云&#xff08;有道翻译&#xff09;应用ID&#xff0c;密钥申请教程 安装Translation插件 File -> Settings ->Plugins ->搜索Translation ->insatll 有道云…

Ubuntu上Jenkins自动化部署Gitee上SpringBoot项目

文章目录 安装安装JDK安装Maven安装GitNodeJS安装&#xff08;可选&#xff09;安装Jenkins 配置Jenkins为Jenkins更换插件源设置jenkins时区安装插件全局工具配置添加Gitee凭证Gitee项目配置 部署后端1.新建任务2.配置源码管理3.构建触发器4.到Gitee中添加WebHook5.构建环境6.…

RISC-V指令集之RV32C

RISC-V指令集之RV32C 1 指令格式2 RV32C的指令 本文属于《 RISC-V指令集基础系列教程》之一&#xff0c;欢迎查看其它文章。 1 指令格式 RV32C&#xff08;压缩指令&#xff09;的意义&#xff1a; RV32C基于32位寄存器的RISC-V架构&#xff0c;同时增加了压缩指令集&#xf…

RV64 - 64位地址指令

RV64 - 64位地址指令 1 RV64G介绍2 RV64G增加的指令 本文属于《 RISC-V指令集基础系列教程》之一&#xff0c;欢迎查看其它文章。 1 RV64G介绍 RV32I RV32M RV32A RV32F RV32D RV32G&#xff0c;那么RV32G 指令的64 位版本 – RV64G 指令&#xff0c;其示意图&#xff0…

300分钟吃透分布式缓存-08讲:MC系统架构是如何布局的?

系统架构 我们来看一下 Mc 的系统架构。 如下图所示&#xff0c;Mc 的系统架构主要包括网络处理模块、多线程处理模块、哈希表、LRU、slab 内存分配模块 5 部分。Mc 基于 Libevent 实现了网络处理模块&#xff0c;通过多线程并发处理用户请求&#xff1b;基于哈希表对 key 进…

ETH Denver见!来参加DAO的领袖和爱好者的活动吧

我们将和 DAOBase 在美国丹佛举办 DAO 领袖和爱好者的盛会——“去中心化对话&#xff1a;DAO 治理的新时代”活动&#xff01; 随着加密货币和区块链技术的快速发展&#xff0c;DAO 已成为数字经济不可或缺的一部分。目前&#xff0c;已有超过 10 万个 DAO&#xff0c;拥有超…

pageHelper分页查询

文章目录 前言一、集成1.引入库2.配置yml 二、编码1.Controller2.Service3.Mapper4.Mapper.xml5.StudentResult 三、测试1.根据页码和页数2.根据name 总结 前言 本篇文章介绍在java中使用pageHelper完成分页的功能。 使用的数据库为mysql,持久层框架mybatis。 一、集成 1.引入…

★【递归】【构造二叉树】Leetcode 106.从中序与后序遍历序列构造二叉树

★【递归】【构造二叉树】Leetcode 106.从中序与后序遍历序列构造二叉树 105. 从前序与中序遍历序列构造二叉树 106.从中序与后序遍历序列构造二叉树:star:思路分析递归解法 105. 从前序与中序遍历序列构造二叉树递归解法 ---------------&#x1f388;&#x1f388;题目链接&a…