|
| 1 | +# Best Binance Hourly XGB Portfolio Pack |
| 2 | + |
| 3 | +Last updated: 2026-05-04 |
| 4 | + |
| 5 | +## Current Frontier |
| 6 | + |
| 7 | +The current deployed frontier is the aggressive correlation-packed variant: |
| 8 | + |
| 9 | +- Label: `h12_short_corr168_08_aggr2777_dd1998_20260504` |
| 10 | +- Eval window: 2026-01-04 to 2026-05-04, about 120 days |
| 11 | +- Market: Binance spot hourly data, top 36 symbols by recent dollar volume |
| 12 | +- Side: short-only |
| 13 | +- Horizon: 12 hours |
| 14 | +- Positions: 2 active positions, 4 pending entry watchers |
| 15 | +- Selection: `first_trigger` |
| 16 | +- Correlation packing: 168 hourly bars, min 48 return observations, max signed correlation 0.8 |
| 17 | +- Entry allocator: concentrated, max single position fraction 0.8, min second position fraction 0.2 |
| 18 | +- Leverage: 2.55x gross |
| 19 | +- Drawdown entry scaler: start 4.5%, full 15%, floor 32% |
| 20 | +- Fee/slippage realism: 10 bps fee, 5 bps fill buffer, 10 bps force-close slippage, 6.25% margin APR, decision lag 2 |
| 21 | + |
| 22 | +## Current Result |
| 23 | + |
| 24 | +- Monthly return: 27.77% |
| 25 | +- Total return: 165.39% |
| 26 | +- Max drawdown: 19.98% |
| 27 | +- Sortino: 4.85 |
| 28 | +- Exits: 260 |
| 29 | +- Selection score: 870.80 |
| 30 | + |
| 31 | +Artifacts: |
| 32 | + |
| 33 | +- CSV: `analysis/binance_hourly_aggressive_sweep_20260504.csv` |
| 34 | +- HTML review: `analysis/binance_hourly_aggressive_sweep_20260504.html` |
| 35 | +- JSON summary: `analysis/binance_hourly_aggressive_sweep_20260504.json` |
| 36 | + |
| 37 | +Deployed live runner: |
| 38 | + |
| 39 | +- Supervisor program: `binance-hourly-xgb-margin-pack` |
| 40 | +- Launch: `deployments/binance-hourly-xgb-margin-pack/launch.sh` |
| 41 | +- Runner: `scripts/binance_hourly_xgb_margin_trader.py` |
| 42 | +- Current plan artifact: `analysis/binance_hourly_xgb_margin_plan_latest.json` |
| 43 | + |
| 44 | +Live verification on 2026-05-04: |
| 45 | + |
| 46 | +- Binance writer audit passes with one `xgb_hourly_pack` writer and the old Binance trading daemons stopped. |
| 47 | +- Existing margin coverage is `6/6` covered. |
| 48 | +- First live cycle selected `FILUSDT` and `TONUSDT`; both entries filled `0`, were canceled, and post-cycle coverage stayed `6/6` covered. |
| 49 | +- The runner now has a post-cycle settle wait before coverage re-audit to handle transient Binance margin asset state after canceled borrow-style orders. |
| 50 | + |
| 51 | +## Previous Frontier |
| 52 | + |
| 53 | +This is the best corrected Binance hourly XGB result found so far after adding |
| 54 | +direct trailing pairwise correlation gating on top of the short-mode candidate |
| 55 | +ranking and concentrated allocator leverage fixes. |
| 56 | + |
| 57 | +- Eval window: 2026-01-02 to 2026-05-02, about 120 days |
| 58 | +- Market: Binance spot hourly data, top 36 symbols by recent dollar volume |
| 59 | +- Side: short-only |
| 60 | +- Horizon: 12 hours |
| 61 | +- Positions: 2 active positions, 2 pending entry watchers |
| 62 | +- Selection: `first_trigger` |
| 63 | +- Correlation packing: 168 hourly bars, min 48 return observations, max signed correlation 0.8 |
| 64 | +- Entry allocator: concentrated, max single position fraction 0.8, min second position fraction 0.2 |
| 65 | +- Leverage: 2.55x gross |
| 66 | +- Drawdown entry scaler: start 4.5%, full 15%, floor 32% |
| 67 | +- Fee/slippage realism: 10 bps fee, 5 bps fill buffer, 10 bps force-close slippage, 6.25% margin APR, decision lag 2 |
| 68 | + |
| 69 | +## Result |
| 70 | + |
| 71 | +- Monthly return: 27.95% |
| 72 | +- Total return: 168.01% |
| 73 | +- Max drawdown: 29.66% |
| 74 | +- Sortino: 4.09 |
| 75 | +- Exits: 246 |
| 76 | +- Selection score: 852.54 |
| 77 | + |
| 78 | +Artifacts: |
| 79 | + |
| 80 | +- CSV: `analysis/binance_hourly_twopos_h12_short_corr168_08_2795_20260504.csv` |
| 81 | +- HTML review: `analysis/binance_hourly_twopos_h12_short_corr168_08_2795_20260504.html` |
| 82 | +- Trace JSON: `analysis/binance_hourly_twopos_h12_short_corr168_08_2795_20260504.json` |
| 83 | + |
| 84 | +Previous frontier: |
| 85 | + |
| 86 | +- `analysis/binance_hourly_twopos_h12_short_diversified_27pct_20260503.csv` |
| 87 | +- Monthly return 27.18%, total return 161.22%, max drawdown 31.46%, Sortino 3.89, 248 exits. |
| 88 | + |
| 89 | +## Caveats |
| 90 | + |
| 91 | +The current aggressive variant is deployed, but it is still a one-sided short |
| 92 | +strategy. Keep the rollout small and watch live fill quality, borrow behavior, |
| 93 | +exit coverage, and regime drift closely. The previous `27.95%/mo` row crossed |
| 94 | +the monthly PnL target but was not deployed because its max drawdown was still |
| 95 | +near 30% and writer isolation had not yet been cleaned up. |
| 96 | + |
| 97 | +## 2026-05-04 Deploy Path |
| 98 | + |
| 99 | +- Added `scripts/binance_hourly_xgb_margin_trader.py` as the dedicated |
| 100 | + one-cycle inference/deploy runner for this candidate. |
| 101 | +- Dry-run on refreshed data through `2026-05-04T05:00:00Z` selected `0` |
| 102 | + candidates at `2026-05-04T03:00:00Z`; the same was true with live account |
| 103 | + state disabled, so no live order was sent. |
| 104 | +- Live execution is intentionally blocked unless writer isolation is clean, |
| 105 | + data is fresh, exit coverage passes, and `ALLOW_BINANCE_XGB_LIVE_TRADING=1` |
| 106 | + is set. |
| 107 | +- For short entries, the live path places `SELL`/`AUTO_BORROW_REPAY`, watches |
| 108 | + fills, places matching `BUY`/`AUTO_REPAY` exits for filled quantity, and |
| 109 | + cancels unfilled entries by default. |
| 110 | +- Current machine is now deploy-clean for Binance: the old trading daemons are |
| 111 | + stopped and the process audit allows exactly one `xgb_hourly_pack` writer. |
| 112 | + |
| 113 | +## 2026-05-04 Notes |
| 114 | + |
| 115 | +- Pulled upstream XGB research work through `496b47ac`, including `xgbbest.md`, |
| 116 | + `xgbnew/` correlation-packing work, BitBankGo-style worksteal allocation |
| 117 | + probes, and a torch hourly level optimizer. |
| 118 | +- Direct correlation gating worked better than the earlier PC2 bucket heuristic |
| 119 | + when used alone. The best 36-symbol row at `corr_window=168`, |
| 120 | + `corr_max_signed=0.8`, and `2.55x` reached 27.95% monthly with 29.66% DD. |
| 121 | +- Combining direct correlation with the old PC buckets over-pruned the edge. |
| 122 | + A hard `corr_max_signed=0.4` row went negative; `0.8` was the useful setting. |
| 123 | +- Expanding the exact same shape to 60 symbols failed badly |
| 124 | + (`-20%/mo`, DD above 75%). More pairs need learned/rolling symbol filters |
| 125 | + before they are useful. |
| 126 | +- The pulled long-only 48h hourly level optimizer was refuted as-is on Binance: |
| 127 | + BTCUSDT, ETHUSDT, and SOLUSDT all compounded near -100% in the smoke run. |
| 128 | + This direction still needs side-aware long/short choice and portfolio-level |
| 129 | + risk controls before it is worth comparing to the XGB pack. |
| 130 | + |
| 131 | +## Next Ideas |
| 132 | + |
| 133 | +- Reduce one-sided short risk with long/short hedging that does not destroy the |
| 134 | + short edge. |
| 135 | +- Keep improving correlation-aware packing: try soft penalties instead of hard |
| 136 | + skips, and train a rolling symbol filter for the 60-symbol universe. |
| 137 | +- Expand beyond 36 symbols and let the selector opportunistically trade more |
| 138 | + pairs while constraining liquidity. |
| 139 | +- Combine hourly and daily context: train hourly execution levels against |
| 140 | + 24-48 hour forecast windows, then fit buy/sell levels that maximize realized |
| 141 | + simulator PnL. |
| 142 | +- Explore fast retrain/test-time adaptation over 1-2 day windows as part of the |
| 143 | + simulated algorithm, not as offline leakage. |
0 commit comments