exit-strategies
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseExit 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.
| Method | Description | Best For |
|---|---|---|
| Fixed percentage | Exit at entry − X% | Simple setups, beginners |
| ATR-based | Entry − ATR(14) × multiplier | Volatility-adaptive |
| Support level | Below nearest swing low | Technically defined risk |
| Maximum loss | Absolute SOL/USD cap | Account 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 entryMultiplier 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 for complete methodology.
references/stop_loss_methods.md预先设定价格水平,达到该水平时平仓以限制下行风险。
| 方法 | 描述 | 适用场景 |
|---|---|---|
| 固定百分比 | 在入场价 − 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.md2. 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:RScaled exit framework (recommended for meme/PumpFun tokens):
| Tranche | Size | Target | Action After |
|---|---|---|---|
| 1 | 25% | 2× risk | Move stop to breakeven |
| 2 | 25% | 3–5× risk | Trail remainder |
| 3 | 25% | 5–10× risk | Tighten trail |
| 4 | 25% | Trailing stop | Moonbag — 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 for full methodology including Fibonacci
extension targets and volume-based exits.
references/take_profit_strategies.md预先设定锁定收益的价格水平。
固定风险/回报目标:
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代币):
| 份额 | 比例 | 目标 | 后续操作 |
|---|---|---|---|
| 1 | 25% | 2倍风险 | 将止损移动至盈亏平衡点 |
| 2 | 25% | 3–5倍风险 | 对剩余仓位启用追踪止损 |
| 3 | 25% | 5–10倍风险 | 收紧追踪止损幅度 |
| 4 | 25% | 追踪止损 | 长期持有仓位——让利润奔跑 |
市值里程碑退出:
对于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.md3. 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 <= stopATR 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 <= stopATR追踪止损(吊灯止损法):
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
undefinedExit 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
undefinedRSI 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:
| Timeframe | Action |
|---|---|
| 0–2 min | Hold — too early to judge |
| 2–5 min | Exit if no 2× from entry |
| 5–10 min | Exit if no 3× from entry |
| 10+ min | Should 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
常见退出错误
| Mistake | Problem | Fix |
|---|---|---|
| No stop loss | Unlimited downside | Always define max loss before entry |
| Moving stops wider | Increases risk after the fact | Never move stops away from price |
| Not taking profits | Winners become losers | Use scaled exits |
| All-or-nothing exits | Leaves money on the table or exits too early | Scale out in tranches |
| Round-number stops | Cluster with other traders, get hunted | Offset by small random amount |
| Too-tight stops | Stopped out by normal volatility | Use ATR-based stops |
| Hoping instead of trailing | Gives back profits | Activate trail after first TP |
| Ignoring liquidity | Cannot exit at intended price | Check spread and depth before sizing |
| 错误 | 问题 | 解决方案 |
|---|---|---|
| 未设置止损 | 下行风险无上限 | 入场前始终定义最大亏损 |
| 扩大止损位 | 事后增加风险 | 绝不向背离价格方向调整止损 |
| 未锁定利润 | 盈利转亏损 | 使用分级退出策略 |
| 全进全出式退出 | 要么错失利润要么过早离场 | 分份额逐步退出 |
| 整数位止损 | 与其他交易者止损位聚集,被猎杀 | 小幅随机偏移止损位 |
| 止损位过严 | 因正常波动被止损出局 | 使用基于ATR的止损 |
| 抱有侥幸而非启用追踪止损 | 回吐利润 | 第一笔止盈后启用追踪止损 |
| 忽视流动性 | 无法按预期价格退出 | 建仓前检查点差和深度 |
Integration with Other Skills
与其他技能集成
- — Size the position based on the stop loss distance.
position-sizingposition_size = (account_risk * account_balance) / (entry - stop_loss) - — Exits are the mechanism that enforces risk limits.
risk-management - — Use ATR, EMA, RSI, MACD for signal-based and trailing exits.
pandas-ta - — Estimate execution cost of the exit to set realistic targets.
slippage-modeling - — Verify exit liquidity before entering a position.
liquidity-analysis
- — 根据止损距离确定仓位大小。
position-sizingposition_size = (account_risk * account_balance) / (entry - stop_loss) - — 退出策略是执行风险限额的机制。
risk-management - — 使用ATR、EMA、RSI、MACD实现信号型和追踪型退出。
pandas-ta - — 估算退出时的执行成本,设定现实目标。
slippage-modeling - — 建仓前验证退出流动性。
liquidity-analysis
Files
文件
References
参考文档
- — Complete stop loss methodology and anti-patterns
references/stop_loss_methods.md - — Scaled exits, R:R targets, Fibonacci extensions
references/take_profit_strategies.md - — Trailing stop implementations and parameter guidance
references/trailing_stops.md
- — 完整的止损方法及反模式
references/stop_loss_methods.md - — 分级退出、风险回报比目标、斐波那契扩展
references/take_profit_strategies.md - — 追踪止损实现及参数指南
references/trailing_stops.md
Scripts
脚本
- — Simulate and compare exit strategies on synthetic price data
scripts/exit_simulator.py - — Calculate stop levels, position sizes, and R:R targets
scripts/stop_loss_calculator.py
- — 在合成价格数据上模拟并比较退出策略
scripts/exit_simulator.py - — 计算止损位、仓位大小及风险回报比目标
scripts/stop_loss_calculator.py