exit-strategies
Systematic exit rules, stop-loss methods, take-profit strategies, and trailing stop implementations for crypto trading
Best use case
exit-strategies is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Systematic exit rules, stop-loss methods, take-profit strategies, and trailing stop implementations for crypto trading
Teams using exit-strategies should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/exit-strategies/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How exit-strategies Compares
| Feature / Agent | exit-strategies | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Systematic exit rules, stop-loss methods, take-profit strategies, and trailing stop implementations for crypto trading
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# 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.
## 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.
## Exit Categories
### 1. Stop Loss — Risk Management Exits
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 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.
### 2. Take Profit — Target Exits
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):**
| 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 `references/take_profit_strategies.md` for full methodology including Fibonacci
extension targets and volume-based exits.
### 3. Trailing Stop — Trend-Following Exits
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
# Exit when close < EMA for M consecutive bars
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.
### 4. Time-Based Exits
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.
### 5. Signal-Based Exits
Exit when the indicator that generated the entry signal reverses.
```python
# RSI reversal exit
rsi = df.ta.rsi(length=14)
if position == "long" and rsi.iloc[-1] > 70:
exit_reason = "rsi_overbought"
# MACD crossover 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"
```
Signal exits work well when combined with trailing stops — the signal triggers
tightening the trail rather than an immediate full exit.
### 6. Liquidity-Based Exits
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.
## PumpFun-Specific Exit Rules
PumpFun tokens have unique dynamics requiring specialized exit logic.
### 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"
```
### 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"
```
### Time Decay for 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 |
## 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.
## 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 |
## 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.
## 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
### 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 targetsRelated Skills
yield-analysis
DeFi yield evaluation including fee APR, real vs nominal yield, net APY after costs, and yield sustainability analysis
yellowstone-grpc
Real-time Solana transaction and account streaming via Yellowstone gRPC (Geyser plugin)
whale-tracking
Large wallet monitoring, accumulation and distribution detection, and smart money signal generation for Solana tokens
wash-sale-detection
Wash sale detection under 2025 US crypto rules with 61-day window monitoring, disallowed loss tracking, and safe re-entry countdown
wallet-profiling
Behavioral classification, performance analysis, and trading style detection for Solana wallets
walk-forward-validation
Walk-forward validation framework for trading strategies and ML models with time-series-aware splits, overfit detection, and regime-aware validation
volatility-modeling
Volatility estimation, forecasting, and regime classification using GARCH, EWMA, realized volatility, and volatility cones
vectorbt
High-performance vectorized backtesting with parameter optimization, portfolio simulation, and rich performance metrics
trading-visualization
Professional trading charts including candlesticks, equity curves, drawdowns, correlation heatmaps, and return distributions
trade-journal
Structured trade logging, performance review, behavioral pattern detection, and strategy attribution for systematic improvement
trade-accounting
Double-entry bookkeeping for trading operations with ledger management, P&L statements, balance sheets, and cash flow reporting
token-holder-analysis
Token holder distribution, concentration metrics, insider detection, and supply analysis for Solana tokens