Python+Flask实现股价查询系统。Python绘制股票k线走势

2023-05-16

文章目录

    • 一、实现效果图
    • 二、实现思路
      • 1、获取数据
    • 2、可视化数据
    • 三、源码获取

一、实现效果图

打开默认显示半年线,可以通过可视化类型选择可视化k线图、高低点等。(目前只完成了初版,当查询的股票数据返回为空时,可能会有部分问题,后续有时间了会修改)

在这里插入图片描述

二、实现思路

此web应用程序主要使用了以下Python第三方库:
Plotly – 数据可视化库(Plotly数据可视化方法)
Pandas – 数据处理及分析库
Tushare – 财经数据接口库
Flask – Web应用框架

1、获取数据

整个的思路比较简单,股票数据的获取主要通过 ***Tushare***获取。
如下是获取000001.SZ整年的数据的方法。

import tushare as ts
ts.set_token('b94ecd1e37a3628890e89b90e0259b6db72b0ae0b17dadd2c28c5c4c')
pro = ts.pro_api()
df = pro.daily(ts_code='000001.sz', start_date='20200101', end_date='202001230')
df.head()

在这里插入图片描述
这里有一个小问题。数据中没有股票代码对应的公司名称。所以在此之前需要调用ts中的其他方法获取股票代码对应的相关信息。我将名称与公司信息获取之后保存在了本地,方便后续使用。调用方法和返回数据如下。
在这里插入图片描述

2、可视化数据

这里可视化主要用的是plotly,通过plotly绘制的图形有着更好的交互效果。可以通过ploytly的时间序列选择器鼠标拖动选择想要查看的具体内容。将每种不同的图形封装成绘图类的对应方法即可。

from datetime import datetime
import tushare as ts
import pandas as pd
import plotly as py 
import plotly.graph_objs as go
pyplt = py.offline.plot
#读取股票代码与名称字典
ts.set_token('b94ecd1e37a3628890e89b90e0259b6db72b0ae0b17dadd2c28c5c4c')
pro = ts.pro_api()
df=pd.read_csv("stock_code.csv")
# df = pro.daily(ts_code='000001.sz', start_date='20190701', end_date='20190930')#直接保存

