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

walk-forward-validation — скилл для Claude Code: обзор и установка

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

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

Что делает walk-forward-validation

Обычная кросс-валидация со случайным разбиением для финансовых рядов не годится, потому что создаёт заглядывание в будущее и игнорирует автокорреляцию данных. Скилл задаёт методологию проверки стратегий во времени. Он описывает скользящие окна обучения и изоляцию выборок через purging с защитными паузами embargo.

Внутри содержатся методики комбинаторной очищенной кросс-валидации CPCV по методу Лопеса де Прадо и расчёт метрик переобучения. Скилл включает примеры кода на Python с использованием библиотек numpy и scipy.stats. Они нужны для расчёта Deflated Sharpe Ratio. При этом для запуска формул DSR потребуются сторонние пакеты scipy и numpy.

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

  • разбить финансовый временной ряд без заглядывания в будущее
  • удалить перекрывающиеся метки между обучением и тестом через purging
  • настроить временной буфер embargo для устранения автокорреляции
  • рассчитать Deflated Sharpe Ratio с поправкой на число тестов
  • оценить вероятность переобучения бэктеста методом CPCV

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

  • Помоги разбить котировки на обучающую и тестовую выборки методом rolling window с очисткой purging
  • Напиши функцию расчёта Deflated Sharpe Ratio на Python по котировкам стратегии
  • Раздели исторические данные с помощью combinatorial purged cross-validation и добавь embargo

Как установить walk-forward-validation

1Через Skills CLI (Vercel)

npx skills add agiprolabs/claude-trading-skills --skill walk-forward-validation -a claude-code

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

~/.claude/skills/walk-forward-validation/SKILL.md

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

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

Вопросы о walk-forward-validation

Как установить walk-forward-validation в Claude Code?

Выполните в терминале команду npx skills add agiprolabs/claude-trading-skills --skill walk-forward-validation -a claude-code. Агент подключит скилл к вашему окружению.

Что делает скилл walk-forward-validation?

Он предоставляет агенту правила и готовые алгоритмы для валидации торговых моделей на временных рядах. Сюда входят скользящие окна, удаление перекрывающихся меток и метрики проверки на переобучение.

Зачем нужны purging и embargo при валидации?

Очистка purging исключает из обучающей выборки точки, чьи расчётные горизонты перекрывают тестовый период. Буфер embargo добавляет временной разрыв после обучения, чтобы избавиться от влияния автокорреляции.

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

SKILL.md · MIT
---
name: walk-forward-validation
description: Walk-forward validation framework for trading strategies and ML models with time-series-aware splits, overfit detection, and regime-aware validation
---

# Walk-Forward Validation

Walk-forward validation framework for trading strategies and ML models. Standard cross-validation (k-fold, random splits) fails catastrophically for financial time series because it introduces lookahead bias and ignores autocorrelation. This skill covers proper time-series validation techniques including rolling and expanding windows, purged cross-validation, combinatorial purged cross-validation (CPCV), and overfit detection metrics.

## Why Standard Cross-Validation Fails

Standard k-fold CV assumes data points are independent and identically distributed (IID). Financial time series violate both assumptions:

1. **Lookahead bias** — Random splits let the model train on future data and predict past data, artificially inflating performance.
2. **Autocorrelation** — Adjacent observations are correlated. A random split that puts Monday in test and Tuesday in train leaks information.
3. **Regime dependence** — Markets shift between regimes. A model trained on a bull market and tested on a bull market tells you nothing about bear market performance.
4. **Label overlap** — If labels are computed over windows (e.g., 24h forward return), adjacent train/test samples share label computation periods, leaking information.

## Walk-Forward Framework

### Rolling Window (Fixed Train Size)

The train window has a fixed size and slides forward in time. This is preferred when you believe older data is less relevant (common in crypto).

```
Window 1: [===TRAIN===][=TEST=]
Window 2:    [===TRAIN===][=TEST=]
Window 3:       [===TRAIN===][=TEST=]
```

**Parameters:**
- `train_size`: Number of bars/days in the training window
- `test_size`: Number of bars/days in the test window
- `step_size`: How far to advance between folds (often equals `test_size`)

### Expanding Window (Growing Train)

The train window starts at the beginning and expands forward. This uses all available historical data, which helps when data is scarce.

```
Window 1: [==TRAIN==][=TEST=]
Window 2: [====TRAIN====][=TEST=]
Window 3: [======TRAIN======][=TEST=]
```

