Capture true daily OHLC ranges end-to-end through the binance/crypto data
pipeline so the warehouse `features` table stores real high/low instead of
the degenerate high=low=close. This unlocks real Corwin-Schultz measured
spreads for the binance book.
- crypto_fetch._klines: extract HIGH (kline idx2) and LOW (idx3) per row;
return (day, close, high, low, qvol). fetch_crypto_pit writes high/low into
the npz (keys: day, close, high, low, qvol, funding).
- normalize_crypto: new optional (high, low) args; uses real H/L when given,
falls back to high=low=close otherwise (backward-compat for old npz/callers).
- Readers (ingest_crypto_pit + ingest-warehouse CLI crypto branch): read
high/low from npz when present, else fall back to close — old npz without
high/low still ingest, no crash.
- close (and thus combined-book returns) unchanged; only high/low are added.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>