К основному содержанию
скилл CX Codex

regime-detection — скилл для Claude Code: определяет режим рынка

Скилл для Claude, который по свечам решает, тренд сейчас или флэт, и какой волатильности ждать. Пригодится, когда нужно выбрать стратегию под текущий рынок.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add agiprolabs/claude-trading-skills --skill regime-detection -a claude-code
Открыть на GitHub

Что делает regime-detection

Скилл считает четыре вещи: перцентиль ATR, силу тренда через ADX, наклон EMA с положением цены и перцентиль ширины полос Боллинджера. По ним рынок раскладывается на четыре квадранта — тренд при низкой волатильности, тренд при высокой, тихий флэт и рваный флэт. Отдельно считается показатель Хёрста: ниже 0.4 — возврат к среднему, выше 0.6 — тренд. Ещё есть CUSUM для поиска точек смены режима.

Внутри — готовые функции на pandas и numpy: atr_percentile, compute_adx, trend_direction, bb_width_percentile, hurst_exponent, cusum_test. Скрытых зависимостей нет, всё работает на этих двух библиотеках. Модель Хиддена Маркова — опция: для неё нужен hmmlearn, ставится отдельно через uv pip install hmmlearn. Без него остальные расчёты не ломаются.

Пороги в коде заданы жёстко: ADX выше 25 — тренд, ниже 20 — флэт, ATR выше 75-го перцентиля — высокая волатильность. Если ваш инструмент торгуется иначе, пороги придётся править руками. Файл с полным выводом метода R/S лежит в references/methodology.md.

Какие задачи решает

  • понять, тренд на рынке или флэт, прежде чем включать стратегию
  • снизить размер позиции, когда волатильность ушла выше 75-го перцентиля
  • расширить стопы в режиме высокой волатильности и поджать в спокойном тренде
  • найти момент смены режима через CUSUM по ряду доходностей
  • отличить возврат к среднему от случайного блуждания по показателю Хёрста

Примеры запросов агенту

  • посчитай ATR-перцентиль и ADX по дневным свечам BTC за последний год — какой сейчас режим?
  • прогони hurst_exponent по ряду доходностей и скажи, тянет ли цена к возврату к среднему
  • найди точки смены режима через cusum_test на часовых доходностях и покажи их на графике

Как установить regime-detection

1Через Skills CLI (Vercel)

npx skills add agiprolabs/claude-trading-skills --skill regime-detection -a claude-code

2Вручную: положить файлы

~/.claude/skills/regime-detection/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/regime-detection/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о regime-detection

Как установить regime-detection в Claude?

Выполните npx skills add agiprolabs/claude-trading-skills --skill regime-detection -a claude-code. Скилл встанет в ~/.claude/skills/regime-detection/SKILL.md.

Что делает regime-detection?

Считает метрики волатильности и тренда по ценовому ряду и относит рынок к одному из четырёх режимов. По результату выбирают стратегию и размер позиции.

Нужен ли hmmlearn для работы скилла?

Нет, это опция для 2–3-состояний через скрытую марковскую модель. Остальные функции работают на pandas и numpy; hmmlearn ставится отдельно командой uv pip install hmmlearn.

Исходный текст

SKILL.md · MIT
---
name: regime-detection
description: Market regime identification using volatility clustering, trend detection, and statistical methods for adaptive trading
---

# Regime Detection

Identify the current market regime so you can pick the right strategy, size positions correctly, and avoid deploying trend-following logic in a ranging market (or vice versa).

## Why Regime Detection Matters

Every strategy has a "home regime." A momentum strategy prints money in a clean uptrend but bleeds in a choppy range. A mean-reversion grid thrives in low-volatility consolidation but gets steamrolled by a trending breakout. Regime detection tells you **which playbook to use right now**.

Key benefits:
- **Strategy selection**: Route signals to the right strategy for the current environment
- **Position sizing**: Reduce exposure in hostile regimes, increase in favorable ones
- **Stop adaptation**: Wider stops in high-vol regimes, tighter in low-vol trends
- **Drawdown control**: Sit out "danger zone" regimes (high vol + no trend)

## Core Regime Dimensions

Two orthogonal axes define the four-quadrant regime model:

