# 香港股票数据管理系统 - 程序结构分析与调用关系 ## 项目整体结构 ``` HKDataManagment/ ├── main_gui.py # PyQt5 GUI主界面 (主要入口点) ├── main.py # 命令行演示程序 ├── UpdateFutuData/ │ ├── KLineUpdater.py # K线数据更新器类 (核心业务逻辑) │ ├── ConditionalSelection.py # 股票筛选器 │ ├── checktable.py # 数据表检查器 │ └── ...其他Futu相关模块 ├── DataAnalysis/ │ ├── DataExporter.py # 数据导出器 │ ├── MarketDataCalculator.py # 市场数据计算器 │ ├── checktable.py # 数据表检查器 │ └── ...其他数据分析模块 ├── base/ │ ├── MySQLHelper.py # MySQL数据库操作助手 │ ├── LogHelper.py # 日志记录助手 │ ├── Config.py # 配置管理 │ └── ...其他基础工具类 ├── export.py # 数据导出脚本 ├── getKline.py # K线数据获取脚本 └── config/ # 配置文件目录 ``` ## 主要模块功能说明 ### 1. GUI层 (main_gui.py) - **功能**: 提供图形用户界面,通过按钮控制功能执行 - **核心类**: `MainWindow`, `WorkerThread` - **依赖**: PyQt5, 所有业务模块 ### 2. 业务逻辑层 (UpdateFutuData/) - **KLineUpdater.py**: 封装K线数据更新功能 - **ConditionalSelection.py**: 股票条件筛选 - **checktable.py**: 数据表完整性检查 ### 3. 数据分析层 (DataAnalysis/) - **DataExporter.py**: 数据导出功能 - **MarketDataCalculator.py**: 市场数据计算 - **checktable.py**: 数据表检查 ### 4. 基础工具层 (base/) - **MySQLHelper.py**: 数据库操作封装 - **LogHelper.py**: 日志记录管理 - **Config.py**: 配置信息管理 ## 详细调用关系 ### 核心调用链 #### 1. 更新K线数据流程 ``` main_gui.py (用户点击更新按钮) → WorkerThread.run() → MainWindow.update_data() → KLineUpdater.update_kline_data() → KLineUpdater.get_stock_codes() → MySQLHelper.execute_query() → KLineUpdater.save_quotes_to_db() → MySQLHelper.execute_many() → Futu API调用 (通过get_market_data) ``` #### 2. 导出数据流程 ``` main_gui.py (用户点击导出按钮) → WorkerThread.run() → MainWindow.export_data() → DataExporter.export_data() → MySQLHelper.execute_query() → 文件系统操作 (生成CSV) ``` #### 3. 计算月度平均流程 ``` main_gui.py (用户点击计算按钮) → WorkerThread.run() → MainWindow.calculate_monthly_avg() → MarketDataCalculator.calculate_and_save_monthly_avg() → MySQLHelper多次调用 → 文件系统操作 (读取配置文件) ``` #### 4. 检查数据完整性流程 ``` main_gui.py (用户点击检查按钮) → WorkerThread.run() → MainWindow.check_data() → StockTableChecker.run_check() → MySQLHelper.execute_query() ``` ### 模块间依赖关系图 ``` main_gui.py (GUI层) │ ├── 依赖于 UpdateFutuData.KLineUpdater ├── 依赖于 DataAnalysis.DataExporter ├── 依赖于 DataAnalysis.MarketDataCalculator ├── 依赖于 DataAnalysis.checktable.StockTableChecker └── 依赖于 base.Config │ └── 所有业务模块依赖 base.MySQLHelper 和 base.LogHelper │ └── MySQLHelper 依赖 MySQL连接库 └── LogHelper 依赖 logging模块 ``` ### 数据流动方向 1. **数据输入流**: ``` Futu API → KLineUpdater → MySQL数据库 ``` 2. **数据处理流**: ``` MySQL数据库 → MarketDataCalculator → MySQL数据库 (计算结果) ``` 3. **数据输出流**: ``` MySQL数据库 → DataExporter → CSV文件 ``` 4. **数据验证流**: ``` MySQL数据库 → StockTableChecker → 日志输出 ``` ## 关键类与方法说明 ### KLineUpdater 类主要方法 - `get_market_data()`: 从Futu API获取市场数据 - `preprocess_quote_data()`: 预处理行情数据 - `save_quotes_to_db()`: 保存数据到数据库 - `update_kline_data()`: 主更新方法 ### MySQLHelper 类主要方法 - `execute_query()`: 执行查询语句 - `execute_update()`: 执行更新语句 - `execute_many()`: 批量执行操作 - `table_exists()`: 检查表是否存在 ### DataExporter 类主要方法 - `export_data()`: 导出数据到CSV文件 - 其他数据格式化方法 ### MarketDataCalculator 类主要方法 - `calculate_and_save_monthly_avg()`: 计算并保存月度平均值 - `get_stock_codes()`: 获取股票代码列表 ## 架构特点总结 1. **分层架构设计**: GUI层、业务逻辑层、数据访问层清晰分离 2. **依赖注入模式**: 通过配置类统一管理依赖项 3. **多线程处理**: 使用QThread避免阻塞GUI界面 4. **模块化组织**: 功能模块职责单一,便于维护扩展 5. **错误处理机制**: 统一的日志记录和异常处理 ## 使用示例 ```python # 初始化KLineUpdater updater = KLineUpdater() # 更新指定股票数据 updater.update_kline_data(stock_codes=['00700.HK', '00941.HK']) # 从GUI调用 # 用户点击按钮 → 后台线程执行 → 更新完成反馈 ``` 这个调用关系分析帮助理解系统如何从用户界面操作到底层数据处理的完整流程,便于后续维护和功能扩展。