计算机毕业设计:Python股票多维度诊断与LSTM预测平台 Flask框架 TensorFlow LSTM 数据分析 可视化 大数据 大模型(建议收藏)✅
1、项目介绍
技术栈
采用 Python 语言开发,基于 Flask 框架搭建后端服务,使用 SQLite 数据库进行数据存储,前端利用 Echarts 实现数据可视化,运用深度学习 TensorFlow 框架中的 LSTM 模型进行股票价格预测。
功能模块
· 用户注册
· 用户登录
· 用户找回密码
· 基本信息修改
· 股票数据实时获取
· 股票预测 LSTM
· 多种股票对比分析
· 行情可视化
· 股票组合投资建议
· 历史股票走势可视化
项目介绍
本系统基于 Flask 框架构建股票市场行情分析与预测平台,通过网络爬虫采集上证指数、创业板指数及个股数据,同时抓取公司简介、财务指标和机构预测等信息,并计算 KDJ、BOLL 等技术指标。系统提供大盘行情 K 线图、资金热点方向、资金诊断分析、股票对比分析、量化收益分析等功能模块,支持技术面与基本面的多维度分析。基于 TensorFlow 框架中的 LSTM 深度学习模型,用户可设置模型参数进行股价预测,以折线图展示历史与预测价格走势,为投资提供趋势分析参考。
2、项目界面
(1)大盘行情分析
该股票数据可视化页面,通过K线图结合布林带指标,展示大盘指数的历史走势,支持切换不同指数查看,并提供鼠标悬停查看详细交易数据的交互功能,帮助用户直观分析市场趋势。
(2)注册登录界面
该股票数据可视化系统首页,提供用户登录注册入口,并介绍股票信息采集、龙虎榜分析、股票诊断分析、可视化平台构建四大核心功能,为用户提供多维度的股票数据服务。
(3)资金热点方向
该页面为资金热点方向分析模块,以表格形式展示股票的排名、涨跌幅、所属板块及多周期主力资金净占比数据,可帮助用户快速识别市场资金流向与热门个股。
(4)资金诊断分析----技术面和基本面
该股票诊断分析页面,提供股票代码输入查询功能,以K线图结合布林带、KDJ、MACD等技术指标图表,直观展示个股的技术面走势与信号,帮助用户进行多维度的技术分析。
(5)股票对比分析----技术面和基本面对比
该股票对比分析页面,支持输入两只股票代码,提交后同步展示各自的K线及布林带走势图,并列出主要财务指标,可直观对比个股的技术面走势与基本面数据,辅助用户进行综合比较。
(6)股票量化收益分析----股票收益率量化分析与诊股
该股票量化收益分析页面,支持输入股票代码查询,以K线图结合布林带展示股价走势,并通过日收益率与累计收益率图表呈现收益波动,同时展示年化收益率与最大回撤等关键指标,为量化分析提供数据支撑。
(7)股票价格预测----LSTM神经网络预测(输入模型时间窗口、测试集数据占比、训练轮次)
该股票价格预测页面,基于LSTM神经网络模型,支持输入股票代码并设置模型参数,训练后以折线图对比展示历史价格与预测价格走势,直观呈现预测结果,辅助用户判断未来股价趋势。
3、项目说明
一、技术栈简要说明
本系统采用 Python 语言开发,基于 Flask 框架搭建后端服务,使用 SQLite 数据库进行数据存储,前端利用 Echarts 实现数据可视化,运用深度学习 TensorFlow 框架中的 LSTM 模型进行股票价格预测。
二、功能模块详细介绍
· 用户注册、登录、找回密码、基本信息修改
系统提供完整的用户账户管理功能。新用户可通过注册页面创建账户,已注册用户通过登录界面输入凭证进行身份验证。支持找回密码功能,用户可通过邮箱或其他验证方式重置密码。个人中心支持基本信息修改,包括昵称、联系方式等,保障用户账户安全与个性化管理。
· 大盘行情分析
该页面通过 K 线图结合布林带指标,展示大盘指数的历史走势,支持切换上证指数、创业板指数等不同指数查看,并提供鼠标悬停查看详细交易数据的交互功能,帮助用户直观分析市场整体趋势与波动规律。
· 股票数据实时获取
系统通过网络爬虫技术实时采集股票数据,包括上证指数、创业板指数等大盘指数以及个股行情,同时抓取股票公司的简介、财务指标和机构预测等信息,并进行 KDJ、BOLL 等技术指标的计算,为后续分析提供数据基础。
· 股票预测 LSTM
该页面基于 LSTM 神经网络模型进行股价预测。用户可输入股票代码并设置模型参数(如时间窗口、测试集数据占比、训练轮次),模型训练后以折线图对比展示历史价格与预测价格走势,直观呈现预测结果,辅助用户判断未来股价趋势。
· 多种股票对比分析
该页面支持输入两只股票代码,提交后同步展示各自的 K 线及布林带走势图,并列出主要财务指标,可直观对比个股的技术面走势与基本面数据,辅助用户进行综合比较,筛选更具投资价值的股票。
· 行情可视化
系统提供多维度行情可视化功能,包括大盘 K 线图、资金热点方向表格(展示股票排名、涨跌幅、所属板块及多周期主力资金净占比)、资金诊断分析(技术面 K 线图结合布林带、KDJ、MACD 等指标),帮助用户快速识别市场资金流向与个股技术信号。
· 股票组合投资建议
基于量化分析与技术面、基本面综合诊断,系统为用户提供股票组合投资建议,辅助投资者优化资产配置,降低单一股票风险,提升投资组合的稳健性。
· 历史股票走势可视化
系统支持查询个股的历史走势,以 K 线图结合布林带展示股价变化,并通过日收益率与累计收益率图表呈现收益波动,同时展示年化收益率与最大回撤等关键指标,为量化分析和历史回测提供数据支撑。
· 股票量化收益分析
该页面支持输入股票代码查询,以 K 线图结合布林带展示股价走势,并通过日收益率与累计收益率图表呈现收益波动,同时展示年化收益率与最大回撤等关键指标,为量化分析提供数据支撑,帮助用户评估股票的风险收益特征。
三、项目总结
本系统基于 Flask 框架构建股票市场行情分析与预测平台,通过网络爬虫采集上证指数、创业板指数及个股数据,同时抓取公司简介、财务指标和机构预测等信息,并计算 KDJ、BOLL 等技术指标。系统提供大盘行情 K 线图、资金热点方向、资金诊断分析、股票对比分析、量化收益分析等功能模块,支持技术面与基本面的多维度分析。用户可通过注册登录管理个人账户。基于 TensorFlow 框架中的 LSTM 深度学习模型,用户可设置模型参数进行股价预测,以折线图展示历史与预测价格走势,为投资提供趋势分析参考。系统整合了数据采集、可视化分析、量化评估与智能预测,为股票投资者提供了全面的决策支持工具。
4、核心代码
# 定义路由,预测股票价格@app.route('/predict_stock_price/<code>/<look_back>/<test_ratio>/<train_epochs>')defpredict_stock_price(code,look_back,test_ratio,train_epochs):# 获取股票历史数据prices_df=spider.get_stock_kline_factor_datas(security_code=code,period='day',market_type=None)prices_df=prices_df.sort_values(by='date',ascending=True)prices_df.to_excel('stock_data.xlsx',index=False)#保存数据print(prices_df.head())test_count=int(float(test_ratio)*prices_df.shape[0])# 计算测试集数量train=prices_df['close'].values.tolist()[:-test_count]# 获取训练集数据test=prices_df['close'].values.tolist()[-test_count:]# 获取测试集数据# 创建数据集defcreate_dataset(prehistory,dataset,look_back):dataX=[]dataY=[]history=prehistoryforiinrange(len(dataset)):x=history[i:(i+look_back)]y=dataset[i]dataX.append(x)dataY.append(y)history.append(y)returnnp.array(dataX),np.array(dataY)look_back=int(look_back)trainX,trainY=create_dataset([train[0]]*look_back,train,look_back)# 创建训练集testX,testY=create_dataset(train[-look_back:],test,look_back)# 创建测试集# 根据参数构建lstm模型defcreate_lstm_model():model=Sequential()model.add(Dense(6,input_dim=look_back,activation='relu'))model.add(Dropout(0.01))model.add(Dense(4,input_dim=look_back,activation='relu'))model.add(Dense(1))model.compile(loss='mean_absolute_error',optimizer='adam')returnmodel model=create_lstm_model()# 创建lstm模型train_epochs=int(train_epochs)model.fit(trainX,trainY,epochs=train_epochs,batch_size=4,verbose=1)# 训练模型# 计算模型的准确率train_score=model.evaluate(trainX,trainY,verbose=0)print('模型的准确率: %.2f'%(1-train_score))# 预测lstm_predictions=model.predict(testX)lstm_predictions=[float(r[0])forrinlstm_predictions]lstm_error=mean_absolute_error(testY,lstm_predictions)# 计算预测误差print('Test MSE: %.3f'%lstm_error)lstm_predictions=train+lstm_predictions# 将预测结果添加到训练集数据后面all_time=prices_df['date'].values.tolist()# 获取所有日期数据future_x=[]# 初始化未来预测数据列表pred_price=testY[-1]# 获取最后一个测试集数据的预测价格future_count=20# 设置未来预测天数forfutureinrange(future_count):ratio=random.random()/100ifrandom.random()>0.1else-random.random()/100# 随机生成涨跌比例pred_price*=(1+ratio)# 计算未来预测价格future_x.append(pred_price)# 将未来预测价格添加到列表中all_time.append('未来1交易日')# 将未来预测日期添加到列表中print(future_x)all_data=prices_df['close'].values.tolist()# 获取所有收盘价数据all_data+=[None]*5# 添加空值lstm_predictions=lstm_predictions+future_x# 将未来预测价格添加到预测结果中returnjsonify({'all_time':all_time,# 返回所有日期数据'all_data':all_data,# 返回所有收盘价数据'add_predict':lstm_predictions,# 返回预测结果'test_count':future_count,# 返回未来预测天数'error':lstm_error})# 返回预测误差# 定义路由,股票量化分析与诊股@app.route('/stock_quant_analysis/<stock_input>')defstock_quant_analysis(stock_input):""" 股票收益率量化分析与诊股 """market_type=Noneifstock_input=='上证指数':stock={'code':'000001','name':'上证指数'}market_type=1elifstock_input=='深证成指':stock={'code':'399001','name':'深证成指'}elifstock_input=='中小板指':stock={'code':'399005','name':'中小板指'}elifstock_input=='创业板指':stock={'code':'399006','name':'创业板指'}elifstock_input=='沪深300':stock={'code':'399300','name':'沪深300'}elifstock_input=='北证50':stock={'code':'899050','name':'北证50'}else:stock=search_stock_eastmoney(stock_input)print(stock)# 获取该股票的历史数据,前端绘制 K 线图# 获取历史K线数据stock_df=spider.get_stock_kline_factor_datas(security_code=stock['code'],period='day',market_type=market_type)stock_df=stock_df[['date','open','close','low','high']]stock_df.sort_values(by='date',ascending=True,inplace=True)kline_data=stock_df.values.tolist()# 计算 BOLL 指标stock_df['boll_mid']=stock_df['close'].rolling(26).mean()close_std=stock_df['close'].rolling(20).std()stock_df['boll_top']=stock_df['boll_mid']+2*close_std stock_df['boll_bottom']=stock_df['boll_mid']-2*close_std# 计算日收益率stock_df['pct_chg']=stock_df.close.pct_change()# 计算对数收益率stock_df['log_ret']=np.log(stock_df.close/stock_df.close.shift(1))# 计算累计收益率print('对数收益率进行累计求和,可以计算出所有时间点上的收益率')stock_df['cumulative_rets']=stock_df.log_ret.cumsum().values stock_df.fillna({'cumulative_rets':0},inplace=True)# 计算年化收益率year_ret=analysis_util.calc_annualized_returns(stock_df['cumulative_rets'].values[-1],days=stock_df.shape[0])# 计算最大回撤reward_days=analysis_util.calc_maximum_drawdown(stock_df['cumulative_rets'].values)name='{}({})'.format(stock['name'],stock['code'])hint='{},年化收益率:<span style="color:{}">{}</span>, 最大回撤:<span style="color:{}">{}</span>'.format(name,'red'ifyear_ret>0else'green','{:.4f}%'.format(year_ret*100),'red'ifreward_days>0else'green','{:.4f}%'.format(reward_days*100))stock_df.fillna('-',inplace=True)returnjsonify({'name':hint,'kline_data':kline_data,'boll_data':{'UPPER':stock_df['boll_top'].values.tolist(),'LOWER':stock_df['boll_bottom'].values.tolist(),'MIDDLE':stock_df['boll_mid'].values.tolist()},'date':stock_df['date'].values.tolist(),'日收益率':stock_df['pct_chg'].values.tolist(),'日对数收益率':stock_df['log_ret'].values.tolist(),'累计收益率':stock_df['cumulative_rets'].values.tolist(),})if__name__=="__main__":app.run(host='127.0.0.1',debug=False)