# QUEUE-09 — Long-short construction: capture the long-short edge net of costs **Status:** QUEUED · **Priority:** P2 · **Effort:** custom strategy module + run ## Hypothesis (prove) The compact stochastic signal's long-short spread is the real edge (L/S ann Sharpe 4.54, exp 24; "edge is long-short, not long-only" — chat-ideas.md), but all canonical constructions are long-only (TopkDropout buys topk, drops, holds). A market-neutral book (long topk, short bottom topk) should realize more of the spread net of costs than the long-only book, IF short-side financing + doubled turnover cost stays below the added spread capture. ## Change vs exp-26 reference (ONE variable) - **Strategy**: long-only TopkDropout (topk 10, n_drop 1) → custom `TopBottomDropoutStrategy` (long topk by rank, short bottom topk, equal weight per side, same risk_degree), realized in a workflow with a cost model that includes both sides (open/close cost symmetric). - All signal/config unchanged. ## Acceptance - `net_IR > 0.21` AND `net_ann_return > +2.13%` AND `total_cost` within ~2× the reference (doubled side count is the structural cost of this construction). - Watch: benchmark neutrality (SPY beta ≈ 0) as a secondary sanity metric. ## Execution prerequisites 1. New contrib module `tac_qlib/contrib/strategy/top_bottom.py` (`TopBottomDropoutStrategy` subclassing `BaseSignalStrategy`), copy to the venv site-packages copy. 2. Workflow YAML wiring the strategy; PortAnaRecord benchmark SPY. 3. Trace + run + snapshot.