**Parameters:**
- `min_train_size`: Minimum training samples before first fold
- `test_size`: Fixed test window size
- `step_size`: How far to advance between folds

### Choosing Between Them

| Factor | Rolling | Expanding |
|---|---|---|
| Data recency | Prioritizes recent data | Uses all history |
| Regime changes | Better adapts to new regimes | May dilute recent regime |
| Sample size | Fixed, may be small | Grows over time |
| Crypto preference | Preferred for < 6mo horizons | Better for regime-stable models |

## Purging and Embargo

### Purging

Remove training samples whose labels overlap with the test set's time range. If a label is computed as the 24h forward return starting at time `t`, any training sample where `t + 24h` extends into the test period must be purged.

```python
def purge_train_indices(
    train_idx: list[int],
    test_start: int,
    label_horizon: int,
    timestamps: list[int],
) -> list[int]:
    """Remove train samples whose label windows overlap test period."""
    test_start_time = timestamps[test_start]
    return [
        i for i in train_idx
        if timestamps[i] + label_horizon < test_start_time
    ]
```

### Embargo

Add a buffer gap between the end of training and start of testing to account for serial correlation that purging alone does not eliminate.

```
[===TRAIN===][--EMBARGO--][=TEST=]
```

Typical embargo sizes:
- **1-minute bars**: 60–240 bars (1–4 hours)
- **5-minute bars**: 12–48 bars (1–4 hours)
- **Hourly bars**: 6–24 bars (6–24 hours)
- **Daily bars**: 2–5 bars (2–5 days)
- **Crypto rule of thumb**: Embargo >= 2x the label computation horizon

## Combinatorial Purged Cross-Validation (CPCV)

CPCV (Lopez de Prado, 2018) generates all possible train/test combinations from `N` groups while maintaining temporal ordering. This produces far more test paths than standard walk-forward, enabling statistical tests for overfitting.

**Key properties:**
- Splits data into `N` contiguous groups
- For each combination of `k` test groups, the remaining `N-k` groups form the training set
- Applies purging and embargo at each train/test boundary
- Produces `C(N, k)` backtest paths (e.g., N=6, k=2 gives 15 paths)

See `references/methodology.md` for the full CPCV algorithm and formulas.

## Overfit Detection

### Deflated Sharpe Ratio (DSR)

The observed Sharpe ratio must be adjusted for:
- Number of strategies tested (multiple testing)
- Non-normality of returns (skewness, kurtosis)
- Length of the backtest

```python
import numpy as np
from scipy.stats import norm

def deflated_sharpe_ratio(
    observed_sr: float,
    num_trials: int,
    backtest_length: int,
    skewness: float = 0.0,
    kurtosis: float = 3.0,
) -> float:
    """Compute the probability that observed SR > 0 after deflation.

    Args:
        observed_sr: Annualized Sharpe ratio of the selected strategy.
        num_trials: Number of strategies tested (including discarded ones).
        backtest_length: Number of return observations.
        skewness: Skewness of returns.
        kurtosis: Excess kurtosis of returns.

    Returns:
        p-value (probability SR is genuinely > 0).
    """
    sr_std = np.sqrt(
        (1 - skewness * observed_sr + (kurtosis - 1) / 4 * observed_sr**2)
        / (backtest_length - 1)
    )
    # Expected max SR under null (Euler-Mascheroni approximation)
    euler_mascheroni = 0.5772156649
    expected_max_sr = norm.ppf(1 - 1 / num_trials) * (
        1 - euler_mascheroni
    ) + euler_mascheroni * norm.ppf(1 - 1 / (num_trials * np.e))
    dsr = norm.cdf((observed_sr - expected_max_sr) / sr_std)
    return dsr
```

A DSR below 0.95 suggests the observed performance is likely due to overfitting across the trials tested.

### Probability of Backtest Overfitting (PBO)

PBO uses CPCV to measure the fraction of backtest paths where the in-sample optimal strategy underperforms the median out-of-sample. A PBO above 0.50 indicates more-likely-than-not overfitting.

See `references/overfit_detection.md` for complete derivations and implementation details.

## Crypto-Specific Considerations