| | Low Volatility | High Volatility |
|---|---|---|
| **Trending** | Q1: Clean trend — best for trend following | Q2: Volatile trend — momentum with caution |
| **Ranging** | Q3: Quiet range — mean-reversion paradise | Q4: Choppy chaos — reduce or sit out |

A third dimension — **mean-reversion tendency** (Hurst exponent) — refines Q3 by telling you how reliably price reverts.

## Simple Approaches (No ML Required)

### 1. ATR Volatility Percentile

Rank the current ATR against its own recent history to get a 0–100 percentile score.

```python
import pandas as pd
import numpy as np

def atr_percentile(
    high: pd.Series, low: pd.Series, close: pd.Series,
    atr_period: int = 14, lookback: int = 100
) -> pd.Series:
    """ATR percentile rank over a rolling window."""
    tr = pd.concat([
        high - low,
        (high - close.shift(1)).abs(),
        (low - close.shift(1)).abs()
    ], axis=1).max(axis=1)
    atr = tr.rolling(atr_period).mean()
    return atr.rolling(lookback).apply(
        lambda x: pd.Series(x).rank(pct=True).iloc[-1], raw=False
    )
```

- **< 25th percentile** → Low volatility regime
- **25th–75th** → Normal volatility
- **> 75th percentile** → High volatility regime

### 2. ADX Trend Strength

ADX above 25 signals a trending market; below 20 signals a range.

```python
def compute_adx(
    high: pd.Series, low: pd.Series, close: pd.Series,
    period: int = 14
) -> pd.Series:
    """Average Directional Index."""
    plus_dm = high.diff().clip(lower=0)
    minus_dm = (-low.diff()).clip(lower=0)
    # Zero out when the other is larger
    plus_dm[plus_dm < minus_dm] = 0
    minus_dm[minus_dm < plus_dm] = 0

    tr = pd.concat([
        high - low,
        (high - close.shift(1)).abs(),
        (low - close.shift(1)).abs()
    ], axis=1).max(axis=1)

    atr = tr.ewm(span=period, adjust=False).mean()
    plus_di = 100 * plus_dm.ewm(span=period, adjust=False).mean() / atr
    minus_di = 100 * minus_dm.ewm(span=period, adjust=False).mean() / atr
    dx = 100 * (plus_di - minus_di).abs() / (plus_di + minus_di)
    return dx.ewm(span=period, adjust=False).mean()
```

### 3. EMA Slope + Price Position

```python
def trend_direction(close: pd.Series, period: int = 20) -> pd.Series:
    """Returns +1 (uptrend), -1 (downtrend), 0 (neutral)."""
    ema = close.ewm(span=period, adjust=False).mean()
    slope = ema.diff(5)  # 5-bar slope
    above = (close > ema).astype(int)
    direction = pd.Series(0, index=close.index)
    direction[(slope > 0) & (above == 1)] = 1
    direction[(slope < 0) & (above == 0)] = -1
    return direction
```

### 4. Bollinger Band Width Percentile

BB width (upper - lower) / middle as a volatility proxy. A "squeeze" (low percentile) often precedes a breakout.

```python
def bb_width_percentile(
    close: pd.Series, period: int = 20,
    std_dev: float = 2.0, lookback: int = 100
) -> pd.Series:
    """Bollinger Band width percentile."""
    sma = close.rolling(period).mean()
    std = close.rolling(period).std()
    width = (2 * std_dev * std) / sma
    return width.rolling(lookback).apply(
        lambda x: pd.Series(x).rank(pct=True).iloc[-1], raw=False
    )
```

## Statistical Approaches

### Rolling Hurst Exponent

The Hurst exponent H classifies time series behavior:
- **H < 0.4** → Mean-reverting (anti-persistent)
- **0.4 ≤ H ≤ 0.6** → Random walk (no exploitable structure)
- **H > 0.6** → Trending (persistent)

Computed via the Rescaled Range (R/S) method. See `references/methodology.md` for the full derivation.

