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

python绘制股票K线

数据:

各列数据表示的含义

手机,日期,,开盘价,最高价,最低价,收盘价,销量
phone,28-01-2011, ,344.17,344.4,333.53,336.1,21144800
phone,31-01-2011, ,335.8,340.04,334.3,339.32,13473000
phone,01-02-2011, ,341.3,345.65,340.98,345.03,15236800
phone,02-02-2011, ,344.45,345.25,343.55,344.32,9242600
phone,03-02-2011, ,343.8,344.24,338.55,343.44,14064100
phone,04-02-2011, ,343.61,346.7,343.51,346.5,11494200
phone,07-02-2011, ,347.89,353.25,347.64,351.88,17322100
phone,08-02-2011, ,353.68,355.52,352.15,355.2,13608500
phone,09-02-2011, ,355.19,359,354.87,358.16,17240800
phone,10-02-2011, ,357.39,360,348,354.54,33162400
phone,11-02-2011, ,354.75,357.8,353.54,356.85,13127500
phone,14-02-2011, ,356.79,359.48,356.71,359.18,11086200
phone,15-02-2011, ,359.19,359.97,357.55,359.9,10149000
phone,16-02-2011, ,360.8,364.9,360.5,363.13,17184100
phone,17-02-2011, ,357.1,360.27,356.52,358.3,18949000
phone,18-02-2011, ,358.21,359.5,349.52,350.56,29144500
phone,22-02-2011, ,342.05,345.4,337.72,338.61,31162200
phone,23-02-2011, ,338.77,344.64,338.61,342.62,23994700
phone,24-02-2011, ,344.02,345.15,338.37,342.88,17853500
phone,25-02-2011, ,345.29,348.43,344.8,348.16,13572000
phone,28-02-2011, ,351.21,355.05,351.12,353.21,14395400
phone,01-03-2011, ,355.47,355.72,347.68,349.31,16290300
phone,02-03-2011, ,349.96,354.35,348.4,352.12,21521000
phone,03-03-2011, ,357.2,359.79,355.92,359.56,17885200
phone,04-03-2011, ,360.07,360.29,357.75,360,16188000
phone,07-03-2011, ,361.11,361.67,351.31,355.36,19504300
phone,08-03-2011, ,354.91,357.4,352.25,355.76,12718000
phone,09-03-2011, ,354.69,354.76,350.6,352.47,16192700
phone,10-03-2011, ,349.69,349.77,344.9,346.67,18138800
phone,11-03-2011, ,345.4,352.32,345,351.99,16824200
# 绘制股票k线图
# 数据可视化步骤: 1 准备数据,2 选择合适的图形,3 绘制(简单组合为复杂)import matplotlib.pyplot as mp
import numpy as np
import datetime as dt
import matplotlib.dates as mddef Date2ymd(dmy): # 日期格式转换函数, 功能:将日月年转换为年月日# 参数 dmy: 28-01-2011# 函数体,功能实现代码# python标准函数str(): 作用将括号中的数据转换为字符串类型str_dmy = str(dmy, encoding="utf-8") # utf-8 编码方式# 将字符串类型的日月年 转换为 日期类型的日月年dat = dt.datetime.strptime(str_dmy,"%d-%m-%Y").date()tm = dat.strftime("%Y-%m-%d") # 将 日期类型 按照 指定格式 转化 日期# 返回值,函数返回给外部的一个结果return tm# 读取数据 numpy.loadtxt
dates, open_prices, highest_prices, lowest_prices, close_prices = \np.loadtxt("./phone.csv",  # 数据文件的路径delimiter=",", # 数据之间的分隔符,按此分隔符进行拆分,存入上述变量中usecols=(1, 3, 4, 5, 6), # 从要读取的数据文件中读取第几列(列从0开始)dtype="M8[D], f8, f8, f8, f8", # 按照读取的列指定每列读取数据的格式unpack=True,  # 将每一列拆分到一个数组中converters={1: Date2ymd})  # 指定那些列需要转换,以及转换函数# 可以打印看下获取的数据
print(dates)
print(open_prices)
mp.figure("Phone k-lines", facecolor="lightgray") # 创建画布,并设置命名
mp.title("Phone Stock", fontsize=20)  # 创建图形名称,并设置字体大小
mp.xlabel('Day', fontsize=12)  # 设置x轴显示的名字
mp.ylabel('Price', fontsize=12)  # 设置y轴显示的名字
# 设置横轴的刻度定位器
ax = mp.gca() # 获取坐标系
# 设置主刻度 周,刻度画在周一的位置
ax.xaxis.set_major_locator(md.WeekdayLocator(byweekday=md.MO))
# 设置日期格式 %b 表示月份
ax.xaxis.set_major_formatter(md.DateFormatter("%d %b %Y"))# 设置次刻度
ax.xaxis.set_minor_locator(md.DayLocator())  # DayLocator() 每天# gcf: get current figure 获取当前图形对象
mp.gcf().autofmt_xdate()  # 日期格式自动旋转
# 开盘价 连成折线
dates = dates.astype(md.datetime.datetime) # 转化为matplotlib下的日期
mp.plot(dates, open_prices, color='dodgerblue', linestyle='--')# 绘制蜡烛图(柱状图、上下影线组成)
# 先判断今天涨还是跌
rise = close_prices >= open_prices  # 两个组数内元素逐个比较,返回布尔类型的数组
# 填充色
color = np.array([('red' if x else 'green') for x in rise])
color[rise] = 'white' # 涨的设置为白色(空心效果)  掩码效果,按照rise中为真,则设为white
# 边框颜色
edge_color = [('red' if x else 'green') for x in rise]
# 先画影线,再画柱状图,这样影线和柱状图重叠的部分就会被柱状图覆盖掉
# 绘制影线
mp.bar(dates, # x轴数组highest_prices - lowest_prices,  # 柱子高度0.1,  # 宽度设置很小(看上去像是一条线)lowest_prices,  # 柱体的底柱坐标linestyle='--',color=edge_color) # 边框颜色
# 绘制柱体
mp.bar(dates, # x轴数组close_prices - open_prices,  # 柱子高度0.8,  # 宽度设置很小(看上去像是一条线)open_prices,  # 柱体的底柱坐标color=color,edgecolor=edge_color, # 边框颜色zorder=3) # 值越大,绘制的时候越在上层
# 求平均值  5日求一次平均值   1 2 3 4 5 6 7 8 9,第一次1 2 3 4 5 第二次 2 3 4 5 6.....最后一次5 6 7 8 9
# 总的次数是总个数 - 4
ma_5 = np.zeros(close_prices.size - 4) # 创建值为0 的数组,天数-4
for i in range(ma_5.size):ma_5[i] = close_prices[i:i+5].mean()   # 求连续5个元素的均值
mp.plot(dates[4:], # 从第5天开始绘制移动均线ma_5,   # 绘制的数据color='orangered', # 线条颜色label='MA_5')  # 图例名字ax.grid(which='major', axis='both', linewidth=0.75,linestyle='-', color='orange')  # 主刻度网格线,axis还可以取x,yax.grid(which='minor', axis='both', linewidth=0.35,linestyle=':', color='orange')  # 主刻度网格线,axis还可以取x,ymp.legend()
mp.grid(linestyle=':')
mp.show()

相关文章:

  • sockaddr结构体详解
  • 学习日记-day13-5.22
  • Python中accumulate方法
  • MySQL三种备份方式介绍
  • AI价值的冰与火之歌:企业数字化转型的迷雾与曙光
  • 探索微分方程的领域及AI推理
  • knife4j使用
  • MySQL中实现大数据量的快速插入
  • 华为仓颉语言如何进行交叉编译
  • Java微服务架构:Spring Cloud全栈指南,附最新Demo源码,可独立运行!
  • v3.0 YOLO篇-如何通过YOLO进行实验
  • 2024游戏安全白皮书:对抗激烈!PC游戏外挂功能数增长超149%,超85%移动外挂为定制挂(附获取方式)
  • 怎样通过神经网络估计股票走向
  • 华为RH1288HV3 BMC忘记用户名密码如何恢复默认
  • 【QT】QT6设置.exe文件图标
  • 华为云Flexus+DeepSeek征文 | 基于ModelArts Studio 的 DeepSeek API 实现行业深度搜索和分析
  • 云南安全员考试报名需要具备哪些条件?
  • 汇川EasyPLC MODBUS-RTU通信配置和编程实现
  • 力扣热题——罗马数字转整数
  • MySQL 查询用户权限的方法
  • 虹桥做网站/seo网上培训课程
  • 南昌网站建设咨询/营销比较好的知名公司有哪些
  • html国外网站源码/百度搜索引擎入口登录
  • 广州个人网站制作公司/电商营销策划方案
  • 阿里云做企业网站/聊城优化seo
  • 淄博做网站公司有哪些/沧州网站运营公司