1. **Shorter windows**: Crypto regimes change faster than equities. A 90-day rolling window may be more appropriate than 252 days.
2. **24/7 markets**: No weekends or holidays to account for, but funding rate resets (every 8h on perps) create microstructure effects.
3. **Survivorship bias**: Many tokens delist. Validation must include delisted tokens or at minimum acknowledge this limitation.
4. **Liquidity regime shifts**: A token's liquidity profile can change dramatically (new CEX listing, liquidity mining end). Train/test splits should ideally not straddle major liquidity events.
5. **Data availability**: Many tokens have < 1 year of data. Expanding windows with small `min_train_size` may be necessary.

## Practical Window Sizes for Crypto

| Strategy Timeframe | Train Window | Test Window | Embargo |
|---|---|---|---|
| Scalping (1-5min) | 3-7 days | 1 day | 2-4 hours |
| Intraday (15min-1h) | 14-30 days | 3-7 days | 12-24 hours |
| Swing (4h-daily) | 30-90 days | 7-14 days | 2-5 days |
| Position (daily-weekly) | 90-180 days | 30 days | 5-10 days |

## Quick Start

```python
from walk_forward import WalkForwardValidator, WalkForwardConfig

config = WalkForwardConfig(
    train_size=90,
    test_size=14,
    step_size=14,
    window_type="rolling",
    embargo_size=3,
    purge_horizon=1,
)

validator = WalkForwardValidator(config)
for fold in validator.split(price_data):
    model.fit(fold.train_X, fold.train_y)
    predictions = model.predict(fold.test_X)
    fold.record_performance(predictions, fold.test_y)

results = validator.aggregate_results()
print(f"OOS Sharpe: {results.oos_sharpe:.3f}")
print(f"Train/Test Sharpe ratio: {results.sharpe_ratio_ratio:.2f}")
```

## Files

### References
- `references/methodology.md` — Walk-forward theory, window types, purging, embargo, CPCV algorithm with formulas
- `references/overfit_detection.md` — Deflated Sharpe ratio, probability of backtest overfitting, multiple testing corrections
- `references/practical_guide.md` — Window size selection for crypto, regime considerations, common validation mistakes

### Scripts
- `scripts/walk_forward.py` — Walk-forward validation engine with rolling and expanding windows; `--demo` mode with synthetic data
- `scripts/overfit_detector.py` — Deflated Sharpe ratio and PBO computation; `--demo` mode with synthetic backtest results

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

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

Всё по теме «Финансы и бизнес» →
backtest-expert tradermonty Помогает проверить торговую стратегию до запуска: учесть проскальзывание, смещения и чувствительность параметров. CX Codex +1 4 200установок strategy-pivot-designer tradermonty Скилл находит застой в итерациях бэктеста и предлагает новые архитектуры торговой стратегии, когда простая подгонка параметров заходит в тупик. CX Codex +1 3 300установок optimize marketcalls Генерирует Python-скрипты для перебора параметров торговых стратегий на VectorBT, строит тепловые карты Plotly и сверяет результаты с бенчмарком NIFTY. CX Codex +1 2 300установок trading-strategies agentmc15 Скилл для проектирования и тестирования торговых стратегий на рынках предсказаний. Помогает рассчитывать сигналы арбитража, импульса и возврата к среднему на Python. CX Codex +1 1 200установок quant-analyst Seth Hobson Субагент настраивает алгоритмические торговые стратегии, рассчитывает риск-метрики и проводит бэктесты. Помогает подготовить финансовые модели на Python. CX Codex 1 366установок backtesting-frameworks Seth Hobson Помогает строить бэктесты торговых стратегий с учётом смещения заглядывания в будущее, выживших активов и торговых издержек. Пригодится для проверки стратегии на исторических данных. CX Codex 16 710установок

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

risk-management Скилл задаёт правила риск-менеджмента для криптоторговли: лимиты просадки, дневные и недельные стопы, ограничения концентрации и автоматические стоп-краны. CX Codex +1 631установок pandas-ta Скилл учит агента рассчитывать более 130 индикаторов технического анализа для крипторынка через библиотеку pandas-ta прямо в коде. CX Codex +1 586установок position-sizing Скилл рассчитывает размер торговой позиции по пяти методикам управления риском. Пригодится трейдерам при настройке автоматических стратегий и контроле просадок. CX Codex +1 572установок regime-detection Скилл для Claude, который по свечам решает, тренд сейчас или флэт, и какой волатильности ждать. Пригодится, когда нужно выбрать стратегию под текущий рынок. CX Codex +1 574установок 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установок

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

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