Skip to content
All strategies

Strategies

SOL cross-venue perpetual residual convergence

Outcome: Abandoned

SolCrossVenueResidualConvergence

Outcome Summary

The strategy tried to trade convergence between Bybit and OKX SOL perpetuals after a rolling residual screen. Its sandbox smoke test lost 3.04%. After three iterations, QA found an entry cost issue and a risk of leaving one leg exposed, so the run was abandoned during verification. The required outbox file could not be written because the workspace is read-only.

Hypothesis

Adapt the source's correlation and cointegration screen to SOLUSDT.BYBIT and SOLUSDT.OKX on synchronized 1-hour bars. Fit a 90-day rolling residual model using completed bars and refresh it monthly. Trade only when correlation is at least 0.98 and the residual ADF statistic is below -3.34. Match SOL exposure across the long and short legs; cap combined gross exposure at 20% of equity.

Removed an added 0.55% dislocation floor that prevented all entries and reduced the configurable residual threshold to 1.5 standard deviations. Correlation and ADF screens remain unchanged. The required outbox file could not be written because the workspace is read-only.

verification_loop: Verification failed (Layer 4 — QA review) [class=code_defect]: - [edge_concern] The sandbox lost 3.04%, but that smoke test cannot establish profitability. - [critical] The zero minimum dislocation permits entries whose expected spread convergence cannot cover the approximately 0.21% combined Bybit and OKX taker round-trip cost, before slippage. (line 179) — fix: Require a fee-aware minimum expected spread move, while retaining the z-score trigger. - [critical] After pair_fault is set, _flatten_pair refuses further cleanup. An entry that fills after cancellation can leave one leg exposed because subsequent fill callbacks cannot trigger another flatten. (line 107) — fix: Recheck and flatten both venues after every relevant order or position event until all entry orders are closed and both positions are flat.

Implementation

Monthly refreshed 90-day SOL Bybit–OKX residual convergence model on synchronized hourly bars, with equal-quantity opposing legs and 20% combined gross exposure cap.

Verification Results

Verification failed (Layer 4 — QA review) [class=code_defect]: - [edge_concern] The sandbox lost 3.04%, but that smoke test cannot establish profitability. - [critical] The zero minimum dislocation permits entries whose expected spread convergence cannot cover the approximately 0.21% combined Bybit and OKX taker round-trip cost, before slippage. (line 179) — fix: Require a fee-aware minimum expected spread move, while retaining the z-score trigger. - [critical] After pair_fault is set, _flatten_pair refuses further cleanup. An entry that fills after cancellation can leave one leg exposed because subsequent fill callbacks cannot trigger another flatten. (line 107) — fix: Recheck and flatten both venues after every relevant order or position event until all entry orders are closed and both positions are flat.

Iteration History

Verification failed (Layer 4 — QA review) [class=code_defect]: - [edge_concern] Four sandbox trades are insufficient to judge profitability. Reported average trade return also disagrees in sign with average trade PnL. - [critical] The signal measures convergence of a fitted residual, but equal SOL quantities trade the raw Bybit-minus-OKX spread. When the fitted slope differs from one, the screened residual and traded spread can move differently. (line 133) — fix: Fit and screen the equal-quantity spread, or……Show moreShow less

Verification failed (Layer 4 — QA review) [class=code_defect]: - [edge_concern] Four sandbox trades are insufficient to judge profitability. Reported average trade return also disagrees in sign with average trade PnL. - [critical] The signal measures convergence of a fitted residual, but equal SOL quantities trade the raw Bybit-minus-OKX spread. When the fitted slope differs from one, the screened residual and traded spread can move differently. (line 133) — fix: Fit and screen the equal-quantity spread, or require the fitted slope to be sufficiently close to one. - [critical] The venue orders are independent. A rejection, partial fill, or delay on either leg can leave an unhedged SOL position until a later bar. (line 143) — fix: Track fills on both legs and promptly hedge or flatten unmatched quantities. - [critical] A 0.25% spread convergence yields about 0.125% gross per equal-size leg before taker round-trip fees of 0.11% on Bybit and 0.10% on OKX. It does not provide the required 0.15% per-trade cushion. (line 28) — fix: Derive the minimum dislocation from both venues’ fees, spread, impact, and the required net return.

Verification failed (Layer 3 — sandbox backtest): No trades produced Bar type used: SOLUSDT.BYBIT-1-HOUR-LAST-EXTERNAL, Bars processed: 19993 Diagnostics: should_enter() returned a side 0 times over 19974 evaluated bars -> your ENTRY CONDITION never triggered. Loosen the entry logic / thresholds. Ensure your strategy produces trades with the given data and parameters.

Outcome Summary

Require a fee-aware minimum spread move and continue checking both legs until orders are closed and positions are flat.

After three iterations, Layer 4 QA failed verification because entries could target moves below the approximately 0.21% combined taker round-trip cost, and a late fill could leave one leg exposed. Later stages were not reached.

It sought convergence between Bybit and OKX SOL perpetual prices using synchronized hourly bars and matched long and short exposure.

The sandbox smoke test lost 3.04%. No return, Sharpe, or trade count was provided in a backtest report.

Abandon Reason

verification_loop: Verification failed (Layer 4 — QA review) [class=code_defect]: - [edge_concern] The sandbox lost 3.04%, but that smoke test cannot establish profitability. - [critical] The zero minimum dislocation permits entries whose expected spread convergence cannot cover the approximately 0.21% combined Bybit and OKX taker round-trip cost, before slippage. (line 179) — fix: Require a fee-aware minimum expected spread move, while retaining the z-score trigger. - [critical] After pair_fault is set, _flatten_pair refuses further cleanup. An entry that fills after cancellation can leave one leg exposed because subsequent fill callbacks cannot trigger another flatten. (line 107) — fix: Recheck and flatten both venues after every relevant order or position event until all entry orders are closed and both positions are flat.

Analysis

Intraday Dynamic Pairs Trading using Correlation and Cointegration Approach

Backtest and paper results are hypothetical. Trading involves risk of loss.