Skip to content

Add Study 40 — Paper-Tiger: a vendor's dual-momentum, mirrored and st… #2

Add Study 40 — Paper-Tiger: a vendor's dual-momentum, mirrored and st…

Add Study 40 — Paper-Tiger: a vendor's dual-momentum, mirrored and st… #2

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
# 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