1. 系统概述
这是一个基于Streamlit和AKShare的股票数据查询系统,提供了便捷的股票数据查询和可视化功能。系统支持按板块筛选股票、多股票代码查询、数据导出等功能。
1.1 主要功能
- 股票代码直接输入查询
- 按板块筛选和选择股票
- 历史数据和实时行情查询
- 财务报表数据获取
- 新闻公告展示
- 数据导出Excel
1.2 技术栈
- 前端框架: Streamlit
- 数据源: AKShare
- 数据处理: Pandas
- 数据导出: OpenPyXL
2. 系统架构
2.1 模块组织
stock.py
├── 数据获取模块
│ ├── get_sector_list() # 获取板块列表
│ ├── get_sector_stocks() # 获取板块成分股
│ └── get_stock_data() # 获取股票详细数据
├── 数据处理模块
│ └── save_to_excel() # 数据导出Excel
└── 主界面模块
└── main() # 主程序入口
2.2 状态管理
使用Streamlit的Session State管理以下状态:
st.session_state:
├── stock_codes_input # 股票代码输入
├── selected_stocks # 已选择的股票列表
├── sector_stocks_df # 板块成分股数据
├── start_date # 开始日期
├── end_date # 结束日期
└── reset_sector # 板块重置标志
3. 核心功能实现
3.1 板块股票选择
# 获取板块列表
sector_list = get_sector_list()
sector_name = st.selectbox("选择板块", options=sector_list)
# 获取板块成分股
if sector_name:
sector_stocks = get_sector_stocks(sector_name)
selected_stocks = st.multiselect(
"选择要查看的股票",
options=sector_stocks['代码'].tolist(),
format_func=lambda x: f"{
x} ({
sector_stocks[sector_stocks['代码']==x]['名称'].iloc[0]})"
)
3.2 数据获取
def get_stock_data(stock_codes, sector_name, start_date, end_date):
results = {
}
# 获取个股历史数据
stock_hist = ak.stock_zh_a_hist(
symbol=code,
period="daily",
start_date=start_date,
end_date=end_date
)
# 获取实时行情
stock_real = ak.stock_zh_a_spot_em()
# 获取财务数据
financial_data = ak.stock_financial_report_sina(
stock=code,
symbol="资产负债表"
)
return results
3.3 界面布局
使用Streamlit的列布局实现左右分栏:
left_column, right_column = st.columns([1, 3]) # 1:3的宽度比例
with left_column:
# 查询参数输入区
st.header("查询参数")
...
with right_column:
# 数据显示区
st.markdown("### 数据显示")
...
4. 使用流程
-
选择板块
- 从下拉列表选择股票板块
- 系统自动获取并显示板块成分股列表
-
选择股票
- 从成分股列表中选择感兴趣的股票
- 选中的股票代码自动添加到输入框
- 板块选择自动重置为空
-
设置查询参数
- 设置查询日期范围
- 可以手动添加或修改股票代码
-
获取数据
- 点击"获取数据"按钮
- 系统获取并显示所选股票的详细数据
- 可以下载数据到Excel文件
5. 数据展示
5.1 成分股列表
- 使用表格展示完整的成分股信息
- 支持多选操作
- 实时显示已选股票列表
5.2 股票数据
- 历史行情数据
- 实时市场数据
- 财务报表数据
- 相关新闻公告
5.3 新闻展示
- 新闻标题和发布时间双列布局
- 支持点击标题跳转到新闻详情
- 按时间顺序排列
6. 注意事项
-
数据刷新
- 实时数据每次查询都会更新
- 历史数据基于选择的日期范围
-
性能优化
- 使用缓存减少重复API调用
- 批量处理多个股票的数据请求
-
错误处理
- 对API调用异常进行捕获和提示
- 确保数据完整性和显示正确性
7. 后续优化方向
-
数据分析
- 添加技术分析指标
- 实现数据可视化图表
-
用户体验