基于Python轻松制作一个股票K线图网站

目录
  • 获取股票数据
  • PyEcharts 作图
  • 构建 Web 框架
    • 视图函数编写
    • 模板编写
  • 编辑主逻辑
  • 前端页面编写

在前面的文章中,我们学习了如何使用 Tkinter 构建股票数据抓取以及展示K线图功能,虽然大致的功能已经具备,但是在当今这个人手一个 Web 服务的年代,GUI 程序还是没有 Web 服务来的香啊。

我们需要用到的知识包括 PyEcharts 的使用,tushare 库获取股票数据的方法以及 Flask 的基本用法。

获取股票数据

我们先来看下 tushare 的使用,这个应该是当前最为流行的股票数据库了吧,一行代码,就能轻松获取某支股票的历史数据

import tushare as ts
df = ts.get_hist_data('000001')
print(df)

现在股票的历史数据有了,我们还需要一份股票名称和股票代码的对应表,同样通过 tushare 来获取

stock_list = ts.get_stock_basics()
stock_list.reset_index(inplace=True)
stock_list[['code', 'name']].to_csv('stock_code_name.csv')

这样就成功保存了一份股票名称和股票代码的对应数据

PyEcharts 作图

下面再来看看如何通过 PyEcharts 来制作 K 线图,其实官网上的例子已经非常具体了,我们只需要把拿到的历史股票数据做些简单处理即可,我这里直接给我的数据处理过程

mydate = df[:30].index.tolist()
mydata = df[:30][['open', 'close', 'low', 'high']].values.tolist()

def kline_base(mydate, data) -> Kline:
    c = (
        Kline()
        .add_xaxis(mydate)
        .add_yaxis("kline", data)
        .set_global_opts(
            yaxis_opts=opts.AxisOpts(is_scale=True,
                                    splitarea_opts=opts.SplitAreaOpts(
                    is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)
                ),
            ),
            xaxis_opts=opts.AxisOpts(is_scale=True,
                                    axislabel_opts=opts.LabelOpts(rotate=-30)),
            title_opts=opts.TitleOpts(title="Kline-基本示例"),
            datazoom_opts=[opts.DataZoomOpts()],
        )
    )
    return c

kline_base(mydate, mydata).render_notebook()

这样就可以得到一个不错的 K 线图了

下面我们就可以着手完成 Flask 的代码啦

构建 Web 框架

首先我们先来完成 Web 框架的整体编写,为了页面的美观与编码的方便,直接使用 bootstrap 来构建前端页面

视图函数编写

首先完成初始化工作,在项目目录下创建一个 app.py 文件

from flask import Flask, render_template, request
from pyecharts import options as opts
from pyecharts.charts import Kline
import tushare as ts
import pandas as pd
from flask_bootstrap import Bootstrap

app = Flask(__name__)
bootstrap = Bootstrap(app)

导入需要用到的库,并完成 flask app 的初始化工作。

接下来再写一个 404 的视图函数,统一处理所有的 Not Found 页面

@app.errorhandler(404)
def page_not_found(e):
    return render_template("404.html"), 404

接着我们绑定根地址到 index 视图函数上,返回到 index.html 模板文件上

@app.route("/")
def index():
    return render_template("index.html")

模板编写

在同级目录创建一个 templates 文件夹,创建三个 HTML 文件,分别为 404.html,base.html 和 index.html

base.html 是所有其他页面 HTML 模板的母模板

{% extends "bootstrap/base.html" %}

{% block title %}我的股票走势网站{% endblock %}

{% block navbar %}
<div class="navbar navbar-inverse" role="navigation">
    <div class="container">
        <div class="navbar-header">
            <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
            </button>
            <a class="navbar-brand" href="/" rel="external nofollow"  rel="external nofollow" >Stock-Data</a>
        </div>
        <div class="navbar-collapse collapse">
            <ul class="nav navbar-nav">
                <li><a href="/" rel="external nofollow"  rel="external nofollow" >Home</a></li>
            </ul>
        </div>
    </div>
</div>
{% endblock %}

{% block content %}
<div class="container">
    {% block page_content %}
    {% endblock %}
</div>
{% endblock %}

创建一个导航栏,并定义相关的 block 内容

接下来编写 404.html 文件,展示非法 url 请求地址时的页面

{% extends "base.html" %}

{% block title %}Page Not Found{% endblock %}

{% block page_content %}
<div class="page-header">
    <h1>Not Found</h1>
</div>
{% endblock %}

对于 index.html 文件,就是我们需要展示 K 线图的页面,我们后面再处理。

编辑主逻辑

首先编写一个检查股票正确性的函数

