# 动态杠杆功能说明

## 功能概述

根据信号质量动态调整杠杆倍数，让高质量信号使用更高杠杆来最大化收益。

## 工作原理

### 杠杆计算公式

```
动态杠杆 = 基础杠杆 + (信号强度 - 最小信号强度) × (最大杠杆 - 基础杠杆) / (10 - 最小信号强度)
```

### 示例

假设配置：
- 基础杠杆：10倍
- 最大杠杆：20倍
- 最小信号强度：7

| 信号强度 | 计算过程 | 动态杠杆 |
|---------|---------|---------|
| 7 | 10 + (7-7) × (20-10) / (10-7) = 10 | 10x |
| 8 | 10 + (8-7) × (20-10) / (10-7) = 13.3 | 13x |
| 9 | 10 + (9-7) × (20-10) / (10-7) = 16.7 | 17x |
| 10 | 10 + (10-7) × (20-10) / (10-7) = 20 | 20x |

## 配置参数

### 数据库配置

在 `backend/database/init.sql` 中已添加：

```sql
('USE_DYNAMIC_LEVERAGE', 'true', 'boolean', 'strategy', '是否启用动态杠杆（根据信号强度调整杠杆倍数）'),
('MAX_LEVERAGE', '20', 'number', 'strategy', '最大杠杆倍数（动态杠杆上限）'),
```

### 配置说明

- **USE_DYNAMIC_LEVERAGE**: 是否启用动态杠杆
  - `true`: 启用，根据信号强度动态调整杠杆
  - `false`: 禁用，始终使用基础杠杆（LEVERAGE）

- **LEVERAGE**: 基础杠杆倍数（默认10倍）
  - 当信号强度 = 最小信号强度时使用
  - 当动态杠杆禁用时使用

- **MAX_LEVERAGE**: 最大杠杆倍数（默认20倍）
  - 动态杠杆的上限
  - 即使信号强度为10，也不会超过此值

- **MIN_SIGNAL_STRENGTH**: 最小信号强度（默认7）
  - 低于此强度的信号使用基础杠杆
  - 高于此强度的信号按比例增加杠杆

## 收益影响分析

### 收益放大效果

假设：
- 账户余额：100 USDT
- 仓位比例：5%
- 基础杠杆：10倍
- 最大杠杆：20倍
- 信号强度：10/10

**使用固定杠杆（10倍）**：
- 仓位价值：100 × 5% = 5 USDT
- 保证金：5 / 10 = 0.5 USDT
- 如果盈利5%，收益：5 × 5% = 0.25 USDT

**使用动态杠杆（20倍）**：
- 仓位价值：100 × 5% = 5 USDT
- 保证金：5 / 20 = 0.25 USDT
- 如果盈利5%，收益：5 × 5% = 0.25 USDT（相同）
- **但使用更少的保证金，可以开更多仓位**

或者保持保证金不变：
- 保证金：0.5 USDT（与固定杠杆相同）
- 仓位价值：0.5 × 20 = 10 USDT（是固定杠杆的2倍）
- 如果盈利5%，收益：10 × 5% = 0.5 USDT（是固定杠杆的2倍）

### 风险提示

⚠️ **重要提示**：
- 杠杆越高，风险越大
- 高杠杆会放大亏损
- 建议：
  - 保守策略：MAX_LEVERAGE = 15
  - 平衡策略：MAX_LEVERAGE = 20
  - 激进策略：MAX_LEVERAGE = 25（需谨慎）

## 使用建议

### 1. 保守配置（推荐新手）

```sql
USE_DYNAMIC_LEVERAGE = true
LEVERAGE = 10
MAX_LEVERAGE = 15
MIN_SIGNAL_STRENGTH = 7
```

- 信号强度7-8：10倍杠杆
- 信号强度9：12-13倍杠杆
- 信号强度10：15倍杠杆

### 2. 平衡配置（推荐）

```sql
USE_DYNAMIC_LEVERAGE = true
LEVERAGE = 10
MAX_LEVERAGE = 20
MIN_SIGNAL_STRENGTH = 7
```

- 信号强度7：10倍杠杆
- 信号强度8：13倍杠杆
- 信号强度9：17倍杠杆
- 信号强度10：20倍杠杆

### 3. 激进配置（需谨慎）

```sql
USE_DYNAMIC_LEVERAGE = true
LEVERAGE = 10
MAX_LEVERAGE = 25
MIN_SIGNAL_STRENGTH = 7
```

- 信号强度7：10倍杠杆
- 信号强度8：15倍杠杆
- 信号强度9：20倍杠杆
- 信号强度10：25倍杠杆

## 代码实现

### 1. RiskManager.calculate_dynamic_leverage()

位置：`trading_system/risk_manager.py`

```python
def calculate_dynamic_leverage(self, signal_strength: int) -> int:
    """
    根据信号强度计算动态杠杆倍数
    信号强度越高，杠杆倍数越高，以最大化收益
    """
    # 获取配置参数
    use_dynamic_leverage = self.config.get('USE_DYNAMIC_LEVERAGE', True)
    base_leverage = self.config.get('LEVERAGE', 10)
    max_leverage = self.config.get('MAX_LEVERAGE', 20)
    min_signal_strength = self.config.get('MIN_SIGNAL_STRENGTH', 7)
    
    # 如果未启用动态杠杆，返回基础杠杆
    if not use_dynamic_leverage:
        return int(base_leverage)
    
    # 计算动态杠杆...
    return dynamic_leverage
```

### 2. Strategy 中使用动态杠杆

位置：`trading_system/strategy.py`

```python
# 根据信号强度计算动态杠杆（高质量信号使用更高杠杆）
dynamic_leverage = self.risk_manager.calculate_dynamic_leverage(signal_strength)

# 开仓时使用动态杠杆
position = await self.position_manager.open_position(
    symbol=symbol,
    change_percent=change_percent,
    leverage=dynamic_leverage,  # 使用动态杠杆
    ...
)
```

## 监控建议

建议监控以下指标：

1. **平均杠杆倍数**
   - 观察实际使用的杠杆分布
   - 确保在合理范围内

2. **信号强度分布**
   - 观察信号强度的分布情况
   - 如果大部分信号强度都很高，可能需要调整策略

3. **收益对比**
   - 对比启用/禁用动态杠杆的收益
   - 评估动态杠杆的实际效果

4. **风险指标**
   - 监控最大回撤
   - 确保高杠杆不会导致过度风险

## 总结

动态杠杆功能可以根据信号质量自动调整杠杆倍数，让高质量信号使用更高杠杆来最大化收益。但需要注意：

- ✅ **优点**：高质量信号可以获得更高收益
- ⚠️ **风险**：高杠杆会放大亏损，需要谨慎配置
- 💡 **建议**：从保守配置开始，根据实际效果逐步调整
