BtcSpotDualTimeframeMomentumConfluenceLong
假設
BTC 現貨雙時間框架動能匯合,LONG-ONLY 1x(BTCUSDT.BINANCE_SPOT,4H 主線 + 1D 確認,僅當 BOTH 個時間框架皆指向 UP 時做多,否則轉為 FLAT 現金,ATR 移動停損+日線體制轉變出場,保留來源最佳化參數)
假設
這是將工廠中表現最佳的已推廣策略(BtcDualTimeframeMomentumConfluenceLS,Sharpe 1.99,458 筆交易,模擬交易 29 天內獲利 +$4,774)移植到 BTCUSDT.BINANCE_SPOT 上的 LONG-ONLY、1x、CASH 帳戶版本,此移植是專門作為 FIRST LIVE-TRADING CANDIDATE 而建立的,因為實盤交易所僅支援現貨。機制不變,純 OHLCV,單一商品:FAST 腿 = 4-HOUR 棒上追蹤 18 棒報酬的正負號;SLOW 腿 = DAILY 棒上追蹤 15 棒報酬的正負號(透過 on_extra_bar 讀取,作為情境腿,絕非同步屏障)。兩者皆須 AGREE。CASH 帳戶所強制帶來的唯一結構性變更,是將 {LONG/FLAT/SHORT} 崩縮為 {LONG/FLAT}:在期貨母策略於共同下降匯合時做 SHORT 的地方,現貨版本則持有 100% USDT。其餘一切均逐字保留:ATR(14) 移動停損,以歷史最高點的 3.033x ATR 為基準、日線體制轉變出場、波動率縮放的資金相對部位規模設定(risk_pct 1.011% / 3.033xATR 停損距離)、49.7% 名目上限,以及來源最佳化所選出的精確參數向量(fast_lookback 18、slow_lookback 15、trail_atr_mult 3.033)。三個可調參數,無補充資料,無空頭,無槓桿。現貨專屬程式碼變更:BINANCE_SPOT CASH 交易所(position_size 中無槓桿倍數)、size_precision 5 / price_precision 2、min_notional $10,賣出數量僅依持有的基礎數量而定。已驗證資料存在:BTCUSDT.BINANCE_SPOT 4-HOUR 與 1-DAY 棒自 2017-08-17 起連續運行(約 9 年,約 19,800 根 4H K棒)。
假設
直接將已推廣的期貨母策略 BtcDualTimeframeMomentumConfluenceLS 移植到現貨交易所,因為預定的實盤交易所僅支援現貨。機制完全逐字保留:相同的兩條動能腿、相同的 AGREE-或空手 門檻、相同的 ATR(14) 3.033x 移動停損(以歷史最高點為基準)、相同的日線體制轉變出場、相同的波動率縮放 risk_pct / 停損距離部位規模設定,並附帶 49.7% 名目上限,以及來源最佳化所選出的精確參數向量(fast_lookback 18、slow_lookback 15、trail_atr_mult 3.033)。CASH 帳戶依假設要求,強制帶來恰好一項結構性變更:{LONG,FLAT,SHORT} 崩縮為 {LONG,FLAT}——should_enter 僅在共同上升時回傳 BUY,其餘情況回傳 None,因此共同下降時變成 100% USDT,而非做空。現貨專屬修改:交易所 BINANCE_SPOT,槓桿為 1.0 且 position_size 中無槓桿項、size_precision 5 / price_precision 2(BTCUSDT 現貨)、min_notional 提高至 $10,且所有出場均透過基礎範本的僅減倉 close_position 路由,因此 SELL 只能減少持有的基礎數量(依設計不可能出現裸現貨空頭,基礎範本的 _would_open_spot_short 防護機制永遠不會被觸發)。calculate_signal 每根K棒都回傳連續的 18 棒 4H 報酬(逐棒變動);離散的匯合門檻則按要求存在於 should_enter 中。每根K棒的計算成本為 O(1):ATR 使用固定的 15 棒視窗,且快速報酬僅需一次索引查找,因此不存在隨歷史長度增加的運算工作量。給分析師的一項坦誠提醒:現貨的來回交易成本約為 0.20%,相較於期貨母策略的約 0.10%,因此每筆交易的優勢必須克服雙倍的摩擦成本——趨勢跟隨式出場結構(移動停損+體制轉變,無固定停利)使得平均持倉時間夠長,讓這一點具有可行性,但這仍是首要應密切關注的指標。
實作
LONG-ONLY 1x BTCUSDT 現貨(BINANCE_SPOT、CASH)雙時間框架動能匯合。FAST 腿 = 4-HOUR 棒上(主要)追蹤 18 棒報酬的正負號;SLOW 腿 = 1-DAY 棒上追蹤 15 棒報酬的正負號,透過 on_extra_bar 作為較慢時間框架的情境腿讀取(不同的時間框架,因此基礎範本的跨腿對齊屏障絕不會延遲 4H 訊號)。兩條腿皆須指向 UP 方能持有 BTC;共同下降(期貨母策略於此做空的情形)與方向不一致,兩者皆代表持有 100% USDT。出場條件:ATR(14) 移動停損,位於部位歷史高點下方 3.033x ATR 處,OR 日線腿在多頭部位下轉為向下(較高時間框架的體制轉變)。部位規模採波動率縮放並與資金相對:equity * 1.011% / (3.033 * ATR),名目金額上限為 USDT 餘額的 49.7%,槓桿倍數為 NO(CASH 帳戶無法借貸),數量量化至 size_precision 5,低於 $10 現貨最小名目金額則會被拒絕。三個可調參數,純 OHLCV,無補充資料,無空頭。
驗證結果
可以在 should_exit 的移動停損比較中使用 self._atr(目前值),以與母策略完全一致;或者在說明中明確指出移動停損是以進場棒的 ATR 為錨點,以免分析師誤將與母策略的差異歸因於交易所的變更。
驗證結果
移動停損所用的 ATR 是在進場時(self._entry_atr,於 should_enter /接手部位時擷取)被 FROZEN 的,且此後從未更新,因此停損距離採用的是 3.033 x 進場時的 ATR,而非 3.033 x 當前的 ATR(14)。已推廣的期貨母策略(BtcDualTimeframeMomentumConfluenceLS4H)則會逐棒隨 CURRENT ATR 棘輪式調整其移動停損。假設的措辭(『ATR(14) 移動停損,以歷史最高點的 3.033x ATR 為基準』)在兩種做法下皆能滿足,且由於 _extreme 具單調性,停損水準仍只會棘輪式上升,因此這並非正確性上的缺陷——但在進場後波動率擴大的情況下,實際停損會比母策略更緊,這與聲稱『逐字』移植的策略之間確實存在行為上的差異。
驗證結果
從成交回報(on_order_filled /持有未平倉部位的第一根K棒)設定交易狀態,而非在 should_enter 內部設定,或者在 calculate_signal 開頭、進行部位查詢之前先進行防禦性重設。
驗證結果
should_enter() 會變更交易狀態(_in_long = True、_extreme、_entry_atr),BEFORE 基礎範本完成訂單規模計算並套用最小名目金額門檻之前。若 position_size() 回傳 0,或 $10 最小名目金額檢查剔除了該筆進場,策略便會在空手狀態下仍被標記為持有多頭且移動停損已啟動。實務上這會在下一根K棒自行修復(calculate_signal 會看到部位為 None 並重設旗標,且 should_exit 在空手狀態下永遠不會被觸及),因此不存在可觀察到的行為性錯誤——但若出場路徑日後有所變更,此不變性假設將顯得脆弱。
驗證結果
就正確性而言無需修正。若希望做到精確的同一根K棒即時消費,可在 calculate_signal 內部從 self._extra_bars[...] 延遲重新計算 _slow_dir,而非將其快取於 on_extra_bar 中。
驗證結果
日線腿存在一根K棒的延遲:DAILY 棒與當日最後一根 4H 棒共用同一個收盤時間戳記。若引擎先送達主要的 4H 棒,_maybe_process_primary() 便會執行並標記 _last_processed_ts,而日線棒的 _slow_dir 更新(於同一時間戳記到達)僅會從 NEXT 4H 棒中被消費。這是保守的做法(只會延遲訊號,絕不會洩漏未來資料),但這意味著日線體制轉變出場可能在約半數情況下,於日線收盤後最多延遲 4 小時才觸發,且回測/模擬交易的一致性取決於資料傳遞順序是否穩定。
驗證結果
忠實的實作,但分析師在檢視完整歷史資料時應權衡以下三點:(1)現貨的來回交易成本約為 0.20%,相較於期貨母策略的約 0.10%,因此相同的毛利邊際淨值大約會減半——沙盒測試已顯示手續費佔毛利的 10.03%;(2)參數向量(快線 18 / 慢線 15 / 移動停損 3.033)是在 DIFFERENT 的交易所、時間框架組合與方向集合(LONG/SHORT 期貨)上以最佳化方式選出的,因此這屬於樣本外遷移,而非經過最佳化的配置——沙盒 Sharpe 為 0.527,sharpe_ci_low -0.233,相對於基準為 information_ratio -0.760,也就是說這是一個純多頭的 BTC 組合,在冒煙測試窗口中表現遜於持有 BTC;(3)移除空頭腿大約去除了母策略交易母體的一半(250 筆交易,全部為多頭,43.6% 曝險),因此實際 Sharpe 應預期會遠低於母策略的 1.99,而非與之相近。在真實回測中首先要檢查的是:avg_trade_return_pct 相對於 0.25% 現貨下限(沙盒顯示 0.82%,但該窗口不含 2017 且僅有 2401 天),以及『正常』波動率三分位(沙盒中為 -8.77%)在完整歷史資料中是否仍維持負值。
回測檢視
3146 天內有 314 筆已平倉交易(2017-08 → 2026-03),metrics_reliable=true,提交了 entry_diag 314/314 筆進場,其中 0 筆被剔除。
回測檢視
交易確實實現了該假設:全部 314 LONG / 0 空頭(正確地將母策略的 LONG/FLAT/SHORT 崩縮為 CASH),最大名目/權益比為 0.50,相較於 0.497 上限,平均持倉 4 天 8 小時,且 43.6% 曝險重現了期貨母策略。
回測檢視
avg_trade_return_pct 1.20%,相較於約 0.20% BINANCE_SPOT 的來回交易成本;手續費僅佔毛利的 8.97%,衝擊成本為 4.33%——並非手續費邊際情形。
回測檢視
max_drawdown 10.3%(在 15% 現貨預設值之下),PF 1.41,在 40.4% 命中率下報酬為 2.07(正確的趨勢形態),壓力波動率三分位為 +28.0%。
回測檢視
極端集中:314 筆交易中排名前 10 筆 = 每筆交易累計報酬總和的 93.8%,前 20 筆 = 141%(交易 21–314 淨為負)。
回測檢視
僅有 6/10 個日曆年為正——恰好處於硬性下限——且近兩年皆為負值(2025 −10.5%、2026 −9.9%)。
回測檢視
Sharpe 為 0.664,sharpe_ci_low 0.0042,PSR 0.924(<0.95):在經歷約 225 次試驗的篩選門檻之前,表現就已經處於邊緣。
回測檢視
QA 的疑慮部分獲得證實:『正常』波動率三分位維持負值(−7.70%、16.1% DD),information_ratio −0.757,alpha 僅為 +2.4%/年——其表現遜於持有 BTC,且 benchmark_meaningful=true,因此這項落差是真實存在的。
回測檢視
參數是從另一個交易所/方向集合遷移而來的樣本外配置——並非過度擬合而是未經調校,但在此也尚未經過測試。
Stratmill 是一款研究與模擬交易工具,並非財務建議或經紀商服務。回測與模擬交易結果均為假設性質。交易涉及虧損風險。