KarmaStrategy J — v9
BTC Futures 3x Leverage | BB Regime + Bottom Signals + MPI Exit | Commit 3199c3d
主流程 — 每根 K 棒 (next)
flowchart TD
START["每根 K 棒 (1h)"] --> UPDATE["更新 pf_peak / MPI window\n計算 bottom signals\n計算 MPI exit_mult"]
UPDATE --> IS_SHORT{"目前持空?"}
IS_SHORT -->|是| SHORT_MGR["空單管理"]
IS_SHORT -->|否| REBAL_CHECK{"距上次 rebal\n>= 24h?"}
REBAL_CHECK -->|否| SKIP["跳過本棒"]
REBAL_CHECK -->|是| REGIME["更新 Regime"]
REGIME --> ENTER_SHORT{"BEAR regime\nMPI(12h) > 65\nprice < SMA(200)?"}
ENTER_SHORT -->|是| DO_SHORT["開空 / 先平多"]
ENTER_SHORT -->|否| SCALP_CHECK{"MPI scalp\nexit 觸發?"}
SCALP_CHECK -->|是| CLEAR_ENTRY["清除 entry tracking"]
SCALP_CHECK -->|否| LONG_SIZE["計算多頭目標倉位"]
CLEAR_ENTRY --> LONG_SIZE
LONG_SIZE --> APPLY_CAPS["套用 DD cap + 3x 硬上限"]
APPLY_CAPS --> EXECUTE{"目標 vs 當前\n差距 > 5%?"}
EXECUTE -->|是| BUY_SELL["買入 / 賣出 調整"]
EXECUTE -->|否| SKIP
style START fill:#1f6feb,color:#fff
style SHORT_MGR fill:#da3633,color:#fff
style DO_SHORT fill:#da3633,color:#fff
style BUY_SELL fill:#238636,color:#fff
style SKIP fill:#30363d,color:#8b949e
底部訊號偵測 — _count_signals()
flowchart LR
subgraph "Level 1 (weak)"
A1["ARI > 3"]
B1["ob_dif > 3000"]
C1["skew_d14 > 15"]
D1["usdc_prem < -0.50"]
end
subgraph "Level 2 (strong)"
A2["ARI > 5"]
B2["ob_dif > 4000"]
C2["skew_d14 > 25"]
D2["same as L1"]
end
A1 & B1 & C1 & D1 --> COUNT["weak + strong = total"]
A2 & B2 & C2 & D2 --> COUNT
COUNT --> SIG_RESULT{"total signals"}
SIG_RESULT -->|0| NEUTRAL["MPI Neutral Sizing"]
SIG_RESULT -->|1-2| POS_70["0.70x"]
SIG_RESULT -->|"3+ (weak)"| POS_200["2.00x"]
SIG_RESULT -->|"strong >= 1"| POS_200S["2.00x"]
SIG_RESULT -->|"strong >= 2"| POS_300["3.00x"]
style A2 fill:#da3633,color:#fff
style B2 fill:#da3633,color:#fff
style C2 fill:#da3633,color:#fff
style POS_300 fill:#238636,color:#fff
Regime 切換 — BB(2000h, 1.3σ)
stateDiagram-v2
[*] --> BEAR: 預設
BEAR --> BULL: price < BB_lower\nAND (strong >= 1 OR total >= 3)
BULL --> BEAR: price > BB_upper\nAND MPI(48h) > 60
BULL --> BULL: 維持
BEAR --> BEAR: 維持
note right of BULL
多頭模式
MPI neutral sizing 全開
允許最大 3x 做多
end note
note right of BEAR
空頭模式
MPI neutral cap = 0.30x
允許做空
end note
MPI Neutral Sizing — 無訊號時的倉位
flowchart LR
MPI["MPI raw value"] --> T1{"<= 5"}
T1 -->|是| S1["3.0x 🟢🟢🟢\n80% win, 100% up first"]
T1 -->|否| T2{"<= 10"}
T2 -->|是| S2["2.0x 🟢🟢\n76% up first"]
T2 -->|否| T3{"<= 15"}
T3 -->|是| S3["1.5x 🟢\n40% may dip"]
T3 -->|否| T4{"<= 20"}
T4 -->|是| S4["1.0x"]
T4 -->|否| T5{"<= 30"}
T5 -->|是| S5["0.70x"]
T5 -->|否| T6{"<= 50"}
T6 -->|是| S6["0.50x"]
T6 -->|否| S7["0.0x 🔴\nno position"]
BEAR_CAP["BEAR regime?\ncap = 0.30x"] -.-> S1 & S2 & S3 & S4 & S5 & S6
style S1 fill:#238636,color:#fff
style S2 fill:#2ea043,color:#fff
style S7 fill:#da3633,color:#fff
MPI 出場機制 (雙層)
flowchart TD
subgraph "Layer 1: Monthly Range Exit"
WIN["720h MPI window"] --> CALC["pct = (MPI - min) / (max - min)"]
CALC --> CHECK75{"pct >= 75%?"}
CHECK75 -->|否| HOLD["exit_mult = 1.0\n維持全倉"]
CHECK75 -->|是| REDUCE["線性減倉\n75% → 1.0x\n100% → 0.0x\n(10 bands)"]
end
subgraph "Layer 2: Scalp Exit Target"
ENTRY["記錄進場 MPI"] --> TARGET["根據 entry MPI\n設定出場目標"]
TARGET --> T_LOW["MPI <= 7\ntarget=50, max 14d"]
TARGET --> T_MID["MPI 8-17\ntarget=40-50, max 14d"]
TARGET --> T_HIGH["MPI > 25\ntarget=50, max 28d"]
T_LOW & T_MID & T_HIGH --> HIT{"MPI >= target\nOR 超時?"}
HIT -->|是| EXIT_SCALP["觸發減倉"]
HIT -->|否| WAIT["繼續持有"]
end
REDUCE --> FINAL["取兩者較低\n= 實際倉位"]
EXIT_SCALP --> FINAL
style REDUCE fill:#e3b341,color:#000
style EXIT_SCALP fill:#e3b341,color:#000
做空系統
flowchart TD
subgraph "進場條件"
COND1["BEAR regime"] --> AND
COND2["MPI(12h) > 65"] --> AND
COND3["Price < SMA(200)"] --> AND
AND{"全部滿足"} -->|是| SHORT_ENTRY
end
subgraph "分批加倉 (tranches)"
SHORT_ENTRY["T1: MPI > 65"] --> T2S["T2: MPI > 75"]
T2S --> T3S["T3: MPI > 85"]
end
subgraph "倉位計算"
BASE["base = 0.70x"] --> ADAPT["adaptive multiplier\n(連續獲利加碼 0.3→1.7x)"]
ADAPT --> VOL["BB width 波動率調整\n(窄BB → 加碼, 寬BB → 減碼)"]
VOL --> CONFIRM["確認訊號加碼"]
CONFIRM --> C1S["ob_times < 0.7 → +30%"]
CONFIRM --> C2S["btc_liq < -4 → +50%"]
CONFIRM --> C3S["usdc_prem > 0.10 → +20%"]
end
subgraph "出場"
EXIT1["MPI(12h) < 36"]
EXIT2["Stop Loss 12%"]
EXIT3["Regime 翻 BULL"]
EXIT4["強底部訊號\n(strong >= 2)"]
EXIT1 & EXIT2 & EXIT3 & EXIT4 --> CLOSE_SHORT["平空"]
end
style SHORT_ENTRY fill:#da3633,color:#fff
style CLOSE_SHORT fill:#238636,color:#fff
Drawdown 保護
flowchart LR
DD["當前回撤"] --> L1{"DD >= 8%?"}
L1 -->|是| CAP1["cap 2.0x"]
L1 -->|否| FULL["無限制"]
CAP1 --> L2{"DD >= 15%?"}
L2 -->|是| CAP2["cap 1.5x"]
L2 -->|否| CAP1
CAP2 --> L3{"DD >= 22%?"}
L3 -->|是| CAP3["cap 0.7x 🔴"]
L3 -->|否| CAP2
style CAP3 fill:#da3633,color:#fff
style FULL fill:#238636,color:#fff
底部覆寫 — 最高優先級
flowchart LR
HOLDING_SHORT["持有空單"] --> STRONG{"strong >= 2?\n(至少2個Level 2訊號)"}
STRONG -->|是| FORCE_CLOSE["強制平空\n+ Regime → BULL\n+ 允許下一棒立即做多"]
STRONG -->|否| CONTINUE["繼續空單管理"]
style FORCE_CLOSE fill:#238636,color:#fff
完整參數表
bb_period = 2000
Price BB 週期 (~83天)
bb_dev = 1.3
BB 標準差倍數
rebal = 24
Rebalance 間隔 (小時)
max_leverage = 3.0
雙向硬上限
neutral_pos = 0.30
固定 neutral (MPI off 時)
mpi_neutral_enabled = True
啟用 MPI neutral sizing
bear_mpi_neutral_cap = 0.30
BEAR 下 MPI neutral 上限
mpi_window = 720
MPI monthly range (30天)
mpi_exit_start = 0.75
開始減倉的 MPI percentile
sell_mpi = 60
切 BEAR 的 MPI(48h) 閾值
mpi_smooth = 48
MPI long SMA 週期
mpi_short_smooth = 12
MPI short SMA 週期
mpi_short_1/2/3 = 65/75/85
空單分批 MPI 閾值
mpi_exit_short = 36
空單 MPI 出場
short_stop_loss = 12%
空單停損
short_cooldown = 20
空單冷卻 (bars)
ari_level 1/2 = 3.0 / 5.0
ARI 底部訊號閾值
ob_dif_level 1/2 = 3000 / 4000
掛單差值底部閾值
skew_level 1/2 = 15 / 25
Skew 14d 底部閾值
usdc_prem_level = -0.50
USDC 折價底部閾值