Add Study 40 — Paper-Tiger: a vendor's dual-momentum, mirrored and st… #2
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 | |
| # Offline test-suite: no network/yfinance. scipy/statsmodels/arch/scikit-learn back the | |
| # econometrics and ML studies (12 Paper-Prophet, 13 Crimson-Hour, 17 Glass-Ceiling, | |
| # 22 Crystal-Ball, 39 Black-Box); real-data tests stay cache-gated and skip when absent. | |
| pip install numpy pandas matplotlib pyarrow pytest scipy statsmodels arch scikit-learn | |
| - 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: Smoke-run the offline demos | |
| run: | | |
| python studies/01-overnight-anomaly/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 |