VALYNOXSTRATEGY RESEARCH TECHNOLOGY
AlphaPrimeAlphaPrime
策略學院 / 平台與匯出

MultiCharts 策略怎麼開發?從找想法、寫程式、回測到自動下單的六步流程

可靠的 MultiCharts 策略流程有六步:找想法、寫成 PowerLanguage、含成本回測、樣本外驗證、模擬帳戶自動下單、小部位上線。每一步都在淘汰候選策略,順序不能顛倒;回測報告裡最好看的那條曲線,常常只是你測得最多的那一條。

作者 · 發佈 · 更新於 · 編輯原則

目錄
  1. MultiCharts 策略的完整流程是什麼?
  2. MultiCharts 策略範例哪裡找?
  3. MultiCharts 策略怎麼寫?PowerLanguage 的四個部分
  4. MultiCharts 回測結果怎麼看?
  5. MultiCharts 策略怎麼驗證、避免過度配適?
  6. MultiCharts 怎麼自動下單?上線前要檢查什麼?
  7. 常見問答
  8. 參考文獻

MultiCharts 策略的完整流程是什麼?

一套可靠的 MultiCharts 策略流程有六個固定順序的步驟:找想法、寫成 PowerLanguage 規則、含成本回測、樣本外驗證、模擬帳戶自動下單、小部位上線。每一步都會淘汰一部分候選策略;順序一顛倒,過度配適的策略就會直接進到真錢帳戶。

過度配適是把策略調整到完全貼合某一段歷史價格,結果它描述的是那段價格裡的雜訊,而不是會重複出現的規律。整個流程可以想成招募員工:六關面試,每一關刷掉一些人,最後留下的才簽約。如果先簽正職再面試,面試就只剩形式。策略開發也一樣,先用真錢交易再回頭驗證,驗證就只剩形式。

  1. 找想法。從內建訊號、公開規則或自己的盤中觀察出發,寫下一句話就能說清楚的進出場理由。說不清楚理由的想法在這一關淘汰。
  2. 寫成 PowerLanguage 規則。把想法變成 MultiCharts 能執行的條件與下單指令,訊號在 K 棒收盤計算、下一根 K 棒成交。用到當根收盤價才成交的寫法在這一關淘汰。
  3. 含成本回測。手續費與滑價從第一次回測就加進去。平均每筆獲利低於來回成本的策略在這一關淘汰。
  4. 樣本外驗證。用沒參與調整參數的那段資料跑一次。樣本外轉負、或只靠一兩筆大單撐起來的策略在這一關淘汰。
  5. 模擬帳戶自動下單。讓 MultiCharts 真的送單到模擬帳戶,逐筆比對成交價。成交價持續偏離回測假設的策略在這一關淘汰。
  6. 小部位上線。以最小口數進真錢帳戶,持續記錄。實際結果脫離回測範圍的策略在這一關暫停。
六個步驟依固定順序進行:想法、程式碼、成本、樣本外測試、模擬下單與小量實單,每一關都會淘汰部分候選策略,只有倖存者才能進入真實資金 六道關卡,依固定順序 剩餘候選策略數(示意) 1 想法 2 程式 3 成本 4 樣本外 5 模擬 6 小量實單 只有倖存者才能動用真實資金。 因此:絕不調換順序。
六個步驟固定順序,每一步淘汰一種問題。走到真錢帳戶的策略,是六關都沒被刷掉的那一個。

MultiCharts 策略範例哪裡找?

策略範例有三個來源:MultiCharts 內建的訊號、經典書籍與公開規則、自己的盤中觀察;三者都只能當模板,參數範圍、停損與交易時段都要自己重新測試,不能照抄。

MultiCharts 安裝後就附有一批寫好的訊號,像是均線交叉、通道突破這類常見規則,在 PowerLanguage Editor 裡可以直接打開原始碼。這些訊號的程式已經能跑;預設參數是範例值,不是針對你交易的商品與時段測出來的,所以要用自己的商品與時段重測。

公開規則是第二個來源。通道突破、ATR 停損、開盤區間突破這些規則在書籍與論壇上有完整的文字說明,但多半沒有針對台指期或 NQ 的參數範圍,也很少交代成本。把文字規則寫成程式的過程本身就是一次重新思考:哪一根 K 棒算突破、停損掛在哪裡、收盤前要不要平倉。

第三個來源是自己的盤中觀察,例如「台指期日盤開盤後十五分鐘的區間,被突破後常會延續」。這類想法最貼近你實際盯盤的商品,但也最容易只記得成功的那幾天。把它寫成明確的規則,用十年資料跑一遍,才知道記憶是否可靠。