def check_stock(code):
    n = 0
    l = []
    stock_code = pd.read_csv("stock_code_name.csv", dtype=object)
    stock_code.drop('Unnamed: 0', axis=1, inplace=True)
    stock_list = stock_code.values.tolist()
    for i in stock_list:
        if code in i:
            n += 1
            l = i
        else:
            continue
    return n, l

如果股票正确,则返回 n=1,否则返回 n=0

接下来再编写获取股票数据的函数

def get_stock_data(code, ctime):
    df = ts.get_hist_data(code)
    mydate = df[:ctime].index.tolist()
    mydata = df[:ctime][['open', 'close', 'low', 'high']].values.tolist()
    return [mydate, mydata]

下面就是把 PyEcharts 集成到 Flask 应用了,可以按照官方的教程走,把 PyEcharts 的样式文件等拷贝到自己的 templates 目录下,再编写一个用于调用 kline_base() 函数的视图函数

@app.route("/Kline", methods=['GET', 'POST'])
def get_kline_chart():
    stock_name = request.form.get('stockName')
    query_time = request.form.get('queryTime')
    if not stock_name:
        stock_name = '平安银行'
    if not query_time:
        query_time = 30
    status, stock_code = check_stock(stock_name)
    if status == 0:
        return 'error stock code or name'
    mydate, mydata = get_stock_data(stock_code[0], int(query_time))
    c = kline_base(mydate, mydata, stock_code[1])
    return c.dump_options()

首先通过 request 变量获取到前端传递过来的数据,分别为 stockName 和 queryTime,如果这两个参数是空值时,则赋予它们一个默认值。

接着判断股票代码的正确性并获取股票历史数据。

最后调用 kline_base 函数画出 K 线图,并渲染到前端页面上。

前端页面编写

最后我们来完成前端页面的工作

首先定义一个表单,用于传递股票名称,查询时间

<form id="form1" onsubmit="return false" action="#" method="post">
             <p id="p1">股票名称:
                 <input name="stockName" type="text" id="stockName" tabindex="1" size="16" value="" placeholder="股票名称"/>
             </p>
             <p id="p2">查询时间:
                 <input name="queryTime" type="text" id="queryTime" tabindex="2" size="16" value="" placeholder="输入30查询近30天数据"/>
             </p>
             <p><input type="submit" value="查询" onclick="getData()"></p>
         </form>

然后就是通过 JQuery 来动态获取数据

function getData() {
            var chart = echarts.init(document.getElementById('kline'), 'white', {renderer: 'canvas'});
            $.ajax({
                type: "POST",
                dataType: "json",
                url: "/Kline" ,
                data: $('#form1').serialize(),
                success: function (result) {
                    chart.setOption(result);
                },
                error: function() {
                    alert("错误的股票代码!");
                }
            });
        }

最后我们看下整体的效果

