股票分析
程序员文章站
2022-04-22 13:13:08
...
效果图
一、实现功能
- 在网上爬取股票信息。
- 对股票进行分析
- 通过爬取的信息绘制股票的 k线图并绘制闭盘价格的平均线以及成交量加权平均价格线
- 绘制开盘和闭盘的折线图并进行对比
- 绘制涨跌额
二、实现思路
- 先通过网络爬虫获取数据
- 对数据进行解析并保存
- 分析实现的功能所需的库进行实现
三、实现步骤
代码实现中所需要的库
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()