策略 V1~V4 規格¶
這一頁不是高層介紹,而是把 Bollinger 系列策略整理成偏規格書的描述。
如果你的目標是讓別人看完之後能重做出相近版本,這一頁是核心之一。
一、共同基礎(V1~V4 共享)¶
1. 輸入資料¶
每根 bar 至少包含:
datetimeopenhighlowclosevolume
策略主要從 DataFeed 讀取:
open[0]high[0]low[0]close[0]datetime[0]
2. 共同參數群¶
布林與窗口¶
init_windowwindowmin_windowmax_windowwindow_stepstdin_std
ATR 與波動¶
atr_windowmax_fluctuationmin_fluctuation
型態與進場¶
kentry_typecalc_timingprice_offset_longprice_offset_short
風控¶
stop_loss_offset_longstop_loss_offset_shortstop_loss_flipenable_middle_stop_lossenable_middle_take_profitmiddle_take_profit_barsmiddle_stop_loss_flipmiddle_take_profit_flip
結構保護¶
stop_loss_windowreset_window_on_stop_lossenable_channel_squeeze_filter
斜率相關¶
tema_periodslope_windowsignal_flip_use_slope_filter
3. 型態狀態機¶
V1~V4 都有兩個核心狀態:
cvbu_st:做空用的「步步高升」觀察狀態cvbd_st:做多用的「步步低降」觀察狀態
它們是互斥的。
互斥原則¶
當新的對向型態開始形成時:
- 舊的型態狀態會被清掉
4. 進場基礎邏輯¶
做空¶
- 價格突破上布林
- 建立或更新
cvbu_st - 當價格不再創高
- 回落超過偏移門檻
- 通過步型檢查與內軌條件
- 進場做空,或先平多再考慮反手
做多¶
- 價格跌破下布林
- 建立或更新
cvbd_st - 當價格不再創低
- 反彈超過偏移門檻
- 通過步型檢查與內軌條件
- 進場做多,或先平空再考慮反手
5. 止損邏輯¶
基礎止損¶
策略會根據:
loss_buyloss_sell
對應的過去 K 棒高低點,
再加上:
stop_loss_offset_longstop_loss_offset_short
形成實際止損線。
中線止損 / 中線停利¶
可由以下參數獨立控制:
enable_middle_stop_lossenable_middle_take_profit
並可進一步決定:
- 是否反手
- 是否在通道收縮時跳過
6. 通道收縮觀望¶
當 enable_channel_squeeze_filter=True 時,若通道太窄,策略可跳過新建倉位。
二、V1 規格¶
核心特徵¶
- 基本布林 + ATR + 型態進場
- 有止損、中線止損停利、可選反手
- 窗口會依波動調整
- 但止損後不做強制的完整結構冷卻
窗口調整¶
當:
TR > max_fluctuation
會縮小窗口,並清理 bollinger_prices。
當:
ATR < min_fluctuation
會擴大窗口。
斜率¶
V1 已有 TEMA / slope 機制,但不像 V4 那樣把斜率邏輯寫得很明確地嵌入版本敘事中。
三、V2 規格¶
V2 的主要方向¶
V2 延續 V1 核心,但對持倉期間的布林 / 中線計算概念做了更積極的調整。
實務理解¶
你可以把它當成:
- 進場之後更強調持倉中狀態的重新累積
- 中線 / MA 與持倉期互動更緊密
在舊腳本中的地位¶
simple_backtest.py 的 backtest_txf_with_data() 目前直接硬編碼用:
BollingerATRStrategyV2
這也是為什麼 multi_params 那條線目前實際上很偏 V2。
四、V3 規格¶
核心設計¶
V3 引入的重點是:
- 止損後的結構性冷卻
具體概念¶
當發生止損或某些結構性事件後:
- 可以截掉原本累積窗口
- 把
window重設成stop_loss_window - 強迫重新累積一段數據後才重新產生布林訊號
目的¶
- 避免剛止損完馬上用舊結構再次進場
- 增加抗洗盤能力
五、V4 規格¶
V4 是目前最值得當成「主力研究版本」的規格之一。
1. 進場後重置¶
V4 在進場時會:
- 判斷
entry_price是否從無到有,或反手導致進場價改變 - 把
window重設成stop_loss_window(若未設則用init_window) - 清空:
ma_pricesbollinger_prices- 只保留當前進場價作為新的起點
效果¶
進場後不會立刻延續進場前整段窗口的布林帶,而是從持倉新階段重新累積。
2. TR 過大時同步清除 MA 窗口¶
V4 覆寫了窗口調整邏輯。
當:
TR > max_fluctuation
除了父類會清掉 bollinger_prices 外,V4 還會同步清掉:
ma_prices
這確保開盤跳空或劇烈波動時,不會殘留錯誤的 MA 累積狀態。
3. TEMA 斜率過濾¶
V4 明確使用:
MA_TEMAUpper_TEMALower_TEMA
與其 slope 來決定某些平倉後是否允許反手。
反手做空條件¶
通常要求:
MA的 TEMA slope < 0Lower的 TEMA slope < 0
反手做多條件¶
通常要求:
MA的 TEMA slope > 0Upper的 TEMA slope > 0
signal_flip_use_slope_filter¶
這個參數決定:
- 布林訊號型平倉 / 反手時,是否一定要套用 slope 過濾
但要注意:
- 止損截斷反手的 slope 規則不完全等同於一般訊號反手
4. 中線止損 / 停利後的狀態淨化¶
V4 的哲學比 V3 更進一步。
不只是重置窗口,而是強調:
- 清除舊訊號狀態
- 強迫等待新波段重新形成
實務效果¶
這讓 V4:
- 更保守
- 更抗假突破
- 更不容易在剛失敗的同一波行情中反覆被洗
5. 加倉能力¶
V4 中:
enable_add_position = True
表示在特定條件下,若已有同向部位,仍可能再次加倉。
六、連續 slope window¶
除了交易當根用的布林帶外,V1~V4 也有一條獨立的連續布林 / TEMA slope 路徑:
SLOPE_MASLOPE_UpperSLOPE_LowerSLOPE_MA_TEMASLOPE_Upper_TEMASLOPE_Lower_TEMA
這條線的特性是:
- 不因進出場重置
- 不因止損截斷而被清空
- 更像連續觀察市場趨勢的輔助線
它和「當根交易用布林」是分開維護的。
七、如果要照規格重做,最小必要功能清單¶
若你要重做出一個「相近於 V1~V4」的系統,至少要有:
DataFeed與OHLCV- 可切換
OPEN/CLOSE的計算時機 - 可動態調整窗口的布林帶
cvbu_st / cvbd_st型態狀態機k根步型判斷- 多空偏移進場門檻
- 基礎止損
- 中線止損 / 停利
- 反手控制
- TEMA slope 過濾
- V3/V4 的窗口重置與狀態淨化
八、哪些部分最值得優先抽成獨立模組¶
若未來要更容易維護,應把以下幾塊拆出:
- 布林帶與 TEMA 計算器
- 步型狀態機
- 止損線產生器
- 中線停損 / 停利判斷器
- 反手規則判斷器
這樣策略類本身就能從「巨大流程函式」變成「組裝規則的 orchestrator」。