# 新表结构快速开始指南 ## 1. 创建新表 ```bash # 进入项目目录 cd d:\\alpha_workspace\\python_market_data_service # 激活虚拟环境 .\\venv\\Scripts\\activate # 创建新表 python scripts/create_split_tables.py # 如果需要重新创建(会删除已有数据) python scripts/create_split_tables.py --drop-existing ``` ## 2. 启动服务 ```bash # 启动主服务 python main.py ``` ## 3. 同步数据 ### 全量同步示例 ```bash # 同步茅台和平安银行的历史数据 curl -X POST "http://localhost:8080/admin/data/sync" \ -H "Content-Type: application/json" \ -d '{ "symbols": ["600519.SH", "000001.SZ"], "sync_type": "full", "start_date": "20230101", "end_date": "20240301" }' ``` ### 增量同步示例 ```bash # 同步最近30天的数据 curl -X POST "http://localhost:8080/admin/data/sync/incremental" \ -H "Content-Type: application/json" \ -d '["600519.SH", "000001.SZ"]' ``` ### 只同步基础数据 ```bash curl -X POST "http://localhost:8080/admin/data/sync" \ -H "Content-Type: application/json" \ -d '{ "symbols": ["600519.SH"], "sync_type": "base", "start_date": "20240101", "end_date": "20240301" }' ``` ## 4. 查询数据 ### 使用 Repository 查询 ```python from app.repositories.stock_repository_v2 import StockRepositoryV2 from app.repositories.database import SessionLocal from app.models import Frequency from datetime import datetime # 创建会话 db = SessionLocal() repo = StockRepositoryV2(db) # 查询基础K线数据(高效,字段少) base_data = repo.get_klines_base( symbol="600519.SH", freq=Frequency.FREQ_1D, start=datetime(2024, 1, 1), end=datetime(2024, 3, 1) ) print(f"Base records: {len(base_data)}") # 查询行情指标(包含均线、MACD等) quote_data = repo.get_klines_quote( symbol="600519.SH", start_date="2024-01-01", end_date="2024-03-01" ) for item in quote_data[:3]: print(f"{item['trade_date']}: close={item.get('ma5')}") # 查询财务数据(市值、股本等) finance_data = repo.get_klines_finance( symbol="600519.SH", start_date="2024-01-01", end_date="2024-03-01" ) for item in finance_data[:3]: print(f"{item['trade_date']}: 市值={item.get('total_market_cap')}") ``` ## 5. 定时任务配置 创建每日定时同步脚本 `scripts/daily_sync.py`: ```python #!/usr/bin/env python3 """每日增量同步脚本""" import asyncio import sys from pathlib import Path sys.path.insert(0, str(Path(__file__).parent.parent)) from app.services.adapter_service import AdapterService from app.services.data_sync_service import DataSyncService from app.repositories.stock_repository_v2 import StockRepositoryV2 from app.repositories.database import SessionLocal async def main(): # 获取热门股票列表 db = SessionLocal() repo = StockRepositoryV2(db) # 这里可以从配置或数据库读取需要同步的标的列表 symbols = ["600519.SH", "000001.SZ", "000858.SZ"] # 示例 # 获取适配器 adapter_service = AdapterService() adapter = adapter_service.get_active_adapter("stock") # 同步 sync_service = DataSyncService(adapter) results = await sync_service.sync_daily_incremental(symbols) print("Sync completed:", results) if __name__ == "__main__": asyncio.run(main()) ``` 添加到定时任务(Linux crontab): ```bash # 每天凌晨2点执行增量同步 0 2 * * * cd /path/to/project && python scripts/daily_sync.py >> logs/sync.log 2>&1 ``` ## 6. 表结构说明 | 表名 | 用途 | 数据来源 | 更新频率 | |------|------|----------|----------| | stock_klines_1d_base | 基础K线(OHLCV) | query_kline | 每日 | | stock_klines_1d_quote | 行情指标 | 本地计算 | 每日 | | stock_klines_1d_finance | 财务数据 | 股本/财报接口 | 财报季 | | stock_realtime_quotes | 实时行情 | 行情推送 | 实时 | | stock_symbols | 股票列表 | 基础数据接口 | 每日 | | stock_trading_calendar | 交易日历 | 交易所数据 | 每年 | ## 7. 常见问题 ### Q: 旧表数据如何迁移? A: 使用以下SQL迁移基础数据: ```sql INSERT INTO stock_klines_1d_base (symbol_id, ts, trade_date, open, high, low, close, volume, amount) SELECT symbol_id, ts, trade_date, open, high, low, close, volume, amount FROM stock_klines_1d WHERE trade_date >= '2024-01-01'; ``` ### Q: 如何只查询基础数据提高性能? A: 使用 `StockRepositoryV2.get_klines_base()` 方法,它只查询轻量的base表。 ### Q: 行情指标如何计算? A: 指标在 `AmazingDataAdapter._fetch_kline_quote_sync()` 中本地计算: - 均线: 基于收盘价计算MA5/10/20/30/60/120/250 - MACD: 使用pandas ewm计算 - 乖离率: (收盘价-均线)/均线 - 涨跌停: 对比收盘价和涨跌停价 ### Q: 市值数据如何计算? A: 市值 = 收盘价 × 股本,股本从 `get_equity_structure` 接口获取。 ## 8. 下一步 - [ ] 配置定时自动同步 - [ ] 添加Redis缓存热点数据 - [ ] 实现分钟线行情指标表 - [ ] 添加数据一致性校验任务