Strategies
Poke-for-Bargain Liquidity Provision After Forced-Selling Shocks: Stepped Maker Bids Below the Close of a >=3-Sigma High-Volume Down Hour, 12h Exit (OKX USDT perps ADA/DOGE/AVAX/DOT, 1H, long-only)
Outcome: Abandoned
OkxForcedSellingSteppedMakerBids
Outcome Summary
The strategy placed stepped maker bids after unusually large, high-volume down hours. Its sandbox run closed 294 positions averaging -0.378% per position. QA found two stop-related mismatches, so verification failed and the run was abandoned before a full backtest or optimization.
Hypothesis
verification_loop: Verification failed (Layer 4 — QA review) [class=hypothesis_mismatch]: - [edge_concern] The sandbox recorded 294 closed positions with an average return of -0.378% per position. The full backtest should assess whether rebounds cover trading costs; this result does not determine the correctness verdict. - [critical] The hypothesis specifies a 3-sigma stop, but the fixed configuration uses 4.0. This changes both the exit threshold and risk-based position size. (line 123) — fix: Set the fixed stop_sigma parameter to 3.0 and use it consistently for sizing and exits. - [critical] The code checks whether the hourly low breached the stop only after the bar closes, then submits a market exit. It therefore does not enforce the stated stop at the breached level. (line 124) — fix: Place a reduce-only stop-market order when the bid fills, and cancel it before a time-based exit.
Implementation
Long-only liquidity provision on OKX USDT perps (ADA primary; DOGE/AVAX/DOT extra legs, 1H). Each instrument triggers on its own when an hour's log return is <= -shock_k x the trailing 720-hour sigma and its volume is >= 3x the trailing 168-hour median. It then posts a stepped post-only maker bid ladder over 3 bars: trigger close x exp(-1.0*sigma*depth_scale), then x exp(-0.5*sigma*depth_scale), then the trigger close. Each unfilled bid is cancelled and raised; after step 3 the event is skipped, never chased. Exit is a market order after hold_bars hours or a 4-sigma stop. Risk is 1% per event, capped at 25% notional per name and 60% total, with a 24h cooldown per name.
Verification Results
Verification failed (Layer 4 — QA review) [class=hypothesis_mismatch]: - [edge_concern] The sandbox recorded 294 closed positions with an average return of -0.378% per position. The full backtest should assess whether rebounds cover trading costs; this result does not determine the correctness verdict. - [critical] The hypothesis specifies a 3-sigma stop, but the fixed configuration uses 4.0. This changes both the exit threshold and risk-based position size. (line 123) — fix: Set the fixed stop_sigma parameter to 3.0 and use it consistently for sizing and exits. - [critical] The code checks whether the hourly low breached the stop only after the bar closes, then submits a market exit. It therefore does not enforce the stated stop at the breached level. (line 124) — fix: Place a reduce-only stop-market order when the bid fills, and cancel it before a time-based exit.
Iteration History
sandbox_timeout: Verification failed (Layer 3 — sandbox backtest): smoke test exceeded the 300s wall-clock limit on a ~20000-bar window (833 days of ADAUSDT.OKX-1-HOUR-LAST-EXTERNAL). This almost always means per-bar work that scales with history — e.g. rescanning the full funding/supplementary series, or rebuilding a list and calling min()/sorted() inside calculate_signal()/on_bar() on every bar. Precompute sorted timestamp arrays ONCE in __init__ and use bisect, or cache lookups keyed by timestamp, so per-bar cost is O(log n) not O(n).
Outcome Summary
Match the stop to the hypothesis and enforce it with an order when a bid fills.
After two iterations, Layer 4 QA verification failed: the configured stop was 4 sigma instead of the proposed 3 sigma, and the code submitted a market exit only after a bar breached the stop. Later stages were not reached.
The strategy tried to buy forced-selling shocks in four OKX USDT perpetuals using stepped maker bids.
The sandbox recorded 294 closed positions averaging -0.378% per position. No full backtest or optimization report is present.
Abandon Reason
verification_loop: Verification failed (Layer 4 — QA review) [class=hypothesis_mismatch]: - [edge_concern] The sandbox recorded 294 closed positions with an average return of -0.378% per position. The full backtest should assess whether rebounds cover trading costs; this result does not determine the correctness verdict. - [critical] The hypothesis specifies a 3-sigma stop, but the fixed configuration uses 4.0. This changes both the exit threshold and risk-based position size. (line 123) — fix: Set the fixed stop_sigma parameter to 3.0 and use it consistently for sizing and exits. - [critical] The code checks whether the hourly low breached the stop only after the bar closes, then submits a market exit. It therefore does not enforce the stated stop at the breached level. (line 124) — fix: Place a reduce-only stop-market order when the bid fills, and cancel it before a time-based exit.
Analysis
高频交易策略之Poke for bargain
Backtest and paper results are hypothetical. Trading involves risk of loss.