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线走势 的相关文章

  • worktree简单使用

    作用 git worktree 从一个仓库中可以创建多个工作目录 xff0c 方便多开编辑器并行开发 使用 创建worktree git worktree add b bugfix 100 tmpworktree jghctaskbugfi
  • 2020-11-12

    GC 算法 Java中的垃圾回收是根据可达性分析算法来判断对象是否存活的 这个算法的基本思路就是通过一系列的称为 34 GC Roots 34 的对象作为起始点 xff0c 从这些节点开始向下搜索 xff0c 搜索所走过的路径称为引用链 x
  • 2020-11-12

    WeakReferenceMonitor 源码位置 org springframework util WeakReferenceMonitor 解析 span class token comment Start to monitor giv
  • 面试题集锦-多线程

    多线程 1 并行和并发有什么区别 xff1f 2 线程和进程的区别 xff1f 3 守护线程是什么 xff1f 4 创建线程有哪几种方式 xff1f 5 说一下 runnable 和 callable 有什么区别 xff1f 6 线程有哪些
  • 面试题集锦-javaWeb

    javaWeb 1 JSP 和 servlet 有什么区别 xff1f 2 JSP 有哪些内置对象 xff1f 作用分别是什么 xff1f 3 说一下 JSP 的 4 种作用域 xff1f 4 session 和 cookie 有什么区别
  • 面试题集锦-网络

    目录 1 http 响应码2 forward 和 redirect 的区别 xff1f 3 简述 tcp 和 udp的区别 xff1f 4 说一下 tcp 粘包是怎么产生的 xff1f 5 OSI 的七层模型都有哪些 xff1f 6 get
  • 面试题集锦-设计模式

    设计模式 1 说一下你熟悉的设计模式 xff1f 2 简单工厂和抽象工厂有什么区别 xff1f 1 说一下你熟悉的设计模式 xff1f 单例模式 xff1a 保证被创建一次 xff0c 节省系统开销 工厂模式 xff08 简单工厂 抽象工厂
  • 服务器配置ssh(centos7)

    服务器配置 centos7 span class hljs title vim etc ssh sshd config span span class hljs comment br 禁用root账户登录 xff0c 如果是用root用户登
  • 面试题集锦-Spring/SpringMVC

    Spring SpringMVC 1 为什么要使用 spring xff1f 2 解释一下什么是 aop xff1f 3 解释一下什么是 ioc xff1f 4 spring 有哪些主要模块 xff1f 5 spring 常用的注入方式有哪
  • 面试题集锦-SpringBoot

    spring boot 1 什么是 spring boot xff1f 2 为什么要用 spring boot xff1f 3 spring boot 核心配置文件是什么 xff1f 4 spring boot 配置文件有哪几种类型 xff
  • 面试题集锦-hibernate

    hibernate 1 什么是 ORM 框架 xff1f 2 为什么要使用 hibernate xff1f 3 hibernate 中如何在控制台查看打印的 SQL 语句 xff1f 4 hibernate 有几种查询方式 xff1f 5
  • 面试题集锦- spring cloud

    spring cloud 1 什么是 spring cloud xff1f 2 spring cloud 断路器的作用是什么 xff1f 3 spring cloud 的核心组件有哪些 xff1f 1 什么是 spring cloud xf
  • 面试题集锦-Mybatis

    Mybatis 1 MyBatis 中 和 的区别是什么 xff1f 2 MyBatis 有几种分页方式 xff1f 3 RowBounds 是一次性查询全部结果吗 xff1f 为什么 xff1f 4 MyBatis 逻辑分页和物理分页的区
  • 面试题集锦-RabbitMQ

    RabbitMQ 1 RabbitMQ 的使用场景有哪些 xff1f 2 RabbitMQ 有哪些重要的角色 xff1f 3 RabbitMQ 有哪些重要的组件 xff1f 4 RabbitMQ 中 vhost 的作用是什么 xff1f 5
  • 面试题集锦-kafka

    kafka 1 kafka 可以脱离 zookeeper 单独使用吗 xff1f 为什么 xff1f 2 kafka 有几种数据保留的策略 xff1f 3 kafka 同时设置了 7 天和 10G 清除数据 xff0c 到第五天的时候消息达
  • 面试题集锦-Zookeeper

    Zookeeper 1 zookeeper 是什么 xff1f 2 zookeeper 都有哪些功能 xff1f 3 zookeeper 有几种部署模式 xff1f 4 zookeeper 怎么保证主从节点的状态同步 xff1f 5 集群中
  • 面试题集锦-MySQL

    MySQL 模式主备切换方式方式 主从概述原理主节点从节点 方式 读写分离分库分表索引页页目录目录页B 43 树聚簇索引和非聚簇索引为什么InnoDB只有一个聚簇索引 xff0c 而不将所有索引都使用聚簇索引 xff1f 联合索引的最左前缀
  • 面试题集锦-Redis

    Redis 1 Redis 是什么 xff1f 都有哪些使用场景 xff1f 2 Redis 和 memcache 有什么区别 xff1f 3 Redis 为什么是单线程的 xff1f 4 什么是缓存穿透 xff1f 怎么解决 xff1f
  • Ubuntu18.04 qt5.14安装

    1 下载qt5 14 2 链接Index of archive qt 2 安装 打开终端 xff0c 进入安装包目录 xff0c 给安装包rwx权限 chmod 777 qt opensource linux x64 5 14 2 run
  • 面试题集锦-JVM

    JVM 1 说一下 JVM 的主要组成部分 xff1f 及其作用 xff1f 2 说一下 JVM 运行时数据区 xff1f 3 说一下堆栈的区别 xff1f 4 队列和栈是什么 xff1f 有什么区别 xff1f 5 什么是双亲委派模型 x

