docs: 仓位分配逻辑修改分析文档

- 记录动态权重vs固定仓位逻辑对比
- 分析收益下降原因(4479%→1678%)
- 说明固定仓位设计意义与改进方向
This commit is contained in:
2026-05-16 00:31:14 +08:00
parent 444dc0e751
commit e0d6f81ea1

View File

@@ -0,0 +1,130 @@
# 仓位分配逻辑修改分析
## 一、修改背景
**问题**当选出的Top3动量标的中存在得分小于0的标的时仓位如何分配
**原逻辑**按实际持仓数量等权分配选出2只时每只权重50%选出1只时权重100%。
**问题分析**:原逻辑在标的数量不足时放大了风险敞口,不符合"严格按动量筛选,不满仓则部分现金"的策略意图。
---
## 二、修改内容
**修改文件**`framework/execution/__init__.py`
**修改方法**
- `_calculate_daily_returns()` - 收益计算逻辑
- `_apply_trade_cost()` - 交易成本计算逻辑
---
## 三、核心逻辑对比
| 方面 | 原逻辑(动态权重) | 新逻辑(固定仓位) |
|------|---------------------|---------------------|
| **仓位分配** | 按实际持仓数量等权 | 按 `select_num` 固定等权 |
| **权重公式** | `weight = 1 / len(codes)` | `weight = 1 / select_num` |
| **缺失处理** | 无缺失概念 | 缺失仓位用现金替代 |
| **收益计算** | `np.mean(returns)` | `sum(ret × unit_weight)` |
---
## 四、具体示例select_num=3
### 仓位分配对比
| 场景 | 原逻辑权重分配 | 新逻辑权重分配 |
|------|----------------|----------------|
| **选出3只** | 每只 33.3% | 每只 33.3% + 现金 0% |
| **选出2只** | 每只 **50%** ← 放大! | 每只 33.3% + 现金 **33.3%** |
| **选出1只** | **100%** ← 极度放大! | 33.3% + 现金 **66.7%** |
| **空仓** | 无收益 | 现金 100% |
### 收益计算示例
假设某日选出2只标的纳指涨+2%,日经涨+1%
| 逻辑 | 计算方式 | 收益结果 |
|------|----------|----------|
| **原逻辑** | `(2% + 1%) / 2` | **1.5%** |
| **新逻辑** | `(2% + 1%) / 3 + 0` | **1.0%** |
| **差异** | - | **-0.5% (-33%)** |
假设某日选出1只标的纳指涨+2%
| 逻辑 | 计算方式 | 收益结果 |
|------|----------|----------|
| **原逻辑** | `2% / 1` | **2%** |
| **新逻辑** | `2% / 3 + 0 + 0` | **0.67%** |
| **差异** | - | **-1.33% (-67%)** |
---
## 五、回测结果对比
| 指标 | 原逻辑 | 新逻辑 | 变化 |
|------|--------|--------|------|
| 累计收益 | 4479.14% | 1677.51% | **↓62.6%** |
| 最终净值 | 45.79 | 17.78 | **↓61.2%** |
### 收益下降原因分析
**数据统计**
- 总回测天数3501天
- 持有3只标的3213天91.8%
- 持有2只标的263天7.5%
- 持有1只标的25天0.7%
**影响测算**
- 8.2%时间288天持有少于3只标的
- 原逻辑在这些天放大权重:
- 2只时权重从33.3%→50%波动放大50%
- 1只时权重从33.3%→100%波动放大200%
- 新逻辑保持固定权重空缺部分现金收益为0
---
## 六、设计意义
### 原逻辑问题
1.**风险敞口不稳定**:标的数量不足时风险放大
2.**单标的集中风险**选出1只时100%风险集中在单一标的
3.**收益波动不稳定**:不同仓位状态下波动率差异大
### 新逻辑优势
1.**稳定风险敞口**每只标的固定33.3%权重
2.**现金避险机制**:空缺仓位用现金替代,降低风险
3.**符合策略意图**:严格按动量筛选,负分标的过滤后缺位用现金填充
---
## 七、结论与建议
### 当前状态
修改已生效commit: `444dc0e refactor(execution): 改为固定仓位分配逻辑`
### 验证建议
1. 对比两种逻辑在不同市场环境下的表现
2. 分析固定仓位对回撤控制的效果
3. 评估现金替代部分的收益损失是否值得风险降低
### 改进方向
如果需要进一步提升收益,可考虑:
- 降低 `min_score` 阈值(如-0.5),允许轻度负分标的参与
- 增加"相对动量"逻辑:即使负分,大类排名靠前也保留
- 添加分散度约束强制保持至少2只标的避免单一标的风险
---
## 八、相关文件
- `framework/execution/__init__.py` - BacktestExecutor 收益计算
- `strategies/shared/signals/selectors.py` - TopNSelector 选股逻辑
- `strategies/rotation/config.yaml` - min_score 配置