Strategies
ASX Bulk-Commodity & Energy Producer Peer-Relative Down-Shock Rebound: buy a non-gold Australian resource name (iron ore, base metals, lithium, rare earths, coal, oil & gas) at the next ASX open after a session whose beta-adjusted return fell >=2 sigma below its resource peer basket, fixed open-to-open clock (AUEQ 1-DAY, 13-name pre-registered panel disjoint from the promoted ASX gold-miner panel, long/flat, unlevered, same-date entries capped)
Outcome: Abandoned
AsxResourceProducerPeerDownShockRebound
Outcome Summary
The Research Lead tested whether the peer-relative down-shock rebound, promoted on ASX gold miners and TSX miners, also works on 13 non-gold ASX resource producers on a fixed 5-session open-to-open clock. The implementation matched the hypothesis and the input data passed every check, but the development-period result was about break-even: 472 trades, +0.49% total return, 0.0385% net per trade against a 0.30% floor, and a 16.5% drawdown. The full-history run was worse, at -3.41% over 602 trades with an 18.9% drawdown. The analyst abandoned the strategy at Backtest Review in its first iteration, before optimization. Fees took almost all of the gross gain, gains were concentrated in mid-caps, and 2022-2024 lost money; the verdict does not apply to the promoted gold-miner or TSX panels.
Hypothesis
negative_expectancy: on 472 closed trades in the development period (2018-07 to 2025-01), the frozen 5-session clock nets 0.0385% per trade against the 0.30% AUEQ floor. Profit factor is 1.006, Sharpe 0.05, total return +0.49%. 2022, 2023 and 2024 all lost money (2024 -10.3%), and drawdown is 16.5% against a pre-registered 15%. Fees take essentially the whole gross capture of about 0.29%. Optimizing hold_sessions toward 10 would mean choosing the one horizon the pre-study flagged as clearing costs (t 2.28), on the same data, to rescue a profit factor of 1.0. By lesson 253 (more than 100 trades, PF within 0.05 of 1, Sharpe below 0.35), more tuning has not changed such outcomes. QA's concern is confirmed: S32, FMG, WDS and RIO lose or go flat, and the gains sit in mid-caps (CMM, WHC, PLS, STO). This rejects the Research Lead's 13-name non-gold ASX resource operationalization of the peer-relative down-shock template at its registered clock. It is not a verdict on the promoted ASX gold-miner or TSX miner panels. Nothing is concluded about the held-back period.
Implementation
13-name ASX non-gold resource panel (BHP primary + 12 extras, AUEQ 1-DAY). Each session close: log return per name, equal-weight mean of the other names' returns as the peer (>=8 peers), 60-session beta known at t-1 clipped to [0,3], residual z-scored by the std of the previous 60 residuals. z <= -z_entry (2.0) on a non-zero-volume bar triggers a market BUY that fills at the next ASX open (next_open_fill), 10% of mark-to-market equity in whole shares, max 2 new entries per session (most negative z first), max 4 concurrent, held names not re-entered. Exit: market SELL decided at the close of the hold_sessions-th session after entry, filling at the open hold_sessions sessions after the entry open (baseline 5). No stop or target.
Faithful implementation of the hypothesis on top of the promoted AsxGoldMinerIdioDownShockRebound structure, with this hypothesis's rules: 13-name panel, 60/60 lookbacks, beta clip [0,3], min 8 peers, no r<0 or close filter, 2-per-date and 4-concurrent caps. Risk route (b): fixed time exit with capped sizing. Each leg is 10% of equity and gross is at most 40%, unlevered on a CASH account. The session clock counts primary session bars after position.ts_opened, so it is restart-safe. Panel rows are derived and rebuilt from the bar buffers after a restart. Beta and sigma use only rows before t. No point_in_time_universe: the brief says the panel is fixed and all 13 names were listed from 2018, and catalog daily bars exist for all 13 from 2018-01. The survivorship caveat is left uncorrected, as the hypothesis states. Parameter names and domains follow optimization_plan: z_entry [1.75,3.0] and hold_sessions [3,10] are tunable, the rest fixed; the clamps are declared in _param_bounds.
Verification Results
No change required. If the Research Lead wants the slot of a same-close exit to be reusable, subtract positions with a pending time exit from `held`.
Slot accounting counts a position whose time exit is submitted on this same close as still occupying a slot. A new event on the exit session can therefore not take that slot, even though the exit fills at the next open together with the new entry. This follows the contract literally ('only while open positions < max_concurrent' at decision time) and is conservative: it may drop a few entries but never exceeds 4 concurrent.
Optionally keep rolling sums for cov, var and residual variance per name to make optimization trials cheaper.
Runtime advisory: the sandbox took 208 s for 1,540 bars, and the projected full baseline is ~280 s (runtime_review_required). The cost comes from a pure-Python 60-element beta and sigma recomputation per name per session. This is a resource concern, not a correctness one. The min_bars_required override (122) is deliberate and fits inside the base's 500-bar buffer.
The pre-study's gross at the baseline 5-session clock is +0.38% (t 1.56) against a ~0.25% AUEQ round trip, about 0.13% net, and 2023-2024 were losing years. The 10-session reading (+0.79%) is the only horizon that clears 2x cost, and hold_sessions is tunable (3-10). The analyst should check whether the optimizer's choice concentrates at hold_sessions=10 and whether the edge holds on the mega-cap names (BHP/RIO/FMG/S32/WDS) or only on the mid-caps.
Backtest Review
- Sharpe
- -0.02
- Total return
- -3.41%
- Max drawdown
- 18.90%
- Trades
- 602
- Win rate
- 47.3%
- Profit factor
- 0.98
Implementation matches the hypothesis: all 472 trades are long, each held a fixed ~5 sessions open-to-open, sized at about 10% of equity, entries spread across all 13 names (28-46 each). Input audit is clean on every leg.
The sample is reliable: 472 closed trades over 2018-07 to 2025-01, 1,311 effective daily observations.
Average net trade return is 0.0385% of notional, against the AUEQ floor of 0.30% (0.25% round trip + 0.05). That leaves an implied gross of only about 0.29% per trade, below the pre-study's 0.38%.
Profit factor is 1.006, Sharpe 0.046 (CI -0.67 to 0.81), total return +0.49% over 6.5 years, Calmar 0.0045. Commissions of AUD 11.0k alone exceed the net PnL of about AUD 0.9k.
The losses are a regime, not noise: 2022 -1.6%, 2023 -2.1%, 2024 -10.3%. Every month of 2024 except March lost money. Drawdown is 16.5% (above the pre-registered 15%) and lasted 1,102 days.
QA's concern is borne out by name: the mega/large caps lose or go flat (S32 -4.1k, FMG -2.9k, WDS -2.2k, RIO +0.03k), and so do LYC (-4.5k), MIN and IGO. The profit sits in CMM, WHC, PLS, STO and BHP. That is the pattern the pre-study showed, and the panel was rightly not selected on it.
Outcome Summary
A template that works on one sub-universe (gold miners) does not automatically work on peers in the same venue: this edge was too small to survive AUEQ's roughly 0.25% round-trip cost, and the pre-study's thin 5-session t-stat (1.56) and its losing 2023-2024 years were early warnings.
The analyst voted to abandon at Backtest Review, before optimization, for negative expectancy: commissions took almost all of the roughly 0.29% gross gain per trade, and 2022, 2023 and 2024 all lost money (2024 -10.3%). Drawdown also exceeded the pre-registered 15% limit, and tuning hold_sessions toward 10 was rejected as rescuing a result with a profit factor near 1 on the same data.
It tested whether the peer-relative down-shock rebound template, already promoted on ASX gold miners and TSX miners, carries over to a 13-name panel of non-gold ASX resource producers: buy a name at the next ASX open after its beta-adjusted return falls at least 2 sigma below its peer basket, then sell at the open 5 sessions later (long/flat, 10% of equity per position, no leverage).
In the full-history backtest (2018-07 to 2026-10) it made 602 long trades and lost 3.41% (Sharpe -0.02, profit factor 0.98, net -0.023% per trade, max drawdown 18.9%). In the 2018-07 to 2025-01 development period reviewed by the analyst it made 472 trades for +0.49%, netting 0.0385% per trade against the 0.30% AUEQ floor (profit factor 1.006, Sharpe 0.05, drawdown 16.5%).
Backtest and paper results are hypothetical. Trading involves risk of loss.