到此这篇关于基于Python轻松制作一个股票K线图网站的文章就介绍到这了,更多相关Python股票K线图网站内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 使用Python画股票的K线图的方法步骤

    导言 本文简单介绍了如何从网易财经获取某支股票的价格数据,并根据价格数据画出相应的日K线图.有助于新手了解并使用Python的相关功能.包括列表.自定义函数.for循环.if函数以及如何使用matplotlib进行作图等内容. 第一步:从网易财经获取股票的价格数据 我一般是在网易财经查看某支股票的价格和成交数据,网易财经可以查到任意沪深的股票,我们使用招商银行的数据作为参考. 1.构建爬虫获取股票价格数据 这里不对Python做介绍了,如果需要了解什么是Python,可以自行百度或者访问Pyth

  • Python+Tkinter实现股票K线图的绘制

    目录 子窗口 子窗口框架 绘制K线图 在前面的文章中,我们一起学习了如何通过 Python 抓取东方财富网的实时股票数据以及如何制作成 Tkinter GUI 程序,链接如下 用 Python 爬取股票实时数据 Tkinter制作股票数据抓取小程序,有点秀! 今天我们就在这个基础上,在 Tkinter 程序中绘制 K 线图,一起来看看吧 子窗口 我们今天的整体代码还是基于上次的 Tkinter 股票程序,在主类 MainCreator 下面创建一个函数 create_subwindow     

  • Python绘制专业的K线图 源代码解析

    目录 1.股票数据 2.数据处理 3.绘制K线 4.去除图中非交易日 5.在K线图中,添加成交量 K线图简介: K线图又被成为"蜡烛图"."阴阳线"等,它在视觉效果上可以很清晰得凸显出市场多空形势,K线图成为大家查看行情数据以及各式量化分析不可或缺的一环.在K线图常见的时间跨度分钟.日.周以及月. K线由高开低收四个价格绘制而成.分为阳线与阴线两种,收盘价高于开盘价时为阳线,收盘价低于开盘价时为阴线:K线图的示意图如下: K线由矩形实体与上下两根影线组成,实体上方的

  • Python绘制K线图之可视化神器pyecharts的使用

    K线图 概念 股市及期货市bai场中的K线图的du画法包含四个zhi数据,即开盘dao价.最高价.最低价zhuan.收盘价,所有的shuk线都是围绕这四个数据展开,反映大势的状况和价格信息.如果把每日的K线图放在一张纸上,就能得到日K线图,同样也可画出周K线图.月K线图.研究金融的小伙伴肯定比较熟悉这个,那么我们看起来比较复杂的K线图,又是这样画出来的,本文我们将一起探索K线图的魅力与神奇之处吧! K线图 用处 K线图用处于股票分析,作为数据分析,以后的进入大数据肯定是一个趋势和热潮,K线图的专

  • python爬虫爬取股票的k线图

    目录 前言 数据来源分析 数据抓取 总结 前言 之前已经讲述了一些关于 python 获取基金的一些信息,最近又有了一些新发现,和大家分享一下,这个是非常重要的内容,非常重要的内容.这个数据也是非常的敏感,在一些搞量化交易的平台上,这些数据都是要收费的,而且数据的质量也不能保障.这个内容就是如何获取股票交易的 k 线数据. 数据来源分析 我是非常欣赏东方某富的,因为同为券商,和别的公司确实不大一样,有这互联网的基因,可以这样说,是因为它的出现改变了一些行业的规则.话不多说,这里以海尔智家为例,抓

  • 利用python numpy+matplotlib绘制股票k线图的方法

    一.python numpy + matplotlib 画股票k线图 # -- coding: utf-8 -- import requests import numpy as np from matplotlib import pyplot as plt from matplotlib import animation fig = plt.figure(figsize=(8,6), dpi=72,facecolor="white") axes = plt.subplot(111) a

  • 基于Python轻松制作一个股票K线图网站

    目录 获取股票数据 PyEcharts 作图 构建 Web 框架 视图函数编写 模板编写 编辑主逻辑 前端页面编写 在前面的文章中,我们学习了如何使用 Tkinter 构建股票数据抓取以及展示K线图功能,虽然大致的功能已经具备,但是在当今这个人手一个 Web 服务的年代,GUI 程序还是没有 Web 服务来的香啊. 我们需要用到的知识包括 PyEcharts 的使用,tushare 库获取股票数据的方法以及 Flask 的基本用法. 获取股票数据 我们先来看下 tushare 的使用,这个应该是

  • Python+OpenGL制作一个元宵花灯

    目录 1.准备 2.快速体验 3.模型动画 4.子图布局 5.颜色映射 6.走马灯 又是一年元宵节,作为程序员的你,打算怎么过呢?如果昨天情人节的红包发得手软又心疼,不妨静下心来,了解一下三维数据可视化,顺便做一盏花灯送给女朋友,也许比红包更能讨她欢心呢. 1.准备 三维数据快速可视化工具,我喜欢用WxGL.这是一个基于PyOpenGL的三维数据可视化库,提供类似Matplotlib风格的3D绘图函数.如果熟悉NumPy和Matplotlib的话,只需要几分钟时间就可以学会使用WxGL的交互式绘

  • Android版的股票行情K线图开发

    现在在手上的是一个证券资讯类型的app,其中有涉及到股票行情界面,行情中有K线图等,看到网上很多人在求这方面的资料,所以我特地写了一个demo在此处给大家分享一下. 下面是做出来的效果图: 背景图是利用canvas先画出一个矩形,然后再画几根虚线,均线图是通过path来绘制的,总之图的绘制是很简单的,我就不在这里作介绍了,大家可以去github下载源码看看.涉及到均线.最高价.最低价.收盘价.开盘价的概念大家可以百度一下. 我再这里要介绍的是计算问题: 大家可以看到分时图.日K.月K的左边的成交

  • 使用PyQtGraph绘制精美的股票行情K线图的示例代码

    pyqtgraph是Python平台上一种功能强大的2D/3D绘图库,相对于matplotlib库,由于其在内部实现方式上,使用了高速计算的numpy信号处理库以及Qt的GraphicsView框架,因此它在大数据量的处理及快速显示方面有着天然的优势,非常适合于需要快速绘图更新.视频或实时交互性的操作场合,在数学.科学和工程领域都有着广泛的应用. K线图介绍 对于股票交易者来讲,K线图是弄清股票一段时间走势的一种最基本的图形工具,K线分为阳线和阴线,阳线和阴线都包含了开盘价.收盘价.最高价和最低

随机推荐