exit-strategies

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Exit Strategies

退出策略

Entries are easy, exits are everything. A mediocre entry with a disciplined exit will outperform a perfect entry with no exit plan. This skill covers systematic, rule-based exit methods for crypto and Solana token trading.
入场容易,退出才是关键。纪律严明的退出策略搭配普通入场时机,表现会优于没有退出计划的完美入场时机。本技能涵盖加密货币及Solana代币交易的系统化、规则化退出方法。

Why Exits Matter

为何退出策略至关重要

  • Entries determine if you participate. Exits determine how much you keep.
  • Most traders spend 90% of effort on entries and 10% on exits — invert this.
  • Without defined exits you rely on emotion, which guarantees inconsistency.
  • Every trade should have three exits defined before entry: stop loss, take profit, and trailing stop.
  • 入场决定你是否参与交易,退出决定你能保留多少收益。
  • 大多数交易者将90%的精力放在入场策略上,仅10%用于退出策略——请颠倒这个比例。
  • 没有明确的退出策略,你会依赖情绪决策,这必然导致结果不一致。
  • 每笔交易都应在入场前定义好三个退出方案:止损、止盈和追踪止损。

Exit Categories

退出策略分类

1. Stop Loss — Risk Management Exits

1. 止损——风险管理型退出

Predefined price level where you close the position to cap downside.
MethodDescriptionBest For
Fixed percentageExit at entry − X%Simple setups, beginners
ATR-basedEntry − ATR(14) × multiplierVolatility-adaptive
Support levelBelow nearest swing lowTechnically defined risk
Maximum lossAbsolute SOL/USD capAccount protection
ATR-based stop (recommended default):
python
import pandas_ta as ta

atr = df.ta.atr(length=14)
stop_loss = entry_price - (atr.iloc[-1] * 2.0)  # 2x ATR below entry
Multiplier guide:
  • 1.5× — Tight. High win rate needed. Good for scalps.
  • 2.0× — Standard. Balances noise filtering with risk.
  • 3.0× — Wide. For swing trades in volatile conditions.
See
references/stop_loss_methods.md
for complete methodology.
预先设定价格水平,达到该水平时平仓以限制下行风险。
方法描述适用场景
固定百分比在入场价 − X% 时退出简单交易场景、新手
基于ATR入场价 − ATR(14) × 乘数适配波动行情
支撑位低于最近的摆动低点技术面定义的风险
最大亏损设定SOL/USD绝对亏损上限账户资金保护
基于ATR的止损(推荐默认方案):
python
import pandas_ta as ta

atr = df.ta.atr(length=14)
stop_loss = entry_price - (atr.iloc[-1] * 2.0)  # 入场价下方2倍ATR
乘数指南:
  • 1.5× — 较严格。需要高胜率。适合刷单交易。
  • 2.0× — 标准配置。平衡噪音过滤与风险控制。
  • 3.0× — 较宽松。适合波动行情中的波段交易。
完整方法请参考
references/stop_loss_methods.md

2. Take Profit — Target Exits

2. 止盈——目标型退出

Predefined levels where you lock in gains.
Fixed risk/reward targets:
python
risk = entry_price - stop_loss_price
tp_2r = entry_price + (risk * 2)  # 2:1 R:R
tp_3r = entry_price + (risk * 3)  # 3:1 R:R
tp_5r = entry_price + (risk * 5)  # 5:1 R:R
Scaled exit framework (recommended for meme/PumpFun tokens):
TrancheSizeTargetAction After
125%2× riskMove stop to breakeven
225%3–5× riskTrail remainder
325%5–10× riskTighten trail
425%Trailing stopMoonbag — let it ride
Market cap milestone exits:
For PumpFun and meme tokens where R:R ratios are less meaningful:
python
milestones = [
    {"mcap": 50_000,  "sell_pct": 0.25, "label": "Cover cost"},
    {"mcap": 100_000, "sell_pct": 0.25, "label": "Lock profit"},
    {"mcap": 500_000, "sell_pct": 0.25, "label": "Major profit"},
    # Hold 25% as moonbag with trailing stop
]
See
references/take_profit_strategies.md
for full methodology including Fibonacci extension targets and volume-based exits.
预先设定锁定收益的价格水平。
固定风险/回报目标:
python
risk = entry_price - stop_loss_price
tp_2r = entry_price + (risk * 2)  # 2:1 风险回报比
tp_3r = entry_price + (risk * 3)  # 3:1 风险回报比
tp_5r = entry_price + (risk * 5)  # 5:1 风险回报比
分级退出框架(推荐用于meme/PumpFun代币):
份额比例目标后续操作
125%2倍风险将止损移动至盈亏平衡点
225%3–5倍风险对剩余仓位启用追踪止损
325%5–10倍风险收紧追踪止损幅度
425%追踪止损长期持有仓位——让利润奔跑
市值里程碑退出:
对于PumpFun和meme代币,风险回报比意义不大时适用:
python
milestones = [
    {"mcap": 50_000,  "sell_pct": 0.25, "label": "覆盖成本"},
    {"mcap": 100_000, "sell_pct": 0.25, "label": "锁定利润"},
    {"mcap": 500_000, "sell_pct": 0.25, "label": "大额利润"},
    # 保留25%仓位作为长期持有,搭配追踪止损
]
完整方法包括斐波那契扩展目标和基于成交量的退出策略,请参考
references/take_profit_strategies.md

