股票分析

效果图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

一、实现功能

  1. 在网上爬取股票信息。
  2. 对股票进行分析
    • 通过爬取的信息绘制股票的 k线图并绘制闭盘价格的平均线以及成交量加权平均价格线
    • 绘制开盘和闭盘的折线图并进行对比
    • 绘制涨跌额

二、实现思路

  1. 先通过网络爬虫获取数据
  2. 对数据进行解析并保存
  3. 分析实现的功能所需的库进行实现

三、实现步骤

代码实现中所需要的库

import requests #requests库进行网络爬虫获取数据
import numpy as np #支持大量的维度数组和矩阵运算,对数组运算提供了大量的数学函数库,也可以对文件进行操作
import matplotlib.pyplot as mp #数据可视化,绘图

下载数据并保存到本地

class Data(object): #定义一个Data的类
    def __init__(self):# 定义常量
        #获取并分析url地址对其惊醒拼接
        #code='股票代码'start='起始日期'end='终止日期'
    	self.url='http://quotes.money.163.com/service/chddata.html?code=0600730&start={}&end={}'



    def get_data(self):  #定义获取数据的函数
        
        star=eval(input('请输入起始日期:'))
        end=eval(input('请输入终止日期:'))
        
        #对目标地址发起请求
        #stream 默认值为false 设置为True以后不会立即下载当以块或者行进行便利或者访问内容属性才开始下载
        resource = requests.get(self.url.format(star,end), stream=True)

        with open("股票.csv", mode="wb") as f:

           for i in resource.iter_content(chunk_size=100):
               f.write(i)

定义数据分析的类

class Analyze_data(object):

获取爬取的信息

    def get_info(self):
      
    
    dates,closing_price,highest_prices,lowest_prices,opening_prices,volums,Change_price = np.loadtxt('股票.csv',
                        delimiter=',', usecols=(
            0,3,4,5,6,11,8), unpack=True, skiprows=1,dtype=str)
        closing_price=np.array([eval(i) for i in  list(closing_price)][::-1])
        opening_prices=np.array([eval(i) for i in list(opening_prices)][::-1])
        highest_prices=np.array([eval(i) for i in list(highest_prices)][::-1])
        lowest_prices=np.array([eval(i) for i in list(lowest_prices)][::-1])
        volums = np.array([eval(i) for i in list(volums)][::-1])
        Change_price =np.array([eval(i) for i in list(Change_price)][::-1])
        dates=dates[::-1]
        return dates,closing_price,opening_prices,highest_prices,lowest_prices,volums,Change_price

绘制k线图

    def k_line(self,dates,closing_price,opening_prices,highest_prices,lowest_prices,volums):

        mp.title('k-line')
        mp.xlabel('Day', fontsize=12)
        mp.ylabel('Price', fontsize=12)
        mp.grid(linestyle=':')
        #设置水平方向刻度定位器
        ax=mp.gca()
        ax.xaxis.set_major_locator(mp.AutoLocator())
        mp.plot(dates,closing_price,color='dodgerblue',linestyle='--',label='closing_price')

        #控制实体颜色
        rise = closing_price >= opening_prices

        color = np.array(['red' if x else 'limegreen' for x in rise])


        # 绘制实体
        mp.bar(dates, closing_price - opening_prices, 0.8,
               opening_prices, color=color,edgecolor=color,zorder=3)
        #绘制影线
        mp.vlines(dates,lowest_prices,highest_prices,color=color)

        #绘制平均价格
        mean = np.mean(closing_price)  # 计算平均值
        mp.hlines(mean, dates[0], dates[-1], color='blue', label='average value')

        # 计算VWAP - 成交量加权平均价格
        VWAP = np.average(closing_price, weights=volums)
        mp.hlines(VWAP, dates[0], dates[-1], color='red', label='VWAP')



        mp.legend()

绘制开盘和闭盘的折线图

    def line_chart(self,dates,opening_prices,closing_price):

        mp.title('line_chart')
        mp.xlabel('Day', fontsize=12)
        mp.ylabel('Price', fontsize=12)
        mp.grid(linestyle=':')
        # 设置水平方向刻度定位器
        ax = mp.gca()
        ax.xaxis.set_major_locator(mp.AutoLocator())
        mp.plot(dates, opening_prices, color='black', linestyle='--', label='opening_prices')
        mp.plot(dates, closing_price, color='red', linestyle='--', label='closing_price')
        mp.legend()

绘制涨跌额

    def change_price(self,dates,Change_price):
        ax = mp.gca()
        ax.xaxis.set_major_locator(mp.AutoLocator())
        rise = Change_price >0

        color = np.array(['red' if x else 'limegreen' for x in rise])
        mp.bar(dates, Change_price,0.8, color=color)

定义主函数

def main(self):

    dates, closing_price, opening_prices, highest_prices, lowest_prices ,volums,Change_price= a.get_info()
            mp.figure('可视化', facecolor='lightgray')
            axs0 = mp.subplot(121, facecolor='black')
            self.k_line(dates, closing_price, opening_prices, highest_prices, lowest_prices,volums)
            axs1 = mp.subplot(122, facecolor='#7FFF00')
            self.line_chart(dates,opening_prices, closing_price)
            mp.figure("涨跌额")
            axs0 = mp.subplot(111, facecolor='black')
            self.change_price(dates,Change_price)
            mp.show()

执行程序

if __name__=='__main__':

    d=Data()
    d.get_data()
    a = Analyze_data()
    a.main()

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值