比較項目內建訊號經典公開規則自己的盤中觀察
取得難度低,軟體內已有低到中,需要讀懂文字規則高,要先把印象寫成規則
已有程式碼?有通常沒有,要自己寫沒有
需要自己補的部分參數範圍、停損、時段參數範圍、停損、時段、成本全部,包括規則本身的精確定義
常見陷阱直接套用預設參數沒含成本、只在作者的市場有效只看一段行情、只記得贏的日子
現成程式碼尚未經過測試:假設性範例中,內建訊號在預設參數且無成本下每筆獲利 60 美元,但重新測試參數並計入成本後,每筆虧損 8 美元 現成程式碼尚未測試 內建訊號,假設性,每筆 原始設定 無成本 重新測試 計入成本 +$60 −$8 預設值可能掩蓋虧損策略。 因此:重測參數,計入成本。
三種來源離「可以測試」的距離不同,但沒有一種可以省掉重新測參數與加成本這兩件事。

MultiCharts 策略怎麼寫?PowerLanguage 的四個部分

一支 PowerLanguage 策略由輸入參數、變數、進出場條件、下單指令四個部分依序組成;訊號在 K 棒收盤計算、下一根 K 棒成交,這個簡單的寫法就是避免偷看未來價格的第一道防線。

可以把一支策略想成一張食譜:輸入參數是可以調整的份量,變數是切好備用的食材,進出場條件是「什麼時候下鍋」,下單指令是「用什麼鍋、煮幾人份」。

  1. 輸入參數。之後要最佳化的數字,例如回看期、停損點數、進場時段。每多一個輸入參數,最佳化器就多一個可以轉動的旋鈕,也就多一個貼合雜訊的機會。三到五個通常夠用。
  2. 變數。每根 K 棒重新計算的中間值,例如通道上緣、ATR、今天的開盤區間。把它們獨立出來,條件式才好讀、好檢查。
  3. 進出場條件。什麼時候做多、什麼時候做空、什麼時候出場。每一條條件都要能用一句話說明理由。
  4. 下單指令。用市價單還是停損單、幾口、什麼時候送出。MultiCharts 的下單指令預設是針對下一根 K 棒,這正是我們要的。
一條通道突破規則,依序拆成四個 PowerLanguage 部分(由上而下):輸入設定長度為 20,變數取該長度內的最高價,條件檢查收盤價是否高於它,訂單在下一根 K 棒買進;每一行都使用上方已定義的名稱 一條規則,四個部分 一條突破規則,由上而下 1 輸入 Len = 20 2 變數 Top = Len 內的最高價 3 條件 收盤 > Top 4 訂單 下一根 K 棒買進 每行都使用上方已定義的名稱。 因此:先宣告,後使用。
PowerLanguage 策略的四個部分與固定順序。寫在前面的東西,後面才用得到。

訊號計算與成交的時間點是整支程式裡最容易出錯的地方。偷看未來價格是指策略在決定時用了當下還拿不到的價格,例如用當根 K 棒的收盤價決定、又用同一個收盤價成交。MultiCharts 預設在 K 棒收盤時計算一次訊號,下單指令對下一根 K 棒生效,所以只要不特地去改這個設定、不在條件式裡引用當根收盤之後才知道的值,大部分的洩漏就自然避開了。其他常見的洩漏點與一根 K 棒的自我檢查,整理在回測中的前視偏差與常見洩漏。

訊號於 K 棒收盤時計算,並於下一根 K 棒開盤成交;指向同一收盤價成交的循環箭頭被劃掉,因為做決策時該價格尚未知道 於下一根 K 棒成交 收盤時產生訊號(金色圓點) 同一收盤價 下一根開盤價 第 N 根 K 棒 下一根 K 棒 同收盤價成交會偷看未來。 因此:維持預設的下一根 K 棒成交。
收盤計算、下一根成交。回到同一根收盤成交的那條箭頭,用的是決定當下還不存在的價格。

如果你的規則是在 MultiCharts 之外產生的,匯入後要逐步確認四個部分都對上,尤其是下單指令的成交時點與口數,步驟整理在把策略匯入 MultiCharts 後逐步比對。

MultiCharts 回測結果怎麼看?

看回測報告先看四個數字:淨利對最大回撤的比例、交易次數、獲利因子、平均每筆獲利對來回成本的倍數;這四個數字合起來,比年化報酬率單獨一個數字能說明更多問題。

下面用 AlphaPrime (Valynox) 跑的一次 NQ 日線回測來示範怎麼讀。先把這次回測測了什麼說清楚:市場是 NQ(Nasdaq-100 期貨),日線,期間 2019-01-02 到 2025-06-30,多空都做,1 口,每筆 20 美元手續費與 10 美元滑價。它測的是一個替代規則,不是本文的主題:只用線性回歸規則進出場,沒有停損、沒有獲利目標、沒有濾網。搜尋總共試了 1,024 個變體,依報酬對回撤留下一個候選,表裡的數字就是留下來的那一個。事後從上千個裡挑出最好的一個,數字一定會比真實能力好看;這些數字不代表線性回歸規則賺了這些錢,也不是讀者可以預期的結果。

來源:AlphaPrime 產品引擎(CPU),2026-10-31 執行。NQ 日線,2019-01-02 至 2025-06-30,多空都做,1 口,每筆手續費 $20、滑價 $10。

項目結果
淨利(已平倉)$150,865
最大回撤$111,615
交易筆數127
勝率53.54%
獲利因子1.355
平均每筆$1,187.91
在場時間86.09%
報表最上方的摘要欄:先找淨利與最大回撤兩格,再看交易次數與獲利因子,最後才看勝率。
報表最上方的摘要欄:先找淨利與最大回撤兩格,再看交易次數與獲利因子,最後才看勝率。 NQ・日線・2019-01-02 至 2025-06-30・CPU 引擎回測

第一個數字是淨利對最大回撤。最大回撤是權益曲線從某個高點掉到之後最低點的最大金額,也就是你在這段期間裡最痛的一次帳面虧損。這次回測淨利 150,865 美元、最大回撤 111,615 美元:淨利只比最大回撤高出一截,表示六年半裡有一段時間,帳戶吐回了大部分之前賺的錢。真實帳戶能不能撐過那一段,比淨利本身更值得問。

第二個數字是交易次數。127 筆分在六年半裡,平均幾週才一筆,屬於低頻策略。筆數少,每一筆的運氣成分對總結果的影響就大;用來做統計判斷時要把它當成線索,而不是結論。

第三個數字是獲利因子。獲利因子是所有獲利交易的總金額除以所有虧損交易的總金額;1.355 表示每虧 1 元,同時賺回 1.355 元。這個數字高於 1 才有討論的價值,但越接近 1,成本或滑價多算一點就可能把它推到 1 以下。

第四個數字是平均每筆獲利對來回成本的倍數。平均每筆 1,187.91 美元,相對於每筆 20 美元手續費與 10 美元滑價的假設,倍數很高,是這張表裡最安心的一格。這個檢查在高頻策略上才會露出問題,下面用台指期的例子說明。

假設範例

假設一支小台當沖策略十年回測賺了 400,000 元,共 10,000 筆交易,平均每筆 40 元。假設每筆來回手續費加稅是 100 元,單邊滑價算 50 元,來回成本 200 元。平均每筆 40 元連成本的一半都不到,加上成本後每筆虧 160 元。沒含成本時這支策略看起來比上面的 NQ 日線漂亮得多,含成本後卻在第三關就被淘汰。

權益曲線與下方的回撤:看曲線的坡度是否平均、最深的回撤在哪一年,以及樣本外那一段開始後坡度有沒有改變。
權益曲線與下方的回撤:看曲線的坡度是否平均、最深的回撤在哪一年,以及樣本外那一段開始後坡度有沒有改變。 NQ・日線・2019-01-02 至 2025-06-30・CPU 引擎回測

還有一格值得多看一眼:持倉時間比例 86.09%,表示這個規則大部分時間都在場內。這段期間 Nasdaq 整體走高,一個幾乎一直持倉的多空規則,結果有一部分會跟著指數本身的漲幅走。這不是錯,但它提醒你去看多單與空單分開的績效,才知道規則本身貢獻了多少。

MultiCharts 策略怎麼驗證、避免過度配適?

驗證的關鍵有四件事:把資料切成樣本內與樣本外、做 walk-forward 滾動視窗、檢查相鄰參數是否表現相近,以及記住自己測過多少個變體,因為測過的變體越多,最好的那一條回測曲線就越可能是運氣。

樣本外是指策略在調整參數時完全沒碰過、只拿來跑一次並讀結果的那段資料。像學生考試:樣本內是講義,樣本外是考卷;事先看過考卷的學生考高分,分數說明不了任何事。切法與需要多少筆樣本外交易,寫在樣本內與樣本外怎麼切、多少才夠。

