基于python 的股市行情查询系统开发(二)
拖更的我终于回来了,这一周lz上班上的是心力憔悴啊,工作日都没什么时间继续开发,忙于各种蛋疼的事,进度缓慢呐。。。(插一句,这周股票回暖,牛市是不是又回来了?截止到lz目前,比特币也突破了60000刀!)
废话不多说了,书接上回,我们获取了股票名称和股票代码:
那么,我们就可以通过股票代码,使用爬虫进行历史的数据的获取啦。
getstockdata.py
import urllib.request
import urllib
import requests as re
import datetime
url = 'http://quotes.money.163.com/service/chddata.html?code=' #网易的历史行情数据api
urlend = 'fields=TCLOSE;HIGH;LOW;TOPEN;CHG;PCHG;TURNOVER;VOTURNOVER;VATURNOVER;TCAP;MCAP' #代表数据的最高价,最低价,开盘价,收盘价,涨跌幅等等
path = "D:\\股票数据\\" #存取路径
def get_todaydate(): #获取最新日期
date = datetime.datetime.now().strftime('%Y%m%d')
return date
def get_stockdata(): #获取
date = get_todaydate()
stock_list = sub.read_from_csv("D:\\投资\\stocklist.csv") #路径填写股票代码文件的路径
for stock in stock_list:
stock_name = stock[0] #文件名称
if '股票名称' in stock_name: #第一行我们不需要
continue
if "*" in stock_name:
stock_name = stock_name.replace('*',"(星)") #windows文件不能以*开头命名,所以在下出此下策代替- -
r = re.get(url+'0'+stock[1]+'&end='+date+urlend) #上证股票代码前加0开头 深证股票代码加1开头
with open(path+stock_name+'.csv','w',newline='',encoding='utf-8') as csvfile:
print('正在写入股票'+ stock_name) #写入文件
csvfile.write(r.text)
好啦 ,我们执行以下,看看怎么样:
正在跑,开始写入文件了,看看对不对:
文件大小不是0kb,有数据了,打开看看数据完整不,这里我们点个中远海控的数据看看:
数据是有了,成交笔数测试了很久,好像目前是没有的。。。
上证目前有1700多只股票,数据一般要下一个多小时,目前我已经把数据打包上传资源了,链接在这上证A股历史股票数据.
好了,我们已经获取了上证A股历史数据了。那么就要用这些数据进行分析了,首先,导入pandas包,不用过多解释,强大的数据统计分析模块,可以快速地对数据进行分类分组等等。
首先,一个股票最基本的通过它的价格就应该得出他的均线,比如说5日线啊,10日线啊,30日,60日等等,这里我就举例上证指数来画均线。
首先,导入上证指数的数据,上证的代码为000001,同理获取数据。
drawplot.py
import requests
import time
import re
import csv
import pandas as pd
from pylab import mpl
import pil
import datetime
import matplotlib.pyplot as plt
import numpy as np
df = pd.read_csv('D:\\股票数据\\上证指数.csv',header=0,index_col=0)#index_col指定索引,默认我们选择是日期
df1 = df.iloc[::-1] #由于数据是从大到小的,我们应该将其倒序,pandas中的dataframe支持数据的各类操作。
df0 = df1[['收盘价']] #计算均线我们只需要收盘价
stockcode = df.iloc[0,0] #获取股票名字和代码
stockname = df.iloc[1,1]
df_mean5 = df1.rolling(window=5).mean() #5日线 rolling方法计算出均值
df_mean5 =df_mean5.rename(columns={'收盘价':'MA5'})
df_mean10 = df1.rolling(window=10).mean() #10日线
df_mean10 =df_mean10.rename(columns={'收盘价':'MA10'})
df_mean20 = df1.rolling(window=20).mean()#20日线
df_mean20 =df_mean20.rename(columns={'收盘价':'MA20'})
df_mean60 = df1.rolling(window=60).mean()#60日线
df_mean60 =df_mean60.rename(columns={'收盘价':'MA60'})
print(df_mean5) # 输出5日均线数据
看看输出数据:
看看财经网站上的大盘日k线数据,验证一下
完全正确,成功!接下来我们进行收盘价的曲线描绘:
#concat表示拼接多个dataframe
df_new = pd.concat([df1,df_mean10,df_mean20,df_mean60,df_mean240],axis=1) #axis=1表示按行进行拼接两个dataframe
df_new.plot(kind = 'line',sharex = True,sharey = True,figsize=(50,8),title=stockcode+stockname,grid=True,fontsize=13)
#pandas中plot进行画图
plt.show()
生成的图标如图:
额,由于是从1990到最新日期的大盘点数,比较密集,我们放大看一下2015年左右的数据:
传说中的大牛市就呈现在我们面前啦!
(未完待续。。。)