# smart_alpha **Repository Path**: lianshuke/smart_alpha ## Basic Information - **Project Name**: smart_alpha - **Description**: No description available - **Primary Language**: Unknown - **License**: AGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-09-17 - **Last Updated**: 2025-09-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # smart_alpha 结果说明 ### 概述 本目录用于存放回测输出结果。运行 `pe_strategy.py` 后,会在 `result/{INDEX_CODE}/` 下生成该指数对应的所有输出文件。 示例:若在 `main()` 中设置 `index_code='000852.XSHG'` 和 `rebalance_frequency=RebalanceFrequency.QUARTERLY`,则输出目录为: ``` result/000852.XSHG/quarterly/ - trade_records.csv # 逐笔委托/成交记录(含买卖方向与资金流) - position_records.csv # 每次调仓后的持仓快照 - strategy_statistics.csv # 策略整体统计指标(年化、夏普、回撤等) - annual_excess_returns.csv # 各自然年的超额收益 - pe_strategy_results.png # 图表:资金曲线、超额收益、累计成本 ``` 若设置为 `rebalance_frequency=RebalanceFrequency.MONTHLY`,则输出目录为: ``` result/000852.XSHG/monthly/ - trade_records.csv # 逐笔委托/成交记录(含买卖方向与资金流) - position_records.csv # 每次调仓后的持仓快照 - strategy_statistics.csv # 策略整体统计指标(年化、夏普、回撤等) - annual_excess_returns.csv # 各自然年的超额收益 - pe_strategy_results.png # 图表:资金曲线、超额收益、累计成本 ``` 若设置为 `rebalance_frequency=RebalanceFrequency.WEEKLY`,则输出目录为: ``` result/000852.XSHG/weekly/ - trade_records.csv # 逐笔委托/成交记录(含买卖方向与资金流) - position_records.csv # 每次调仓后的持仓快照 - strategy_statistics.csv # 策略整体统计指标(年化、夏普、回撤等) - annual_excess_returns.csv # 各自然年的超额收益 - pe_strategy_results.png # 图表:资金曲线、超额收益、累计成本 ``` ### 如何运行 1. 确保已安装依赖并正确配置 `RemoteRQData` 数据源。 2. 在项目根目录执行: ```bash python pe_strategy.py ``` 3. 运行完成后,查看 `result/{INDEX_CODE}/` 目录中的输出文件。 ### 策略与参数(见 pe_strategy.py) - 指数代码:`index_code`(如 `000852.XSHG`、`000300.XSHG`、`000016.XSHG`) - 因子:`pe_ratio_lyr` - 回测区间:`start_date='20200101'` 至 `end_date='20251201'` - 调仓频率:`rebalance_frequency` 支持 `RebalanceFrequency.QUARTERLY`(每季度)、`RebalanceFrequency.MONTHLY`(每月末)或 `RebalanceFrequency.WEEKLY`(每周五) - 初始资金:`initial_capital=5,000,000` - 交易成本:单边 0.15%(双边合计 0.3%) - 交易单位:按 100 股整数倍下单,最少 100 股 - 调仓规则:每次调仓先按当前持仓"全仓卖出",再按因子选股(选前 50%)+ 指数权重(或等权)买入新组合;允许重复计算成本 - ST股票过滤:自动过滤ST股票,只选择非ST股票进行投资 ### 输出文件字段说明 - trade_records.csv(委托/成交记录) - `date`:交易日期(调仓日) - `stock`:股票代码 - `direction`:`买入` 或 `卖出` - `price`:成交价格 - `shares`:成交股数(满足 100 股整数倍) - `amount`:成交金额(price × shares) - `transaction_cost`:该笔交易的手续费(按双边 0.3% 计入) - `cumulative_capital`:按实际资金流更新后的累计资金(买入扣减、卖出增加) - position_records.csv(调仓后持仓快照) - `date`:调仓日 - `total_capital`:调仓前总资金 - `actual_investment`:本期实际买入总金额 - `transaction_cost`:本期交易总成本 - `cash_remaining`:本期剩余现金 - `{stock}_shares` / `{stock}_price` / `{stock}_value`:该股票持仓股数/价格/持仓市值(未持仓则为 0) - strategy_statistics.csv(总体统计) - 含累计收益、年化收益、波动、夏普、最大回撤及其日期等 - annual_excess_returns.csv(年度超额收益) - 每自然年的策略收益减指数收益 - pe_strategy_results.png(图表) - 上图:策略资金曲线 vs 指数资金曲线(均以 500 万起始) - 下图:超额收益曲线 + 累计交易成本曲线 ### 缓存机制 - 缓存目录:`cache/`,使用持久化 pickle 文件缓存以下数据: - 指数成分股:`index_components_*.pkl` - 指数权重:`index_weights_*.pkl` - 因子数据:`factor_data_*.pkl` - 价格数据:`price_data_*.pkl` - ST股票数据:`st_data_*.pkl` - 缓存键使用稳定的 MD5(基于请求参数与证券列表),不同运行可正确复用。 - 清理缓存:可删除 `cache/` 目录,或在代码中调用 `PEStrategy.clear_cache()`。 ### 常见问题 - 买卖数量不一致:代码已用 `self.current_positions` 跟踪真实持仓,调仓日先按真实持仓数量卖出,再按目标权重买入,保证数量匹配。 - 现金与曲线差异:`cumulative_capital` 记录交易当日现金变动;图中资金曲线基于净值累计(包含持仓市值变化),两者维度不同。 - 多进程:为确保交易与持仓记录完整,目前默认单进程;如需并行,可在主进程合并子进程的交易与持仓记录。