3. Trailing Stop — Trend-Following Exits

3. 追踪止损——趋势跟随型退出

Dynamic stops that follow price upward but never move down.
Percentage trailing:
python
def percentage_trailing_stop(
    current_price: float,
    highest_since_entry: float,
    trail_pct: float = 0.10,
) -> tuple[float, bool]:
    """Return (stop_level, triggered)."""
    highest = max(highest_since_entry, current_price)
    stop = highest * (1 - trail_pct)
    return stop, current_price <= stop
ATR trailing (Chandelier Exit):
python
def chandelier_exit(
    highs: list[float],
    atr_value: float,
    multiplier: float = 2.5,
    lookback: int = 22,
) -> float:
    """Highest high over lookback minus ATR * multiplier."""
    highest_high = max(highs[-lookback:])
    return highest_high - (atr_value * multiplier)
EMA trailing:
python
undefined
动态止损位,随价格上行移动但不会向下调整。
百分比追踪止损:
python
def percentage_trailing_stop(
    current_price: float,
    highest_since_entry: float,
    trail_pct: float = 0.10,
) -> tuple[float, bool]:
    """返回 (止损位, 是否触发止损)。"""
    highest = max(highest_since_entry, current_price)
    stop = highest * (1 - trail_pct)
    return stop, current_price <= stop
ATR追踪止损(吊灯止损法):
python
def chandelier_exit(
    highs: list[float],
    atr_value: float,
    multiplier: float = 2.5,
    lookback: int = 22,
) -> float:
    """回溯期内的最高价减去 ATR * 乘数。"""
    highest_high = max(highs[-lookback:])
    return highest_high - (atr_value * multiplier)
EMA追踪止损:
python
undefined

Exit when close < EMA for M consecutive bars

当收盘价连续M根K线低于EMA时退出

ema = df.ta.ema(length=20) below_ema = df["close"] < ema consecutive_below = below_ema.rolling(3).sum() == 3 # 3 bars below

Typical EMA periods: 10 (scalp), 20 (day trade), 50 (swing).

See `references/trailing_stops.md` for Parabolic SAR, SuperTrend, and step trailing.
ema = df.ta.ema(length=20) below_ema = df["close"] < ema consecutive_below = below_ema.rolling(3).sum() == 3 # 连续3根K线低于EMA

典型EMA周期:10(刷单)、20(日内交易)、50(波段交易)。

抛物线SAR、SuperTrend和阶梯式追踪止损等方法请参考 `references/trailing_stops.md`。

4. Time-Based Exits

4. 时间型退出

Exit if the trade hasn't moved in your favor within a defined window.
python
bars_since_entry = current_bar - entry_bar
if bars_since_entry > max_hold_bars and current_pnl <= 0:
    exit_reason = "time_stop"
Guidelines:
  • Scalp: 5–15 minutes
  • Day trade: 4–8 hours
  • Swing: 3–5 days
  • PumpFun snipe: 2–10 minutes (token-specific)
Time stops prevent capital from sitting in dead trades.
如果交易在设定时间窗口内未朝有利方向移动则退出。
python
bars_since_entry = current_bar - entry_bar
if bars_since_entry > max_hold_bars and current_pnl <= 0:
    exit_reason = "time_stop"
参考指南:
  • 刷单:5–15分钟
  • 日内交易:4–8小时
  • 波段交易:3–5天
  • PumpFun狙击交易:2–10分钟(因代币而异)
时间止损可避免资金被困在无进展的交易中。

5. Signal-Based Exits

5. 信号型退出

Exit when the indicator that generated the entry signal reverses.
python
undefined
当初入场信号对应的指标出现反转时退出。
python
undefined

RSI reversal exit

RSI反转退出

rsi = df.ta.rsi(length=14) if position == "long" and rsi.iloc[-1] > 70: exit_reason = "rsi_overbought"
rsi = df.ta.rsi(length=14) if position == "long" and rsi.iloc[-1] > 70: exit_reason = "rsi_overbought"

