跳轉到

策略 V1~V4 規格

這一頁不是高層介紹,而是把 Bollinger 系列策略整理成偏規格書的描述。
如果你的目標是讓別人看完之後能重做出相近版本,這一頁是核心之一。

一、共同基礎(V1~V4 共享)

1. 輸入資料

每根 bar 至少包含:

  • datetime
  • open
  • high
  • low
  • close
  • volume

策略主要從 DataFeed 讀取:

  • open[0]
  • high[0]
  • low[0]
  • close[0]
  • datetime[0]

2. 共同參數群

布林與窗口

  • init_window
  • window
  • min_window
  • max_window
  • window_step
  • std
  • in_std

ATR 與波動

  • atr_window
  • max_fluctuation
  • min_fluctuation

型態與進場

  • k
  • entry_type
  • calc_timing
  • price_offset_long
  • price_offset_short

風控

  • stop_loss_offset_long
  • stop_loss_offset_short
  • stop_loss_flip
  • enable_middle_stop_loss
  • enable_middle_take_profit
  • middle_take_profit_bars
  • middle_stop_loss_flip
  • middle_take_profit_flip

結構保護

  • stop_loss_window
  • reset_window_on_stop_loss
  • enable_channel_squeeze_filter

斜率相關

  • tema_period
  • slope_window
  • signal_flip_use_slope_filter

3. 型態狀態機

V1~V4 都有兩個核心狀態:

  • cvbu_st:做空用的「步步高升」觀察狀態
  • cvbd_st:做多用的「步步低降」觀察狀態

它們是互斥的。

互斥原則

當新的對向型態開始形成時:

  • 舊的型態狀態會被清掉

4. 進場基礎邏輯

做空

  1. 價格突破上布林
  2. 建立或更新 cvbu_st
  3. 當價格不再創高
  4. 回落超過偏移門檻
  5. 通過步型檢查與內軌條件
  6. 進場做空,或先平多再考慮反手

做多

  1. 價格跌破下布林
  2. 建立或更新 cvbd_st
  3. 當價格不再創低
  4. 反彈超過偏移門檻
  5. 通過步型檢查與內軌條件
  6. 進場做多,或先平空再考慮反手

5. 止損邏輯

基礎止損

策略會根據:

  • loss_buy
  • loss_sell

對應的過去 K 棒高低點,

再加上:

  • stop_loss_offset_long
  • stop_loss_offset_short

形成實際止損線。

中線止損 / 中線停利

可由以下參數獨立控制:

  • enable_middle_stop_loss
  • enable_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.pybacktest_txf_with_data() 目前直接硬編碼用:

  • BollingerATRStrategyV2

這也是為什麼 multi_params 那條線目前實際上很偏 V2。

四、V3 規格

核心設計

V3 引入的重點是:

  • 止損後的結構性冷卻

具體概念

當發生止損或某些結構性事件後:

  • 可以截掉原本累積窗口
  • window 重設成 stop_loss_window
  • 強迫重新累積一段數據後才重新產生布林訊號

目的

  • 避免剛止損完馬上用舊結構再次進場
  • 增加抗洗盤能力

五、V4 規格

V4 是目前最值得當成「主力研究版本」的規格之一。

1. 進場後重置

V4 在進場時會:

  1. 判斷 entry_price 是否從無到有,或反手導致進場價改變
  2. window 重設成 stop_loss_window(若未設則用 init_window
  3. 清空:
  4. ma_prices
  5. bollinger_prices
  6. 只保留當前進場價作為新的起點

效果

進場後不會立刻延續進場前整段窗口的布林帶,而是從持倉新階段重新累積。

2. TR 過大時同步清除 MA 窗口

V4 覆寫了窗口調整邏輯。

當:

  • TR > max_fluctuation

除了父類會清掉 bollinger_prices 外,V4 還會同步清掉:

  • ma_prices

這確保開盤跳空或劇烈波動時,不會殘留錯誤的 MA 累積狀態。

3. TEMA 斜率過濾

V4 明確使用:

  • MA_TEMA
  • Upper_TEMA
  • Lower_TEMA

與其 slope 來決定某些平倉後是否允許反手。

反手做空條件

通常要求:

  • MA 的 TEMA slope < 0
  • Lower 的 TEMA slope < 0

反手做多條件

通常要求:

  • MA 的 TEMA slope > 0
  • Upper 的 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_MA
  • SLOPE_Upper
  • SLOPE_Lower
  • SLOPE_MA_TEMA
  • SLOPE_Upper_TEMA
  • SLOPE_Lower_TEMA

這條線的特性是:

  • 不因進出場重置
  • 不因止損截斷而被清空
  • 更像連續觀察市場趨勢的輔助線

它和「當根交易用布林」是分開維護的。

七、如果要照規格重做,最小必要功能清單

若你要重做出一個「相近於 V1~V4」的系統,至少要有:

  1. DataFeedOHLCV
  2. 可切換 OPEN/CLOSE 的計算時機
  3. 可動態調整窗口的布林帶
  4. cvbu_st / cvbd_st 型態狀態機
  5. k 根步型判斷
  6. 多空偏移進場門檻
  7. 基礎止損
  8. 中線止損 / 停利
  9. 反手控制
  10. TEMA slope 過濾
  11. V3/V4 的窗口重置與狀態淨化

八、哪些部分最值得優先抽成獨立模組

若未來要更容易維護,應把以下幾塊拆出:

  1. 布林帶與 TEMA 計算器
  2. 步型狀態機
  3. 止損線產生器
  4. 中線停損 / 停利判斷器
  5. 反手規則判斷器

這樣策略類本身就能從「巨大流程函式」變成「組裝規則的 orchestrator」。