# ProStock A股量化投资框架,用于量化股票投资分析。 ## 特性 - **数据管理**:Tushare API 行情数据获取,DuckDB 本地数据存储 - **因子引擎**:DSL 表达式驱动的高性能因子计算框架(基于 Polars) - **机器学习**:支持 LightGBM 回归和 LambdaRank 排序学习 - **组件化设计**:灵活的数据处理器、股票池管理、过滤器组合 ## 环境要求 - Python 3.10+ - uv 包管理器 ## 安装 ```bash # 克隆项目 cd ProStock # 使用 uv 安装依赖 uv pip install -e . ``` ## 配置 创建 `config/.env.local` 文件: ```bash # Tushare Token(必需) TUSHARE_TOKEN=your_token_here # 数据存储路径(可选,默认 data/) DATA_PATH=data # API 速率限制(可选,默认 100) RATE_LIMIT=100 # 并发线程数(可选,默认 10) THREADS=10 ``` ## 快速开始 ### 1. 同步股票数据 ```python from src.data.sync import sync_all # 增量同步(默认) sync_all() # 强制全量同步 sync_all(force_full=True) # 自定义线程数 sync_all(max_workers=20) ``` ### 2. 计算因子 ```python from src.factors import FactorEngine # 初始化引擎 engine = FactorEngine() # 添加因子(推荐使用字符串表达式) engine.add_factor("ma20", "ts_mean(close, 20)") engine.add_factor("alpha", "cs_rank(ts_mean(close, 5) - ts_mean(close, 20))") # 计算因子值 result = engine.compute(["ma20", "alpha"], "20240101", "20240131") ``` ### 3. 训练模型 ```python from src.training import Trainer, DateSplitter, StockPoolManager from src.training.components.models import LightGBMModel # 创建模型 model = LightGBMModel(params={ "objective": "regression", "num_leaves": 20, "learning_rate": 0.01, "n_estimators": 1000, }) # 创建数据划分器 splitter = DateSplitter( train_start="20200101", train_end="20231231", val_start="20240101", val_end="20241231", test_start="20250101", test_end="20251231", ) # 创建训练器并训练 trainer = Trainer( model=model, splitter=splitter, target_col="future_return_5", feature_cols=["ma_5", "ma_20", "volume_ratio"], ) trainer.train(data) results = trainer.get_results() ``` ## 项目结构 ``` ProStock/ ├── src/ │ ├── config/ # 配置管理 │ ├── data/ # 数据获取与存储 │ │ ├── api_wrappers/ # Tushare API 封装 │ │ ├── storage.py # DuckDB 存储 │ │ └── sync.py # 数据同步调度 │ ├── factors/ # 因子计算框架 │ │ ├── engine/ # 执行引擎 │ │ ├── metadata/ # 因子元数据管理 │ │ ├── dsl.py # DSL 表达式层 │ │ └── translator.py # Polars 翻译器 │ └── training/ # 训练模块 │ ├── core/ # 训练核心 │ └── components/ # 组件(模型、处理器、过滤器) ├── tests/ # 测试文件 ├── data/ # 数据存储 └── docs/ # 文档 ``` ## 因子框架 ### 支持的函数 **时间序列函数 (ts_*)**: - `ts_mean`, `ts_std`, `ts_max`, `ts_min`, `ts_sum` - `ts_delay`, `ts_delta` - `ts_corr`, `ts_cov`, `ts_rank` **截面函数 (cs_*)**: - `cs_rank` - 截面排名 - `cs_zscore` - Z-Score 标准化 - `cs_neutralize` - 行业/市值中性化 - `cs_winsorize` - 缩尾处理 **数学函数**: - `log`, `exp`, `sqrt`, `sign`, `abs` - `max_`, `min_`, `clip` - `if_`, `where` ### 因子元数据管理 ```python from src.factors.metadata import FactorManager # 初始化管理器 manager = FactorManager() # 添加因子 manager.add_factor({ "factor_id": "F_001", "name": "mom_5d", "desc": "5日价格动量", "dsl": "cs_rank(close / ts_delay(close, 5) - 1)", "category": "momentum", }) # 查询因子 df = manager.get_factors_by_name("mom_5d") ``` ## 常见任务 ```bash # 运行所有测试 uv run pytest # 同步财务数据 uv run python -c "from src.data.api_wrappers.financial_data import sync_financial; sync_financial()" # 批量注册因子 uv run python src/scripts/register_factors.py ``` ## 依赖项 - pandas >= 2.0.0 - polars >= 0.20.0 - numpy >= 1.24.0 - tushare >= 2.0.0 - pydantic >= 2.0.0 - lightgbm >= 4.0.0 - pytest ## 文档 更多详细信息请参阅 `docs/` 目录: - [因子表达式文档](docs/factor_expressions_document.md) - [API 接口规范](docs/api/API_INTERFACE_SPEC.md) - [财务数据接口](docs/api/FINANCIAL_API_SPEC.md) ## 许可证 MIT