策略 first_money_btc_utc_weak_cell_v1 · 2025-05 ~ 2026-05 回测 · 实盘 tiny-live 100 USDC
页面生成: 2026-05-06 14:34:11 北京时间
| 运行状态 | 等待入场 |
| 下次入场 (UTC) | 2026-05-07 01:00 UTC |
| 下次入场 (北京) | 2026-05-07 09:00 |
| 预计出场 (UTC) | 2026-05-07 05:00 UTC |
| 预计出场 (北京) | 2026-05-07 13:00 |
| 方向 | SHORT |
| Kill Switch | armed |
| 缓存最新 bar | 2026-05-06 06:30 UTC |
| Month | 2026-05 |
| Weekday | Thu (3) |
| Hour (UTC) | 1:00 |
| 训练均值 (bps) | -59.94 |
| 训练事件数 | 36 |
| 训练起始 | 2026-03-02 00:00 UTC |
| 训练结束 | 2026-05-01 00:00 UTC |
| Veto 高波 | 否 — 允许 |
| Gate 通过 | ✓ |
| Timer Unit | 最近/下次触发 |
|---|---|
momentum-rank32c-kline-cache.service | Wed |
momentum-rank32c-live-runner.service | Wed |
— | — |
listed. | 2 |
too. | Pass |
每月回顾过去 60 个自然日 的 BTCUSDT 15 分钟 K 线,按 (weekday, hour UTC) 分组统计未来 16 根 bar 的 long 收益率。 选取均值最低(最弱)的 cell,在当月该 weekday/hour 对应时刻 做空 BTCUSDT,持仓 4 小时(16 根 15m bar),到期时间止损出场。
策略仅做空、不选币、无前瞻 — universe 固定 BTCUSDT,cell 选择严格使用历史数据。
| 标的 | BTCUSDT (Binance Futures) |
| K 线周期 | 15m |
| 方向 | 仅做空 (short only) |
| 持仓时间 | 16 bars = 4 小时 |
| 训练窗口 | 前 60 个自然日 |
| Cell 选择 | 最弱 (weekday, hour) cell by long return |
| 回测成本假设 | 8 bps round-trip |
| 实盘成本假设 | 12 bps round-trip |
| Veto 规则 | 前 24h 绝对收益 > 180d 均值 + 2σ 时跳过 |
| Gate 规则 | cell train mean < -round_trip_cost_bps 时才开仓 |
| No-overlap | 同一时间只允许一笔持仓 |
| 单笔亏损上限 | -1.2% |
| 5 笔累计上限 | -2.5% |
| 价差警戒 | > 8 bps |
| 缺 bar 容忍 | > 2 根 |
| 滑点警戒 | > 12 bps |
| 失败条件 | ≥8 笔 或 45 天后 realized mean net bps ≤ 0 |
放行决策: launch_tiny_live — All release blockers cleared; next action is tiny-live falsification.
| 检查项 | 证据 | 结果 |
|---|---|---|
| No future returns/months/volume/current active list/hindsight hot coin | Universe is fixed BTCUSDT; monthly selection uses only bars before target month start. | pass |
| Monthly selection strictly as-of | `select_month_cell()` trains on `[month_start - 60d, month_start)`. | pass |
| Entry/exit/veto/no-overlap do not read future bars | Order plan uses scheduled entry, fixed exit, current/prior veto state, no overlap protection fields. | pass |
| Current month plan independently reproducible | Current cache must include the completed bar before current month start. | pass |
| Can predict next trade and exit | Requires selected cell and next entry/exit timestamps. | pass |
| Residual/duplicate-open protection | State/status initialize `open_position=false`, `duplicate_entry_key_guard=true`, `allow_live_orders` follows binary decision. | pass |
| Live-vs-shadow accounting fields | `live_vs_shadow.csv` header includes signal/entry/exit/slippage/fees/net fields. | pass |
| Month | 交易数 | 赢 | 亏 | 均值 (bps) | 累计 % |
|---|---|---|---|---|---|
| 2025-05 | 5 | 1 | 4 | -39.35 | -1.97% |
| 2025-06 | 5 | 4 | 1 | +16.09 | -1.16% |
| 2025-07 | 5 | 1 | 4 | -18.33 | -2.08% |
| 2025-08 | 5 | 2 | 3 | -22.72 | -3.22% |
| 2025-09 | 5 | 2 | 3 | -10.42 | -3.74% |
| 2025-10 | 4 | 2 | 2 | +33.65 | -2.39% |
| 2025-11 | 3 | 3 | 0 | +271.12 | +5.74% |
| 2025-12 | 4 | 2 | 2 | -21.33 | +4.89% |
| 2026-01 | 5 | 2 | 3 | +42.36 | +7.01% |
| 2026-02 | 4 | 2 | 2 | +39.26 | +8.58% |
| 2026-03 | 4 | 2 | 2 | +87.81 | +12.09% |
| 2026-04 | 5 | 1 | 4 | -80.55 | +8.06% |
| Month | 入场时间 (北京) | Cell | 入场价 | 出场价 | 训练均值 | 净收益 |
|---|---|---|---|---|---|---|
| 2025-05 | 2025-05-01 20:00 | Thu 12:00 | 96130.0 | 96793.9 | -93.89 | -77.06 bps |
| 2025-05 | 2025-05-08 20:00 | Thu 12:00 | 99369.9 | 100730.9 | -93.89 | -144.96 bps |
| 2025-05 | 2025-05-15 20:00 | Thu 12:00 | 102335.3 | 103211.2 | -93.89 | -93.59 bps |
| 2025-05 | 2025-05-22 20:00 | Thu 12:00 | 110944.0 | 111251.0 | -93.89 | -35.67 bps |
| 2025-05 | 2025-05-29 20:00 | Thu 12:00 | 108740.0 | 106972.6 | -93.89 | +154.53 bps |
| 2025-06 | 2025-06-02 01:00 | Sun 17:00 | 104984.4 | 104897.0 | -49.17 | +0.33 bps |
| 2025-06 | 2025-06-09 01:00 | Sun 17:00 | 106133.3 | 106098.9 | -49.17 | -4.76 bps |
| 2025-06 | 2025-06-16 01:00 | Sun 17:00 | 105525.8 | 104688.8 | -49.17 | +71.32 bps |
| 2025-06 | 2025-06-23 01:00 | Sun 17:00 | 99607.6 | 99493.3 | -49.17 | +3.48 bps |
| 2025-06 | 2025-06-30 01:00 | Sun 17:00 | 107494.5 | 107300.1 | -49.17 | +10.08 bps |
| 2025-07 | 2025-07-04 01:00 | Thu 17:00 | 109236.7 | 109902.8 | -48.07 | -68.98 bps |
| 2025-07 | 2025-07-11 01:00 | Thu 17:00 | 112596.4 | 113426.0 | -48.07 | -81.68 bps |
| 2025-07 | 2025-07-18 01:00 | Thu 17:00 | 118550.3 | 119428.8 | -48.07 | -82.10 bps |
| 2025-07 | 2025-07-25 01:00 | Thu 17:00 | 118498.0 | 118678.0 | -48.07 | -23.19 bps |
| 2025-07 | 2025-08-01 01:00 | Thu 17:00 | 118492.0 | 116450.1 | -48.07 | +164.32 bps |
| 2025-08 | 2025-08-01 19:00 | Fri 11:00 | 114697.8 | 115568.7 | -43.60 | -83.93 bps |
| 2025-08 | 2025-08-08 19:00 | Fri 11:00 | 116496.5 | 116441.7 | -43.60 | -3.30 bps |
| 2025-08 | 2025-08-15 19:00 | Fri 11:00 | 118825.0 | 117354.9 | -43.60 | +115.72 bps |
| 2025-08 | 2025-08-22 19:00 | Fri 11:00 | 112489.0 | 115744.5 | -43.60 | -297.41 bps |
| 2025-08 | 2025-08-29 19:00 | Fri 11:00 | 109949.8 | 108154.4 | -43.60 | +155.29 bps |
| 2025-09 | 2025-09-02 00:00 | Mon 16:00 | 108737.9 | 109178.7 | -55.25 | -48.54 bps |
| 2025-09 | 2025-09-09 00:00 | Mon 16:00 | 112573.6 | 112050.0 | -55.25 | +38.51 bps |
| 2025-09 | 2025-09-16 00:00 | Mon 16:00 | 114788.1 | 115246.7 | -55.25 | -47.95 bps |
| 2025-09 | 2025-09-23 00:00 | Mon 16:00 | 112768.7 | 112072.8 | -55.25 | +53.71 bps |
| 2025-09 | 2025-09-30 00:00 | Mon 16:00 | 113752.0 | 114204.9 | -55.25 | -47.81 bps |
| 2025-10 | 2025-10-02 22:00 | Thu 14:00 | 119559.6 | 119869.1 | -49.31 | -33.89 bps |
| 2025-10 | 2025-10-09 22:00 | Thu 14:00 | 122357.0 | 120915.5 | -49.31 | +109.81 bps |
| 2025-10 | 2025-10-16 22:00 | Thu 14:00 | 110794.7 | 108220.5 | -49.31 | +224.34 bps |
| 2025-10 | 2025-10-23 22:00 | Thu 14:00 | 109450.0 | 111175.6 | -49.31 | -165.66 bps |
| 2025-11 | 2025-11-06 21:00 | Thu 13:00 | 102507.1 | 100830.5 | -58.93 | +155.56 bps |
| 2025-11 | 2025-11-13 21:00 | Thu 13:00 | 103100.0 | 100580.3 | -58.93 | +236.39 bps |
| 2025-11 | 2025-11-20 21:00 | Thu 13:00 | 91797.3 | 87855.5 | -58.93 | +421.40 bps |
| 2025-12 | 2025-12-04 21:00 | Thu 13:00 | 92947.8 | 92389.9 | -141.94 | +52.02 bps |
| 2025-12 | 2025-12-11 21:00 | Thu 13:00 | 90000.7 | 89704.2 | -141.94 | +24.94 bps |
| 2025-12 | 2025-12-18 21:00 | Thu 13:00 | 87215.1 | 87984.6 | -141.94 | -96.23 bps |
| 2025-12 | 2025-12-25 21:00 | Thu 13:00 | 87533.8 | 88042.1 | -141.94 | -66.07 bps |
| 2026-01 | 2026-01-01 23:00 | Thu 15:00 | 87917.6 | 88165.2 | -130.20 | -36.16 bps |
| 2026-01 | 2026-01-08 23:00 | Thu 15:00 | 89978.5 | 91070.3 | -130.20 | -129.34 bps |
| 2026-01 | 2026-01-15 23:00 | Thu 15:00 | 96013.6 | 95806.8 | -130.20 | +13.54 bps |
| 2026-01 | 2026-01-22 23:00 | Thu 15:00 | 89055.1 | 89295.4 | -130.20 | -34.98 bps |
| 2026-01 | 2026-01-29 23:00 | Thu 15:00 | 86978.8 | 83440.8 | -130.20 | +398.77 bps |
| 2026-02 | 2026-02-02 21:00 | Mon 13:00 | 77947.5 | 78588.8 | -52.33 | -90.27 bps |
| 2026-02 | 2026-02-09 21:00 | Mon 13:00 | 69109.7 | 70049.1 | -52.33 | -143.93 bps |
| 2026-02 | 2026-02-16 21:00 | Mon 13:00 | 69739.3 | 67854.1 | -52.33 | +262.32 bps |
| 2026-02 | 2026-02-23 21:00 | Mon 13:00 | 66250.0 | 65343.0 | -52.33 | +128.91 bps |
| 2026-03 | 2026-03-05 22:00 | Thu 14:00 | 72435.5 | 70668.5 | -138.55 | +235.94 bps |
| 2026-03 | 2026-03-12 22:00 | Thu 14:00 | 69930.4 | 70167.3 | -138.55 | -41.88 bps |
| 2026-03 | 2026-03-19 22:00 | Thu 14:00 | 69866.2 | 69820.0 | -138.55 | -1.39 bps |
| 2026-03 | 2026-03-26 22:00 | Thu 14:00 | 69615.8 | 68456.2 | -138.55 | +158.57 bps |
| 2026-04 | 2026-04-02 22:00 | Thu 14:00 | 66227.3 | 66641.4 | -163.46 | -70.53 bps |
| 2026-04 | 2026-04-09 22:00 | Thu 14:00 | 70765.2 | 72307.0 | -163.46 | -225.88 bps |
| 2026-04 | 2026-04-16 22:00 | Thu 14:00 | 73756.0 | 74301.6 | -163.46 | -81.97 bps |
| 2026-04 | 2026-04-23 22:00 | Thu 14:00 | 77486.6 | 77715.1 | -163.46 | -37.49 bps |
| 2026-04 | 2026-04-30 22:00 | Thu 14:00 | 76370.4 | 76209.2 | -163.46 | +13.11 bps |
| 入场 (北京) | 出场 (北京) | 方向 | 名义 | 入场价 | 出场价 | 出场原因 | 净收益 |
|---|---|---|---|---|---|---|---|
| 暂无实盘交易记录 — 等待首次入场 | |||||||
| 时间 | 事件 | 详情 |
|---|---|---|
| 暂无事件 | ||
暂无对照数据 — 首笔实盘交易完成后自动生成。
armed
触发后自动停止所有下单
| 最大回撤 | 4.77% |
| 最差单笔 | -297.4 bps |
| 最佳单笔 | 421.4 bps |
| Sharpe (月频) | 0.11 |
| 盈利月 | 6 |
| 亏损月 | 6 |
| 月均交易 | 4.5 |
strategy_id: "rank32c_btc_utc_weak_cell_v1" mode: "launch_tiny_live" allow_live_orders: true symbol: "BTCUSDT" bar_interval: "15m" train_days: 60 hold_bars: 16 side: "short" bottom_k: 1 no_overlap: true round_trip_cost_bps: 8.0 entry_delay_bars: 0 veto: "prior_24h_abs_move_gt_trailing_180d_mean_plus_2std" gate: "selected_cell_train_mean_long_bps < -round_trip_cost_bps" notional_usdc: 100.0 max_single_trade_risk_pct: 1.2 runner_command: "python3 scripts/run_rank32c_btc_utc_weak_cell_tiny_live.py --config config/strategies/rank32c_btc_utc_weak_cell_v1_live.yaml" order_plan_path: "reports/artifacts/rank32c_pre_live_gate/order_plan.json" state_path: "reports/artifacts/rank32c_pre_live_gate/state.json" status_path: "reports/artifacts/rank32c_pre_live_gate/status.json" closed_trade_ledger: "reports/artifacts/rank32c_pre_live_gate/closed_trades.csv" live_vs_shadow_ledger: "reports/artifacts/rank32c_pre_live_gate/live_vs_shadow.csv" kill_switch: "block if stale data, open position exists, duplicate entry key exists, 5 closed trades net <= -2.5%, any single trade <= -1.2%, spread > 8bps, missing bars > 2, slippage > 12bps, or exit ack missing" current_allow_open: true
strategy_id: "rank32c_btc_utc_weak_cell_v1" mode: "tiny_live_candidate" symbol: "BTCUSDT" bar_interval: "15m" universe_rule: "fixed BTCUSDT only; eligible after Binance UM onboard timestamp; no current-volume or winner selection" baseline: "monthly trailing 60d weekday-hour weak-cell short" entry: "at selected weekday/hour bar open; production should place reduce-only-disabled market/IOC with max spread guard" exit: "time stop after 16 bars" cost_assumption_bps_round_trip: 8.0 tiny_live_notional_usdc: 100 max_concurrent_positions: 1 expected_trades_per_month: 4.37 minimum_validation_period_days: 45 kill_switch: "disable if 5 closed trades net <= -2.5%, any single trade <= -1.2%, spread > 8bps, missing bars > 2, or execution slippage > 12bps" monitor_fields: "signal_ts, selected_dow_hour, train_mean_long_bps, entry_ack_ts, entry_price, exit_ack_ts, exit_price, realized_slippage_bps, fees_bps, net_ret, veto_state" failure_condition: "after >=8 trades or 45d, stop if realized mean net bps <= 0 or live-vs-backtest slippage gap > 8bps"
from __future__ import annotations
import io
import zipfile
from dataclasses import dataclass
from pathlib import Path
import pandas as pd
STRATEGY_ID = "rank32c_btc_utc_weak_cell_v1"
SYMBOL = "BTCUSDT"
ONBOARD_UTC = "2019-09-25T08:00:00Z"
BAR_MINUTES = 15
TRAIN_DAYS = 60
HOLD_BARS = 16
BOTTOM_K = 1
ROUND_TRIP_COST_BPS = 8.0
EXECUTION_REALISTIC_COST_BPS = 12.0
EXECUTION_REALISTIC_ENTRY_DELAY_BARS = 1
VETO_LOOKBACK_DAYS = 180
VETO_SIGMA = 2.0
GATE_EDGE_MULT = 1.0
TINY_LIVE_NOTIONAL_USDC = 100.0
MAX_SINGLE_TRADE_LOSS_PCT = 1.2
@dataclass(frozen=True)
class StrategySpec:
strategy_id: str = STRATEGY_ID
symbol: str = SYMBOL
train_days: int = TRAIN_DAYS
hold_bars: int = HOLD_BARS
bottom_k: int = BOTTOM_K
round_trip_cost_bps: float = ROUND_TRIP_COST_BPS
use_veto: bool = True
use_gate: bool = True
entry_delay_bars: int = 0
# Completion Audit: first_money_btc_utc_weak_cell_v1 ## Objective Deliver a binary final pre-live release gate for `first_money_btc_utc_weak_cell_v1`: either `launch_tiny_live` or `reject_before_live`, with no further tuning, research expansion, or discretionary promotion. ## Requirement Checklist | Requirement | Evidence | Status | | --- | --- | --- | | Freeze one unique strategy spec | `src/momentum/strategies/first_money_btc_utc_weak_cell.py`; `config/strategies/first_money_btc_utc_weak_cell_v1_live.yaml` | pass | | Use a unified signal path for replay and order planning | `run_replay()` and `build_order_plan()` in `src/momentum/strategies/first_money_btc_utc_weak_cell.py`; `scripts/build_first_money_pre_live_release_gate.py` imports both | pass | | Produce current-month order plan | `reports/artifacts/first_money_pre_live_gate/order_plan.json` | pass_with_blocker | | Reject if current plan cannot identify next trade and exit | `order_plan.json` has `selected_cell=null`, `next_entry_ts=null`, `exit_ts=null`; `release_decision.json` is `reject_before_live` | pass | | Honesty audit against leakage and live-readiness rules | `reports/artifacts/first_money_pre_live_gate/release_gate_audit.md` | pass | | Startup package exists | live config, guarded runner, state/status files, ledgers, runtime order-plan guard | pass | | Live orders blocked when release decision rejects | `allow_live_orders: false`; runner exits with `reason=allow_live_orders_false` | pass | | Machine-readable final decision | `reports/artifacts/first_money_pre_live_gate/release_decision.json` | pass | ## Hard Blockers - `stale_bar_cache_for_current_month_selection` - `cannot_predict_next_entry_exit` Local BTCUSDT 15m cache ends at `2026-04-11T23:45:00Z`; the May 2026 as-of monthly selection requires the completed bar through `2026-04-30T23:45:00Z`. ## Verification - `python3 -m py_compile src/momentum/strategies/first_money_btc_utc_weak_cell.py scripts/build_first_money_pre_live_release_gate.py scripts/run_first_money_btc_utc_weak_cell_tiny_live.py` - `python3 scripts/build_first_money_pre_live_release_gate.py` - `python3 -m json.tool reports/artifacts/first_money_pre_live_gate/release_decision.json` - `python3 -m json.tool reports/artifacts/first_money_pre_live_gate/order_plan.json` - `python3 scripts/run_first_money_btc_utc_weak_cell_tiny_live.py --config config/strategies/first_money_btc_utc_weak_cell_v1_live.yaml` ## Final Decision `reject_before_live`
Rank32c Live Dashboard · Generated 2026-05-06 14:34:11 北京时间 · ← Back to Hub