博主介绍:✌全网粉丝10W+,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战6年之久,选择我们就是选择放心、选择安心毕业✌
> 🍅想要获取完整文章或者源码,或者代做,拉到文章底部即可与我联系了。🍅🍅感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助同学们顺利毕业 。🍅
1、毕业设计:2025年计算机专业毕业设计选题汇总(建议收藏)✅
2、大数据毕业设计:2025年选题大全 深度学习 python语言 JAVA语言 hadoop和spark(建议收藏)✅
1、项目介绍
技术栈:
python语言、Flask框架、Tensorflow深度学习、LSTM神经网络算法股票价格预测、scikit-learn机器学习、东方财富、Echarts可视化、HTML
2、项目界面
(1)涨停板热点分析—热点行业板块涨停板数量分布直方图、不同行业板块的成交额占比分布、当日涨停股票池
(2)首页—功能模块介绍
(3)大盘指数行情分析—上证、深证、创业板、中小指、沪深300指数K线图
(4)个股量化分析—输入股票代码,全方位分析
(5)大盘资金流向分析—沪深两市实时资金流向、南向实时资金流向
(6)大盘市场基本面估值分析----市盈率分布、市净率分布
(7)个股收益量化分析—日收益率、月收益率、累计收益率
(8)股票价格预测----输入特征值:股票代码、模型时间窗口、测试集占比、训练轮次
(9)龙虎榜热股排名
(10)注册登录模块
3、项目说明
1. 涨停板热点分析
- 热点行业板块涨停板数量分布直方图:展示当前市场中各个行业板块涨停板数量的分布情况,帮助用户快速了解哪些行业板块表现活跃。
- 不同行业板块的成交额占比分布:分析各行业板块的成交额占比,反映市场资金的流向和热点板块。
- 当日涨停股票池:列出当日涨停的股票及其相关信息,方便用户关注热门股票。
2. 首页——功能模块介绍
- 首页通常会提供项目的整体介绍和各个功能模块的入口。用户可以通过首页快速导航到感兴趣的功能模块,例如涨停板分析、大盘指数行情分析、个股量化分析等。
3. 大盘指数行情分析
- 展示上证、深证、创业板、中小指、沪深300等主要指数的K线图。通过K线图,用户可以直观地观察指数的历史走势和当前趋势,分析市场的整体表现。
4. 个股量化分析
- 用户输入股票代码后,系统将对该股票进行全方位分析,包括:
- 技术指标分析:如均线、MACD、KDJ等,帮助用户判断股票的短期走势。
- 基本面分析:如市盈率、市净率、股息率等,评估股票的内在价值。
- 历史数据展示:提供股票的历史价格走势和交易数据。
5. 大盘资金流向分析
- 沪深两市实时资金流向:展示沪深两市的资金流入流出情况,帮助用户判断市场的资金动向。
- 南向实时资金流向:分析南向资金的流向,反映外资对市场的态度。
6. 大盘市场基本面估值分析
- 市盈率分布:展示市场整体或特定板块的市盈率分布情况,帮助用户评估市场的估值水平。
- 市净率分布:分析市净率的分布,为投资者提供参考。
7. 个股收益量化分析
- 提供个股的日收益率、月收益率、累计收益率等数据,帮助用户评估股票的投资收益情况。通过这些数据,用户可以更好地了解股票的收益特征和风险水平。
8. 股票价格预测
- 功能描述:
- 用户输入股票代码、模型时间窗口、测试集占比、训练轮次等参数。
- 系统利用LSTM神经网络模型对股票价格进行预测,输出未来一段时间内的价格预测结果。
- 提供预测结果的可视化展示,帮助用户直观地了解预测趋势。
- 技术实现:
- 使用 TensorFlow 框架构建 LSTM 模型。
- 通过机器学习算法(如 scikit-learn)进行数据预处理和特征提取。
- 使用历史价格数据训练模型,并对未来的股票价格进行预测。
9. 龙虎榜热股排名
- 展示当前市场中龙虎榜上榜的热门股票及其排名。龙虎榜数据通常反映了市场中机构和游资的关注焦点,对投资者具有一定的参考价值。
10. 注册登录模块
- 功能描述:
- 提供用户注册和登录功能,支持用户名和密码登录。
- 后台权限管理,限制非管理员身份登录后台,确保数据安全。
- 技术实现:
- 使用 Flask 框架搭建后端接口,处理用户注册和登录请求。
- 使用 HTML 和前端技术实现注册和登录界面。
项目说明
基于LSTM神经网络的股票价格预测
- 原理和流程:
- 数据收集:通过爬虫技术从东方财富等金融数据源获取股票的历史K线数据。
- 数据预处理:对数据进行排序、归一化处理,并划分为训练集和测试集。
- 创建数据集:将数据转换为适合LSTM模型的输入格式,例如时间序列数据。
- 构建模型:使用 TensorFlow 框架构建LSTM模型,包含LSTM层、Dropout层和输出层。
- 训练模型:使用训练集数据对模型进行训练,优化模型参数。
- 模型预测:使用训练好的模型对测试集数据进行预测,并计算预测误差。
- 结果输出:将预测结果以可视化图表(如Echarts)的形式展示给用户。
这个项目通过整合 Python、Flask、TensorFlow、LSTM 等技术栈,实现了股票价格预测、市场分析、个股量化分析等多种功能,为投资者提供了一个全面、便捷的金融数据分析工具。
4、核心代码
#!/usr/bin/python
# coding=utf-8
from flask import jsonify, Blueprint
import pandas as pd
import numpy as np
import json
from service.stock_spider import EastmoneySpider
from service import tech_util
import service.analysis_util as analysis_util
import random
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, LSTM, LSTM
from sklearn.metrics import mean_absolute_error
api_blueprint = Blueprint('api', __name__)
em_spider = EastmoneySpider()
@api_blueprint.route('/search_stock_index/<stock_input>')
def search_stock_index(stock_input):
"""
搜索大盘指数或个股的行情数据
"""
market_type = None
if stock_input == '上证指数':
stock = {'code': '000001', 'name': '上证指数'}
market_type = 1
elif stock_input == '深证成指':
stock = {'code': '399001', 'name': '深证成指'}
elif stock_input == '中小板指':
stock = {'code': '399005', 'name': '中小板指'}
elif stock_input == '创业板指':
stock = {'code': '399006', 'name': '创业板指'}
elif stock_input == '沪深300':
stock = {'code': '399300', 'name': '沪深300'}
elif stock_input == '北证50':
stock = {'code': '899050', 'name': '北证50'}
else:
stock = em_spider.stock_index_search(stock_input)
# 获取该股票的历史数据,前端绘制 K 线图
# 获取历史K线数据
stock_df = em_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', 'volume']]
stock_df.sort_values(by='date', ascending=True, inplace=True)
kline_data = stock_df.values.tolist()
# 计算 MA 指标
stock_df['MA5'] = tech_util.MA(stock_df['close'], N=5)
stock_df['MA10'] = tech_util.MA(stock_df['close'], N=10)
stock_df['MA20'] = tech_util.MA(stock_df['close'], N=20)
stock_df['MA60'] = tech_util.MA(stock_df['close'], N=60)
stock_df.fillna('-', inplace=True)
return jsonify({
'name': '{}({})'.format(stock['name'], stock['code']),
'dates': stock_df['date'].values.tolist(),
'klines': kline_data,
'volumes': stock_df['volume'].values.tolist(),
'tech_datas': {
'MA5': stock_df['MA5'].values.tolist(),
'MA10': stock_df['MA10'].values.tolist(),
'MA20': stock_df['MA20'].values.tolist(),
'MA60': stock_df['MA60'].values.tolist()
}
})
@api_blueprint.route('/query_jibenmian_info/<stock_input>')
def query_jibenmian_info(stock_input):
"""获取基本面信息"""
stock = em_spider.stock_index_search(stock_input)
zyzb_table, jgyc_table, gsjj, gsmc = em_spider.get_ji_ben_mian_info(stock['code'])
# 股票的核心题材
concept_boards = em_spider.get_stock_core_concepts(stock['code'])
print(concept_boards)
# 概念板块html
concept_html = """
<div class="">
<div class="card-header">
<h3>核心概念板块</h3><hr/>
</div>
<div class="">
<table class="table table-hover" style="table-layout:fixed;word-break:break-all;">
<thead>
<tr>
<th scope="col" width="8%">#</th>
<th scope="col" width="10%">概念板块</th>
<th scope="col" width="70%">概念解读</th>
<th scope="col" width="12%">最新涨幅</th>
</tr>
</thead>
<tbody>
{}
</tbody>
</table>
</div>
</div>
"""
trs = ''
for i, conenpt in enumerate(concept_boards):
trs += """
<tr>
<td>{}</td>
<td>{}</td>
<td>{}</td>
<td style="color: {}">{}%</td>
</tr>
""".format(i+1, conenpt['board_name'], conenpt['board_reason'], 'red' if conenpt['board_yield']>0 else 'green' ,conenpt['board_yield'])
concept_html = concept_html.format(trs)
return jsonify({
'zyzb_table': zyzb_table,
'jgyc_table': jgyc_table,
'gsjj': gsjj,
'gsmc': gsmc,
'concept_boards': concept_html
})
@api_blueprint.route('/limitup_analysis/<trade_date>')
def limitup_analysis(trade_date):
"""涨停板热点分析"""
print(trade_date)
trade_date = trade_date.replace('-', '')
limit_up_stocks = em_spider.get_limit_up_stocks(trade_date=trade_date)
print(json.dumps(limit_up_stocks, ensure_ascii=False))
trs = ''
concept_counts = {}
concept_moneys = {}
for i, stock in enumerate(limit_up_stocks):
if stock['行业板块'] not in concept_counts:
concept_counts[stock['行业板块']] = 0
concept_counts[stock['行业板块']] += 1
if stock['行业板块'] not in concept_moneys:
concept_moneys[stock['行业板块']] = 0
concept_moneys[stock['行业板块']] += stock['成交额']
tr = """
<tr>
<th scope="row">{}</th>
<td><a href="http://127.0.0.1:5000/stock_info?search={}" target="_blank">{}</a></td>
<td><a href="http://127.0.0.1:5000/stock_info?search={}" target="_blank">{}</a></td>
<td style="color:red">{}%</td>
<td>{}</td>
<td>{}</td>
<td>{}</td>
<td>{}</td>
<td>{}</td>
<td>{}</td>
<td>{}</td>
<td>{}</td>
<td>{}</td>
</tr>
""".format(i+1, stock['证券代码'], stock['证券代码'], stock['证券名称'], stock['证券名称'],
round(stock['涨跌幅'], 2), stock['最新价'], round(stock['成交额'] / 100000000, 3),
round(stock['流通市值'] / 100000000, 3), round(stock['换手率'], 2),
round(stock['封板资金'] / 100000000, 3), stock['炸板次数'],
stock['涨停统计'], stock['行业板块'], stock['交易日期'])
trs += tr
# 行业板块数量分布
concept_counts = sorted(concept_counts.items(), key=lambda x: x[1], reverse=True)
print(concept_counts)
concepts = [c[0] for c in concept_counts]
# 行业板块资金流入占比
result = {
'tbody': trs,
'concept': concepts,
'limit_up_count': [c[1] for c in concept_counts],
'concept_moneys': [concept_moneys[c] for c in concepts]
}
return jsonify(result)
@api_blueprint.route('/predict_stock_price/<code>/<look_back>/<test_ratio>/<train_epochs>')
def predict_stock_price(code, look_back, test_ratio, train_epochs):
"""股票价格预测"""
prices_df = em_spider.get_stock_kline_factor_datas(security_code=code, period='day', market_type=None)
prices_df = prices_df.sort_values(by='date', ascending=True)
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:]
def create_dataset(prehistory, dataset, look_back):
dataX = []
dataY = []
history = prehistory
for i in range(len(dataset)):
x = history[i:(i + look_back)]
y = dataset[i]
dataX.append(x)
dataY.append(y)
history.append(y)
return np.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)
print(trainX.shape, testX.shape)
# 根据参数构建lstm模型
def create_lstm_model():
"""
单层 LSTM 神经网络
"""
d = 0.2
model = Sequential()
model.add(LSTM(16, input_shape=(look_back, 1), return_sequences=False))
model.add(Dropout(d))
model.add(Dense(1, activation='relu'))
model.compile(loss='mse', metrics=['mae'])
return model
model = create_lstm_model()
train_epochs = int(train_epochs)
model.fit(trainX, trainY, epochs=train_epochs, batch_size=4, verbose=1)
# predict
lstm_predictions = model.predict(testX)
lstm_predictions = [float(r[0]) for r in lstm_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 = 10
i = 0
test_x = prices_df['close'].values.tolist()[-look_back:]
test_x = np.array([test_x])
print('test_x:', test_x)
print('test_x:', test_x.shape)
for future in range(future_count):
i += 1
# ratio = random.random() / 100 if random.random() > 0.5 else -random.random() / 100
# pred_price *= (1 + ratio)
pred_price = model.predict(test_x)[0][0]
pred_price = float(pred_price)
test_x = test_x[0][1:]
test_x = np.append(test_x, pred_price)
test_x = np.array([test_x])
print('test_x:', test_x)
future_x.append(pred_price)
all_time.append(f'未来{i}个交易日')
# print(future_x)
all_data = prices_df['close'].values.tolist()
all_data += [None] * 5
lstm_predictions = lstm_predictions + future_x
return jsonify({'all_time': all_time,
'all_data': all_data,
'add_predict': lstm_predictions,
'test_count': future_count,
'error': lstm_error})
5、源码获取方式
🍅由于篇幅限制,获取完整文章或源码、代做项目的,查看我的【用户名】、【专栏名称】、【顶部选题链接】就可以找到我啦🍅
感兴趣的可以先收藏起来,点赞、关注不迷路,下方查看👇🏻获取联系方式👇🏻