1、项目介绍
技术栈
采用 Python 语言开发,基于 Flask 框架搭建后端服务,Vue 框架构建前端交互界面,通过 IG507 金融数据接口获取实时股票数据,运用 ARIMA 时间序列预测算法进行股价预测,前端使用 Echarts 实现数据可视化。
功能模块
· 股票数据 K 线图
· 股票预测
· 日 K 线图、周 K 线图、月 K 线图
· 股市风向标
· 系统首页
· 股票信息
项目介绍
本系统基于 Flask 和 Vue 框架构建股票数据分析预测平台,通过 IG507 金融数据接口获取实时股票数据。系统提供个股 K 线图(分时图、日/周/月 K 线),叠加均线并支持悬停查看详情;基于 ARIMA 时间序列算法对股价进行预测,以折线图对比实际值与预测值走势。股市风向标模块展示交易所公告、停牌信息及涨跌排行榜;股票列表支持按概念板块或代码筛选,查看实时交易数据与公司基本信息。系统帮助用户快速获取市场动态与个股分析结果。
2、项目界面
(1)股票数据K线图
该页面为股票数据分析预测系统的股票预测模块,展示了平安银行的日K线图,可切换分时图、日/周/月K线图及股票预测视图,K线图叠加了多条均线并支持悬停查看单天数据,呈现股票价格走势与相关指标信息。

(2)股票预测
该页面是股票数据分析预测系统中平安银行的股票预测模块,可切换分时图、日/周/月K线图及股票预测视图,图中以折线形式对比展示了股票实际价格走势与预测价格走势,支持悬停查看单天的实际与预测数据,呈现股票价格的实际表现与预测结果对比。

该页面为股票数据分析预测系统的股票列表及详情模块,左侧支持按概念板块或股票代码筛选股票,右侧弹窗可查看选中股票的实时交易数据,支持刷新获取最新数据,展示了个股的交易核心指标信息。

(3)日K线图、周K线图、月K线图
该页面为股票数据分析预测系统的个股详情模块,展示了东方财富的日K线图,可切换分时图、日/周/月K线图及股票预测视图,K线图叠加了多条均线,支持悬停查看单天的交易数据,直观呈现股票价格走势与相关指标信息。

(4)股市风向标:交易所公告、排行榜
该页面为股票数据分析预测系统的股市风向标模块,可按停牌、交易所公告、涨跌排行等标签切换查看,展示当日股票相关公告与市场动态信息,帮助用户快速获取股市资讯与动向。

(5)系统首页
该页面为Python股票数据分析预测系统的首页,展示了系统机构框架,包含股票列表、股市风向标、龙虎榜及用户信息等模块,清晰呈现了系统各功能的分类与层级结构,帮助用户快速了解系统功能分布。

(6)股票信息
该页面为股票数据分析预测系统的个股详情模块,展示了东方财富的公司基础信息,包括名称、交易所、成立日期、注册地址、概念板块及公司介绍等内容,帮助用户全面了解个股的背景信息。

