agentleFS
gauss314gauss314/skills/skills/backtesting/SKILL.md

backtesting

Skill242 starsChanged 5 months agoMITView on GitHub

Academic backtesting framework for quantitative research. ~30 risk and performance ratios, 10 classes of indicators, event-driven engine with 6+ strategies, MPT optimizer, forward-looking simulation with Johnson SU + t-Copula, walk-forward CV, stress testing, fundamental analysis (Altman Z, Piotroski, DuPont). All flat Python + numpy.

6 other projects use a version of this.

Adopted by

Most recently taken up by

Used with

Projects with it also use edge-detection, odds-analysis and 6 more.

Other files people use alongside this one.

Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
  • noahowshSkill

    edge-detection

    Comparing a tennis model's probability with the market: no-vig close, expected value at the best available price, closing line value, fractional Kelly sizing, and the checks that separate an estimated edge from noise. Use when the user has a probability and wants to know whether a price is better than fair, how large a stake is reasonable, or whether an edge is real. Requires a probability the user trusts. Do not use for fetching prices: see odds-explorer. Do not use for devig math alone: see odds-analysis. Do not use for historical testing: see backtesting.

    Also in 4 projects that use this

  • noahowshSkill

    odds-analysis

    Odds math for two-way tennis markets: American to implied probability, margin, devigging (multiplicative, power, Shin), no-vig fair odds, consensus across books, favorite-longshot bias, and expected value of a price. Use when the user asks what a price implies, how to remove the vig, what the true probability is, or how to compare books. Do not use for fetching or comparing live prices: see odds-explorer. Do not use for deciding a bet against a model: see edge-detection.

    Also in 4 projects that use this

  • agiprolabsSkill

    walk-forward-validation

    Walk-forward validation framework for trading strategies and ML models with time-series-aware splits, overfit detection, and regime-aware validation

    Also in 4 projects that use this

  • ffsshhttiikkSkill

    feature-engineering

    Machine learning feature engineering

    Also in 4 projects that use this

  • bassimeledathSkill

    dispatch

    Dispatch background AI worker agents to execute tasks via checklist-based plans.

    Also in 4 projects that use this

  • +3 more from noahowsh

The file

We split this skill into the rules it gives an agent

1 rule. 0 are common, 0 are distinctive, and 1 is very specific to this project.

  • 0

    Common

    Most of the 6 edited versions we read keep these.

  • 0

    Distinctive

    This author's own choices. Worth a look.

  • 1

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    All scripts use only numpy, pandas, and scipy.

    line 21

“Common” is measured: kept by at least 6 in 10 of the 6 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Backtesting — Full Backtesting Skill

This skill implements the full 5-stage backtesting methodology from the course material: Data → Research → Metrics → Parameterisation → Validation. It provides:

  • 30+ risk/performance ratios (flat, numpy-vectorized, no classes)
  • 10 classes of indicators following the course taxonomy (trend-following, oscillators, contrarians, flow, combined, discrete counts, seasonality, statistical, referential, fundamental)
  • Event-driven backtesting engine with 8 built-in strategies
  • Forward-looking simulation (Johnson SU marginals + t/Gaussian copula)
  • Portfolio theory (Markowitz efficient frontier, portfolio-of-portfolios)
  • Walk-forward cross-validation with IS/OOS split + gap
  • Stress testing with parametric scenario shocks
  • Fundamental analysis (Altman Z, Piotroski F, DuPont)

All scripts use only numpy, pandas, and scipy. No heavy dependencies.

Part of the Gauss314 Skills Repository.


File Map