```python
def hurst_exponent(series: pd.Series, max_lag: int = 50) -> float:
    """Estimate Hurst exponent using R/S method."""
    lags = range(2, max_lag)
    rs_values = []
    for lag in lags:
        chunks = [series.iloc[i:i+lag] for i in range(0, len(series) - lag, lag)]
        rs_list = []
        for chunk in chunks:
            if len(chunk) < lag:
                continue
            mean_val = chunk.mean()
            devs = chunk - mean_val
            cumdev = devs.cumsum()
            r = cumdev.max() - cumdev.min()
            s = chunk.std(ddof=1)
            if s > 0:
                rs_list.append(r / s)
        if rs_list:
            rs_values.append(np.mean(rs_list))
        else:
            rs_values.append(np.nan)
    valid = [(l, r) for l, r in zip(lags, rs_values) if not np.isnan(r)]
    if len(valid) < 5:
        return 0.5
    log_lags = np.log([v[0] for v in valid])
    log_rs = np.log([v[1] for v in valid])
    coeffs = np.polyfit(log_lags, log_rs, 1)
    return coeffs[0]
```

### Change-Point Detection (CUSUM)

Detects abrupt shifts in mean or variance of a return series.

```python
def cusum_test(
    returns: pd.Series, threshold: float = 2.0
) -> list[int]:
    """CUSUM change-point detection on returns.

    Returns indices where regime changes are detected.
    """
    mean_r = returns.mean()
    std_r = returns.std()
    if std_r == 0:
        return []
    s_pos, s_neg = 0.0, 0.0
    changes = []
    for i, r in enumerate(returns):
        z = (r - mean_r) / std_r
        s_pos = max(0, s_pos + z - 0.5)
        s_neg = max(0, s_neg - z - 0.5)
        if s_pos > threshold or s_neg > threshold:
            changes.append(i)
            s_pos, s_neg = 0.0, 0.0
    return changes
```

### Hidden Markov Models

For 2–3 state regime models using `hmmlearn`. This is optional — all core functionality works with numpy/pandas only.

```python
# Optional: requires `uv pip install hmmlearn`
from hmmlearn import hmm

def fit_hmm_regimes(
    returns: np.ndarray, n_states: int = 2, n_iter: int = 100
) -> tuple[np.ndarray, object]:
    """Fit a Gaussian HMM to return series."""
    X = returns.reshape(-1, 1)
    model = hmm.GaussianHMM(
        n_components=n_states, covariance_type="full", n_iter=n_iter
    )
    model.fit(X)
    states = model.predict(X)
    return states, model
```

See `references/methodology.md` for details on feature selection and state interpretation.

## Crypto-Specific Considerations

### Regime Speed

Crypto regimes change **much faster** than equities:

| Parameter | Equities | Crypto (large cap) | Crypto (micro cap / PumpFun) |
|---|---|---|---|
| ATR lookback | 100–200 bars | 50–100 bars | 20–50 bars |
| ADX period | 14–28 | 10–14 | 7–10 |
| Regime persistence | Weeks–months | Days–weeks | Hours–days |
| Hurst window | 200+ bars | 100 bars | 50 bars |

### Volume as a Regime Signal

In crypto, volume confirms regime quality:
- **High volume + trend** → Strong conviction, ride it
- **Low volume + trend** → Drift, unreliable, reduce size
- **High volume + range** → Distribution or accumulation, watch for breakout
- **Low volume + range** → Dead market, skip

### PumpFun Micro-Regimes

New token launches follow a stereotyped sequence:
1. **Launch pump** (minutes): Vertical move, extreme vol, no mean-reversion
2. **First dump** (minutes–hours): Profit-taking, high vol, trending down
3. **Consolidation** (hours–days): Low vol range, potential mean-reversion
4. **Second wave or death**: Either breaks out again (new trend) or fades to zero

Each micro-regime lasts minutes to hours. Use 1-minute bars with 20–50 bar windows.

## Combined Regime Classification

```python
def classify_regime(
    vol_percentile: float, adx: float, hurst: float,
    trend_dir: int
) -> dict[str, str]:
    """Classify into the 4-quadrant model."""
    vol_regime = (
        "low" if vol_percentile < 0.30
        else "high" if vol_percentile > 0.70
        else "normal"
    )
    trend_regime = (
        "trending" if adx > 25
        else "ranging" if adx < 20
        else "transitional"
    )
    direction = (
        "up" if trend_dir > 0
        else "down" if trend_dir < 0
        else "neutral"
    )
    mr_regime = (
        "mean_reverting" if hurst < 0.4
        else "trending" if hurst > 0.6
        else "random"
    )
    return {
        "volatility": vol_regime,
        "trend": trend_regime,
        "direction": direction,
        "mean_reversion": mr_regime,
        "quadrant": f"{vol_regime}_vol_{trend_regime}",
    }
```

