Studies 118-137 — twenty more teardowns: valuation (Fed model, ECY, r… #16
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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: Study 103 — Turtle-Trader test-suite | |
| run: pytest -q studies/103-turtle-trader/tests | |
| - name: Study 104 — Bollinger-Reversion test-suite | |
| run: pytest -q studies/104-bollinger-reversion/tests | |
| - name: Study 105 — Coppock-Curve test-suite | |
| run: pytest -q studies/105-coppock-curve/tests | |
| - name: Study 106 — Supertrend test-suite | |
| run: pytest -q studies/106-supertrend/tests | |
| - name: Study 107 — Stochastic-Oscillator test-suite | |
| run: pytest -q studies/107-stochastic-oscillator/tests | |
| - name: Study 108 — ADX-Filter test-suite | |
| run: pytest -q studies/108-adx-filter/tests | |
| - name: Study 109 — OBV-Divergence test-suite | |
| run: pytest -q studies/109-obv-divergence/tests | |
| - name: Study 110 — Faber-Timing test-suite | |
| run: pytest -q studies/110-faber-timing/tests | |
| - name: Study 111 — VIX-Term-Structure test-suite | |
| run: pytest -q studies/111-vix-term-structure/tests | |
| - name: Study 112 — Move-Index test-suite | |
| run: pytest -q studies/112-move-index/tests | |
| - name: Study 113 — Gold-Silver-Ratio test-suite | |
| run: pytest -q studies/113-gold-silver-ratio/tests | |
| - name: Study 114 — Dollar-Smile test-suite | |
| run: pytest -q studies/114-dollar-smile/tests | |
| - name: Study 115 — Credit-Spreads test-suite | |
| run: pytest -q studies/115-credit-spreads/tests | |
| - name: Study 116 — Power-Hour test-suite | |
| run: pytest -q studies/116-power-hour/tests | |
| - name: Study 117 — Pi-Cycle-Top test-suite | |
| run: pytest -q studies/117-pi-cycle-top/tests | |
| - name: Study 118 — Fed-Model test-suite | |
| run: pytest -q studies/118-fed-model/tests | |
| - name: Study 119 — Real-Rate-Regime test-suite | |
| run: pytest -q studies/119-real-rate-regime/tests | |
| - name: Study 120 — Excess-CAPE-Yield test-suite | |
| run: pytest -q studies/120-excess-cape-yield/tests | |
| - name: Study 121 — Magic-Formula test-suite | |
| run: pytest -q studies/121-magic-formula/tests | |
| - name: Study 122 — Gross-Profitability test-suite | |
| run: pytest -q studies/122-gross-profitability/tests | |
| - name: Study 123 — Altman-Z test-suite | |
| run: pytest -q studies/123-altman-z/tests | |
| - name: Study 124 — Cash-Flow-Yield test-suite | |
| run: pytest -q studies/124-cash-flow-yield/tests | |
| - name: Study 125 — Ichimoku-Cloud test-suite | |
| run: pytest -q studies/125-ichimoku-cloud/tests | |
| - name: Study 126 — Parabolic-SAR test-suite | |
| run: pytest -q studies/126-parabolic-sar/tests | |
| - name: Study 127 — Williams-R test-suite | |
| run: pytest -q studies/127-williams-r/tests | |
| - name: Study 128 — Keltner-Channel test-suite | |
| run: pytest -q studies/128-keltner-channel/tests | |
| - name: Study 129 — Heikin-Ashi test-suite | |
| run: pytest -q studies/129-heikin-ashi/tests | |
| - name: Study 130 — Vol-Risk-Premium test-suite | |
| run: pytest -q studies/130-vol-risk-premium/tests | |
| - name: Study 131 — Utilities-Canary test-suite | |
| run: pytest -q studies/131-utilities-canary/tests | |
| - name: Study 132 — Yield-Curve-Steepener test-suite | |
| run: pytest -q studies/132-yield-curve-steepener/tests | |
| - name: Study 133 — Crypto-Seasonality test-suite | |
| run: pytest -q studies/133-crypto-seasonality/tests | |
| - name: Study 134 — Bitcoin-Dominance test-suite | |
| run: pytest -q studies/134-bitcoin-dominance/tests | |
| - name: Study 135 — FOMC-Cycle test-suite | |
| run: pytest -q studies/135-fomc-cycle/tests | |
| - name: Study 136 — Mark-Twain test-suite | |
| run: pytest -q studies/136-mark-twain/tests | |
| - name: Study 137 — Mansfield-RS test-suite | |
| run: pytest -q studies/137-mansfield-rs/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 |