H.Q.C. 赫斯提亞量化資本 · 免費知識分享
很多人認為設計量化策略需要很強的程式能力。但其實,最難的部分不是寫程式,而是在動筆之前,把一個「感覺有效」的交易想法,轉化成一套「清晰到電腦能看懂」的規則。本章節就從這個起點開始。
幾乎所有量化策略的開發,都需要經歷以下三個層次的轉化,從模糊走向精確:
任何一個完整的量化策略,都由以下四個功能模塊組成。設計前先把每個模塊的內容確認清楚:
什麼時候進場?做多還是做空?在什麼時間點執行(當根K棒收盤?下一根開盤?)?
範例:20日均線向上穿越60日均線,且穿越當根K棒的成交量高於過去10日均量,隔日開盤以市價進場做多。
注意:「穿越」、「成交量放大」、「趨勢明顯」這些詞,必須全部替換成可以計算的具體條件,才算完成。
這是最重要的模塊,沒有之一。停損點必須在進場之前就決定,而且是固定規則,不能在持倉期間因為情緒而改變。
| 停損類型 | 說明 | 優點 | 缺點 |
|---|---|---|---|
| 固定點數停損 | 進場後下方固定 N 點即停損(例如 50 點) | 簡單,每筆最大損失固定可計算 | 不隨市場波動調整,高波動期容易被正常波動觸及 |
| ATR 倍數停損 | 以市場平均波動幅度(ATR)的倍數設定停損 | 自動適應市場當下的波動特性 | 每筆損失金額不固定,需要額外的資金管理計算 |
| 支撐/阻力停損 | 設在明顯的技術支撐位下方 | 有技術邏輯依據 | 「明顯支撐」仍有主觀性,需要精確量化 |
什麼時候出場鎖利?固定目標點數、移動停利(追蹤最高點動態調整),或反向信號出場?不同的出場方式,對策略的勝率和盈虧比有根本性的影響。
每次進場幾口?是否隨帳戶規模動態調整?單次最大允許虧損是帳戶資金的幾%?資金管理決定了策略的長期生存能力,通常比進場條件本身更重要。
這是策略設計中最需要練習的技能。以下是常見的模糊描述,以及它們的量化替換方式:
| 模糊描述 | 量化替換範例 |
|---|---|
| 「趨勢向上」 | 20日均線在60日均線之上,且20日均線的今日值高於5根K棒前的值(均線斜率向上) |
| 「成交量放大」 | 今日成交量 > 過去10日平均成交量的1.5倍 |
| 「短線超賣」 | RSI(14) 低於 30 |
| 「收長紅K」 | 收盤價 > 開盤價,且(收盤 - 開盤)> 指數×0.3% |
| 「突破壓力」 | 今日收盤價突破過去20根K棒的最高點 |
| 「市場恐慌」 | 台指期日波動(當日高-低)> 過去20日平均波動的2倍 |
核心原則:如果你的策略中還有任何需要「感覺判斷」的部分,它就還不是一個可以量化的策略。完整量化的標準是:換個人來看同一個條件,得到的答案必須完全一樣。
有人認為進場條件越多越嚴格越好,但條件越多,觸發機會越少,整個回測期的交易筆數可能只有 10 幾筆。樣本數不足,任何結論都沒有統計意義,等於在用「剛好」而非「規律」下結論。
不自覺地把策略調整到剛好在「最近這波大行情」表現很好,但回頭看其他時段卻沒什麼效果。這種策略在未來遇到不同的行情環境,幾乎必然失效。
手續費、期交稅、還有進出場的滑價(下委託和實際成交價之間的差距),對於交易頻率高的策略影響巨大。一個看起來每筆賺 5 點的策略,扣掉成本後可能是虧的。
MultiCharts 的策略語言 PowerLanguage,語法設計上非常接近人類語言,以下是一個最簡單的均線交叉進場策略範例,讓你感受量化策略的程式樣貌:
這段程式碼只有 10 行,但已經包含了一個完整策略的最基本骨架:計算指標、設定進場條件、設定停損。在 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. 赫斯提亞量化資本 · 官網免費知識分享區 · 內容僅供教育參考