# 止损止盈计算说明（保证金 vs 价格距离）

## 一、当前逻辑概览

| 项目 | 是否基于「订单保证金」 | 实际如何算 | 为何会“很大” |
|------|------------------------|------------|----------------|
| **止损 (SL)** | 部分 | **优先用 ATR**：SL 价格距离 = ATR × ATR_STOP_LOSS_MULTIPLIER（如 3.0）。只有 ATR 不可用时才用「保证金×STOP_LOSS_PERCENT」换算成价格。 | ATR 宽时（如 2%×3=**6% 价格**），止损会离得很远；与“保证金 10%”的直觉不一致。 |
| **第一目标止盈 (TP1)** | 是，但会被抬升 | 先按 **TAKE_PROFIT_1_PERCENT（30% 保证金）** 算价格距离；再被 **MIN_RR_FOR_TP1（1.5 倍止损距离）** 抬升，取更大者。 | 当止损很宽（如 6% 价格）时，TP1 至少 1.5×6%=**9% 价格**，容易比“30% 保证金 ≈3.75% 价格”大很多。 |
| **第二目标止盈 (TP2)** | 否（当前实际多用盈亏比） | **优先用「止损距离×RISK_REWARD_RATIO」**（如 3:1）。即：止损 6% 价格 → TP2 = **18% 价格**。保证金 55% 只是候选之一，通常不会被选中。 | 盈亏比 3:1 下，止损一宽，止盈就非常远，**很难触及**，所以你感觉“很难获利离场”。 |

**结论**：  
- **止损**：多数情况是 **按价格距离（ATR）** 算，不是按“订单保证金百分比”一口价。  
- **止盈**：  
  - TP1 设计上是“基于保证金”，但被 MIN_RR_FOR_TP1 抬升后，可能变成“基于止损距离”的 1.5 倍，也会偏大。  
  - TP2 **当前几乎总是“基于止损距离的盈亏比”**（3 倍止损距离），所以会很大，**并不是“按订单保证金”的 55% 来**。

---

## 二、换算关系（便于心里有数）

- 杠杆 8x、**纯按保证金**时：  
  - 保证金 10% ≈ **1.25% 价格**  
  - 保证金 30% ≈ **3.75% 价格**  
  - 保证金 55% ≈ **6.875% 价格**  

- 当前实际常见情况（ATR 止损 + 3:1 止盈）：  
  - 止损：例如 **4%～6% 价格**（ATR×倍数）  
  - TP2：**12%～18% 价格**（3×止损）→ 对很多行情来说很难碰到。

---

## 三、若希望“更容易获利离场”的改法

1. **让第二目标止盈也受“保证金”上限约束（推荐）**  
   - 增加逻辑：当「盈亏比算出的 TP2」对应的保证金盈利 **大于** 配置的 TAKE_PROFIT_PERCENT（如 55%）时，**改用「保证金 55%」对应的价格** 作为 TP2。  
   - 这样 TP2 最远就是“55% 保证金”（约 6.875% 价格 @8x），不会出现 18% 价格那种很难到的止盈。

2. **调低盈亏比**  
   - 把 `RISK_REWARD_RATIO` 从 3.0 改为 2.0 或 1.5，TP2 会变近（仍会优先于“保证金止盈”被选用，除非再做上面 1 的约束）。

3. **第一目标 TP1 不要被抬得过高**  
   - 把 `MIN_RR_FOR_TP1` 从 1.5 改为 1.0，或关闭“TP1 至少 1.5 倍止损”的抬升，让 TP1 更贴近“30% 保证金”对应的价格。

4. **收紧止损（让 ATR 止损别太宽）**  
   - 降低 `ATR_STOP_LOSS_MULTIPLIER`（如从 3.0 到 2.0 或 1.5），止损变近，同比例下 TP2 也会变近（但止损更容易被扫到，需权衡）。

**已实现**：在 `risk_manager.get_take_profit_price` 中增加了 **USE_MARGIN_CAP_FOR_TP**（默认 **True**）：当使用盈亏比算出 TP2 时，若该价格比「TAKE_PROFIT_PERCENT 对应的保证金止盈价」更远，则**改用保证金止盈价**作为 TP2，这样止盈不会远到难以触及。

- **⚠️ 不要关闭**：普遍出现的「止盈特别远（如 +238% 保证金）、亏损扛单」是因为**没有封顶**时用了「止损距离×3」的止盈。**关掉 USE_MARGIN_CAP_FOR_TP 会恢复那种过远止盈，加重扛单**。应保持 **True**，并确保交易进程已重启/配置已生效，新开仓才会用封顶后的止盈。

**止损封顶（USE_MARGIN_CAP_FOR_SL）**：若仅封顶止盈、不封顶止损，会出现「止盈 55%、止损 -58%～-78%」——止损仍过宽、易扛单。因此增加了 **USE_MARGIN_CAP_FOR_SL**（默认 True）：当 ATR（或技术）止损对应的**保证金亏损**超过配置的 STOP_LOSS_PERCENT（如 10%）时，**改用保证金止损**，使止损不再超过 10% 保证金。与 USE_MARGIN_CAP_FOR_TP 一起使用，新开仓的 SL/TP 都会在「保证金比例」范围内，避免极端远距。