MACD crossover exit

MACD交叉退出

macd = df.ta.macd() if macd["MACDs_12_26_9"].iloc[-1] < macd["MACDh_12_26_9"].iloc[-1]: exit_reason = "macd_bearish_cross"

Signal exits work well when combined with trailing stops — the signal triggers
tightening the trail rather than an immediate full exit.
macd = df.ta.macd() if macd["MACDs_12_26_9"].iloc[-1] < macd["MACDh_12_26_9"].iloc[-1]: exit_reason = "macd_bearish_cross"

信号型退出与追踪止损结合效果更佳——信号触发时收紧追踪止损幅度,而非立即全部平仓。

6. Liquidity-Based Exits

6. 流动性型退出

Exit when volume or liquidity deteriorates, signaling reduced ability to exit cleanly.
python
recent_vol = df["volume"].rolling(10).mean().iloc[-1]
baseline_vol = df["volume"].rolling(50).mean().iloc[-1]

if recent_vol < baseline_vol * 0.3:  # Volume dropped to 30% of baseline
    exit_reason = "liquidity_deterioration"
Critical for low-cap Solana tokens where liquidity can evaporate rapidly.
当成交量或流动性恶化,表明无法顺利退出时平仓。
python
recent_vol = df["volume"].rolling(10).mean().iloc[-1]
baseline_vol = df["volume"].rolling(50).mean().iloc[-1]

if recent_vol < baseline_vol * 0.3:  # 成交量降至基准的30%
    exit_reason = "liquidity_deterioration"
这对低市值Solana代币至关重要,因其流动性可能迅速枯竭。

PumpFun-Specific Exit Rules

PumpFun专属退出规则

PumpFun tokens have unique dynamics requiring specialized exit logic.
PumpFun代币具有独特的市场动态,需要专门的退出逻辑。

Pre-Graduation Exits

毕业前退出

Tokens on the bonding curve before reaching 85 SOL fill:
python
bonding_fill_pct = current_fill_sol / 85.0

if bonding_fill_pct > 0.90:
    # Near graduation — decide: hold through or exit before
    # Graduation creates volatility spike, both up and down
    pass

if bonding_fill_pct < 0.50 and time_since_entry > 300:  # 5 min
    exit_reason = "stalled_bonding_curve"
代币在达到85 SOL填充量前处于 bonding curve 阶段:
python
bonding_fill_pct = current_fill_sol / 85.0

if bonding_fill_pct > 0.90:
    # 接近毕业——决定:持有至毕业或提前退出
    # 毕业会引发波动率飙升,可能上涨也可能下跌
    pass

if bonding_fill_pct < 0.50 and time_since_entry > 300:  # 5分钟
    exit_reason = "stalled_bonding_curve"

Volume Decay Exits

成交量衰减退出

python
buy_vol_1m = get_buy_volume(token, "1m")
buy_vol_5m = get_buy_volume(token, "5m") / 5  # Normalize to per-minute

if buy_vol_1m < buy_vol_5m * 0.3:
    exit_reason = "buy_volume_decay"
python
buy_vol_1m = get_buy_volume(token, "1m")
buy_vol_5m = get_buy_volume(token, "5m") / 5  # 归一化为每分钟成交量

if buy_vol_1m < buy_vol_5m * 0.3:
    exit_reason = "buy_volume_decay"

Time Decay for PumpFun

PumpFun时间衰减规则

Most PumpFun tokens that will succeed show momentum within the first few minutes:
TimeframeAction
0–2 minHold — too early to judge
2–5 minExit if no 2× from entry
5–10 minExit if no 3× from entry
10+ minShould be trailing, not hoping
大多数成功的PumpFun代币会在最初几分钟内展现动量:
时间范围操作
0–2分钟持有——判断为时过早
2–5分钟若未达到入场价的2倍则退出
5–10分钟若未达到入场价的3倍则退出
10+分钟应启用追踪止损,而非抱有侥幸

Combining Exit Rules

组合退出规则

