← 第二章節:台灣期貨入門 🏠 返回首頁 第四章節:如何看懂績效數字? →
第三章節

如何設計一個量化策略?

H.Q.C. 赫斯提亞量化資本 · 免費知識分享

很多人認為設計量化策略需要很強的程式能力。但其實,最難的部分不是寫程式,而是在動筆之前,把一個「感覺有效」的交易想法,轉化成一套「清晰到電腦能看懂」的規則。本章節就從這個起點開始。

一、策略設計的三層轉化

幾乎所有量化策略的開發,都需要經歷以下三個層次的轉化,從模糊走向精確:

1
概念層(你的交易直覺)
「當市場形成明顯上升趨勢時,在短線回調後買進」
這個描述有畫面感,但「明顯上升趨勢」和「短線回調」電腦看不懂。
2
規則層(精確的文字條件)
「當 20 日均線在 60 日均線之上,且今日收盤價低於昨日收盤價,隔日開盤進場做多。停損設在進場價下方 50 點,目標設在進場價上方 150 點。」
每個條件都是可計算的數字,沒有模糊地帶。
3
程式層(電腦可執行的語言)
用 MultiCharts 的 PowerLanguage,把第二層的規則轉成程式碼,讓電腦自動在每根 K 棒判斷條件並執行進出場。
可回測、可最佳化、可自動下單。
許多人直接跳到第三層(寫程式),卻跳過了第二層的精確規則設計。這是量化策略開發最常見的錯誤。沒有清晰的第二層,你寫的程式碼很可能包含大量的模糊假設,導致回測結果失真。

二、量化策略的四個組成模塊

任何一個完整的量化策略,都由以下四個功能模塊組成。設計前先把每個模塊的內容確認清楚:

① 進場條件(Entry)

什麼時候進場?做多還是做空?在什麼時間點執行(當根K棒收盤?下一根開盤?)?

範例:20日均線向上穿越60日均線,且穿越當根K棒的成交量高於過去10日均量,隔日開盤以市價進場做多。

注意:「穿越」、「成交量放大」、「趨勢明顯」這些詞,必須全部替換成可以計算的具體條件,才算完成。

② 停損條件(Stop Loss)

這是最重要的模塊,沒有之一。停損點必須在進場之前就決定,而且是固定規則,不能在持倉期間因為情緒而改變。

停損類型 說明 優點 缺點
固定點數停損 進場後下方固定 N 點即停損(例如 50 點) 簡單,每筆最大損失固定可計算 不隨市場波動調整,高波動期容易被正常波動觸及
ATR 倍數停損 以市場平均波動幅度(ATR)的倍數設定停損 自動適應市場當下的波動特性 每筆損失金額不固定,需要額外的資金管理計算
支撐/阻力停損 設在明顯的技術支撐位下方 有技術邏輯依據 「明顯支撐」仍有主觀性,需要精確量化

③ 停利條件(Take Profit)

什麼時候出場鎖利?固定目標點數、移動停利(追蹤最高點動態調整),或反向信號出場?不同的出場方式,對策略的勝率和盈虧比有根本性的影響。

④ 資金管理(Position Sizing)

每次進場幾口?是否隨帳戶規模動態調整?單次最大允許虧損是帳戶資金的幾%?資金管理決定了策略的長期生存能力,通常比進場條件本身更重要。

三、把模糊詞彙換成精確條件

這是策略設計中最需要練習的技能。以下是常見的模糊描述,以及它們的量化替換方式:

模糊描述 量化替換範例
「趨勢向上」 20日均線在60日均線之上,且20日均線的今日值高於5根K棒前的值(均線斜率向上)
「成交量放大」 今日成交量 > 過去10日平均成交量的1.5倍
「短線超賣」 RSI(14) 低於 30
「收長紅K」 收盤價 > 開盤價,且(收盤 - 開盤)> 指數×0.3%
「突破壓力」 今日收盤價突破過去20根K棒的最高點
「市場恐慌」 台指期日波動(當日高-低)> 過去20日平均波動的2倍

核心原則:如果你的策略中還有任何需要「感覺判斷」的部分,它就還不是一個可以量化的策略。完整量化的標準是:換個人來看同一個條件,得到的答案必須完全一樣。

四、策略設計常見的三個陷阱

陷阱一:條件太多,樣本太少

有人認為進場條件越多越嚴格越好,但條件越多,觸發機會越少,整個回測期的交易筆數可能只有 10 幾筆。樣本數不足,任何結論都沒有統計意義,等於在用「剛好」而非「規律」下結論。

陷阱二:只針對特定行情最佳化

不自覺地把策略調整到剛好在「最近這波大行情」表現很好,但回頭看其他時段卻沒什麼效果。這種策略在未來遇到不同的行情環境,幾乎必然失效。

陷阱三:忽略交易成本

手續費、期交稅、還有進出場的滑價(下委託和實際成交價之間的差距),對於交易頻率高的策略影響巨大。一個看起來每筆賺 5 點的策略,扣掉成本後可能是虧的。


MultiCharts

PowerLanguage 入門:你的第一段策略程式碼

MultiCharts 的策略語言 PowerLanguage,語法設計上非常接近人類語言,以下是一個最簡單的均線交叉進場策略範例,讓你感受量化策略的程式樣貌:

{ 簡單均線交叉策略示意 } { Inputs:可在圖表介面直接調整的參數 } Inputs: FastLength(20), SlowLength(60), StopPoints(50); { 計算快線與慢線 } Vars: FastMA(0), SlowMA(0); FastMA = Average(Close, FastLength); SlowMA = Average(Close, SlowLength); { 進場:快線向上穿越慢線,下一根K棒開盤進多 } If Cross(FastMA, SlowMA) Then Buy("Golden Cross") 1 Contract Next Bar At Open; { 停損:進場後下方50點自動出場 } SetStopLoss(StopPoints);

這段程式碼只有 10 行,但已經包含了一個完整策略的最基本骨架:計算指標、設定進場條件、設定停損。在 MultiCharts 中把這段程式碼套用到台指期圖表,你就能立刻看到每一次這個條件觸發時,歷史上的損益結果。

MultiCharts 常用內建函數速覽

函數 用途 範例
Average(Price, Length) 計算簡單移動平均線(SMA) Average(Close, 20) → 20日收盤均線
Cross(A, B) 判斷 A 是否從下往上穿越 B Cross(FastMA, SlowMA) → 金叉訊號
RSI(Price, Length) 計算相對強弱指數(RSI) RSI(Close, 14) → 14期 RSI
AvgTrueRange(Length) 計算平均真實波動區間(ATR) AvgTrueRange(14) → 14期 ATR
Highest(Price, Length) 取最近 N 根 K 棒的最高價 Highest(High, 20) → 20根最高點
Lowest(Price, Length) 取最近 N 根 K 棒的最低價 Lowest(Low, 20) → 20根最低點
MarketPosition 返回目前持倉狀態(1=多、-1=空、0=無) 用於避免重複進場
Close[N] 存取 N 根K棒前的收盤價 Close[1] → 前一根收盤價

想把策略從概念落地到實際程式碼?

從交易直覺到完整可執行的量化系統,中間還有許多細節需要掌握:如何處理多條件組合、如何設計移動停利、如何避免程式邏輯錯誤?H.Q.C. 赫斯提亞量化教育學院在 Pressplay Academy 的課程,有完整的 PowerLanguage 實戰教學,帶你一步步從零建立自己的策略系統。

前往 Pressplay 查看完整課程

© H.Q.C. 赫斯提亞量化資本 · 官網免費知識分享區 · 內容僅供教育參考