策略
跨主要幣種分散的日內脈衝棒延續投資組合(多空、Binance USD-M、1H、事件驅動的離散進場、單筆部位與毛曝險上限、目標值足以支付費用的 ATR)
結果: 已放棄
DiversifiedImpulseBarContinuationPortfolioLS1H
確實解決交易稀疏及單一事件集中問題:13,644 筆交易分布於 10 個名稱,密集填滿每個視窗;採用對引擎安全的離散進場及單筆部位/毛曝險上限(沒有名目價值膨脹異常,也沒有強制平倉)
假說
LONG-SHORT、MULTI-INSTRUMENT日內CONTINUATION策略,採用策略工廠的EXPLICITLY-SANCTIONED,將可泛化的衝量棒延續訊號作為DIVERSIFIEDPORTFOLIO,涵蓋約10個具深度歷史資料的 Binance USD-M主要幣種(BTC、ETH、SOL、BNB、XRP、ADA、DOGE、AVAX、LINK、LTC),採用1-HOURK線。策略會獨立監控各資產;當任何資產出現異常巨大且成交量高的單向推進(衝量棒)時,便沿推進方向建立獨立部位,以捕捉隨後短期延續行情。這是分析師認可的新穎方向(衝量延續策略家族屢次被標記為「可泛化」;已有單一資產的ETH-1H、SOL-1H及BTC-1H-HL案例),並擴展至PORTFOLIO,專門解決近期幾乎所有遭棄用策略的兩種失敗模式:(1)LOWBREADTH/單一事件集中(3個名稱的HL帳簿因槓桿 beta 遭受68%DD;單一名稱突破策略則集中於2021)——不同且相關性不完美的名稱會在不同時間觸發衝量事件,分散TRADESTREAM,而非疊加相關的方向性 beta;以及(2)TRADE-SPARSITY(26筆交易的 CoinM Donchian 無法填滿走步分析;OOS個窗口空缺)——約10個名稱乘上頻繁的1H衝量,每年可產生數百筆交易,讓每個走步分析/留出窗口都有足夠資料。這NOT並非被禁止的動能籃子改良型(訊號類別不同:離散的日內推進延續,而非SMA/追蹤報酬趨勢狀態),NOT單一資產TSM(已失效),NOT慢速突破(受市場狀態轉變影響而失效),NOT反轉(已失效),NOT選擇權/現貨(受阻)。設計上符合引擎安全要求:離散的單次進場/單次出場事件,每項資產最多一個部位,每部位名目金額上限加上投資組合GROSS曝險上限——絕不採用連續波動率縮放或淨額翻轉(這種設計曾造成名目金額膨脹假象)。策略採用寬目標/緊停損配置(TP >= SL),避免暴跌反彈的風險報酬陷阱。核心參數共三個。
第 4 次迭代修正 Layer-3 300s 冒煙測試逾時 WITHOUT,未更動任何交易邏輯。先前版本從棒清單切片重新計算 ATR、平均成交量及衝擊(其中包含 numpy 陣列配置,以及多次 .as_double() FFI 呼叫),並對全部 10 個交易標的在每根 EVERY 棒執行;這項沉重的逐棒固定成本,乘上深度歷史資料中數十萬根 1H 棒,造成負擔。現在每根棒的熱路徑為 O(1):滾動 TR 與成交量 SUMS 透過有界雙端佇列增量維護,每個資產每根新棒在 _roll_update 中恰好更新一次(依時間戳去重);管理程序直接從累積總和讀取 _atr_of/_avg_vol_of/_thrust_of。已將 numpy 移出熱路徑,改用純 Python 數學運算。主要資產的 RETURNED 訊號保留先前精確的依棒計算方式(_thrust_direct),因此已通過 Layers 1-2 的連續變動訊號在行為上逐位元相同;未設閘門的 _touch 更新也保留該訊號,使其在缺少 -2/快取的 Layerorder_factory 代理環境中仍保持運作。滾動 ATR 等於同一組 TR 的平均值,滾動平均成交量也等於同一組成交量的平均值,因此進出場與交易產出不變——只有逐棒成本從 O(window x instruments) 降為 O(instruments),且常數項大幅降低。
分散式日內脈衝延續投資組合明確是淨虧損,優勢低於交易成本,不值得投入 2 小時最佳化。共 13,644 筆交易:total_return -95.05%、CAGR -45.6%、max_drawdown 96.24%(CI 至 100%,已越過 L19 硬性放棄線,平靜市況區間 -100%)、profit_factor 0.87、每筆期望值 -$7.20、avg_trade_return_pct 0.045%(低於幣安 USD-M 的 0.15% 費率底線,L22,佣金占毛利 12.4%)。夏普值為 -0.088(CI [-1.02, 0.61] 跨越零),PSR 0.41,且 7 年中有 6 年虧損(僅 2022 年為正)。投資組合設計 DID 確實解決了原本針對的兩種失效模式——交易稀疏(每年數百筆交易)與單一事件集中,採用引擎安全的離散進場且沒有發生清算——但分散投資未能抑制尾部風險(峰度 246、每月波動 +365%/-78%/-50%、連續虧損 37 筆),更關鍵的是,未能創造正的淨單筆交易優勢。這是 L30/L63 純-OHLCV方向延續類別(0-存活者);將單一標的脈衝訊號推廣至 10 個標的雖提高了交易筆數,但單筆交易優勢仍低於費用。無論如何調整脈衝/停損/停利倍數,都無法讓 0.045% 單筆交易優勢高於費率底線,也無法修復 96% 回撤。失敗模式:fee_edge/no_edge 多標的 OHLCV 延續,且有 >50% DD。
實作
以多空日內衝量柱延續策略,將分散投資組合配置於 10 個具深度歷史資料的 Binance USD-M 主流幣種,採用 1 小時 K 線。獨立監控各資產;當方向性衝量強勁(|實體|/ATR >= impulse_atr_mult,且成交量 >= vol_mult 倍平均值)時,沿衝量方向建立單一離散部位,並於緊密的 ATR 停損、較寬的 ATR 目標或最長持倉時間上限觸發時出場。設有單一部位名目價值上限及投資組合總曝險上限;每項資產最多持有一個部位。AND
驗證結果
CLEAN RESTART 2026-09-04——本次執行的判定歷程與學習紀錄已移除,並從驗證階段重新開始。先前放棄是由流程造成,而非市場:Layer-2 測試框架錯誤綁定了 @staticmethod 輔助方法(已修正),QA 曾在未最佳化的冒煙測試中給出終局績效判定(已移除——QA 現在只判斷正確性),沙盒逾時則是回測名額不足所致(已修正)。假設與策略程式碼均未變更。請依據程式碼本身進行驗證;績效將於完整回測及最佳化階段判定。
回測檢視
- 夏普值
- -0.09
- 總報酬率
- -95.05%
- 最大回撤
- 96.24%
- 總交易筆數
- 13644
- 勝率
- 38.6%
- 獲利因子
- 0.87
確實解決交易稀疏及單一事件集中問題:13,644 筆交易分布於 10 個名稱,密集填滿每個視窗;採用對引擎安全的離散進場及單筆部位/毛曝險上限(沒有名目價值膨脹異常,也沒有強制平倉)
淨虧損:total_return -95.05%,CAGR -45.6%,max_drawdown 96.24%(CI 至 100%)——超過50%硬性放棄門檻(L19)
扣除費用後無優勢:avg_trade_return_pct 0.045%(低於0.15%費用門檻,L22),profit_factor 0.87,每筆預期收益 -$7.20,手續費占毛收益的 12.4%
無顯著的風險調整後優勢:夏普值 -0.088(CI [-1.02, 0.61] 跨越零),PSR 0.41;7 年中有 6 年虧損(僅 2022 年為正)
分散投資未能降低尾部風險:峰態 246,每月波動 +365%/-78%/-50%,連續虧損 37 筆——結果受離群值主導,沒有平穩優勢
L30/L63 純OHLCV方向延續類別(0個存活);投資組合泛化提高了交易筆數,卻未提升每筆交易優勢
迭代紀錄
驗證失敗(Layer 2——合成情境): 使用的參數:['assets', 'vol_mult', 'atr_period', 'vol_window', 'tp_atr_mult', 'min_notional', 'max_hold_bars', 'qty_precision', 'stop_atr_mult', 'gross_cap_frac', 'impulse_atr_mult', 'per_position_frac', 'default_qty_precision'] 請確認 __init__ 從 self.parameters.get() 設定所有屬性。 - steady_uptrend: TypeError: super(type, obj): obj 必須是某類別的實例或子類別(棒時間戳:1735689600000) - steady_downtrend: TypeError: super(type, obj): obj 必須是某類別的實例或子類別(棒時間戳:1735689600000) - flat_ranging: TypeError: super(type, obj): obj 必須是某類別的實例或子類別(棒時間戳:1735689600000) - volatility_spike: TypeError: super(type, obj): obj 必須是某類別的實例或子類別(棒時間戳:1735689600000) - zero_volume: TypeError: super(type, obj): obj 必須是某類別的實例或子類別(棒時間戳:1735689600000) - price_gap: TypeError: super(type, obj): obj 必須是某類別的實例或子類別(棒時間戳:1735689600000)
驗證失敗(Layer 3——沙盒回測):冒煙測試超過 300 秒的時間限制。這幾乎總是代表每根棒的工作量會隨歷史資料增加,例如反覆掃描完整資金費率/補充序列,或在每根棒的 calculate_signal()/on_bar() 中重建清單並呼叫 min()/sorted()。請在 __init__ 預先計算已排序的時間戳陣列 ONCE,並使用 bisect;或依時間戳快取查詢,讓每根棒的成本為 O(log n),而非 O(n)。
驗證失敗(Layer 2——合成情境): 使用的參數:['assets', 'vol_mult', 'atr_period', 'vol_window', 'tp_atr_mult', 'min_notional', 'max_hold_bars', 'qty_precision', 'stop_atr_mult', 'gross_cap_frac', 'impulse_atr_mult', 'per_position_frac', 'default_qty_precision'] 請確認 __init__ 從 self.parameters.get() 設定所有屬性。 - steady_uptrend: TypeError: DiversifiedImpulseBarContinuationPortfolioLS1H._bar_ts() 接受 1 個位置引數,卻收到 2 個(棒時間戳:1735689600000) - steady_downtrend: TypeError: DiversifiedImpulseBarContinuationPortfolioLS1H._bar_ts() 接受 1 個位置引數,卻收到 2 個(棒時間戳:1735689600000) - flat_ranging: TypeError: DiversifiedImpulseBarContinuationPortfolioLS1H._bar_ts() 接受 1 個位置引數,卻收到 2 個(棒時間戳:1735689600000) - volatility_spike: TypeError: DiversifiedImpulseBarContinuationPortfolioLS1H._bar_ts() 接受 1 個位置引數,卻收到 2 個(棒時間戳:1735689600000) - zero_volume: TypeError: DiversifiedImpulseBarContinuationPortfolioLS1H._bar_ts() 接受 1 個位置引數,卻收到 2 個(棒時間戳:1735689600000) - price_gap: TypeError: DiversifiedImpulseBarContinuationPortfolioLS1H._bar_ts() 接受 1 個位置引數,卻收到 2 個(棒時間戳:1735689600000)
Stratmill 是一款研究與模擬交易工具,並非財務建議或經紀商服務。回測與模擬交易結果均為假設性質。交易涉及虧損風險。