Strategies
je-suis-tm Shooting Star, causal port on a point-in-time US large-cap panel: confirmed eight-condition shooting star -> short at next open, exit on a +/-5% close move or after 7 sessions (VOD.USEQ + S&P 500 members as of each bar, 1-DAY, short-only, next-session-open fills)
Outcome: Verifying
PanelCausalShootingStarShort
je-suis-tm Shooting Star, causal port on a point-in-time US large-cap panel: confirmed eight-condition shooting star -> short at next open, exit on a +/-5% close move or after 7 sessions (VOD.USEQ + S&P 500 members as…
Hypothesis
Retry after no_trades: the source's conjunction holds about 6 times in 38 years on VOD itself. Running the identical rule across a point-in-time S&P 500 panel, with VOD kept as primary, gives a testable sample without changing the pattern. USEQ short-only daily is also under-represented (USEQ 9.7%, long_short/short 24%).
Implementation
Causal port of je-suis-tm's eight-condition shooting star, run independently on VOD.USEQ (always eligible) and every S&P 500 member as of each bar (1-DAY USEQ). Star = bar t-1; bar t confirms (High_t<=High_{t-1}, Close_t<=Close_{t-1}); short decided at the close of t, filled at the next session open. Exit when |close/fill-1|>5% or after 7 sessions, decided on the close and filled at the next open. 10% of equity per short, whole shares, at most 10 open shorts, ties taken in ascending ticker order.
Implements hypothesis v2 changes A-F: (A) VOD.USEQ primary plus 741 point-in-time S&P 500 legs (src.data.listings sp500 1996-2026 --with-data), filtered by index_member/is_listed on every bar, point_in_time_universe=True; (B) condition 7/8 moved to a confirmation bar, next-open fill (next_open_fill supported); (C) body reference = mean |O-C| over the previous body_lookback=20 sessions excluding the star, kept as a running sum; (D) one net short per name, new stars on held names ignored; (E) +/-5% test against the actual fill price on daily closes; (F) 10% equity notional per short, max 10, so gross short <=100% of equity, risk route (b). Per-name candle state is updated in on_extra_bar from each leg's own bars; the alignment barrier guarantees all listed legs' same-session bars are in before the VOD bar drives the decision, and only legs whose last bar timestamp equals the primary session are used. The previous code ran VOD alone (expanding signed mean), which the hypothesis now replaces.
Verification Results
Verification failed (Layer 3 — sandbox backtest): No trades produced Bar type used: VOD.USEQ-1-DAY-LAST-EXTERNAL, Bars processed: 1401 Diagnostics: should_enter() returned a side 0 times over 1401 evaluated bars -> your ENTRY CONDITION never triggered. Loosen the entry logic / thresholds. Ensure your strategy produces trades with the given data and parameters.
Analysis
Shooting Star backtest
Analysis
Shooting%20Star%20backtest.py
Backtest and paper results are hypothetical. Trading involves risk of loss.