為什麼測得越多越危險?想像一千個人同時丟十次銅板,總會有幾個人連丟十次正面;你選出丟得最好的那個,並不代表他會丟銅板。策略搜尋也一樣,上面那次 NQ 回測從 1,024 個變體裡留下一個,留下的那一個有一部分是規律、一部分是在這段歷史裡剛好湊對的運氣。Bailey、Borwein、López de Prado 與 Zhu(2014)證明,只要試的變體夠多,即使規則完全沒有預測力,也一定能找到一條樣本內很漂亮的曲線;同一群作者在 2017 年進一步給出計算「最好的那一個其實是過度配適」的機率的方法。

示意圖:單一測試變體在樣本外與樣本內一樣持續上升,而千個變體中的最佳者在樣本內急速上升、樣本外則趨於平坦 最佳選擇逐漸失效 示意圖:切分後比較 單一變體 眾多中的最佳者 樣本內 樣本外 樣本內 樣本外 勝出者有部分靠運氣。 因此:對眾多中的最佳者打折看待。
只測一個變體,樣本外大致延續樣本內;從上千個裡挑最好的一個,樣本外通常明顯變平。留下來的那一個,一部分是規律、一部分是運氣。

Walk-forward 是把「樣本內最佳化、樣本外只測試」沿著時間重複做的方法:在一段視窗上選參數,用選好的參數在緊接的下一段只跑不調,再往前滾動一段,重複到資料用完,最後把每一段的樣本外結果串接成一條曲線。這條串接曲線的每一筆交易,用的都是當時就能決定的參數,所以它是整份報告裡唯一「當年真的交易得到」的結果。Pardo(2008)把這套做法寫成完整的操作流程。MultiCharts 的 Walk-Forward Optimizer 可以執行這個流程;視窗長度與切法的選擇,整理在walk-forward 分析:唯一能真正交易到的回測數字。

推進分析:每一列先在樣本內區間調整參數,再於緊接著的樣本外區段測試一次,然後向右滾動一個區段,將各樣本外區段接合起來,形成可交易的結果 向前滾動,串接樣本外 每列:先調整,再測試一次 IS OOS IS OOS IS OOS 串接 可交易 只有串接的 OOS 可交易。 所以:以那條線判斷策略。
每一列在前段最佳化、後段只測試,再往右滾動一段。下方串接起來的樣本外曲線,才是當時真的能交易到的結果。

第三個檢查是相鄰參數。把回看期從 10 跑到 40,把每個值的淨利畫成長條圖:穩健的規則會出現一片相鄰數值都差不多的高原,過度配適的規則則只有一根孤立的高柱,左右鄰居都很差。市場不會剛好只在回看期等於 23 時有效,24 就失效;那根高柱多半是雜訊。

淨損益依回看期間的示意圖:左側為一大片表現相近、可信賴的平台區,右側為一根孤立的高柱,其鄰近值皆表現不佳,很可能只是運氣 信任平台區 依回看期間的淨損益,示意圖 平台區:可信 尖峰:運氣 單獨一根高柱很可能是雜訊。 因此:從大片平台區中選擇。
左邊一片高原,相鄰參數表現相近,可以信;右邊一根孤立高柱,鄰居全差,多半是運氣。

第四件事是記帳:寫下你測過幾個變體。手動最佳化很容易低估這個數字,因為每改一次停損、每換一個時段都算一個變體。

假設範例

假設一支策略有三個輸入參數:回看期 10 到 40、步長 1,共 31 個值;停損 20 到 60 點、步長 5,共 9 個值;交易時段分日盤與全時段 2 種。全部組合是 31 × 9 × 2 = 558 個變體。最佳化器排序後最上面那一個,是從 558 個裡挑出來的,不是你只測過一次的結果,解讀它的樣本外表現時要把這個數字放在心裡。

這四個檢查最好在搜尋開始前就把通過門檻寫下來,而不是看完結果再決定。AlphaPrime 的策略驗證就是依照事先設定的門檻依序跑樣本內外、walk-forward 等檢查,候選策略在哪一關失敗就停在那一關,後面的資料不會被它多看一眼。

MultiCharts 怎麼自動下單?上線前要檢查什麼?

自動下單先在模擬帳戶跑至少數十筆交易,逐筆比對成交價與回測假設的滑價,確認合約月份、交易時段與券商連線設定一致後,再以最小部位上線並持續記錄。