skills/backtesting/
├── SKILL.md                         ← This file
├── references/
│   ├── BACKTESTING_THEORY.md        ← Marco conceptual: GIGO, trilema, 5 etapas (ES)
│   ├── RATIOS.md                    ← Fórmulas, convención de retornos, advertencias (ES)
│   ├── FEATURES.md                  ← Taxonomía de 10 clases de indicadores con edges (ES)
│   ├── SIMULATIONS.md               ← Pipeline Johnson SU + cópula (ES)
│   ├── VALIDATION.md                ← Suite de validación de 4 niveles (ES)
│   └── OTHER_FEATURES.md            ← Fundamental, Sentimiento, Exógenos (ES)
├── assets/
│   ├── sp500_returns.csv            ← SPY benchmark daily returns (lin + log), 1980-today
│   ├── momentum_sma50_200_returns.csv ← SMA(50)/SMA(200) crossover strategy returns
│   ├── contrarian_bbands_returns.csv  ← Bollinger Band contrarian strategy returns
│   ├── sample_portfolios.json       ← Real investor portfolios (Buffett, Dalio, Ackman, 60/40)
│   ├── defaults.json                ← Default parameters (VaR alpha, windows, etc.)
│   └── validation_cases.json        ← 6 known cases for ratio validation
├── scripts/
│   ├── __init__.py
│   ├── ratios.py                    ← 30+ flat numpy functions for all risk/performance ratios
│   ├── indicators.py                ← 10 classes of technical/statistical/fundamental indicators
│   ├── engine.py                    ← Event-driven BacktestEngine with 8 built-in strategies
│   ├── backtesting.py               ← CLI: run, sweep, walkforward, montecarlo, optmpt, event, validate
│   ├── simulations.py               ← CLI: marginal, copula, run, portfolio, scenarios
│   ├── forward.py                   ← CLI: project, risk, stress, summary
│   ├── distributions.py             ← Fit + KS test for Normal/t/NCt/Laplace/JohnsonSU
│   ├── copulas.py                   ← t/Gaussian/Clayton/Gumbel/Frank copulas + sampling
│   ├── fundamental_ratios.py        ← Income/balance/cashflow metrics, DuPont, Altman Z, Piotroski
│   └── validate.py                  ← 4-level validation: CLI modes, math consistency, edge cases, regression
└── tests/
    └── test_ratios.py               ← 18 pytest tests for core ratios

What each file does

FileRoleKey Functions / Modes
ratios.pyThe core library. Every ratio is a flat function accepting 1-D arrays.sharpe_ratio, max_drawdown, var_all, cvar_all, kelly_fraction, payoff_ratio, profit_factor, rachev_a/b/c, common_sense_ratio, ruin_curve, compute_all
indicators.py10 classes of indicators, covering all types from the course taxonomy.rsi, adx, bbands, macd, atr, cross_indicator, range_bound, zscore_norm, poisson_rate, binomial_ratio, fourier_terms, best_fit_dist
engine.pyBacktestEngine class and 8 strategy functions.BacktestEngine, strategy_sma_crossover, strategy_rsi_cross, strategy_bbands_contrarian, strategy_growth_momentum_combo
backtesting.pyMain CLI. Run full backtests, walks, sweeps, optimization.run, sweep, walkforward, montecarlo, optmpt, event, validate, bench
simulations.pyForward-looking simulation with Johnson SU + copula.marginal, copula, run, portfolio, scenarios
forward.pyRisk projection and stress testing.project, risk, stress, summary
distributions.pyDistribution fitting and comparison.fit, best_fit, compare_distributions, sample
copulas.pyCopula fitting and sampling.fit_t, fit_gaussian, sample_t, sample_gaussian, validate_copula
fundamental_ratios.pyFundamental analysis ratios.income_metrics, valuation_metrics, dupont, altman_z, piotroski
validate.py4-level integration testing suite.33 checks across CLI, math, edge cases, regression

Quick Start

Basic Ratios

# Compute all 30+ ratios on a CSV of prices
py scripts/backtesting.py run --prices assets/sp500_returns.csv

# Compute with benchmark comparison
py scripts/backtesting.py run --prices assets/momentum_sma50_200_returns.csv --benchmark assets/sp500_returns.csv

Validate (4-level suite)

# Full validation (33 checks across 4 levels)
py scripts/validate.py

