温馨提示:文末有 CSDN 平台官方提供的学长 QQ 名片 :)
1. 项目简介
伴随全球经济一体化和我国经济的快速发展,中国股票市场对世界经济的影响力不断攀升,中国股市已成为全球第二大股票交易市场。在当今的金融市场中,股票价格的波动受到众多因素的影响,包括市场情绪、经济指标、公司业绩等。传统的分析方法往往难以捕捉到这些复杂因素的相互作用。
本项目利用 Python 网络爬虫技术从某财经网站实时采集A股各大指数、个股的 K线数据、公司简介、财务指标、机构预测、资金流向、龙虎榜等数据,并进行 KDJ、BOLL等技术指标的计算和收益率的量化计算,构建股票数据分析与预测系统,深入挖掘板块热点、资金流向、市场估值等,并利用 Tensorflow 深度学习框架构建 LSTM 神经网络,预测个股的未来走势。
通过该系统,用户可以更加科学地进行股票投资决策,提高投资回报率。通过不断优化算法模型与用户体验,未来有望将此系统推广至更广泛的场景中,为股票市场的量化分析与预测提供有力支持。
B站系统演示视频:【重磅升级,全网最优!】基于大数据的股票量化分析与预测系统_哔哩哔哩_bilibili
【重磅升级,全网最优!】基于大数据的股票量化分析与预测系统
2. 股票数据获取
数据获取是股票数据分析的第一步,找不到可靠、真实的数据,量化分析就无从谈起。随着信息技术的不断发展,数据获取渠道也越来越多,当前包括开源的股票数据获取的工具:tushare、baostock、pandas_datareader和yahool等财经数据API,这样可以节省不少精力。当这些开源的API接口不能满足自己特定场景的股票数据需求的时候,本项目利用 Python 编写网络爬虫采集某财经网站的行情数据。采集的数据包括:
1、指数或个股的模糊搜索;
2、获取个股的 K 线和基本指标数据;
3、个股基本面信息获取;
4、个股的最新核心题材;
5、A股的资金流的最新排名;
6、个股主力资金占比排名;
7、交易日的涨停板数据;
8、沪深两市实时资金流;
9、获取南向实时资金流;
10、获取市场的市盈率和市净率的估值数据
11、A 股的所有股票最新排名榜单
12、......
以采集交易日的涨停板数据为例:
def get_limit_up_stocks(self, trade_date, page_index=0, pagesize=100):
"""
获取交易日的涨停板数据,注意网站中收录的涨停板不包含 ST 股
http://quote.eastmoney.com/ztb/detail#type=ztgc
Args:
trade_date: 交易日期,%Y%m%d 格式,20230901
page_index: 当前页下标
pagesize: 分页大小,默认最大千股涨停。。。
"""
time_token = int(time.time() * 1000)
base_url = 'https://push2ex.eastmoney.com/getTopicZTPool?ut=7eea3edcaed734bea9cbfc24409ed989&dpt=wz.ztzt&Pageindex={}&pagesize={}&sort=fbt%3Aasc&date={}&_={}'
url = base_url.format(page_index, pagesize, trade_date, time_token)
print(url)
headers = {
'Accept': '*/*',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
'Connection': 'keep-alive',
"Cookie": "Your cookie",
"Host": "push2ex.eastmoney.com",
"Referer": "https://quote.eastmoney.com/ztb/detail",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36",
}
resp = requests.get(url, headers=headers)
resp.encoding = 'utf8'
resp = json.loads(resp.text)['data']
if resp is None:
return []
stock_datas = resp['pool']
columns_map = {
'c': '证券代码',
'n': '证券名称',
'zdp': '涨跌幅',
'p': '最新价',
'amount': '成交额',
'ltsz': '流通市值',
'tshare': '流通市值',
'hs': '换手率',
'fund': '封板资金',
'zbc': '炸板次数',
'zttj': '涨停统计',
'hybk': '行业板块'
}
limit_up_stocks = []
for stock_info in stock_datas:
limit_up_stock = {}
for c in stock_info:
if c in columns_map:
value = stock_info[c]
if c == 'zttj':
value = '{}天{}板'.format(stock_info[c]['days'], stock_info[c]['ct'])
limit_up_stock[columns_map[c]] = value
limit_up_stock['交易日期'] = trade_date
limit_up_stocks.append(limit_up_stock)
return limit_up_stocks
获取个股的 K 线和基本技术指标数据,可支持采集日线、周线、月线级别的 K 线数据:
def get_stock_kline_factor_datas(self, security_code, period, market_type):
"""
获取个股的 K 线和基本指标数据
Args:
security_code: 股票代码
period: 周期: day、week、month
"""
if not market_type:
security_type = security_util.get_security_type(security_code)
market_type = int(security_type == 'SH')
print('market_type:', market_type)
# 根据当前时间,计算 beg 值
cur_date = datetime.now()
if period == 'day':
begin_date = cur_date + timedelta(days=-1200)
begin_date = begin_date.strftime('%Y%m%d')
url = f'https://push2his.eastmoney.com/api/qt/stock/kline/get?fields1=f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13&fields2=f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61&beg={begin_date}&end=20500101&ut=fa5fd1943c7b386f172d6893dbfba10b&rtntype=6&secid={market_type}.{security_code}&klt=101&fqt=1'
elif period == 'week':
begin_date = cur_date + timedelta(days=-120)
begin_date = begin_date.strftime('%Y%m%d')
url = f'https://push2his.eastmoney.com/api/qt/stock/kline/get?fields1=f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13&fields2=f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61&beg={begin_date}&end=20500101&ut=fa5fd1943c7b386f172d6893dbfba10b&rtntype=6&secid={market_type}.{security_code}&klt=102&fqt=1'
elif period == 'month':
begin_date = cur_date + timedelta(days=-250)
begin_date = begin_date.strftime('%Y%m%d')
url = f'https://push2his.eastmoney.com/api/qt/stock/kline/get?fields1=f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13&fields2=f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61&beg={begin_date}&end=20500101&ut=fa5fd1943c7b386f172d6893dbfba10b&rtntype=6&secid={market_type}.{security_code}&klt=103&fqt=1'
else:
raise ValueError(f'暂不支持 {period} 类型周期')
resp = requests.get(url)
resp.encoding = 'utf8'
resp_data = resp.json()['data']
security_name = resp_data['name']
klines = resp.json()['data']['klines']
all_stock_info = []
for kline in klines:
# 日期, 开盘, 收盘, 最高, 最低, 成交量, 成交额, 振幅, 涨跌幅, 涨跌额, 换手率
datas = kline.split(',')
stock_info = {
'date': datas[0],
'code': security_code,
'name': security_name,
'open': float(datas[1]),
'close': float(datas[2]),
'high': float(datas[3]),
'low': float(datas[4]),
'volume': float(datas[6])
}
all_stock_info.append(stock_info)
stock_df = pd.DataFrame(all_stock_info)
stock_df.to_csv(f"./dataset/kline/{security_code}.csv", index=False, encoding='utf8')
return stock_df
网络爬虫代码接近1000行,此处篇幅限制,暂不一一列出。
3. 股票量化分析与预测系统
3.1 系统注册登录
用户需要先完成注册过程才能使用系统的所有功能。注册时需提供基本信息如用户名、密码等,并设置个人信息保护措施。登录后,用户可以根据自身需求选择不同的服务项目。
前端基于 Bootstrap 框架实现扁平石响应式页面:
<section class="ftco-section" style="margin-top: 50px;">
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8 text-center mb-5">
<h2 class="heading-section">欢迎使用“基于大数据的股票量化分析与预测系统”</h2>
</div>
</div>
<div class="row justify-content-center">
<div class="col-md-12 col-lg-10">
<div class="wrap d-md-flex">
<div class="img" style="background-image: url(../static/img/login.jpeg);">
</div>
<div class="login-wrap p-4 p-md-5">
<div class="d-flex">
<div class="w-100">
<h3 class="mb-4">用户注册</h3>
</div>
<div class="w-100">
<p class="social-media d-flex justify-content-end">
<a href="#"
class="social-icon d-flex align-items-center justify-content-center"><span
class="fa fa-facebook"></span></a>
<a href="#"
class="social-icon d-flex align-items-center justify-content-center"><span
class="fa fa-twitter"></span></a>
</p>
</div>
</div>
<form action="#" class="signin-form">
<div class="form-group mb-3">
<label class="label" for="name">用户名</label>
<input type="text" class="form-control" placeholder="Username" required id="name" >
</div>
<div class="form-group mb-3">
<label class="label" for="password">密 码</label>
<input type="password" class="form-control" placeholder="Password" required id="password">
</div>
<div class="form-group">
<button type="submit" id="submit" class="form-control btn btn-primary rounded submit px-3">注册</button>
</div>
</form>
<p class="text-center">已有账号? <a data-toggle="tab" href="/login">直接登录</a></p>
</div>
</div>
</div>
</div>
</div>
</section>
(1)新用户注册
(2)用户登录
3.2 系统首页
主页提供简洁明了的界面设计,用户可以通过主页快速了解系统的基本功能和所包含的核心模块。
3.3 大盘指数行情
实时采集上证指数、深证成指、创业板指、中小板指和沪深300指数的日线行情数据,利用 echarts 进行股票 K 线数据的可视化:
3.4 个股量化分析
支持个股的股票代码、股票名称、名称缩写等形式的股票模糊搜索,个股的量化分析包括:个股的 K线行情数据、公司简介、核心财务指标、机构预测、核心概念板块等。
(1)个股K线与公司简介
(2)主要财务指标与机构预测
(3)个股的核心概念板块
3.5 涨停板热点分析
通过选择交易日的日期,系统实时采集当天的涨停板个股数据,统计不同行业博客的涨停股票数据分布和涨停股的成交额占比分布,并将当天的涨停板的股票信息、成交额、流通市值、换手率、封板资金、炸板统计、行业板块等信息进行表格展示:
(1)热点行业板块涨停板数量分布
(2)当日涨停股票池
涨停股票池表格中,点击股票代码或股票名称,可直接跳转到该个股的量化分析页面。
3.6 大盘资金流向
实时采集交易日的大盘资金流向,包括:
- 沪深两市实时资金流(主力、超大单、大单、中单和小单的实时资金流)
- 南向资金的实时资金流(港股通(沪)、港股通(深)的实时净买额)
3.7 市场基本面估值分析
市场的基本面估值包括大盘市盈率TTM、大盘市净率 MRQ两个维度,同时对近5年大盘市盈率的30、50、70分位数进行对比:
3.8 龙虎榜热股排名
采集交易日的龙虎榜数据,挖掘最新资金热点方向,击股票代码或股票名称,可直接跳转到该个股的量化分析页面。
3.9 个股收益量化分析
支持个股的股票代码、股票名称、名称缩写等形式的股票模糊搜索,分析该个股的每日涨跌幅收益率、和累计收益率情况:
3.10 基于 LSTM 神经网络的股票价格预测
利用 Tensorflow 框架构建 LSTM 神经网络,预测某一只股票的未来走势,系统支持在线的参数调试,以观察不同参数对预测性能的影响,对于历史数据,计算模型预测的误差,以作为趋势预测的参考。
4. 总结
本项目利用 Python 网络爬虫技术从某财经网站网站实时采集A股各大指数、个股的 K线数据、公司简介、财务指标、机构预测、资金流向、龙虎榜等数据,并进行 KDJ、BOLL等技术指标的计算和收益率的量化计算,构建股票数据分析与预测系统,深入挖掘板块热点、资金流向、市场估值等,并利用 Tensorflow 深度学习框架构建 LSTM 神经网络,预测个股的未来走势。
B站系统演示视频:【重磅升级,全网最优!】基于大数据的股票量化分析与预测系统_哔哩哔哩_bilibili
欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。技术交流、源码获取认准下方 CSDN 官方提供的学长 QQ 名片 :)
精彩专栏推荐订阅:
1. Python-数据挖掘实战案例
2. Python-深度学习实战案例
3. Python-管理系统实战案例