使用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 datetime

date = 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 pd

date = []
zg = []
zd = []
zxj = []
TP = []
MA = []
MD = []
CCI = []
n = 14

plt.figure(figsize=(10, 5))

stock_num = 1

path = 'E:\\股票盘口信息'
name_list = os.listdir(path)
for name in name_list:
    filename = 'E:\\股票盘口信息\\' + name
    data = 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)
            break

for i in range(0, len(date)):
    if i >= (n - 1):
        count = 0
        for 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 = 0
        for 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点下班回家后就躺在沙发上起不来,感觉消耗特别大,借迪迪哥一句“哎~人生啊”。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值