当前位置: 首页 > news >正文

使用Python绘制股票CCI指标曲线

本文使用Python语言绘制一只股票的CCI(Commodity channel index)曲线,论文参考《Commodity channel index: Tool for trading cyclic trends》,该指标可以用来测量股价、外汇或者贵金属交易是否已超出常态分布范围,​ 波动于正无穷大和负无穷大之间 。

参考招商证券软件对CCI指标的应用:

参考百度对CCI公式的定义:

* CCI(n) = (TP- MA) ÷MD ÷0.015

* TP = (最高价 + 最低价 + 收盘价) ÷ 3

* MA = 最近n日(TP)价的累计和÷n

* MD = 最近n日 (TP-MA )的绝对值的累计和 ÷ n

* 系统默认n为14

 根据公式,需要获得一只股票每天的盘口数据,可以使用AKShare库获取:

import akshare as ak
import datetimedate = datetime.datetime.now().strftime("%Y%m%d")
stock_zh_a_spot_em_df = ak.stock_zh_a_spot_em()
stock_zh_a_spot_em_df.to_csv('E:\\股票盘口信息\\{}.csv'.format(date), encoding='utf_8_sig')

这样我们就获得了每一天的盘口数据,CSV格式,文件内容如下:

采用下面的代码,绘制CCI曲线,股票选择平安银行,代码“000001”,csv格式的文件中“代码”列是数值,所以前面五个0会去掉,故下面代码中stock_num为1,又如上图“代码”列中的758,表示“000758”中色股份。

import math
import os.path
import matplotlib.pyplot as plt
import pandas as pddate = []
zg = []
zd = []
zxj = []
TP = []
MA = []
MD = []
CCI = []
n = 14plt.figure(figsize=(10, 5))stock_num = 1path = 'E:\\股票盘口信息'
name_list = os.listdir(path)
for name in name_list:filename = 'E:\\股票盘口信息\\' + namedata = pd.read_csv(filename, encoding='utf_8_sig')for i in range(0, len(data.get('代码'))):if data.get('代码')[i] == stock_num:zg.append(data.get('最高')[i])zd.append(data.get('最低')[i])zxj.append(data.get('最新价')[i])TP.append((data.get('最高')[i] + data.get('最低')[i] + data.get('最新价')[i]) / 3)date.append(name)breakfor i in range(0, len(date)):if i >= (n - 1):count = 0for j in range(0, n):count += TP[i - j]MA.append(count/n)else:MA.append(0)for i in range(0, len(date)):if i >= (n - 1):count = 0for j in range(0, n):count += math.fabs(TP[i - j] - MA[i - j])MD.append(count/n)else:MD.append(0)for i in range(0, len(date)):CCI.append((TP[i] - MA[i])/(MD[i]*0.015))plt.plot(date, CCI, 'b')
plt.grid()
plt.show()

 程序运行结果如下:

 拿证券软件的曲线对应:

 可能是中间有几天数据缺失的原因,形状有些不一样,如果是代码问题是留言指正。

==============================

抱怨几句)去年11月12月项目比较忙,加上☀了一个星期,年底部门会议又多,停更了几个月。说实话,年纪确实大了,以前在实验室,从早上9点整到晚上22点,还能开开心心吃个宵夜再回家,现在每天7点下班回家后就躺在沙发上起不来,感觉消耗特别大,借迪迪哥一句“哎~人生啊”。

http://www.lryc.cn/news/7737.html

相关文章:

  • 【C语言技能树】浮点数在内存中的存储
  • Spring框架源码(五) @configuration源码深度解析
  • gcc/g++从入门到精通(3)gcc头文件、库搜索路径方式全面盘点
  • Android Studio多渠道打包及自动化构建
  • 基于MATLAB的MIMO信道估计(附完整代码与分析)
  • Python代码游戏————星球大战
  • java向Word模板中替换书签数据,插入图片,插入复选框,插入Word中表格的行数据,删除表格行数据
  • Java基础知识快速盘点(二)
  • 企业降本增效的催化剂:敏捷迭代
  • MySQL入门篇-MySQL高级窗口函数简介
  • 什么是 API(应用程序接口)?
  • 如何在外网访问内网的 Nginx 服务?
  • vue2中defineProperty和vue3中proxy区别
  • 将bean注入Spring容器的五种方式
  • C生万物 | 常量指针和指针常量的感性理解
  • python 打包工具 pyinstaller和Nuitka区别
  • Python解题 - CSDN周赛第28期
  • DNS记录类型有哪些,分别代表什么含义?
  • ICLR 2022—你不应该错过的 10 篇论文(上)
  • HydroD 实用教程(三)环境数据
  • 第四章 统计机器学习
  • Redis第一讲
  • Java面试题-消息队列
  • 基于离散时间频率增益传感器的P级至M级PMU模型的实现(Matlab代码实现)
  • 9个相见恨晚的提升办公效率的网站!
  • java的双亲委派模型-附源码分析
  • Docker 笔记
  • 用户认证-cookie和session
  • UUID的弊端以及雪花算法
  • 使用netty+springboot打造的tcp长连接通讯方案