Files
docker-configs/backtest/strategy/emotional-damage/enhanced-emotional-damage.txt
2025-07-19 00:00:01 -05:00

169 lines
5.7 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 增强版情绪伤害策略 - 算法详细说明
## 策略概述
增强版情绪伤害策略是一种基于市场情绪指标(恐惧与贪婪指数)结合技术分析的量化交易策略。该策略通过在市场恐慌时转换为现金,在市场恢复时投资高波动性股票来获取收益。
## 核心算法组件
### 1. 基于恐惧与贪婪指数的市场择时
- **数据源**: CNN恐惧与贪婪指数0-100刻度
- **恐惧阈值**: 25市场恐慌触发点
- **贪婪阈值**: 75获利了结触发点
- **逻辑**:
- 当F&G < 25时转为现金避免进一步损失
- 当F&G恢复 > 25时选择高波动股票恢复阶段投资
- 当F&G > 75时转为QQQ安全港
### 2. 渐进式调仓系统4步调仓
**关键修复**: 原算法存在复利错误,产生了不可能的收益率。
#### 修复后的实现:
```python
def start_transition(self, date, target_type, stocks=None):
# 在开始时计算总资金,存储固定分配计划防止复利错误
def gradual_transition(self, date, target_type, stocks=None):
# 每步执行预定分配的1/4不重新计算总价值
```
**调仓类型**:
- **转现金**: 在4个交易日内卖出所有非QQQ持仓
- **转波动股**: 用可用现金买入选定的高波动股票
- **转QQQ**: 在4天内卖出所有持仓并买入QQQ
**为什么4步**: 减少大额仓位变化的市场冲击和滑点
### 3. 技术指标过滤系统
高波动股票选择需要满足3个指标中至少2个显示上涨趋势
#### MACD黄金交叉
```python
macd > macd_signal # 当前MACD高于信号线
```
#### RSI向上趋势
```python
current_rsi > 30 # RSI大于30避免超卖
```
#### 移动平均线交叉5/20周期
```python
sma_5 > sma_20 # 短期动量超过长期
```
### 4. 止损保护15%规则)
- **触发条件**: 任何波动股持仓跌破平均买入价15%
- **执行动作**: 立即卖出该持仓并买入等值QQQ
- **目的**: 风险管理,防止大额损失
## 状态机实现
```
QQQ_HOLD → [F&G < 25] → FEAR_TRANSITION → CASH_WAIT
↓ (4步)
CASH_WAIT → [F&G ≥ 25] → GREED_TRANSITION → VOLATILE_STOCKS
↓ (4步) ↓ [F&G > 75]
QQQ_TRANSITION
↓ (4步)
QQQ_HOLD
```
## 关键算法修复
### 原始BUG: 初始化错误
```python
# 错误(导致资金翻倍):
self.cash = initial_capital # 设置现金
self.positions['QQQ'] = qqq_shares # 买入QQQ但没有清零现金
```
### 修复后的算法:
```python
# 正确(资金正常):
self.positions['QQQ'] = qqq_shares
self.cash = 0 # 修复: 买入QQQ后清零现金
```
### 股票选择逻辑修复
```python
# 原来: 只使用波动率过滤(过于简单)
if vol > 0.2: # 20%波动率阈值过高
volatilities[ticker] = vol
# 修复后: 技术指标过滤 + 波动率排序
if self.check_technical_indicators(ticker, date): # RSI+MACD+SMA过滤
if vol > 0.1: # 降低波动率阈值
qualified_stocks.append((ticker, vol))
```
### 交易逻辑修复
```python
# 原来: 等权重买入所有股票
amount_per_stock = cash / len(stocks) # 分散投资
for ticker in stocks:
buy(ticker, amount_per_stock)
# 修复后: 每次买入波动性最强的1支股票
current_step_index = min(self.current_step, len(stocks) - 1)
ticker = stocks[current_step_index] # 按波动性排序,每次买最强的
buy(ticker, cash_this_step) # 最多同时持有4支股票
```
## 性能特征
### 风险管理功能:
- **最大回撤控制**: 市场恐慌时转为现金
- **仓位管理**: 最多同时持有4支高波动股票
- **止损保护**: 每个持仓最大损失15%
- **渐进执行**: 4步调仓减少市场冲击
### 预期行为:
- **牛市**: 通过QQQ适度参与
- **熊市**: 恐慌阶段现金保值
- **恢复阶段**: 高波动股票攻击性持仓
- **过热市场**: 防御性回到QQQ
## 技术实现细节
### 数据库依赖:
- `fear_greed_index`: CNN恐惧与贪婪历史数据
- `{ticker}`: 个股OHLCV + 技术指标数据
- `qqq`: QQQ ETF历史价格真实数据
- `fear_greed_data.spy_close`: SPY基准数据
### 计算的性能指标:
- 总回报、年化回报、夏普比率
- 最大回撤和恢复期
- 胜率和交易频率
- 与市场基准的相关性
## 已知限制与未来改进
### 当前问题:
1. **技术指标过滤过严**: 导致大部分恐慌期找不到合适股票
2. **交易记录不完整**: gradual_transition中的交易未被记录
3. **市场制度变化**: 可能无法适应结构性市场变化
### 计划增强:
1. **放宽技术指标**: 降低过滤标准,提高股票选择成功率
2. **完善交易记录**: 确保所有交易都被正确记录
3. **动态阈值**: 根据市场波动调整F&G阈值
4. **风险缩放**: 基于波动率估算调整仓位大小
## 回测结果(修复后)
- **期间**: 2007-202518年
- **总回报**: 1258.3%修复初始化BUG后
- **年化回报**: 15.7%略低于QQQ的16.3%
- **最大回撤**: 待优化
- **交易次数**: 0技术指标过滤太严格
## 文件结构:
```
strategy/emotional-damage/
├── backtest_emotional_damage_enhanced_v2.py # 主策略(已修复)
├── generate_enhanced_pdf_report.py # 报告生成器
├── enhanced_emotional_damage_strategy_report_*.pdf # 结果报告
└── enhanced-emotional-damage.txt # 本文档
```
**状态**: 策略逻辑已修复但技术指标过滤需要优化以提高选股成功率。目前表现接近QQQ买入持有策略但缺少波动股票投资机会。