Skip to content

Studies 88-102 — fifteen more folk-strategy teardowns #14

Studies 88-102 — fifteen more folk-strategy teardowns

Studies 88-102 — fifteen more folk-strategy teardowns #14

Workflow file for this run

name: tests
on:
push:
branches: [main]
pull_request:
workflow_dispatch:
jobs:
test:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python-version: ["3.10", "3.11", "3.12"]
steps:
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
cache: pip
- name: Install dependencies
run: |
python -m pip install --upgrade pip
# Single dependency source of truth: pyproject.toml, installed through the
# requirements.txt alias (-e .[studies,dev]). That covers the engine, the
# econometrics/ML stack behind the studies (scipy/statsmodels/arch/scikit-learn)
# and pytest. The test-suite itself stays offline: network/real-data tests are
# cache-gated and skip when the cache is absent.
pip install -r requirements.txt
- name: Study-construction gate (every published study, same construction)
run: python tools/check_study_completeness.py
- name: Core engine test-suite (quantlab, offline, deterministic)
run: pytest -q
- name: Study 02 — Falling-Knife test-suite
run: pytest -q studies/02-falling-knife/tests
- name: Study 03 — Fear-Gauge test-suite
run: pytest -q studies/03-fear-gauge/tests
- name: Study 04 — Social-Oracle test-suite
run: pytest -q studies/04-social-oracle/tests
- name: Study 05 — Twin-Spread test-suite
run: pytest -q studies/05-twin-spread/tests
- name: Study 09 — Phantom-Kernel test-suite
run: pytest -q studies/09-phantom-kernel/tests
- name: Study 11 — Vanishing-Penny test-suite
run: pytest -q studies/11-vanishing-penny/tests
- name: Study 16 — Storm-Shy test-suite
run: pytest -q studies/16-storm-shy/tests
- name: Study 06 — Clockwork-Vol test-suite
run: pytest -q studies/06-clockwork-vol/tests
- name: Study 07 — Coiled-Spring test-suite
run: pytest -q studies/07-coiled-spring/tests
- name: Study 08 — True-Strength test-suite
run: pytest -q studies/08-true-strength/tests
- name: Study 10 — Markov-Mint test-suite
run: pytest -q studies/10-markov-mint/tests
- name: Study 12 — Paper-Prophet test-suite
run: pytest -q studies/12-paper-prophet/tests
- name: Study 13 — Crimson-Hour test-suite
run: pytest -q studies/13-crimson-hour/tests
- name: Study 14 — Gamma-Gospel test-suite
run: pytest -q studies/14-gamma-gospel/tests
- name: Study 15 — Sigma-Sleight test-suite
run: pytest -q studies/15-sigma-sleight/tests
- name: Study 17 — Glass-Ceiling test-suite
run: pytest -q studies/17-glass-ceiling/tests
- name: Study 18 — Dull-Roar test-suite
run: pytest -q studies/18-dull-roar/tests
- name: Study 19 — Rubber-Band test-suite
run: pytest -q studies/19-rubber-band/tests
- name: Study 20 — Freight-Train test-suite
run: pytest -q studies/20-freight-train/tests
- name: Study 21 — Fools-Gold test-suite
run: pytest -q studies/21-fools-gold/tests
- name: Study 22 — Crystal-Ball test-suite
run: pytest -q studies/22-crystal-ball/tests
- name: Study 23 — Broken-Tether test-suite
run: pytest -q studies/23-broken-tether/tests
- name: Study 24 — Stampede test-suite
run: pytest -q studies/24-stampede/tests
- name: Study 25 — Clean-Slate test-suite
run: pytest -q studies/25-clean-slate/tests
- name: Study 26 — Sand-Castle test-suite
run: pytest -q studies/26-sand-castle/tests
- name: Study 27 — Steamroller test-suite
run: pytest -q studies/27-steamroller/tests
- name: Study 28 — Carousel test-suite
run: pytest -q studies/28-carousel/tests
- name: Study 29 — Hedgers-Toll test-suite
run: pytest -q studies/29-hedgers-toll/tests
- name: Study 30 — House-Edge test-suite
run: pytest -q studies/30-house-edge/tests
- name: Study 31 — Trade-Winds test-suite
run: pytest -q studies/31-trade-winds/tests
- name: Study 32 — Rip-Tide test-suite
run: pytest -q studies/32-rip-tide/tests
- name: Study 33 — Slingshot test-suite
run: pytest -q studies/33-slingshot/tests
- name: Study 34 — Aftershock test-suite
run: pytest -q studies/34-aftershock/tests
- name: Study 35 — Contango test-suite
run: pytest -q studies/35-contango/tests
- name: Study 36 — Greenback test-suite
run: pytest -q studies/36-greenback/tests
- name: Study 37 — Barometer test-suite
run: pytest -q studies/37-barometer/tests
- name: Study 38 — Chorus test-suite
run: pytest -q studies/38-chorus/tests
- name: Study 39 — Black-Box test-suite
run: pytest -q studies/39-black-box/tests
- name: Study 40 — Paper-Tiger test-suite
run: pytest -q studies/40-paper-tiger/tests
- name: Study 41 — Hangover test-suite
run: pytest -q studies/41-hangover/tests
- name: Study 42 — Last-Call test-suite
run: pytest -q studies/42-last-call/tests
- name: Study 43 — Free-Lunch test-suite
run: pytest -q studies/43-free-lunch/tests
- name: Study 44 — Growth-Spurt test-suite
run: pytest -q studies/44-growth-spurt/tests
- name: Study 45 — Vanishing-Act test-suite
run: pytest -q studies/45-vanishing-act/tests
- name: Study 46 — Bargain-Bin test-suite
run: pytest -q studies/46-bargain-bin/tests
- name: Study 47 — Paper-Moon test-suite
run: pytest -q studies/47-paper-moon/tests
- name: Study 48 — Groundhog test-suite
run: pytest -q studies/48-groundhog/tests
- name: Study 49 — Black-Gold test-suite
run: pytest -q studies/49-black-gold/tests
- name: Study 50 — High-Water test-suite
run: pytest -q studies/50-high-water/tests
- name: Study 51 — Blue-Chip test-suite
run: pytest -q studies/51-blue-chip/tests
- name: Study 52 — Smoke-Screen test-suite
run: pytest -q studies/52-smoke-screen/tests
- name: Study 53 — Jackpot test-suite
run: pytest -q studies/53-jackpot/tests
- name: Study 54 — Static test-suite
run: pytest -q studies/54-static/tests
- name: Study 55 — Summer-Lull test-suite
run: pytest -q studies/55-summer-lull/tests
- name: Study 56 — Tide-Table test-suite
run: pytest -q studies/56-tide-table/tests
- name: Study 57 — Yield-Trap test-suite
run: pytest -q studies/57-yield-trap/tests
- name: Study 58 — Bunker test-suite
run: pytest -q studies/58-bunker/tests
- name: Study 59 — Downhill test-suite
run: pytest -q studies/59-downhill/tests
- name: Study 60 — Long-Shot test-suite
run: pytest -q studies/60-long-shot/tests
- name: Study 61 — Slow-Burn test-suite
run: pytest -q studies/61-slow-burn/tests
- name: Study 62 — Premium-Seller test-suite
run: pytest -q studies/62-premium-seller/tests
- name: Study 63 — Free-Fall test-suite
run: pytest -q studies/63-free-fall/tests
- name: Study 64 — Share-Shuffle test-suite
run: pytest -q studies/64-share-shuffle/tests
- name: Study 65 — Scorecard test-suite
run: pytest -q studies/65-scorecard/tests
- name: Study 66 — Inverted test-suite
run: pytest -q studies/66-inverted/tests
- name: Study 67 — Fed-Drift test-suite
run: pytest -q studies/67-fed-drift/tests
- name: Study 68 — All-Weather test-suite
run: pytest -q studies/68-all-weather/tests
- name: Study 69 — Safe-Haven test-suite
run: pytest -q studies/69-safe-haven/tests
- name: Study 70 — Digital-Gold test-suite
run: pytest -q studies/70-digital-gold/tests
- name: Study 71 — Ambush test-suite
run: pytest -q studies/71-ambush/tests
- name: Study 72 — Loaded-Dice test-suite
run: pytest -q studies/72-loaded-dice/tests
- name: Study 73 — First-Light test-suite
run: pytest -q studies/73-first-light/tests
- name: Study 74 — Mind-the-Gap test-suite
run: pytest -q studies/74-mind-the-gap/tests
- name: Study 75 — Knee-Jerk test-suite
run: pytest -q studies/75-knee-jerk/tests
- name: Study 76 — Rice-Paper test-suite
run: pytest -q studies/76-rice-paper/tests
- name: Study 77 — Golden-Mean test-suite
run: pytest -q studies/77-golden-mean/tests
- name: Study 78 — Crossed-Wires test-suite
run: pytest -q studies/78-crossed-wires/tests
- name: Study 79 — Sleigh-Ride test-suite
run: pytest -q studies/79-sleigh-ride/tests
- name: Study 80 — Cold-Open test-suite
run: pytest -q studies/80-cold-open/tests
- name: Study 81 — Four-Year-Itch test-suite
run: pytest -q studies/81-four-year-itch/tests
- name: Study 82 — Witching-Hour test-suite
run: pytest -q studies/82-witching-hour/tests
- name: Study 83 — Half-Life test-suite
run: pytest -q studies/83-half-life/tests
- name: Study 84 — Moon-Math test-suite
run: pytest -q studies/84-moon-math/tests
- name: Study 85 — Dr-Copper test-suite
run: pytest -q studies/85-dr-copper/tests
- name: Study 86 — Tail-Radar test-suite
run: pytest -q studies/86-tail-radar/tests
- name: Study 87 — Center-Line test-suite
run: pytest -q studies/87-center-line/tests
- name: Study 88 — Dogs-of-the-Dow test-suite
run: pytest -q studies/88-dogs-of-the-dow/tests
- name: Study 89 — Turn-of-the-Month test-suite
run: pytest -q studies/89-turn-of-the-month/tests
- name: Study 90 — Weekend test-suite
run: pytest -q studies/90-weekend/tests
- name: Study 91 — Death-Cross test-suite
run: pytest -q studies/91-death-cross/tests
- name: Study 92 — Easy-Money test-suite
run: pytest -q studies/92-easy-money/tests
- name: Study 93 — Round-Numbers test-suite
run: pytest -q studies/93-round-numbers/tests
- name: Study 94 — Level-Pegging test-suite
run: pytest -q studies/94-level-pegging/tests
- name: Study 95 — Holiday-Cheer test-suite
run: pytest -q studies/95-holiday-cheer/tests
- name: Study 96 — New-Year-Pop test-suite
run: pytest -q studies/96-new-year-pop/tests
- name: Study 97 — Balancing-Act test-suite
run: pytest -q studies/97-balancing-act/tests
- name: Study 98 — High-Noon test-suite
run: pytest -q studies/98-high-noon/tests
- name: Study 99 — Safety-Net test-suite
run: pytest -q studies/99-safety-net/tests
- name: Study 100 — Melting-Ice test-suite
run: pytest -q studies/100-melting-ice/tests
- name: Study 101 — Slow-and-Steady test-suite
run: pytest -q studies/101-slow-and-steady/tests
- name: Study 102 — Free-Rebalance test-suite
run: pytest -q studies/102-free-rebalance/tests
- name: Smoke-run the offline demos
run: |
python studies/01-overnight-anomaly/examples/run_synthetic_demo.py
python studies/71-ambush/examples/run_synthetic_demo.py
python studies/72-loaded-dice/examples/run_synthetic_demo.py
python studies/03-fear-gauge/examples/run_synthetic_demo.py
python studies/04-social-oracle/examples/run_synthetic_demo.py
python studies/05-twin-spread/examples/run_synthetic_demo.py
python studies/09-phantom-kernel/examples/run_synthetic_demo.py
python studies/11-vanishing-penny/examples/run_synthetic_demo.py
python studies/16-storm-shy/examples/run_synthetic_demo.py
python studies/30-house-edge/examples/run_synthetic_demo.py
python studies/31-trade-winds/examples/run_synthetic_demo.py
python studies/32-rip-tide/examples/run_synthetic_demo.py
python studies/33-slingshot/examples/run_synthetic_demo.py
python studies/34-aftershock/examples/run_synthetic_demo.py
python studies/35-contango/examples/run_synthetic_demo.py
python studies/36-greenback/examples/run_synthetic_demo.py
python studies/37-barometer/examples/run_synthetic_demo.py
python studies/38-chorus/examples/run_synthetic_demo.py
python studies/39-black-box/examples/run_synthetic_demo.py