在 MultiCharts 裡,自動下單是在圖表上開啟自動交易(Automate Order Execution),並選一個券商連線設定;台灣的期貨商多數提供模擬帳戶,MultiCharts 本身也有 Paper Trader 可以在沒有真實連線時模擬成交。模擬帳戶的價值不在獲利數字,而在三個回測裡看不到的東西:單子有沒有送出、成交價離觸發價多遠、斷線後策略的部位狀態對不對。

  1. 模擬帳戶開啟自動下單。用和回測完全相同的策略檔與設定,連到模擬帳戶,讓它自己跑。
  2. 累積數十筆成交。筆數太少時,一兩次異常就會讓判斷偏掉;低頻策略要有耐心等。
  3. 比對成交價與回測滑價假設。把每筆實際成交價減去策略的觸發價,算出平均滑價。若平均滑價高於回測設定,回到回測把滑價調成實測值重跑,看策略是否還過第三關。
  4. 確認合約月份、時段、券商連線設定一致。回測多半用連續合約,實際下單卻送到特定月份,換月前後要確認圖表商品與下單商品是同一個;圖表的交易時段範本要和交易所的實際時段相同;券商連線設定裡的口數與回測一致。逐項比對的清單在從產生的策略到 MultiCharts 的 PowerLanguage 比對清單。
  5. 最小部位上線並記錄。第一口真錢只是為了取得真實成交資料。把每筆成交、每次斷線、每次手動介入都記下來,三個月後和回測的平均每筆、勝率、最大回撤範圍對照。
從模擬交易、滑價檢查、設定檢查到以一口實單上線,每項通過的檢查往前推進,每項未通過的檢查則退回回測設定 未通過?回到回測 每項檢查:通過則前進,否則退回 模擬 滑價 設定 實單上線 通過 通過 通過 未通過 未通過 未通過 回測設定 未通過的檢查會重新回測。 因此:以實測滑價重新回測。
從通過回測到第一口真錢,每一步都有通過與不通過兩個出口;不通過的出口一律回到回測設定,而不是直接改參數再上線。

如果你評估的不只是 MultiCharts,不同平台在不寫程式的情況下能自動執行到什麼程度差異很大,不寫程式也能自動交易的平台差異一文按功能逐項整理。選擇平台時,上面五個步驟能不能在那個平台上一步不漏地做完,比介面好不好看重要。

下一步可以今天就做:打開你 MultiCharts 裡最舊的一支策略的績效報告,數一數交易次數,再回想這支策略的參數你前後改過幾次。把這兩個數字寫在策略檔的第一行註解裡,之後每次看它的回測曲線,先讀這兩個數字再讀曲線。

常見問答

MultiCharts 策略回測要用多長的資料?

用交易筆數而不是年數來決定。樣本外至少要有幾十筆已平倉交易才看得出平均每筆是否站得住,幾百筆以上比較可靠;低頻策略需要更多年的資料,或改用 walk-forward 把同一段歷史產生更多筆樣本外交易。資料同時要涵蓋趨勢、盤整、劇烈波動與清淡等不同行情,不然策略可能只是因為資料全是多頭而通過。

參數最佳化之後,怎麼確認不是過度配適?

做三件事:用最佳化時沒用到的樣本外資料跑一次,看平均每筆是否還是正的;把被選中參數的相鄰數值也跑一遍,看表現是否相近而不是只有一個值有效;寫下這次最佳化總共試了多少個組合,組合越多,對最好那一個的折扣要越大。三項都過,再進模擬帳戶。

MultiCharts 自動下單要先在模擬帳戶跑多久?

以交易筆數計,至少幾十筆成交,而不是固定幾週。每一筆都把實際成交價和策略的觸發價相減,算出平均滑價,再和回測裡設定的滑價比較。同時確認下單的合約月份、圖表時段與券商連線設定都和回測一致。平均滑價高於回測假設時,先回到回測把滑價改成實測值重跑,而不是直接上線。

不會寫 PowerLanguage 也能做 MultiCharts 策略嗎?

可以從 MultiCharts 內建的訊號開始,這些訊號已經寫好,只要調整輸入參數就能回測。進一步可以讀懂內建訊號的四個部分(輸入參數、變數、進出場條件、下單指令),再修改條件式。也有工具能把搜尋出來的策略匯出成 PowerLanguage 等平台的策略原始碼,匯入 MultiCharts 後,仍然要走一次含成本回測、樣本外驗證與模擬帳戶這三關,不能因為程式是現成的就跳過。

參考文獻

  • Bailey, D. H., Borwein, J., López de Prado, M., & Zhu, Q. J. (2014). Pseudo-Mathematics and Financial Charlatanism: The Effects of Backtest Overfitting on Out-of-Sample Performance. Notices of the American Mathematical Society, 61(5), 458–471.
  • Bailey, D. H., Borwein, J., López de Prado, M., & Zhu, Q. J. (2017). The Probability of Backtest Overfitting. Journal of Computational Finance, 20(4), 39–69.
  • Pardo, R. (2008). The Evaluation and Optimization of Trading Strategies (2nd ed.). John Wiley & Sons.