# 止损止盈计算说明(保证金 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**,并确保交易进程已重启/配置已生效,新开仓才会用封顶后的止盈。