## Strategy Adaptation

See `references/strategy_adaptation.md` for the full regime-strategy matrix.

Quick reference:

| Current Regime | Action |
|---|---|
| Low vol + trending up | Full size trend-following, tight stops |
| High vol + trending | Half size momentum, wide stops |
| Low vol + ranging | Mean-reversion / grid strategies |
| High vol + ranging | Reduce to 25% size or sit out |
| Regime transition | Flatten or reduce to minimum size |

## Integration with Other Skills

- **`pandas-ta`**: Compute ATR, ADX, Bollinger Bands, EMAs
- **`volatility-modeling`**: Advanced vol forecasting (GARCH, realized vol)
- **`strategy-framework`**: Route signals through regime filter before execution
- **`position-sizing`**: Scale position size by regime volatility
- **`risk-management`**: Adjust portfolio risk limits per regime

## Files

### References
- `references/methodology.md` — Detailed math for Hurst exponent, HMM, change-point detection, and volatility estimation methods
- `references/strategy_adaptation.md` — Full regime-strategy matrix with position sizing, stop adaptation, and PumpFun micro-regime playbook

### Scripts
- `scripts/detect_regime.py` — Compute regime indicators on live or demo data, classify into 4-quadrant model
- `scripts/regime_backtest.py` — Compare regime-adaptive vs static strategy on synthetic data with clear regime transitions

© agiprolabs · MIT · agiprolabs/claude-trading-skills

Похожие скиллы

Всё по теме «Финансы и бизнес» →
trader-regime ruvnet Скилл просит у neural-trader текущий режим рынка и подбирает тип стратегии под него. Нужен перед бэктестом или выбором стратегии. CX Codex +1 731установок crypto-ta-analyzer dkyazzentwatwa Считает индикаторы по свечным данным крипты или рынка и показывает, где сигналы совпадают, а где спорят. CX Codex +1 1 600установок llmquant-crypto LLMQuant Скилл маршрутизирует задачи по криптовалютному рынку: отслеживает фандинг бессрочных фьючерсов, анализирует токеномику и определяет текущий режим рынка. CX Codex +1 502установок crypto-regime-analyzer tradermonty Считает композитный балл 0–100 по шести компонентам крипторынка и выдаёт рекомендацию по позе. Без ключей API. CX Codex +1 2 700установок us-stock-analysis tradermonty Скилл для разбора американских акций через фундаментальные показатели, индикаторы теханализа и сравнение тикеров. Помогает составить инвестиционный отчёт по компании. CX Codex +1 5 600установок

Из того же набора52

walk-forward-validation Скилл настраивает валидацию торговых стратегий и ML-моделей на временных рядах. Помогает избежать заглядывания в будущее и оценить переобучение алгоритмов. CX Codex +1 703установок risk-management Скилл задаёт правила риск-менеджмента для криптоторговли: лимиты просадки, дневные и недельные стопы, ограничения концентрации и автоматические стоп-краны. CX Codex +1 631установок pandas-ta Скилл учит агента рассчитывать более 130 индикаторов технического анализа для крипторынка через библиотеку pandas-ta прямо в коде. CX Codex +1 586установок position-sizing Скилл рассчитывает размер торговой позиции по пяти методикам управления риском. Пригодится трейдерам при настройке автоматических стратегий и контроле просадок. CX Codex +1 572установок kelly-criterion Скилл считает размер позиции по критерию Келли: формула, дробные варианты, оценка преимущества и поправка на корреляцию. CX Codex +1 528установок trade-journal Ведёт журнал сделок, оценивает результативность стратегий и находит тильт. Пригодится трейдерам для проверки торговых гипотез. CX Codex +1 515установок feature-engineering Скилл собирает признаки из рыночных данных для ML-моделей трейдинга: цена, объём, микроструктура, on-chain. Пригодится, когда модель учится на сырых свечах и переобучается. CX Codex +1 517установок signal-classification Скилл строит ML-классификаторы торговых сигналов на XGBoost и LightGBM: метки, walk-forward валидация, SHAP и подбор порога. CX Codex +1 516установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой