Strategies
ETH Upside-Only Weekly-High Acceptance: Long ETHUSDT.OKX for a Fixed 48h After the First Hourly Close Above the Prior 168-Bar Closing High, No Short Side, Flat ~74% of the Time (OKX USDT swap 1H, pure OHLCV, 2 structural parameters, pre-studied)
Outcome: Abandoned
EthOkxWeeklyHighAcceptance48hLong
Outcome Summary
This hypothesis revised earlier long-short channel-break runs into a long-only ETHUSDT.OKX trade: buy the first close above the 7-day closing high and hold for 48h. It was coded and backtested in one iteration, and the per-trade edge was well above costs (0.90% against a 0.15% floor) with a positive holdout (Sharpe 0.84). However, PF stayed at 1.23, the Sharpe CI straddled zero, the yearly results were uneven, and the optimizer's gain came mostly from raising notional_fraction from 0.5 to 0.75. The analyst abandoned it for overfitting (PBO 0.69 > 0.5 hard limit) and flagged a suspected engine artifact in the daily-return series for engine review.
Hypothesis
Implements the hypothesis verbatim with its two structural parameters: lookback 168 bars and a 48h clock. A fresh-cross flag reproduces the rule that the previous bar closed at or below its own trailing max. The prior-max buffer excludes the current bar, so the signal is point-in-time. The 48h clock is anchored to the entry bar's timestamp, held as scalar state so it survives restarts; it is not a bar counter. Sizing is equity x 0.5 x leverage (1.0) with one position at a time, so gross exposure is at most 0.5x equity. Per-bar cost is a max over a fixed 168-bar deque, so it does not grow with the backtest span. Expected about 47 trades/yr, roughly 300+ over the full history.
Implementation
Long-only event trade on ETHUSDT.OKX 1H. It trades on the first hourly close above the prior 168-bar closing high, where the previous bar closed at or below its own trailing max, and only while flat. It buys 0.5x equity notional at market and holds exactly 48h. It exits early if the close is 8% below entry (catastrophe stop). No shorts, no take-profit, no trailing stop, no pyramiding. The signal is the continuous % distance of the close from the prior 168-bar closing max.
Verification Results
No code change is needed, because funding is an engine accounting concern. The analyst should confirm the full backtest folds OKX funding (exchange okx, from 2022-01-17), or haircut the average trade by the funding paid over the hold.
The sandbox reports funding_folded=false and funding_events_available=0, so OKX funding was not charged. The hypothesis says the engine charges funding as a holding cost. Longs held for 48h in bull regimes typically pay 6 x ~0.01% or more, which is material against a recent-year average trade of ~0.25%.
Optional: return 2 from min_bars_required and let the deque gate itself, or accept the two-week delay.
The base template does not call calculate_signal until 170 primary bars exist, and the 168-close deque only starts filling after that. The first possible entry therefore comes about 338 bars (~2 weeks) into the data. This is harmless on a 6.7-year window. In live mode, the warmup replay does call calculate_signal, so the deque primes correctly.
None required.
should_enter stamps _entry_ts and _entry_price before sizing and the min-notional check. If an entry is dropped, those values go stale, but the next accepted entry overwrites them, and should_exit only runs while a position is open. There is no functional impact. After a restart, the scalar state falls back to pos.ts_opened and pos.avg_px_open, which is correct.
The sandbox covers the recent ~834 days (2024-06 to 2026-09), which is the period the hypothesis itself flags as decayed. Results: PF 1.15, Sharpe 0.33 (CI -1.03 to 1.54), avg trade +0.49% of notional on 94 trades. The ledger reconciles: 0.487% x 94 x 0.5 notional is about +23%, against +14% actual. The calm-vol tercile lost 10.7% and all profit came from the normal tercile. In the full backtest, check the per-year average trade (2025-2026 were pre-studied at only ~0.25%). Also check the excess over the unconditional 48h long drift (~0.4%), because beta is 0.12 and correlation with buy-and-hold is 0.52. Check too whether the OKX funding a 48h long pays in bull regimes eats the recent-year edge: funding_folded=false and funding_events_available=0 in the sandbox.
Backtest Review
- Sharpe
- 0.44
- Total return
- 145.52%
- Max drawdown
- 21.54%
- Trades
- 312
- Win rate
- 50.6%
- Profit factor
- 1.23
The trades implement the hypothesis. All 312 are LONG, each holds about 48h, there are no shorts, and notional is about 0.5x equity. That is about 47 trades a year, which matches the pre-study.
Sample: 312 trades over 6.7 years of 1H bars, above the 100-trade intraday floor. About 60 trades fall in the holdout.
Economics: avg_trade_return_pct is 0.90% against the 0.15% OKX floor (6x). PF is 1.23. Commission is 4.6% of gross and impact 13.7%.
The edge survives OKX funding, which is now charged (funding_folded=true, 1800 events).
Not beta (L170). The drawdown is 21.5% against about 80% for buy-and-hold ETH (0.27x), with 25% exposure, beta 0.15 and alpha +4.9%/yr. All three vol terciles are positive, which answers QA's calm-tercile concern on the full history.
QA's decay concern is borne out. Mean per-trade pnl_pct by year: 2020 1.93%, 2021 -0.04%, 2022 0.51%, 2023 0.70%, 2024 0.96%, 2025 0.07%, 2026 -0.55%. The recent period, where the holdout falls, is at or below the fee floor.
Sharpe is 0.44 with a CI of -0.31 to 1.19, and PSR is 0.76. The estimate is not significant before optimization.
4 of 7 calendar years are positive, which is just at the 60% validity floor. The drawdown lasted 741 days.
Suspected daily-return artifact (mechanism not verified). The daily_returns series has paired -20%/+25% days that net to zero, including an identical pair while the book was flat. It also ends with an unpaired -25.3% bar that the equity_curve does not show. This distorts Sharpe, Sortino, CVaR and the annual return for 2026.
Analysis
The per-trade edge clears costs by a wide margin. The first report's avg_trade_return_pct is 0.90% against the 0.15% futures floor (about 6x), and the optimized run is 1.02%. This is not a fee_edge case.
The holdout (2025-04-18 to 2026-08-16) is positive: Sharpe 0.84 on 48 trades, ratio 1.65 against WF-OOS 0.51, consistent_with_oos=true.
The sensitivity sweep shows no cliffs. lookback_bars from 134 to 202 and hold_hours from 38 to 58 all give Sharpe of about 0.41 to 0.49, so the sweep is flat.
Beta 0.26, alpha 0.09, and 26% time in market. The drawdown is well below ETH buy-and-hold's roughly 80%, so under L170 this is not a beta result.
The trades match the hypothesis: 295 of 295 are long, 0 are short, and each runs on a fixed clock of about 2 days.
HARD validity failure: PBO is 0.69, above the 0.5 limit. In CPCV the in-sample winner ranked below the out-of-sample median in 69% of splits, and the chosen parameters were the in-sample winner in only 27% of splits. This floor can never be waived.
The optimizer mostly raised size, not edge. notional_fraction went from 0.5 to 0.75 and hold_hours from 48 to 53. lookback_bars was not among the free parameters, even though the review verdict asked to tune only lookback and hold and to keep sizing fixed. The 'optimized' Sharpe gain of 0.44 to 0.66 comes largely from the sizing and path-dependent compounding interacting with the MTM artifact below. Profit factor did not move: 1.228 to 1.228.
The yearly per-trade record contradicts the pre-study's 'positive every year'. This is from the ledger I recomputed from the detail file. Default parameters: 2021 -0.11% (62 trades), 2025 +0.07%, 2026 -0.55%. Optimized: 2021 -0.16%, 2026 -0.07%. The edge sits mainly in 2020 (+2.0 to 2.3% per trade).
Drawdown misses the pre-registered 22%. The realized closed-trade drawdown I recomputed from the ledger is 25.6% at 0.5x and 42.7% at 0.75x. The reported 37.7% MTM figure understates the optimized realized drawdown.
3 of 6 pre-registered predictions were missed: OOS Sharpe 0.51 against a promised 0.7, profit factor 1.23 against 1.3, and drawdown 37.7% against 22%. Deflated Sharpe is 0.936 (below 0.95), the Sharpe CI low is -0.07 (it straddles 0), and the candidate does not survive programme FDR.
Suspected engine MTM artifact; mechanism not independently verified. The daily_returns series has paired -20% to -42% / +25% to +73% days on dates when the ledger shows no open position. Examples: 2022-01-29/30, where there are no trades between 2021-12-26 and 2022-01-31; and the final bar 2026-08-17 (-25% base, -35% optimized), where equity_curve moves only from 246,857 to 245,516. These inflate the reported volatility, CVaR, max drawdown CI and annual_returns (2026 shows -31% to -37%, which is mostly this final-bar print). The runner's daily-return construction needs engine review. It does not change the verdict, which rests on PBO and the ledger.
hard
Benjamini-Hochberg at q=0.10 over 336 programme candidates keeps 8. A candidate that does not survive here is not distinguishable from the programme's own noise, however good its individual statistics look.
Outcome Summary
The bare 7-day-high acceptance long on a single coin clears fees per trade, but its PF of about 1.2 is year-unstable, and optimization mainly raised position size rather than edge. Any restatement should raise PF, for example through a pooled cross-coin panel, rather than re-tuning the lookback, clock or size on one instrument.
It passed backtest review with an 'optimize' verdict. The analyst then abandoned it for overfitting: PBO was 0.69, above the hard 0.5 limit, which cannot be waived. It also missed 3 of 6 pre-registered predictions (OOS Sharpe, PF and drawdown), had a deflated Sharpe of 0.936, did not survive programme FDR, and had negative per-trade years (2021, 2026) that contradicted the pre-study.
A long-only event trade on the OKX ETH USDT perpetual (1H bars): buy the first hourly close above the prior 168-bar closing high and hold for a fixed 48 hours at 0.5x equity notional, with an 8% catastrophe stop and no short side. The thesis was that upside acceptance of the weekly high keeps moving up over the next 48h.
The base backtest (2019-12 to 2026-08) made 312 long trades with a total return of +145.5%, Sharpe 0.44 (CI -0.31 to 1.19), PF 1.23, avg_trade_return_pct 0.90% and max drawdown 21.5%. The optimized run made 295 trades with Sharpe 0.66, PF 1.23, avg trade 1.02% and max drawdown 37.7%, while the holdout gave Sharpe 0.84 on 48 trades against a walk-forward OOS Sharpe of 0.51.
Backtest and paper results are hypothetical. Trading involves risk of loss.