class Chart_Plot:
    def __init__(self,start_date,end_date,stock1="000001",stock2="000002"):
        #处理参数格式,符合tushare调用规范
        self.start_date=start_date.replace("-","")
        self.end_date=end_date.replace("-","")
        #获取指定股票代码的名称
        temp=df.loc[df.ts_code.str.contains(stock1)]
        self.stock1_code=temp["ts_code"].values[0]
        self.stock1=pro.daily(ts_code=self.stock1_code, start_date=start_date, end_date=end_date)
        self.name1=temp['name'].values[0]
        #获取要对比的股票代码的名称
        temp = df.loc[df.ts_code.str.contains(stock2)]
        self.stock2_code = temp["ts_code"].values[0]
        self.stock2=pro.daily(ts_code=self.stock2_code, start_date=start_date, end_date=end_date)
        self.name2=temp['name'].values[0]

    def candle_stick(self,period="day"):#日K线图
        #默认获取日k,如果period不为日k,则获取对应值
        if period=="周k":
            self.stock1=pro.weekly(ts_code=self.stock1_code,start_date=self.start_date,end_date=self.end_date)
        elif period=="月k":
            self.stock1 = pro.monthly(ts_code=self.stock1_code, start_date=self.start_date, end_date=self.end_date)

        strdate =self.stock1['trade_date'].tolist()
        #日期字符串转时间序列
        date=[]
        for i in strdate:
            X = datetime.strptime(i, '%Y%m%d')           
            date.append(X)         
        candle_trace = go.Candlestick(x = date,
                                      open = self.stock1.open,
                                      high = self.stock1.high,
                                      low = self.stock1.low,
                                      close = self.stock1.close,
                                      increasing=dict(line=dict(color= '#ff0000')),
                                      decreasing=dict(line=dict(color= '#00ff00')),
                                      name = self.stock1['ts_code'].values[0])
        candle_data = [candle_trace]
        candle_layout = {'title': self.stock1['ts_code'][0],'yaxis': {'title': '价格'}}
        candle_fig = dict(data=candle_data, layout=candle_layout)
        div = pyplt(candle_fig, output_type='div', include_plotlyjs=False, auto_open=False, show_link=False)
        return div
    
    
    def twoline_graph(self): #半年线图
        #self.stock1['close']取出来的值都是带有索引值的两列的矩阵,具体看excl表格
        #tolist函数则将他们变为列表,除去索引值

        close = self.stock1['close'].tolist()
        strdate = self.stock1['trade_date'].tolist()
        date=[]
        for i in strdate:
            X = datetime.strptime(i, '%Y%m%d')           
            date.append(X)         

        # 画图语句:go.Scatter
        trace = [go.Scatter(
                            x=date,
                            y=close
                            )]
        #print (trace)  
        #[Scatter({'x': [2019-09-30 00:00:00, 2019-09-27 00:00:00.....
                
        layout = dict(
              title=self.stock1['ts_code'].values[0]+":"+self.name1,
              xaxis=dict(title='日期'),
              yaxis=dict(title='价格')
              )
        #print (layout)
        #{'title': 'ETF50', 'xaxis': {'title': '日期'}, 'yaxis': {'title': '价格'}}
        fig = dict(data=trace, layout=layout)  
        #print (fig)
        div = pyplt(fig, output_type='div', include_plotlyjs=False, auto_open=False, show_link=False)
        #print (div)
        return div

    def high_low(self):
        high = self.stock1['high'].tolist()
        low = self.stock1['low'].tolist()
        strdate = self.stock1['trade_date'].tolist()
        date = []
        for i in strdate:
            X = datetime.strptime(i, '%Y%m%d')
            date.append(X)

            # 画图语句:go.Scatter
        trace = [go.Scatter(
            x=date,
            y=high
        ),
            go.Scatter(
                x=date,
                y=low
            )
        ]
        # print (trace)
        # [Scatter({'x': [2019-09-30 00:00:00, 2019-09-27 00:00:00.....

        layout = dict(
            title=self.stock1['ts_code'].values[0]+":"+self.name1,
            xaxis=dict(title='日期'),
            yaxis=dict(title='价格')
        )
        # print (layout)
        # {'title': 'ETF50', 'xaxis': {'title': '日期'}, 'yaxis': {'title': '价格'}}
        fig = dict(data=trace, layout=layout)
        # print (fig)
        div = pyplt(fig, output_type='div', include_plotlyjs=False, auto_open=False, show_link=False)
        return div
    

在调用此方法后将返回结果传递给前端的图形展示区域即可。

三、源码获取