# Single level
py scripts/validate.py --nivel 1

Validates CLI modes, mathematical consistency of all ratios, edge case resilience, and post-fix regression. See references/VALIDATION.md for the detailed breakdown of all 33 checks.

Event-Driven Backtest

# Load a CSV with OHLCV data and run SMA crossover
py scripts/backtesting.py event --data my_stock.csv --strategy sma_crossover --fast 50 --slow 200 --commission 0.001

Parameter Sweep

# 2D sweep over fast/slow MA windows
py scripts/backtesting.py sweep --prices assets/sp500_returns.csv --p1-min 10 --p1-max 100 --p1-step 10
# 2D over 2 parameters
py scripts/backtesting.py sweep --prices assets/sp500_returns.csv --p1-min 10 --p1-max 50 --p1-step 5 --p2-min 25 --p2-max 200 --p2-step 25

Walk-Forward

py scripts/backtesting.py walkforward --prices assets/sp500_returns.csv --splits 5 --gap 21

Markowitz Optimization

py scripts/backtesting.py optmpt --assets assets/sp500_returns.csv --iterations 5000

Forward Simulation

py scripts/simulations.py marginal --returns assets/sp500_returns.csv
py scripts/simulations.py copula --returns assets/sp500_returns.csv --df 4
py scripts/forward.py project --returns assets/sp500_returns.csv --horizon 252 --paths 10000 --drift 0.08
py scripts/forward.py risk --returns assets/sp500_returns.csv --horizon 252 --paths 10000

Portfolio Simulation

py scripts/simulations.py portfolio --name warren_buffett
py scripts/simulations.py scenarios --name warren_buffett --cagr -0.3,-0.15,0,0.2,0.35,0.5

Using Ratios as a Library

from scripts.ratios import *

prices = np.array([100, 105, 102, 110, 108, 115])
r = linear_returns(prices)    # [0.05, -0.0286, 0.0784, -0.0182, 0.0648]
lr = log_returns(prices)      # [0.0488, -0.0290, 0.0755, -0.0183, 0.0628]

sharpe_ratio(r)               # 0.847
max_drawdown(prices)          # -0.0370
kelly_fraction(lr)            # 0.0793
var_all(r, alpha=0.05)        # {'empirical': ..., 'normal': ..., 'johnsonsu': ...}
profit_factor(lr)             # 2.314
payoff_ratio(lr)              # 1.578
rachev_c(lr, alpha=0.05)      # 1.234
common_sense_ratio(lr)        # 2.856

Using the Engine

from scripts.engine import BacktestEngine

eng = BacktestEngine(initial_capital=1.0, commission=0.001, slippage=0.0005)
eng.load_data(df_ohlcv)
result = eng.run(strategy='sma_crossover', strategy_params={'fast': 50, 'slow': 200})

print(result['metrics']['sharpe_ratio'])     # 0.847
print(result['trades'])
print(result['metrics'])

Dependencies

LibraryRequiredUsed for
numpy✅Vectorised computation, arrays, cumprod
pandas✅CSV I/O, rolling operations, DataFrames
scipy.stats✅Distribution fitting, KS test, copulas
statsmodelsOptionalSTL decomposition in indicators.py (Class 5)

To run the full validation suite (py scripts/validate.py) you also need pytest for the Level 4 regression check.

No arch, quantlib, sklearn required.


See Also

  • Gauss314 Skills Repository — other skills for financial data
  • references/BACKTESTING_THEORY.md — marco conceptual del backtesting (ES)
  • references/RATIOS.md — fórmulas, convención de retornos, advertencias (ES)
  • references/FEATURES.md — taxonomía de 10 clases de indicadores con edges (ES)
  • references/SIMULATIONS.md — pipeline de Johnson SU + cópula (ES)
  • references/VALIDATION.md — suite de validación de 4 niveles (ES)
  • references/OTHER_FEATURES.md — fundamental, sentimiento, exógenos (ES)

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.