随机推荐

  • eclipse快捷键

    ctrl 43 t 查看接口实现类 ctrl 43 shif 43 t 快速查找某个类 包括jar中类 ctrl 43 shift 43 r 快速查找工作空间中项目的类
  • short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?

    答 xff1a 对于short s1 61 1 s1 61 s1 43 1 由于1是int类型 xff0c 因此s1 43 1运算结果也是int 型 xff0c 需要强制转换类型才能赋值给short型 而short s1 61 1 s1 4
  • int和Integer有什么区别

    答 xff1a Java是一个近乎纯洁的面向对象编程语言 xff0c 但是为了编程的方便还是引入了基本数据类型 xff0c 但是为了能够将这些基本数据类型当成对象操作 xff0c Java为每一个基本数据类型都引入了对应的包装类型 xff0
  • Java 中 Equals和==的区别

    在谈论equals和 61 61 的区别前 xff0c 我们先简单介绍一下JVM中内存分配的问题 在JVM中 内存分为栈内存和堆内存 二者有什么区别呢 xff1f 当我们创建一个对象 xff08 new Object xff09 时 xff
  • 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?

    答 xff1a 是值传递 Java语言的方法调用只支持参数的值传递 当一个对象实例作为一个参数被传递到方法中时 xff0c 参数的值就是对该对象的引用 对象的属性可以在被调用过程中被改变 xff0c 但对对象引用的改变是不会影响到调用者的
  • 什么情况下用+运算符进行字符串连接比调用StringBuilder对象的append方法连接字符串性能更好?

    经常在网上看到或者在周围听到有人说字符串拼接不要直接用 String 相加 xff0c StringBuilder 的效率要比 String 直接相加拼接要高 还有人常说 xff0c StringBuffer 是同步的 xff08 线程安全
  • 解释内存中的栈(stack)、堆(heap)和静态区(static area)的用法。

    答 xff1a 通常我们定义一个基本数据类型的变量 xff0c 一个对象的引用 xff0c 还有就是函数调用的现场保存都使用内存中的栈空间 xff1b 而通过new关键字和构造器创建的对象放在堆空间 xff1b 程序中的字面量 xff08
  • Math.round(11.5) 等于多少?Math.round(-11.5)等于多少?

    Math round 11 5 的返回值是12 xff0c Math round 11 5 的返回值是 11 四舍五入的原理是在参数上加0 5然后进行下取整 所谓向上取整指当计算的结果不为整数时取大于计算结果的整数 向下取整指当计算的结果不
  • Spring注入详解

    注入方式 构造函数注入 public class UserServiceImpl implents UserService private UserDao userDao 64 Autowire public UserServiceImpl
  • yml文件

    YAML文件简介 我们可能在spring配置文件里见到过 yml格式的东东 xff0c 配置文件不都是 propertie或者 xml文件吗 xff1f yml是什么鬼 xff0c 今天我带你们来一探究竟 YAML xff08 Yet An
  • YAML 语言教程

    作者 xff1a 阮一峰 日期 xff1a 2016年7月 4日 编程免不了要写配置文件 xff0c 怎么写配置也是一门学问 YAML 是专门用来写配置文件的语言 xff0c 非常简洁和强大 xff0c 远比 JSON 格式方便 本文介绍
  • 如何解决idea的Could not autowire. No beans of 'xxxx' type found

    打开设置setting 在左侧找到Editor xff0c 然后选择 Inspections 在右侧的搜索框下面 xff0c 找到SPRING那块 xff0c 然后找到spring的核心包 xff0c 选中spring core 找到cod
  • IntelliJ IDEA中绿色注释扫描飘红报错解决

    在IDEA中的setting中搜索 34 javadoc 34 基本上 xff0c 绿色注释飘红的问题是解决了 xff1b
  • Windows10在当前目录快速打开cmd的方法

    1 按住Shift键 xff0c 鼠标右键快捷方式 xff0c 先打开Powershell窗口 2 输入 start cmd 回车 3 这样就可以打开cmd窗口了 xff0c 并且cmd的工作目录就是当前的目录
  • marvn 环境变量配置

    1 首先下载maven xff0c 下载地址 xff1a http maven apache org download html 打开这个连接 xff1a 选择File下面的apache maven 3 2 1 bin zip链接进行下载
  • mvn命令

    在pom xml目录下 打开cmd xff0c 输入mvn命令 1 mvn dependency tree 打印项目的依赖树到控制台 mvn dependency tree gt gt D tree txt 导出依赖树到指定文件 2 mvn
  • cmd命令

    1 创建多级目录 md mkdir 目录1 目录2 目录3 C Users xxx gt pushd d D gt md 1 2 3 4 D gt pushd D 1 2 3 4 D 1 2 3 4 gt 2 pushd POPD push
  • css浏览器兼容问题

    1 CSS中几种浏览器对不同关键字的支持 xff0c 可进行浏览器兼容性重复定义 important 可被FireFox和IE7识别 可被IE6 IE7识别 可被IE6识别 43 可被IE7识别 区别IE6与FF xff1a backgro
  • mybatis annotations

    1 Alias别名 64 Documented 64 Retention RetentionPolicy RUNTIME 64 Target ElementType TYPE public 64 interface Alias String
  • Python+Flask实现股价查询系统。Python绘制股票k线走势

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