PulseForce Dual Moving Average(雙均線策略)算法解析

1. 概述

Dual Moving Average(雙均線策略) 是最經典、最基礎的趨勢跟隨策略之一。
它僅依賴兩條簡單移動平均線(短期均線 ma_fast 與長期均線 ma_slow)之間的交叉關係:

  • 短均線自下往上突破長均線 → 黃金交叉(Golden Cross)→ 產生買入訊號
  • 短均線自上往下跌破長均線 → 死亡交叉(Death Cross)→ 產生賣出訊號

在 PulseForce 中,dual_moving_avg 策略是一個 極簡、標準化程度極高 的趨勢策略:

  • 使用 1 分鐘 K 線(timeframe = "1m"
  • 僅使用 雙均線 + 成交量 > 0 作為訊號邏輯
  • 退出邏輯採用 PulseForce 統一風控框架:賣出訊號 + 日級 SL/TP + 硬性 SL/TP
  • 支援 超參優化(HyperOpt):可搜尋 ma_fast / ma_slow / daily_* / force_* 等參數
  • 所有策略參數皆可在 PulseForce App 中以可視化方式配置

若說 ma_crossover 是更加強化、具波動率調節與趨勢過濾的版本,那 dual_moving_avg 則是 最純粹的雙均線交叉策略,結構乾淨、可解釋性極強。


2. 策略起源與定位

雙均線交叉策略起源可追溯至早期技術分析時代。隨著電腦與程序化交易普及,它幾乎成為趨勢策略的「Hello World」:

  • 早期 CTA / 趨勢基金
    大量採用均線交叉作為核心趨勢訊號。
  • 現代量化交易系統
    雙均線仍是趨勢模型的基礎,被嵌入因子模型、CTA 系統與趨勢濾波器中。
  • 量化研究與教學
    雙均線是最常用來示範趨勢策略的案例之一。

在 PulseForce 中,dual_moving_avg 的策略定位是:

「結構極其乾淨的趨勢策略基線(baseline)」
用於比較更複雜策略(MA Crossover、Momentum、MACD Trend 等)的表現差異。


3. 策略試圖解決的問題

雙均線策略本質上在解決三件事:

  1. 如何簡單直接地識別趨勢方向變化?
    → 透過短均線相對長均線的位置與交叉狀態進行多空判斷。

  2. 如何避免依賴單根 K 線或局部價型?
    → 均線平滑價格,減少雜訊干擾。

  3. 如何構建「可調整速度」的趨勢策略?
    → 調整 ma_fast / ma_slow 即可輕鬆得到快/慢不同風格的策略。


4. 指標與訊號邏輯

4.1 指標計算

策略使用 簡單移動平均線(SMA)

1
2
3
4
5
f = int(self._val(self.ma_fast))
s = int(self._val(self.ma_slow))

df["ma_fast"] = ta.SMA(df, timeperiod=f)
df["ma_slow"] = ta.SMA(df, timeperiod=s)

必要數據:

  • close / open / high / low:全部進行 ffill 清洗
  • volume:缺失時補 0,避免產生錯誤訊號

4.2 買入邏輯:黃金交叉

1
2
3
4
5
cond = (
(df["ma_fast"].shift(1) < df["ma_slow"].shift(1)) & # 前一根短均線在下
(df["ma_fast"] > df["ma_slow"]) & # 當前上穿 → 黃金交叉
(df["volume"] > 0)
)

要點:

  • 必須是 由下往上的突破 才算有效交叉
  • 不加入 RSI / 突破 / 波動率等濾波 → 保持策略純粹性
  • volume > 0 避免停牌或異常行情

4.3 賣出訊號:死亡交叉

1
2
3
4
return (
prev["ma_fast"] > prev["ma_slow"] and
curr["ma_fast"] < curr["ma_slow"]
)

代表由多轉空,但並不直接觸發賣出,而是交由 custom_exit 根據 SL/TP 決定最終是否退出。


5. PulseForce 退出流程:賣出訊號 + SL/TP

PulseForce 採用一致的三層風控:

  1. Force SL/TP(硬性止損/止盈)
  2. 賣出訊號層:必須出現死亡交叉
  3. 日級 SL/TP:僅在有賣出訊號後才啟動

程式節選:

1
2
3
4
5
6
7
8
9
10
11
12
if current_profit <= -self.force_stop_loss.value:
return "hard_sl"
if current_profit >= self.force_take_profit.value:
return "hard_tp"

if not self._has_sell_signal(prev, curr):
return None

if current_profit <= -sl:
return "sl_signal"
if current_profit >= tp:
return "tp_signal"

這確保策略 能拿住趨勢、又不放任風險失控


6. PulseForce 可視化配置與超參優化

回測配置界面:

超參優化界面:

6.1 基礎參數(可優化)

Key 名稱 說明 可優化 建議起始搜尋範圍
ma_fast Fast MA 短期均線 8 ~ 25
ma_slow Slow MA 長期均線 40 ~ 90

6.2 資金管理

Key 說明
max_funds_allowed_using 最大可用資金
allowable_funds_neutral 中性趨勢資金配置
allowable_funds_uptrend 上升趨勢資金配置
allowable_funds_downtrend 下跌趨勢資金配置

6.3 止損參數(可優化)

Key 名稱 含義 可優化
force_stop_loss 強制止損 無視信號直接止損
daily_stop_loss 日級止損 僅在死亡交叉後啟動

6.4 止盈參數(可優化)

Key 名稱 含義 可優化
force_take_profit 強制止盈 無視信號直接止盈
daily_take_profit 日級止盈 僅在死亡交叉後生效

7. 策略適用場景

7.1 適合

  • 趨勢明顯的資產(美股熱門股、ETF、指數、加密貨幣)
  • 喜歡 簡單規則 + 低過度擬合風險 的使用者
  • 作為研究 對照組/基線策略(baseline)

7.2 不適合

  • 長期震盪、方向不明顯的標的
  • 噪音極高的超短線場景
  • 需要非常精確切入點的策略用途

8. 優勢與不足

優勢

  • 最可解釋的趨勢策略之一
  • 參數極少 → 超參優化穩定、不易過擬合
  • 非常適合作為策略比較基線
  • 完全符合 PulseForce 風控架構(硬 SL/TP + 日級 SL/TP)

不足

  • 未考慮 RSI、成交量異動、波動率等因子 → 震盪行情中較易被洗
  • 相比 Momentum、MACD Trend 等複雜策略,在部分標的表現可能略顯不足
  • 未含日級趨勢濾波,噪音極高場景效果有限

9. 總結

dual_moving_avg 是 PulseForce 中 最純粹、最標準的雙均線交叉策略

  • 黃金交叉 / 死亡交叉 作為唯一趨勢訊號
  • 使用 PulseForce 統一的 SL/TP 風控框架
  • 支援對 ma_fast / ma_slow / daily_* / force_* 進行 超參優化(HyperOpt)
  • 配合 PulseForce 的 UI 配置、回測、優化工具,可快速建立屬於你的趨勢策略

特別適合:

  • 新手的第一套趨勢策略
  • 作為 Momentum / MA Crossover / MACD Trend 的對照基線
  • 學習 PulseForce「策略 → 參數 → 風控 → 回測 → 優化」完整流程的示例策略

想了解更多策略與最新功能,請訪問:
👉 PulseForce 官網: https://www.hiforce.ai