Files
ggx/docs/plan.md
T
simon fce725e13c 初始提交:高股息策略研究与回测系统
从 Point-in-Time 股票筛选到统一 Web 前端的完整链路:
筛选 → 画像 → 策略 → 回测 → Walk-forward → 绩效分析 → 报告/前端。

架构
- 数据层与策略层分离;策略代码不写 SQL,只经 data/repo.py 取数
- 所有业务阈值集中在 config/*.yml,代码零硬编码(字段写错直接报错)
- 报告只做「run_id → SQL → 渲染」,不做任何计算,数字可追溯
- 前后端分离:output/ 静态站点 + hdiv web 提供的 REST API

数据安全
- 只增不删:SQL 钩子拦截 DELETE/DROP/TRUNCATE,并有源码扫描测试守护
- qlib 原有表只读,本项目数据写入 hd_ 前缀表
- 回补使用 INSERT IGNORE,保证既有行零改动
- .env 存密钥且已 gitignore;output/、logs/、.venv/ 不入库

交付物
- 30 张 hd_* 表、7 个 YAML 配置、283 项自动化测试
- 统一 Web 前端(hash 路由 SPA)+ nginx 部署配置与 launchd 托管脚本

如实声明的限制
- 策略缺少稳定的样本外超额收益(Walk-forward 7 窗口均值 -0.95%,
  基准 +2.29%);其价值体现在回撤控制,而非超额收益
- 涨跌停/停牌约束仅覆盖 2019 年起;index_weight 尚未填充
- AI Agent 层(plan.md 第四版 P8)未实现

详见 docs/user-guide.md 与 docs/implementation-status.md。
2026-10-03 13:54:56 +08:00

1996 lines
26 KiB
Markdown

# A股投资策略制定与回测方案
> 版本:V1.0
> 目标:建立一套可扩展的 A 股投资策略研究、策略制定、个股分析与回测体系。
> 核心案例:高股息 + 安全边际 + 估值均值回归策略
---
# 1. 项目目标
实现一套从:
```text
股票筛选
↓
个股特性分析
↓
因子研究
↓
交易策略制定
↓
历史回测
↓
样本外验证
↓
策略评价
↓
策略报告
```
的完整 A 股投资策略研究系统。
系统不以“预测明天涨跌”为主要目标,而是通过:
* 基本面筛选
* 历史估值分析
* 安全边际分析
* 交易规则参数化
* 历史回测
* Walk-forward 验证
寻找长期具有可重复性的投资策略。
---
# 2. 核心投资思想
以高股息策略为例:
> 寻找长期稳定分红、财务质量较好、规模较大、上市时间较长的公司,当其股息率进入历史相对高位时买入,当股息率下降到历史相对低位时卖出或减仓。
核心思想:
```text
公司质量
+
长期稳定分红
+
合理/低估价格
+
安全边际
+
估值均值回归
↓
形成交易策略
```
---
# 3. 整体系统流程
```text
A股全市场
│
↓
Point-in-Time 数据
│
↓
股票初步筛选
│
┌───────────────┼───────────────┐
↓ ↓ ↓
基本面 估值 风险
│ │ │
└───────────────┼───────────────┘
↓
候选股票池
│
↓
个股特性分析
│
┌───────────────┼───────────────┐
↓ ↓ ↓
股息率历史 财务质量 风险特征
估值分布 分红质量 波动特征
│ │ │
└───────────────┼───────────────┘
↓
因子研究
│
↓
策略参数制定
│
↓
Walk-forward 回测
│
┌───────────────┼───────────────┐
↓ ↓ ↓
收益分析 风险分析 交易分析
│ │ │
└───────────────┼───────────────┘
↓
样本外验证
│
↓
策略稳定性分析
│
↓
AI策略分析
│
↓
策略报告
```
---
# 4. 第一阶段:股票筛选
## 4.1 基础筛选条件
以高股息策略为例:
```yaml
universe:
min_market_cap: 50000000000
min_listing_years: 10
exclude_st: true
dividend:
min_continuous_dividend_years: 5
min_dividend_yield: 0.03
```
基础条件:
| 条件 | 默认值 | 说明 |
| ------ | -----: | -------- |
| 连续分红年限 | ≥5年 | 判断分红稳定性 |
| 最低股息率 | ≥3% | 初步估值过滤 |
| 市值 | ≥500亿元 | 降低小市值风险 |
| 上市年限 | ≥10年 | 获得较长历史数据 |
| ST | 排除 | 极端风险过滤 |
这些参数必须支持用户调整。
---
# 5. 2. 股票筛选条件分类
股票筛选不要全部写死在程序中,应拆成不同类型的 Filter。
## 5.1 市场属性
```text
MarketFilter
```
包括:
* A股
* 沪市/深市/北交所
* 主板/创业板/科创板
* 上市时间
* 市值
* 流通市值
---
## 5.2 风险过滤
```text
RiskFilter
```
包括:
* ST
* *ST
* 退市整理
* 已退市
* 连续亏损
* 大股东高比例质押
* 重大诉讼
* 商誉异常
* 经营异常
---
## 5.3 分红过滤
```text
DividendFilter
```
包括:
* 连续分红年数
* 最近N年分红次数
* 最近N年现金分红
* DPS
* 股息率
* 分红增长率
* 分红支付率
* FCF覆盖分红
---
## 5.4 财务质量过滤
```text
FinancialQualityFilter
```
包括:
* ROE
* ROIC
* 毛利率
* 净利率
* 营业利润率
* 经营现金流
* 自由现金流
* 资产负债率
* 净现金
* 利息覆盖倍数
---
# 6. 3. Point-in-Time 数据原则
这是整个回测系统必须遵守的核心原则。
任何历史回测都只能使用:
> **在当时已经公开、并且投资者当时能够获得的数据。**
例如:
```text
2018-06-01
```
只能使用在:
```text
2018-06-01
```
之前已经公布的数据。
不能使用:
```text
2019年年报
2020年年报
2021年财务数据
```
判断 2018 年股票是否符合条件。
---
## 6.1 财务数据必须保存
至少保存:
```text
report_period
publication_date
effective_date
```
例如:
```text
report_period:
2017-12-31
publication_date:
2018-03-30
effective_date:
2018-03-30
```
回测时按照:
```text
effective_date <= strategy_date
```
进行数据查询。
---
# 7. 4. 生存者偏差
股票池必须支持:
```text
Point-in-Time Universe
```
不能只使用今天仍然存在的股票。
例如:
```text
2016年A股股票池
↓
2017年新增股票
↓
2018年新增股票
↓
退市股票
↓
ST股票
```
每个交易日的股票池应该反映当时真实市场状态。
必须保留:
```text
上市日期
退市日期
ST日期
暂停上市日期
恢复上市日期
```
---
# 8. 第二阶段:个股特性分析
股票经过筛选后,不直接进入交易。
首先建立:
> `StockProfile`
个股画像。
---
# 9. 1. 股息率分析
计算:
```text
Dividend Yield
```
并建立长期历史序列。
例如:
```text
2016 ───────────────────── 2026
2.5%
3.0%
3.5%
4.0%
4.5%
5.0%
```
统计:
```text
Min
Max
Mean
Median
P10
P25
P50
P75
P90
Std
```
---
# 10. 2. 股息率历史分布
核心指标:
```text
DividendYieldPercentile
```
例如:
```text
当前股息率 = 4.8%
历史分位:
P75 = 4.2%
P90 = 5.1%
当前 = 4.8%
```
则当前股息率处于:
```text
75% ~ 90%
```
的历史高位区间。
这可以作为买入信号的重要依据。
---
# 11. 3. 股息率波动分析
计算:
### 日波动
```text
Daily Std
```
### 月度波动
```text
Monthly Std
```
### 季度波动
```text
Quarterly Std
```
### 年度波动
```text
Annual Std
```
目的:
判断:
> 该股票的股息率是否长期稳定,还是经常发生剧烈变化。
---
# 12. 4. 个股估值分布
除股息率外,建议同时建立:
```text
PE
PB
PS
EV/EBITDA
Dividend Yield
```
历史分布。
例如:
```text
指标 P10 P25 P50 P75 P90
Dividend Yield 2.3% 2.8% 3.5% 4.2% 5.1%
PE 8 10 13 17 22
PB 0.8 1.0 1.3 1.7 2.2
```
形成:
> 个股历史估值画像。
---
# 13. 5. 财务质量画像
每只候选股票计算:
```text
ROE
ROIC
Revenue CAGR
Profit CAGR
FCF CAGR
Debt Ratio
Operating Cash Flow
Free Cash Flow
Dividend Payout Ratio
```
并观察:
```text
5年
8年
10年
```
趋势。
---
# 14. 6. 分红质量
高股息策略不能只看股息率。
必须区分:
```text
高股息
```
和:
```text
高质量高股息
```
重点分析:
### 分红连续性
```text
连续分红年数
```
### 分红稳定性
```text
DPS volatility
```
### 分红增长
```text
DPS CAGR
```
### 分红支付率
```text
Dividend / Net Profit
```
### 自由现金流覆盖
```text
Dividend / FCF
```
---
# 15. 7. 安全边际模型
建立:
```text
MarginOfSafety
```
可以由多个因子组成:
```text
MarginOfSafety
=
Dividend Yield Score
+
Valuation Score
+
Financial Quality Score
+
Balance Sheet Score
+
Dividend Quality Score
```
第一版不建议直接复杂加权。
可以先分别展示:
```text
股息率安全边际
估值安全边际
财务安全边际
分红安全边际
```
之后再考虑综合评分。
---
# 16. 第三阶段:交易策略
策略不要写死在代码中。
应该设计为:
```text
Strategy Definition
```
例如:
```yaml
strategy:
name: high_dividend_mean_reversion
version: 1.0
universe:
min_market_cap: 50000000000
min_listing_years: 10
exclude_st: true
dividend:
min_yield: 0.03
min_continuous_years: 5
entry:
yield_percentile: 75
exit:
yield_percentile: 25
risk:
max_position: 0.10
max_drawdown: 0.20
```
---
# 17. 1. 买入规则
第一版:
```text
当:
股息率 >= 历史75%分位
AND
股票通过基本面筛选
AND
股票未进入风险状态
→ 买入
```
进一步可以设计:
```text
股息率 >= P75
↓
观察
股息率 >= P80
↓
建立仓位
股息率 >= P90
↓
增加仓位
```
---
# 18. 2. 卖出规则
例如:
```text
股息率 <= 历史25%分位
```
则:
```text
减仓/卖出
```
也可以设计:
```text
P50 → 减仓
P25 → 大幅减仓
```
---
# 19. 3. 加仓规则
建议支持分批建仓。
例如:
```text
P75 → 25%仓位
P80 → 50%仓位
P85 → 75%仓位
P90 → 100%仓位
```
这样可以研究:
> 一次性买入 vs 分批买入
的差异。
---
# 20. 4. 仓位控制
每只股票增加:
```text
max_position
```
例如:
```text
单只股票最大仓位 = 10%
```
同时:
```text
sector_max_position
```
例如:
```text
单行业最大仓位 = 25%
```
防止高股息策略最终集中到少数行业。
---
# 21. 5. 风险控制
第一版可以支持:
```text
最大单股仓位
最大行业仓位
最大组合回撤
最大单股回撤
流动性限制
```
不建议一开始加入大量复杂止损规则。
因为止损本身也是策略变量,很容易导致过拟合。
---
# 22. 第四阶段:回测
假设:
```text
历史数据:10年
```
不要只进行一次:
```text
8年训练 + 2年测试
```
而应该支持:
> Walk-forward Backtest
---
# 23. Walk-forward 回测
例如:
```text
2015 ───────── 2022 │ 2023
Training │ Test
2016 ───────── 2023 │ 2024
Training │ Test
2017 ───────── 2024 │ 2025
Training │ Test
```
最终:
```text
多个样本外结果
↓
综合评价
```
---
# 24. Training Period
训练阶段用于:
* 确定股息率历史分布
* 确定买入阈值
* 确定卖出阈值
* 确定仓位规则
* 确定风险参数
例如:
```text
P70
P75
P80
P85
P90
```
可以在训练数据中研究。
---
# 25. Test Period
测试阶段:
> 禁止重新调整策略参数。
例如:
```text
Training:
2015-2022
Strategy:
Buy >= P80
Sell <= P30
Test:
2023
```
2023年的结果才是真正的:
```text
Out-of-Sample Result
```
---
# 26. 参数过拟合控制
不能:
```text
不断调整参数
→ 回测
→ 找到收益最高参数
→ 宣布策略有效
```
应该记录:
```text
Strategy Version
Parameter Version
Training Period
Test Period
```
例如:
```text
Strategy v1.0
Buy = P75
Sell = P25
Training:
2015-2022
Test:
2023
```
---
# 27. 参数敏感性分析
例如:
```text
买入阈值:
P70
P75
P80
P85
P90
```
比较:
```text
CAGR
Max Drawdown
Sharpe
Calmar
```
如果:
```text
P75 → CAGR 13%
P80 → CAGR 13.5%
P85 → CAGR 13.2%
```
说明策略对参数不敏感。
如果:
```text
P79 → CAGR 18%
P80 → CAGR 20%
P81 → CAGR 8%
```
说明很可能存在过拟合。
---
# 28. 第五阶段:回测结果
回测结果至少分成四类。
---
## 28.1 收益指标
```text
Initial Capital
Final Capital
Total Return
CAGR
Annual Return
```
---
## 28.2 风险指标
```text
Maximum Drawdown
Volatility
Downside Volatility
Sharpe Ratio
Sortino Ratio
Calmar Ratio
```
---
## 28.3 交易指标
```text
Number of Trades
Win Rate
Average Holding Period
Average Profit
Average Loss
Profit Factor
Turnover
```
---
## 28.4 基准比较
至少比较:
```text
策略
沪深300
中证红利
上证指数
```
根据策略类型选择合适 Benchmark。
---
# 29. 第六阶段:交易成本
必须加入:
```text
Commission
Stamp Duty
Transfer Fee
Slippage
```
回测不能假设:
```text
Buy Price = Market Price
Sell Price = Market Price
```
应该支持:
```yaml
cost:
commission: ...
stamp_duty: ...
slippage: ...
```
并支持不同成本模型。
---
# 30. 第七阶段:分红处理
高股息策略必须正确处理:
```text
现金分红
除权除息
送股
转增
配股
```
数据层建议独立保存:
```text
price
dividend
split
bonus
rights_issue
```
---
# 31. 分红再投资
至少支持两种模式:
### 模式A
```text
现金分红
→ 不再投资
```
### 模式B
```text
现金分红
→ 按规则重新投资
```
最终分别计算:
```text
Total Return
```
---
# 32. 第八阶段:交易记录
每一笔交易都必须记录:
```text
trade_id
strategy_id
stock_code
signal_date
execution_date
side
price
quantity
amount
commission
tax
slippage
reason
```
其中:
```text
reason
```
非常重要。
例如:
```text
BUY
reason:
Dividend Yield = 4.82%
Historical Percentile = 86%
ROE = 15.3%
FCF positive = true
Risk Filter = PASS
```
这样后续 AI 才能分析:
> 为什么买?
---
# 33. 第九阶段:K线与交易点
前端个股页面建议展示:
```text
股票K线
┌────────────────────────────┐
│ │
│ K线 │
│ ▲ BUY │
│ ▼ SELL │
│ │
└────────────────────────────┘
股息率
────────────────────────────
PE
────────────────────────────
PB
────────────────────────────
回撤
────────────────────────────
```
买卖点直接标记在K线上。
---
# 34. 第十阶段:策略研究页面
前端建议分成:
```text
策略配置
↓
股票池
↓
个股画像
↓
参数研究
↓
回测
↓
交易记录
↓
绩效分析
↓
Walk-forward
↓
策略报告
```
---
# 35. 个股画像页面
例如:
```text
贵州茅台
当前股息率:3.2%
历史股息率:
P10 1.8%
P25 2.1%
P50 2.6%
P75 3.4%
P90 4.1%
当前:
3.2%
历史分位:
≈70%
```
同时展示:
```text
ROE
ROIC
PE
PB
FCF
DPS
Payout Ratio
Debt Ratio
```
---
# 36. 第十一阶段:策略解释
策略回测完成后,系统自动生成:
```text
Strategy Explanation
```
包括:
### 策略逻辑
```text
为什么买?
为什么卖?
为什么持有?
```
### 历史表现
```text
收益
风险
回撤
交易次数
```
### 策略弱点
例如:
```text
1. 对周期行业敏感
2. 高股息可能来自盈利下降
3. 行业集中风险
4. 极端行情下估值可能长期不回归
```
---
# 37. 第十二阶段:AI Agent
AI Agent 不负责直接修改回测结果。
建议定位为:
```text
Data Agent
Factor Agent
Strategy Agent
Backtest Agent
Analysis Agent
Report Agent
```
---
## 37.1 Data Agent
负责:
```text
检查数据完整性
检查缺失数据
检查日期问题
检查未来函数
```
---
## 37.2 Factor Agent
负责:
```text
分析因子
计算因子统计
寻找因子关系
生成因子报告
```
---
## 37.3 Strategy Agent
根据用户自然语言生成:
```yaml
strategy:
...
```
但必须经过:
```text
Schema Validation
```
之后才能运行。
---
## 37.4 Backtest Agent
负责调用:
```text
Backtest Engine
```
不能自己计算回测结果。
---
## 37.5 Analysis Agent
负责解释:
```text
为什么策略赚钱?
为什么策略亏损?
什么时候失效?
```
---
# 38. 第十三阶段:策略生命周期
所有策略都应该版本化。
```text
Strategy v1.0
↓
Backtest
↓
发现问题
↓
Strategy v1.1
↓
重新回测
↓
Walk-forward
↓
Paper Trading
↓
Live
```
---
# 39. 策略状态
建议:
```text
DRAFT
RESEARCH
BACKTEST
VALIDATED
PAPER
LIVE
ARCHIVED
```
---
# 40. 推荐的数据结构
核心实体:
```text
Stock
TradingCalendar
Price
CorporateAction
FinancialReport
Dividend
Factor
StockProfile
Universe
Strategy
StrategyParameter
Backtest
BacktestTrade
BacktestPosition
Performance
Benchmark
```
---
# 41. 核心模块
代码层建议:
```text
data/
├── market/
├── financial/
├── dividend/
├── corporate_action/
└── calendar/
universe/
├── filters/
├── selector.py
└── universe_manager.py
factor/
├── valuation/
├── dividend/
├── financial/
├── quality/
└── factor_engine.py
profile/
├── stock_profile.py
├── dividend_profile.py
├── valuation_profile.py
└── risk_profile.py
strategy/
├── base.py
├── registry.py
├── high_dividend.py
└── rules/
backtest/
├── engine.py
├── portfolio.py
├── execution.py
├── cost.py
├── benchmark.py
└── walk_forward.py
analysis/
├── performance.py
├── risk.py
├── trade_analysis.py
├── sensitivity.py
└── attribution.py
report/
├── strategy_report.py
└── backtest_report.py
ai/
├── data_agent.py
├── factor_agent.py
├── strategy_agent.py
├── backtest_agent.py
└── analysis_agent.py
```
---
# 42. 第一版 MVP
不要一开始实现全部功能。
建议第一阶段只完成:
```text
Tushare
↓
SQLite
↓
A股股票池
↓
高股息筛选
↓
个股股息率历史分析
↓
P75/P25交易规则
↓
Backtest
↓
K线 + 买卖点
↓
收益/回撤/交易报告
```
---
# 43. MVP 第一版策略
严格保持简单:
### 股票筛选
```text
上市 ≥ 10年
市值 ≥ 500亿元
连续现金分红 ≥ 5年
当前股息率 ≥ 3%
非ST
```
### 买入
```text
股息率 >= 历史P75
```
### 卖出
```text
股息率 <= 历史P25
```
### 仓位
```text
单只股票最大10%
```
### 回测
```text
Walk-forward
Training = 5~8年
Test = 1~2年
```
### 成本
```text
佣金
印花税
滑点
```
### 输出
```text
CAGR
Maximum Drawdown
Sharpe
Calmar
Win Rate
Trade Count
Average Holding Period
Benchmark Comparison
```
---
# 44. 第二版扩展
MVP稳定后增加:
```text
PE/PB
ROE
ROIC
FCF
Debt Ratio
Dividend Payout
```
然后研究:
```text
多因子筛选
```
例如:
```text
高股息
+
高ROE
+
低PE
+
低负债
+
FCF稳定
```
---
# 45. 第三版扩展
增加:
```text
动态仓位
分批买入
分批卖出
行业限制
组合管理
风险预算
```
---
# 46. 第四版扩展
增加:
```text
AI Agent
自然语言策略生成
策略解释
自动因子研究
自动回测
自动生成研究报告
```
最终形成:
```text
用户:
“帮我找长期稳定分红、
财务质量较好,
股息率处于历史高位的A股。”
↓
AI Strategy Agent
↓
生成筛选条件
↓
Factor Engine
↓
候选股票
↓
Stock Profile
↓
Strategy Engine
↓
Walk-forward Backtest
↓
Analysis Agent
↓
策略研究报告
```
---
# 47. 核心设计原则
整个系统开发过程中遵循以下原则:
## 原则1:数据和策略分离
```text
Data Layer
≠
Strategy Layer
```
---
## 原则2:策略和回测引擎分离
```text
Strategy
↓
产生信号
Backtest Engine
↓
执行信号
```
---
## 原则3:所有策略参数化
不要:
```python
if dividend_yield > 0.04:
```
直接写死。
应该:
```python
if dividend_yield > strategy.params.min_yield:
```
---
## 原则4:所有策略版本化
```text
strategy_id
version
parameters
created_at
```
---
## 原则5:严格防止未来函数
任何数据都必须带:
```text
available_date
```
---
## 原则6:回测结果必须可复现
同样的:
```text
数据版本
+
策略版本
+
参数
+
回测时间
```
必须产生相同结果。
---
## 原则7:收益不是唯一目标
必须同时关注:
```text
收益
风险
回撤
稳定性
交易频率
参数敏感性
样本外表现
```
---
# 48. 最终目标
最终系统形成:
```text
A股投资研究平台
┌─────────────────────────────────┐
│ Data Layer │
│ Tushare / Sina / SQLite / MySQL │
└────────────────┬────────────────┘
↓
┌─────────────────────────────────┐
│ Factor Research │
│ Dividend / Value / Quality │
└────────────────┬────────────────┘
↓
┌─────────────────────────────────┐
│ Stock Screening │
│ Point-in-Time Universe │
└────────────────┬────────────────┘
↓
┌─────────────────────────────────┐
│ Stock Profile │
│ 历史估值 / 财务 / 风险 / 股息率 │
└────────────────┬────────────────┘
↓
┌─────────────────────────────────┐
│ Strategy Engine │
│ 参数化 / DSL / Versioning │
└────────────────┬────────────────┘
↓
┌─────────────────────────────────┐
│ Backtest Engine │
│ Cost / Dividend / Corporate │
│ Action / Walk-forward │
└────────────────┬────────────────┘
↓
┌─────────────────────────────────┐
│ Performance Analysis │
│ Return / Risk / Drawdown / Trade│
└────────────────┬────────────────┘
↓
┌─────────────────────────────────┐
│ AI Agent │
│ Research / Analysis / Report │
└─────────────────────────────────┘
```
---
# 49. 开发优先级
建议按照下面顺序实施:
```text
P0
数据模型
股票基本信息
交易日历
日线
分红
复权/公司行为
↓
P1
Point-in-Time 财务数据
↓
P2
股票筛选器
↓
P3
股息率因子
↓
P4
个股画像
↓
P5
策略DSL
↓
P6
Backtest Engine
↓
P7
Walk-forward
↓
P8
Performance Analysis
↓
P9
K线 + 买卖点
↓
P10
策略版本管理
↓
P11
AI Agent
```
---
# 50. 第一阶段验收标准
第一版系统完成后,至少应该能够完成以下操作:
```text
输入:
高股息策略
最低市值:500亿
上市年限:10年
连续分红:5年
最低股息率:3%
买入:历史P75
卖出:历史P25
```
系统自动:
```text
① 找出符合条件的股票
② 生成股票池
③ 计算每只股票历史股息率分布
④ 计算P10/P25/P50/P75/P90
⑤ 生成买卖信号
⑥ 执行历史回测
⑦ 正确处理分红和除权
⑧ 加入交易成本
⑨ 输出K线和买卖点
⑩ 输出收益、回撤、Sharpe等指标
⑪ 与Benchmark比较
⑫ 执行Walk-forward
⑬ 输出样本内/样本外结果
⑭ 保存完整策略参数和版本
```
这样,第一版就已经具备一个真正的**可研究、可复现、可扩展的A股策略回测框架**。
---
# 51. 后续策略扩展
高股息只是第一种策略。
在相同框架下,可以继续实现:
```text
高股息策略
价值策略
低PE策略
低PB策略
高ROE策略
质量因子策略
红利+价值
红利+质量
价值+质量
多因子策略
均值回归
趋势策略
```
最终统一成:
```text
Universe
↓
Factors
↓
Stock Profile
↓
Strategy
↓
Portfolio
↓
Backtest
↓
Analysis
```
从而避免每增加一种投资策略,就重新开发一套系统。