3、项目说明
一、技术栈简要说明
本系统采用 Python 语言开发,基于 Flask 框架搭建后端服务,Vue 框架构建前端交互界面,通过 IG507 金融数据接口获取实时股票数据,运用 ARIMA 时间序列预测算法进行股价预测,前端使用 Echarts 实现数据可视化。
二、功能模块详细介绍
· 股票数据 K 线图
该页面展示个股的日 K 线图,可切换分时图、日/周/月 K 线图及股票预测视图。K 线图叠加了多条均线,支持悬停查看单天交易数据,直观呈现股票价格走势、成交量及相关技术指标信息,帮助用户进行技术面分析。
· 股票预测
该页面基于 ARIMA 时间序列预测算法,以折线图形式对比展示股票实际价格走势与预测价格走势。用户可切换不同视图,支持悬停查看单天的实际与预测数据,直观呈现模型预测效果,为投资决策提供趋势参考。
· 日 K 线图、周 K 线图、月 K 线图
该页面为个股详情模块,支持切换日 K 线、周 K 线、月 K 线及分时图。K 线图叠加多条均线,支持悬停查看详细交易数据,满足用户对不同周期的技术分析需求,全面呈现股价的历史波动规律。
· 股市风向标
该页面为股市风向标模块,可按停牌信息、深交所公告、上交所公告、周涨跌排行榜、月涨跌排行榜等标签切换查看。展示当日股票相关公告与市场动态信息,帮助用户快速获取股市资讯与热点动向。
· 系统首页
该页面展示了系统的整体机构框架,包含股票列表、股市风向标、龙虎榜及用户信息等核心模块的入口与分类。清晰呈现了系统各功能的层级结构,帮助用户快速了解系统功能分布并导航至目标模块。
· 股票信息
该页面展示个股的详细公司基础信息,包括股票名称、英文名称、成立日期、交易所、注册地址、注册资本、概念板块、组织形式、公司官网、联系电话及公司介绍等内容。帮助用户全面了解个股的背景信息与基本面情况。图示以东方财富(300059)为例,展示了其注册于深圳证券交易所、成立日期为2005年1月20日、注册资本86131.0万元等详细信息。
· 股票列表及详情
该模块左侧支持按概念板块或股票代码筛选股票,右侧弹窗可查看选中股票的实时交易数据,支持刷新获取最新数据。展示了个股的价格、涨跌幅、成交量、成交额等核心交易指标,方便用户快速定位和查看目标股票。
三、项目总结
本系统基于 Flask 和 Vue 框架构建股票数据分析预测平台,通过 IG507 金融数据接口获取实时股票数据。系统提供个股 K 线图(分时图、日/周/月 K 线),叠加均线并支持悬停查看详情,满足用户技术分析需求。基于 ARIMA 时间序列算法对股价进行预测,以折线图对比实际值与预测值走势,为投资提供趋势参考。股市风向标模块展示交易所公告、停牌信息及涨跌排行榜,帮助用户快速获取市场动态。股票列表支持按概念板块或代码筛选,查看实时交易数据与公司基本信息。系统整合了实时数据获取、技术指标可视化、时间序列预测及市场资讯展示,为股票投资者提供了全面的数据分析与决策支持工具。
4、核心代码
# coding:utf-8
# 股票信息查询逻辑处理
from common.Ig507Api import StockApi # 开放接口
from models.StocksModel import StockModel # 公司模型
from models.BaseModel import BaseModel
from models import db
import time
class StockService(object):
@classmethod
def init_all_stocks(cls):
"""
获取市面股票最新数据,并更新数据库。数据量较大,需要花费2小时左右
:return:
"""
stock_list = StockApi.get_stock_list()
for stock in stock_list:
time.sleep(2) # 限制请求频率
stock_company = StockApi.get_company(stock['code'], stock['name'], stock['jys']) # 获取公司详细信息
sc = StockModel(code=stock_company['code'],
stockname=stock_company['stockname'],
jys=stock_company['jys'],
name=stock_company['name'],
ename=stock_company['ename'],
market=stock_company['market'],
idea=stock_company['idea'],
ldate=stock_company['ldate'],
sprice=stock_company['sprice'],
principal=stock_company['principal'],
rdate=stock_company['rdate'],
rprice=stock_company['rprice'],
instype=stock_company['instype'],
organ=stock_company['organ'],
phone=stock_company['phone'],
site=stock_company['site'],
post=stock_company['post'],
addr=stock_company['addr'],
oaddr=stock_company['oaddr'],
desc=stock_company['desc'])
db.session.add(sc)
db.session.commit()
print(f"插入成功{sc.code}, {sc.stockname}, {sc.jys}")
# 存储到数据库
@classmethod
def init_bases(cls):
"""
更新数据库中的指数、行业、概念
:return:
"""
bases = StockApi.get_all_bases()
for base in bases:
sc = BaseModel(
code=base['code'],
name=base['name'],
type1=base['type1'],
type2=base['type2'],
level=base['level'],
pcode=base['pcode'],
pname=base['pname'],
isleaf=base['isleaf'],
)
db.session.add(sc)
db.session.commit()
print(f"更新成功 - {sc.code}, {sc.name}")
# 存储到数据库
@classmethod
def init_stock_and_base(cls):
bases = StockApi.get_all_bases()
for base in bases[:2]:
result = cls.query_base_by_level_and_pcode_and_type(base['level'], base['pcode'], base['type2'])
print(result)
@classmethod
def query_base_by_level_and_pcode_and_type(cls, level_code: str = 0, pcode: str = None, types: str = None):
"""
查询指数、行业、概念
:param types: 类型
:param pcode: 父节点
:param level_code: 节点级别
:return:
"""
result = []
if types is None:
# 默认A股-分类板块
types = 3
filter_list = [BaseModel.level == level_code, BaseModel.type2 == types]
if pcode is not None:
filter_list.append(BaseModel.pcode == pcode)
stock_bases = BaseModel.query.filter(*filter_list).order_by(BaseModel.level).all()
# 转化json格式
for item in stock_bases:
result.append(item.to_json())
return result
@classmethod
def query_stock_by_base(cls, tree_code: str = None, limit: int = 10, offset: int = 1):
"""
根据指数、行业、概念分页查询股票
:param tree_code:
:param limit:
:param offset:
:return:
"""
result = {'stocks': [], 'sum': 0}
stocks = StockApi.get_stock_from_base(tree_code)
t_stocks = []
while len(stocks) != 0:
t_stocks.append(stocks.pop(-1))
if len(t_stocks) - offset <= limit:
page_stocks = t_stocks[offset:]
else:
page_stocks = t_stocks[(offset - 1) * limit: offset * limit]
result['stocks'] = page_stocks
result['sum'] = len(t_stocks)
return result
@classmethod
def query_stock_by_like(cls, stock_code: str = None, stock_name: str = None, limit: int = 10, offset: int = 1):
"""
股票多条件模糊查询
:param stock_code:
:param stock_name:
:param limit:
:param offset:
:return:
"""
# 从数据库读取
result = {'companies': [], 'sum': 0}
companies = []
companies_1 = StockModel.query.filter(StockModel.stockname.like("%" + stock_name + "%")).order_by(StockModel.code.asc()).limit(limit).offset(offset).all()
companies_2 = StockModel.query.filter(StockModel.code.like("%" + stock_code + "%")).order_by(StockModel.code.asc()).limit(limit).offset(offset).all()
companies.extend(companies_1)
companies.extend(companies_2)
_sum = StockModel.query.filter(StockModel.stockname.like("%" + stock_name + "%")).count()
_sum = _sum + StockModel.query.filter(StockModel.code.like("%" + stock_code + "%")).count()
# 转化json格式
for item in companies:
result['companies'].append(item.to_json())
result['sum'] = _sum
return result
@classmethod
def query_stock_company_by_code(cls, code: str):
company = StockModel.query.filter(StockModel.code == code).first()
if company is not None:
return company.to_json()
else:
StockApi.get_company(code)
5、项目列表





转载自CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/q_2917219673/article/details/160447323



