# 止损止盈机制说明

## 问题背景

之前基于价格的盈亏比（如止损3%价格，止盈5%价格），现在改为基于保证金的盈亏比（如止损3% of margin，止盈5% of margin）。

**问题**：基于保证金的方式，在10x杠杆下：
- 止损3% of margin = 价格变动约0.3%
- 止盈5% of margin = 价格变动约0.5%

这太严格了，容易被正常波动触发。

## 解决方案：混合方案

现在系统采用**混合方案**，同时考虑：
1. **基于保证金的止损止盈**：控制风险金额
2. **基于价格的最小变动**：防止止损止盈过紧

系统会取**两者中更宽松的一个**，既保证风险控制，又避免被正常波动触发。

## 配置参数

### 1. `STOP_LOSS_PERCENT` (止损百分比，相对于保证金)
- **默认值**：0.03 (3%)
- **说明**：当保证金亏损达到此百分比时触发止损
- **计算**：止损金额 = 保证金 × 止损百分比
- **示例**：10x杠杆，100 USDT入场，保证金10 USDT，止损3% = 0.3 USDT

### 2. `TAKE_PROFIT_PERCENT` (止盈百分比，相对于保证金)
- **默认值**：0.05 (5%)
- **说明**：当保证金盈利达到此百分比时触发止盈
- **计算**：止盈金额 = 保证金 × 止盈百分比
- **示例**：10x杠杆，100 USDT入场，保证金10 USDT，止盈5% = 0.5 USDT

### 3. `MIN_STOP_LOSS_PRICE_PCT` (最小止损价格变动百分比) ⭐ 新增
- **默认值**：0.01 (1%)
- **说明**：止损价格变动的最小百分比，防止止损过紧
- **作用**：即使基于保证金的止损更紧，也会使用至少1%的价格变动
- **示例**：如果基于保证金的止损对应0.3%价格变动，但配置了1%最小变动，则使用1%

### 4. `MIN_TAKE_PROFIT_PRICE_PCT` (最小止盈价格变动百分比) ⭐ 新增
- **默认值**：0.015 (1.5%)
- **说明**：止盈价格变动的最小百分比，防止止盈过紧
- **作用**：即使基于保证金的止盈更紧，也会使用至少1.5%的价格变动
- **示例**：如果基于保证金的止盈对应0.5%价格变动，但配置了1.5%最小变动，则使用1.5%

## 计算逻辑

### 止损计算示例（10x杠杆，入场价100 USDT，数量1）

1. **基于保证金的止损**：
   - 保证金 = (100 × 1) / 10 = 10 USDT
   - 止损金额 = 10 × 3% = 0.3 USDT
   - 止损价 = 100 - (0.3 / 1) = 99.7 USDT
   - 价格变动 = 0.3%

2. **基于价格的最小止损**：
   - 最小价格变动 = 1%
   - 止损价 = 100 × (1 - 0.01) = 99 USDT
   - 价格变动 = 1%

3. **最终止损**：
   - 取更宽松的：max(99.7, 99) = 99.7 USDT（但实际会使用99 USDT，因为1%更宽松）
   - 实际：使用99 USDT（1%价格变动）

### 止盈计算示例（10x杠杆，入场价100 USDT，数量1）

1. **基于保证金的止盈**：
   - 保证金 = 10 USDT
   - 止盈金额 = 10 × 5% = 0.5 USDT
   - 止盈价 = 100 + (0.5 / 1) = 100.5 USDT
   - 价格变动 = 0.5%

2. **基于价格的最小止盈**：
   - 最小价格变动 = 1.5%
   - 止盈价 = 100 × (1 + 0.015) = 101.5 USDT
   - 价格变动 = 1.5%

3. **最终止盈**：
   - 取更宽松的：max(100.5, 101.5) = 101.5 USDT（1.5%价格变动）

## 配置建议

### 保守策略
- `STOP_LOSS_PERCENT`: 0.05 (5% of margin)
- `TAKE_PROFIT_PERCENT`: 0.08 (8% of margin)
- `MIN_STOP_LOSS_PRICE_PCT`: 0.01 (1%)
- `MIN_TAKE_PROFIT_PRICE_PCT`: 0.015 (1.5%)

### 平衡策略（推荐）
- `STOP_LOSS_PERCENT`: 0.03 (3% of margin)
- `TAKE_PROFIT_PERCENT`: 0.05 (5% of margin)
- `MIN_STOP_LOSS_PRICE_PCT`: 0.01 (1%)
- `MIN_TAKE_PROFIT_PRICE_PCT`: 0.015 (1.5%)

### 激进策略（不推荐过小最小距离）
- `STOP_LOSS_PERCENT`: 0.02 (2% of margin)
- `TAKE_PROFIT_PERCENT`: 0.03 (3% of margin)
- `MIN_STOP_LOSS_PRICE_PCT`: **≥ 0.015 (1.5%)**，不建议 0.5%，易被波动扫损
- `MIN_TAKE_PROFIT_PRICE_PCT`: **≥ 0.02 (2%)**

## 优势

1. **风险控制**：基于保证金的止损确保每笔交易的最大亏损是固定的
2. **避免误触发**：最小价格变动保护避免被正常波动触发
3. **灵活性**：可以根据不同市场条件调整参数
4. **与币安一致**：盈亏百分比显示与币安一致（相对于保证金）

## 注意事项

1. **杠杆影响**：杠杆越高，基于保证金的止损对应的价格变动越小
2. **市场波动**：在波动大的市场，可以适当提高最小价格变动百分比
3. **技术止损**：系统仍会考虑技术分析（支撑/阻力、布林带），如果技术止损更紧，会使用技术止损
4. **⚠️ 最小距离不宜过小**：`MIN_STOP_LOSS_PRICE_PCT` / `MIN_TAKE_PROFIT_PRICE_PCT` 是「离入场价的最小价格距离」。设为 0.5%、0.6% 会允许极紧的止损/止盈，容易被噪音扫损或过早止盈，建议**至少 2%～2.5%**（0.02～0.025）。代码默认：止损 2.5%、止盈 2%。

## 如何配置

可以通过以下方式配置：
1. **数据库配置表**：在 `trading_config` 表中添加/修改配置项
2. **环境变量**：设置环境变量（如 `MIN_STOP_LOSS_PRICE_PCT=0.01`）
3. **前端配置面板**：在配置面板中修改（如果已添加相应配置项）
