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

如何設計一個量化策略?

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

本頁為教學說明,不構成投資建議;文中任何條件、參數與數字皆為說明寫法用的示意,非操作建議;商品規格以期交所公告為準。

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

一、策略設計的三層轉化

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

1
概念層(你的交易直覺)
(當市場形成明顯上升趨勢時,在短線回調後考慮進場)
這個描述有畫面感,但「明顯上升趨勢」和「短線回調」電腦看不懂。
2
規則層(精確的文字條件)
(當快線位於慢線之上,且今日收盤價低於昨日收盤價,於下一根 K 棒開盤價記為進場時點;進場前先寫定以 ATR 倍數定義的停損距離,出場目標則以停損距離的倍數表示)
每個條件都寫成可以計算的形式,換人來判讀不會有第二種答案。
3
程式層(電腦可讀的語言)
用 MultiCharts 的 PowerLanguage,把第二層的文字規則描述成程式結構,讓電腦在每根 K 棒上以同一套標準重複判斷並記錄結果,供歷史檢驗使用。
可回測、可最佳化、可做前進分析。
許多人直接跳到第三層(寫程式),卻跳過了第二層的精確規則設計,這是量化策略開發最常見的疏漏。第二層沒寫清楚,程式裡就會塞滿沒被意識到的模糊假設,回測結果因此失真。

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

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

① 進場條件(Entry)

進場條件在什麼情況下算成立?規則裡要不要把方向也一起寫定,還是留給後續測試決定?條件成立後,要用哪一個時間點記錄進場(當根 K 棒收盤?下一根開盤?)?

示意寫法:快線由下往上穿越慢線,且穿越當根 K 棒的成交量高於過去 N 日均量,條件成立後以下一根 K 棒的開盤價記為進場時點(僅示範條件怎麼寫,非操作建議)。

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

② 停損條件(Stop Loss)

停損是風險管理中最不宜省略的模塊。停損距離需要在進場之前就寫定,並以固定規則呈現,避免在持倉期間依當下情緒調整。

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

③ 停利條件(Take Profit)

什麼時候出場鎖利?以事先寫定的距離作為目標、移動停利(隨有利方向的極值動態調整),或原進場條件反向成立時出場?不同的出場方式,對策略的勝率和盈虧比有根本性的影響。

④ 資金管理(Position Sizing)

單筆部位規模如何決定?是否隨帳戶規模動態調整?單次最大允許虧損佔帳戶資金的比例要如何事先寫定?資金管理決定策略在連續虧損下能否存續,是回測與風險評估中不宜略過的一環。

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

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

模糊描述量化替換的示意寫法
「趨勢向上」快線在慢線之上,且快線的今日值高於前 N 根 K 棒的值(均線斜率向上)
「成交量放大」今日成交量 > 過去 N 日平均成交量的某一自訂倍數
「短線超賣」RSI 讀值落在自訂的低讀值門檻以下(門檻設得越寬,條件成立次數越多,需自行測試)
「收長紅K」收盤價 > 開盤價,且(收盤 - 開盤)大於指數點數的某一自訂百分比
「突破壓力」今日收盤價高於過去 N 根 K 棒的最高價
「市場恐慌」當日波動(當日高 - 低)大於過去 N 日平均波動的某一自訂倍數

本表所有寫法皆為示意,期數、倍數與門檻需自行研究決定,不構成參數建議。

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

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

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

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

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

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

陷阱三:忽略交易成本

手續費、期交稅、還有進出場的滑價(下委託和實際成交價之間的差距),對於交易頻率高的策略影響巨大。一個帳面上平均每筆獲利很小的策略,把這些成本扣掉之後,結果可能由正轉負。


MultiCharts

認識 PowerLanguage:一段策略程式由哪些區塊組成

MultiCharts 的策略語言 PowerLanguage,語法設計上接近人類語言。正因為語法貼近人類語言,理解它的結構不需要先會寫程式,以下不提供可執行的策略程式,只拆解一段策略程式通常由哪四個區塊構成,實際撰寫不在本站範圍:

一段策略程式通常由四個區塊組成:

  1. 參數宣告:把日後想調整的數值集中寫在最前面,例如均線長度、停損距離的倍數。集中宣告的好處是修改時不必翻找整份程式,也讓每次測試改了什麼一目了然。
  2. 指標計算:呼叫內建函數把價格序列轉成指標值,例如移動平均、波動度、區間高低點。這一段決定了條件判斷可以使用哪些材料。
  3. 條件判斷:把規則層寫定的文字條件,改寫成成立或不成立的邏輯式,每根 K 棒重新判斷一次。模糊詞若沒在這裡變成可計算的比較式,就無法進入程式層。
  4. 動作區塊:條件成立之後要做什麼、部位規模與單筆風險上限寫在哪裡。規則層沒寫清楚的欄位,到這一段就會變成程式裡的預設值,回測結果失真多半是從這裡開始的。

本段僅說明程式的組成結構,不提供可執行的程式語句。

理解這四個區塊各自負責什麼,比記住任何一段程式重要。程式層的價值在於同一組條件能被重複檢驗:條件一旦寫定,電腦會用同樣的標準看待每一根 K 棒,不會因為當下情緒而放寬。至於條件在歷史資料上的表現如何,取決於研究者自己設定的樣本區間、成本假設與驗證方式,回測數字本身不等於未來結果。

MultiCharts 常用內建函數速覽

函數用途寫法說明
Average(Price, Length)計算簡單移動平均線(SMA)Average(Close, Length) → 收盤價的移動平均
Cross(A, B)判斷 A 是否從下往上穿越 BCross(FastMA, SlowMA) → 判斷快線是否在該根 K 棒由下而上穿越慢線
RSI(Price, Length)計算相對強弱指數(RSI)RSI(Close, Length) → 指定期數的 RSI 讀值
AvgTrueRange(Length)計算平均真實波動區間(ATR)AvgTrueRange(Length) → 指定期數的平均真實波動區間
Highest(Price, Length)取最近 N 根 K 棒的最高價Highest(High, Length) → 指定根數內的最高價
Lowest(Price, Length)取最近 N 根 K 棒的最低價Lowest(Low, Length) → 指定根數內的最低價
MarketPosition回傳目前部位狀態(1 代表多方部位、-1 代表空方部位、0 代表無部位)用於判斷目前是否已有部位
Close[N]存取 N 根K棒前的收盤價Close[N] → 前 N 根 K 棒的收盤價

想把交易想法整理成可檢驗的規則?

從一個交易想法到一套寫得清楚、能被檢驗的規則,中間還有不少觀念要釐清:多個條件如何組合、出場方式怎麼分類、回測結果有哪些常見的失真來源。H.Q.C. 赫斯提亞量化教育學院在 Pressplay Academy 的課程,以量化觀念、歷史案例、公開資料判讀、回測方法與風險管理為主軸。

本課程為教育內容,不含程式實作,不提供現成策略、買賣訊號、特定商品建議或自動交易工具。

前往 Pressplay 查看完整課程

© H.Q.C. 赫斯提亞量化資本 · 官網免費知識分享區 · 內容僅供教育參考 · 版本 v2.0(2026-09-10)