关注以下公众号回复"0050"即可get√
在这里插入图片描述

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python+Flask实现股价查询系统。Python绘制股票k线走势 的相关文章

  • uC/OS-II 学习笔记之:信号量、消息邮箱、消息队列之间的使用区别

    更多原创 uC OS II学习笔记之 xff1a 系列 基础及嵌入式相关知识详解 xff0c 请访问可乐虎博客 xff1a http blog csdn net dcx1205 相信不会让您失望 xff01 xff01 1 用信号量进行行为
  • Python3抓取糗百、不得姐、kanqu.com

    测试电脑配置有点低 xff0c 正常配置速度会比较快 有问题可以加群 xff1a 544471255 交流 使用必看 1 该代码使用Python3 6 43 版本 2 需要安装依赖库如下 可使用类似 pip install requests
  • 基于STM32F4实现FOC(磁场定向控制)一:电流采样和波形产生

    一 xff0e ADC的配置问题 1 GPIO初始化配置 开始ADC对应的GPIO口 xff0c 本驱动程序使用到五个GPIO xff0c 分别对应U V W三相电流及母线电压和温度采样 xff0c 统一配置为模拟输入 GPIO的配置代码如
  • 基于ADRC的FOC位置环控制

    ADRC位置环控制 ADRC介绍1 非线性跟踪微分器2 非线性ESO观测器3 非线性状态误差反馈控制律原理 NLSEF 4 调参流程 xff1a 1 调TD2 调ESO3 调NLSEF 5 基于ADRC的位置环设计ADRC框图基于ADRC的
  • 结构体和联合体在通信协议解析的应用

    在串口通信中 xff0c 我们往往会解析很多协议 xff0c 而且在协议中会出现不同数据类型的协议 xff1b 当然我们也可以把协议都定义成某一种数据格式 xff0c 但是那样会出现协议的复杂度 xff0c 但是不那样处理的话 xff0c
  • ubuntu14.04 怎么查看哪个串口才是有效的搜索?

    使用以上命令 xff0c 可以看见相对应的芯片型号 比如图中的 xff0c cp210x 对应的 ttyUSB0 FT232RL 对应 ttyUSB1 minicom 命令 xff1a CTRL 43 A 然后 O xff1b
  • 13_STM32Cubeide开发_RS485总线驱动

    一 485总线和硬件电路 典型的串行通讯标准是RS232和RS485 xff0c 它们定义了电压 阻抗等 xff0c 但不对软件协议给予定义 RS 485总线标准规定了总线接口的电气特性标准即对于2个逻辑状态的定义 xff1a 正电平在 4
  • 无人机系列之飞控算法

    一 无人机的分类 按飞行平台构型分类 无人机可分为固定翼无人机 旋翼无人机 无人飞艇 伞翼无人机 扑翼无人机等 图1 无人机平台构型 多轴飞行器multirotor 是一种具有三个以上旋翼轴的特殊的直升机 旋翼的总距固定而不像一般直升机那样
  • Java中==和equals的区别

    Java中 61 61 和equal的区别为 1 61 61 表示 判断2个变量或对象实例是否指向同一个内存空间 xff0c equals 表示 判断2个变量或对象实例所指向的内存空间的值是否相同 2 61 61 表示 对内存地址进行比较
  • Android注解(annotation)介绍及其应用

    我的新书 Android App开发入门与实战 已于2020年8月由人民邮电出版社出版 xff0c 欢迎购买 点击进入详情 文章目录 介绍自定义注解注解的应用 xff1a 反射注解的应用 xff1a APT其它 介绍 Annotation
  • 源代码管理的另类比较:TortoiseGit vs SourceTree

    文章目录 源代码得管理那就Git吧图形化Git管理软件对比暗色主题图形分支与提交历史仓库与工程代码改动对比分支切换提交到多个远端仓库编码UTF8与Ansi总结 Git提供网站免费部分对比GitHubGitee华为云总结 源代码得管理 以往用
  • kali Linux使用putty远程连接输入密码一直提示错误

    使用命令打开配置文件 xff1a leafpad etc ssh sshd config 修改AddressFamily any 前面的 删除修改PermitRootLogin yes 前面的 删除 修改PasswordAuthentica
  • ros安装并测试是否安装成功

    目录 一 xff0c 安装步骤二 xff0c 测试是否安装成功 一 xff0c 安装步骤 1 xff0c 首先前4项勾选 xff0c 然后源换成国内清华的源 2 xff0c 打开终端开始输入命令 xff1a span class token
  • C++ 双冒号::符号详解

    一 作用域符号 xff1a 作用域符号 的前面一般是类名称 xff0c 后面一般是该类的成员名称 xff0c C 43 43 为例避免不同的类有名称相同的成员而采用作用域的方式进行区分 例如 xff1a A B 表示两个类 xff0c 在
  • 嵌入式软件工程师前期职业生涯规划

    ARM 43 LINUX路线 xff0c 主攻嵌入式Linux操作系统及其上应用软件开发目标 xff1a xff08 1 xff09 掌握主流嵌入式微处理器的结构与原理 xff08 初步定为arm9 xff09 xff08 2 xff09
  • 【尚医通】微信扫码登录和手机号登录冲突问题解决思路

    尚医通 微信扫码登录和手机号登录冲突问题解决思路 问题描述 最近做尚医通遇到一个问题 xff0c 微信扫码登录和手机号登录在 特殊情况 下会发生冲突 xff0c 导致无法登录的问题 下面就描述一下几种情况 正常情况 xff1a 用户第一次一
  • GitHub awesome Resource

    各种Awesome技术资源的资源聚合 xff1a https github com sindresorhus awesome Contents PlatformsProgramming LanguagesFront End Developm
  • FreeRTOS ------ 栈、堆、任务栈

    1 任务的栈资源 xff08 创建任务分配的资源 xff0c 单位是4字节 xff09 来自 configTOTAL HEAP SIZE 定义的堆 xff0c 如果任务栈总量超过 configTOTAL HEAP SIZE xff0c 任务
  • STM32--微项目14-手撸I2C通讯、实现MPU6050六轴传感器控制

    一 微项目实现目标 xff1a STM32通过两个GPIO端口 xff0c 通过代码配置成I2C通讯状态 xff0c 通过I2C通讯与MPU6050进行信息交互 xff0c 包括配置MPU6050寄存器配置 获取MPU6050寄存器状态 x
  • ubuntu-查看文件系统

    ubuntu 查看文件系统 查看文件系统 deepfuture 64 deepfuture laptop df 文件系统 1K 块 已用 可用 已用 挂载点 dev sda1 75481116 3926204 67720600 6 tmpf