A complete exit plan layers multiple rules. Here is a recommended template:
python
exit_plan = {
    "hard_stop": {
        "type": "fixed_percentage",
        "value": 0.20,  # -20% max loss
        "priority": 1,   # Checked first, always honored
    },
    "atr_stop": {
        "type": "atr_trailing",
        "multiplier": 2.5,
        "atr_length": 14,
        "priority": 2,
    },
    "take_profit": {
        "type": "scaled",
        "tranches": [
            {"at_rr": 2, "sell_pct": 0.25},
            {"at_rr": 4, "sell_pct": 0.25},
            {"at_rr": 8, "sell_pct": 0.25},
        ],
        "priority": 3,
    },
    "time_stop": {
        "type": "max_bars",
        "value": 50,
        "condition": "if_not_profitable",
        "priority": 4,
    },
}
Priority hierarchy: Hard stop > ATR trailing > Take profit > Time stop.
The hard stop is always active and never overridden. The ATR trailing stop activates after the first take-profit tranche fills. The time stop only fires if the trade is not yet profitable.
完整的退出计划需结合多种规则。以下是推荐模板:
python
exit_plan = {
    "hard_stop": {
        "type": "fixed_percentage",
        "value": 0.20,  # 最大亏损20%
        "priority": 1,   # 优先检查,始终生效
    },
    "atr_stop": {
        "type": "atr_trailing",
        "multiplier": 2.5,
        "atr_length": 14,
        "priority": 2,
    },
    "take_profit": {
        "type": "scaled",
        "tranches": [
            {"at_rr": 2, "sell_pct": 0.25},
            {"at_rr": 4, "sell_pct": 0.25},
            {"at_rr": 8, "sell_pct": 0.25},
        ],
        "priority": 3,
    },
    "time_stop": {
        "type": "max_bars",
        "value": 50,
        "condition": "if_not_profitable",
        "priority": 4,
    },
}
优先级顺序:硬性止损 > ATR追踪止损 > 止盈 > 时间止损。
硬性止损始终生效,不会被覆盖。ATR追踪止损在第一笔止盈份额完成后激活。时间止损仅在交易未盈利时触发。

Common Exit Mistakes

常见退出错误

MistakeProblemFix
No stop lossUnlimited downsideAlways define max loss before entry
Moving stops widerIncreases risk after the factNever move stops away from price
Not taking profitsWinners become losersUse scaled exits
All-or-nothing exitsLeaves money on the table or exits too earlyScale out in tranches
Round-number stopsCluster with other traders, get huntedOffset by small random amount
Too-tight stopsStopped out by normal volatilityUse ATR-based stops
Hoping instead of trailingGives back profitsActivate trail after first TP
Ignoring liquidityCannot exit at intended priceCheck spread and depth before sizing
错误问题解决方案
未设置止损下行风险无上限入场前始终定义最大亏损
扩大止损位事后增加风险绝不向背离价格方向调整止损
未锁定利润盈利转亏损使用分级退出策略
全进全出式退出要么错失利润要么过早离场分份额逐步退出
整数位止损与其他交易者止损位聚集,被猎杀小幅随机偏移止损位
止损位过严因正常波动被止损出局使用基于ATR的止损
抱有侥幸而非启用追踪止损回吐利润第一笔止盈后启用追踪止损
忽视流动性无法按预期价格退出建仓前检查点差和深度

Integration with Other Skills

与其他技能集成

  • position-sizing
    — Size the position based on the stop loss distance.
    position_size = (account_risk * account_balance) / (entry - stop_loss)
  • risk-management
    — Exits are the mechanism that enforces risk limits.
  • pandas-ta
    — Use ATR, EMA, RSI, MACD for signal-based and trailing exits.
  • slippage-modeling
    — Estimate execution cost of the exit to set realistic targets.
  • liquidity-analysis
    — Verify exit liquidity before entering a position.
  • position-sizing
    — 根据止损距离确定仓位大小。
    position_size = (account_risk * account_balance) / (entry - stop_loss)
  • risk-management
    — 退出策略是执行风险限额的机制。
  • pandas-ta
    — 使用ATR、EMA、RSI、MACD实现信号型和追踪型退出。
  • slippage-modeling
    — 估算退出时的执行成本,设定现实目标。
  • liquidity-analysis
    — 建仓前验证退出流动性。

Files

文件

References

参考文档

  • references/stop_loss_methods.md
    — Complete stop loss methodology and anti-patterns
  • references/take_profit_strategies.md
    — Scaled exits, R:R targets, Fibonacci extensions
  • references/trailing_stops.md
    — Trailing stop implementations and parameter guidance
  • references/stop_loss_methods.md
    — 完整的止损方法及反模式
  • references/take_profit_strategies.md
    — 分级退出、风险回报比目标、斐波那契扩展
  • references/trailing_stops.md
    — 追踪止损实现及参数指南

Scripts

脚本

  • scripts/exit_simulator.py
    — Simulate and compare exit strategies on synthetic price data
  • scripts/stop_loss_calculator.py
    — Calculate stop levels, position sizes, and R:R targets
  • scripts/exit_simulator.py
    — 在合成价格数据上模拟并比较退出策略
  • scripts/stop_loss_calculator.py
    — 计算止损位、仓位大小及风险回报比目标