Systematic exit rules, stop-loss methods, take-profit strategies, and trailing stop implementations for crypto trading
npx skills add https://github.com/agiprolabs/claude-trading-skills --skill 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.
and trailing stop.
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):
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:
See references/stop_loss_methods.md for complete methodology.
Predefined levels where you lock in gains.
Fixed risk/reward targets:
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:
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.
Dynamic stops that follow price upward but never move down.
Percentage trailing:
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):
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:
# 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.
Exit if the trade hasn't moved in your favor within a defined window.
bars_since_entry = current_bar - entry_bar
if bars_since_entry > max_hold_bars and current_pnl <= 0:
exit_reason = "time_stop"
Guidelines:
Time stops prevent capital from sitting in dead trades.
Exit when the indicator that generated the entry signal reverses.
# 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.
Exit when volume or liquidity deteriorates, signaling reduced ability to exit cleanly.
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 tokens have unique dynamics requiring specialized exit logic.
Tokens on the bonding curve before reaching 85 SOL fill:
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"
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"
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 |
A complete exit plan layers multiple rules. Here is a recommended template:
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.
| 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 |
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.references/stop_loss_methods.md — Complete stop loss methodology and anti-patternsreferences/take_profit_strategies.md — Scaled exits, R:R targets, Fibonacci extensionsreferences/trailing_stops.md — Trailing stop implementations and parameter guidancescripts/exit_simulator.py — Simulate and compare exit strategies on synthetic price datascripts/stop_loss_calculator.py — Calculate stop levels, position sizes, and R:R targetsAutomatically organizes invoices and receipts for tax preparation by reading messy files, extracting key information, renaming them consistently, and sorting them into logical folders. Turns hours of manual bookkeeping into minutes of automated organization.
Expert guidance for systematic backtesting of trading strategies. Use when developing, testing, stress-testing, or validating quantitative trading strategies. Covers "beating ideas to death" methodology, parameter robustness testing, slippage modeling, bias prevention, and interpreting backtest results. Applicable when user asks about backtesting, strategy validation, robustness testing, avoiding overfitting, or systematic trading development.
This skill calculates key financial ratios and metrics from financial statement data for investment analysis
This skill provides an advanced financial modeling suite with DCF analysis, sensitivity testing, Monte Carlo simulations, and scenario planning for investment decisions
This skill retrieves upcoming earnings announcements for US stocks using the Financial Modeling Prep (FMP) API. Use this when the user requests earnings calendar data, wants to know which companies are reporting earnings in the upcoming week, or needs a weekly earnings review. The skill focuses on mid-cap and above companies (over $2B market cap) that have significant market impact, organizing the data by date and timing in a clean markdown table format. Supports multiple environments (CLI, Desktop, Web) with flexible API key management.
Crypto wallet operations via the awal CLI — sign in, check balances, send USDC/ETH/POL/SOL, trade tokens, fund the wallet, and use the x402 payment protocol to discover paid services, pay for API calls, monetize an API, or query onchain data. Use whenever the user mentions signing in, login, authentication, wallet status, balance, address, sending money, paying someone, transferring tokens, ENS names, swapping/trading/converting tokens, funding/topping up/onramp, USDC, ETH, POL, SOL, the x402 bazaar, paid APIs, monetizing an endpoint, or querying onchain data on Base.
Access real-time and historical stock market data, forex rates, cryptocurrency prices, commodities, economic indicators, and 50+ technical indicators via the Alpha Vantage API. Use when fetching stock prices (OHLCV), company fundamentals (income statement, balance sheet, cash flow), earnings, options data, market news/sentiment, insider transactions, GDP, CPI, treasury yields, gold/silver/oil prices, Bitcoin/crypto prices, forex exchange rates, or calculating technical indicators (SMA, EMA, MACD, RSI, Bollinger Bands). Requires a free API key from alphavantage.co.
Braintree Automation: manage payment processing via Stripe-compatible tools for customers, subscriptions, payment methods, and transactions
Take agiprolabs/exit-strategies from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.