随机推荐

  • TypeError: Expected Ptr<cv::UMat> for argument ‘img‘

    使用opencv过程中报错 xff1a TypeError Expected Ptr for argument 39 img 39 请检查img参数是否是numpy数组 xff0c 以及其数据类型 dtype是否是np uint8 如果这两
  • TX2超详细,超实用刷机教程(亲测有效,所有步骤都是博主亲自实践过)

    本篇主要对TX2刷机流程以及刷机过程中遇到的坑和相应的解决办法做个记录 xff0c 以便再次刷机时能做个参考 如果你刚好收到TX2开发者套件 xff0c 还没有进行开箱 xff0c 那么请移步到我的前一篇博客进行TX2的开机测试 博客链接
  • MicroStrategy 简介 【Business Intelligent】

    下载地址 xff1a https www microstrategy com us resources microstrategy for students students Capabilities that power the Inte
  • crontab permission denied 解决办法,crontab 进程存在就不执行的方法

    crontab permission denied 出现场景 出现情况 xff0c sh文件在本地Win下面开发 xff0c 每次修改 xff0c 提交后在Linux上pull下来 xff0c 却发现x权限消失 导致crontab 里面定时
  • ROS入门之通信架构+实践问题+python版本切换解决

    运行起来后是什么样的通信结构 PR2机器人 这么多东西 xff0c 怎么管理进行 xff0c 并且怎么通信 节点管理器 xff08 作为管家管理进程 xff0c master xff09 node首先要向master注册 xff0c 之后就
  • matlab---s函数讲解之二连杆动力学仿真

    matlab虽然后simulink xff0c 但是再复杂系统的仿真的时候简单的simulink中模块不能满足要求 xff0c 因此需要自己建立s函数 xff0c 作为仿真中的一个模块 在控制系统中分为控制器和被控对象 matlab s函数
  • 全球定位系统的组成

    一 空间部分 1 GPS卫星 Block xff08 试验卫星 xff09 Block xff08 以下均为工作卫星 xff09 14天导航电文 xff0c 实施SA和AS的能力 Block A 180天导航电文 xff0c 卫星互相通信能
  • 前端疑难杂症集锦

    一 webpack打包时Cannot resolve module 39 fs 39 在webpack config js中添加 node fs 34 empty 34 二 typescript找不到fs模块 code npm instal
  • 基于ROS的语音控制机器人(二):上位机的实现

    文章目录 目录 文章目录 前言 一 准备工作 1 python工作环境 2 ros环境 3 QT designer 二 界面程序设计 1 界面设计 2 ui文件转py文件 三 上位机程序编写 1 具体思路 2 具体实现 3 遇到的问题 1
  • "指定的文件格式无法识别或为不支持的二进制"

    次奥 xff0c 你没有正确设置启动项目 转载于 https www cnblogs com tupx p 3701598 html
  • Linux安装MySQL8.0.16

    1 下载安装包 https www mysql com 2 安装MySQL 将下载好的安装包上传到服务器 然后解压 tar xvf mysql 8 0 16 el7 x86 64 tar gz 然后将解压目录重命名为mysql 8 0 16
  • 硬件中断和软件中断的区别

    中断 中断指当出现需要时 xff0c CPU暂时停止当前程序的执行转而执行处理新情况的程序和执行过程 即在程序运行过程中 xff0c 系统出现了一个必须由CPU立即处理的情况 xff0c 此时 xff0c CPU暂时中止程序的执行转而处理这
  • 嵌入式C语言自我修养笔记1-ARM体系结构与编译运行

    目录 ARM 体系结构ARM 体系结构ARM 汇编指令ARM 寻址方式ARM 伪指令C 与汇编混合编程 程序编译链接与安装运行预处理过程编译过程链接过程程序安装apt get链接静态库动态链接共享库插件工作原理Linux 内核模块运行机制L
  • Renode应用:在RISC-V核上运行FreeRTOS

    本篇记录通过Renode在RISC V核上运行FreeRTOS demo的情况 本来不准备写这一篇 xff0c 但是发现近期工作学习密度实在太大 xff0c 上周工作的中间结果这周竟然完全想不起来了 xff0c 不得不又花了一些时间从头摸索
  • VideoStream流媒体(VOD视频点播)系统平台

    软件介绍 xff1a VideoStream是集流媒体视频服务和流媒体应用管理为一体的综合流媒体服务系统 xff0c 本产品通过宽带IP网络为教育系统 各类运营商 政府企业等用户提供音视频服务的应用 系统特点 xff1a 1 采用WEB端口
  • c语言实现模拟FTP服务器项目

    下载源码后 xff0c 直接可以在ubuntu中编译运行 xff1a FTP服务器程序功能 xff1a 客户端 xff1a 1 输入命令 xff1a help 查看FTP服务器所支持的所有命令 2 输入名 xff1a ls 查看服务器上可以
  • 基于ArUco的视觉定位

    参考如下 博客 基于ArUco的视觉定位 1 3 https www freesion com article 4265319144 基于ArUco的视觉定位 4 https www pianshen com article 2491452
  • 伺服电机和步进电机的区别

    硬件型号 xff1a 三菱伺服电机HG KR43J 系统版本 xff1a 电机系统 1 控制的方式不同 步进电机 xff1a 通过控制脉冲的个数控制转动角度的 xff0c 一个脉冲对应一个步距角 伺服电机 xff1a 通过控制脉冲时间的长短
  • ubutnu更换国内源后,更新一直出现404,Not Found的问题

    1 问题 题主系统是ubuntu16 04 64位系统 尝试更换国内各种源 连ubuntu官方源都尝试了 sudo vim etc apt sources list修改为 deb https mirrors tuna tsinghua ed
  • Python+Flask实现股价查询系统。Python绘制股票k线走势

    文章目录 一 实现效果图二 实现思路1 获取数据 2 可视化数据三 源码获取 一 实现效果图 打开默认显示半年线 xff0c 可以通过可视化类型选择可视化k线图 高低点等 xff08 目前只完成了初版 xff0c 当查询的股票数据返回为空时