VALYNOXSTRATEGY RESEARCH TECHNOLOGY
AlphaPrimeAlphaPrime
策略學院 / 策略生成

如何自動交易:規則、平台、券商與第一次測試

自動交易需要四件事,順序固定:電腦能遵循的規則、在規則未曾調整過的資料上含成本的回測、在模擬環境中連上券商的平台,最後才是一口實單。測試步驟排在券商步驟之前,也是大部分工作所在。

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

目錄
  1. 如何自動交易?
  2. 自動交易在實務上是什麼意思?
  3. 規則、平台與券商:各自負責什麼?
  4. TradingView 可以自動交易嗎?
  5. 自動買賣股票和期貨不一樣嗎?
  6. 第一筆實單前,如何測試規則?
  7. 常見問題
  8. References

如何自動交易?

自動交易的做法:寫下電腦能遵循的規則,載入會監看價格並送出委託單的平台,把平台連上券商帳戶,並在第一筆實單前,用含成本的過去價格測試規則。測試步驟在券商步驟之前,不是之後。

自動交易的設定,是由程式而非人來決定何時送出每一筆委託,券商不必點擊就會執行。概念像恆溫器。你只要寫一次規則(「低於 20 度就開暖氣」),裝置按排程檢查溫度,並自行動作。恆溫器要有用,規則必須精確,連到暖氣的線路也要正常。交易有同樣的兩項要求:精確的規則,以及通往券商的正常路徑。

四個步驟,依序如下:

  1. 寫下規則。進場條件、出場條件、部位大小,以及規則可以交易的交易時段。每個字都必須是程式能計算的數字或比較。
  2. 含成本回測並檢驗。回測是把規則在過去的 K 棒上重播,每筆交易都收取手續費與滑價。要用規則未曾調整過的 K 棒來評斷結果。規則若未通過,就回到步驟 1 重寫。
  3. 把規則載入平台,並在模擬中連上券商。平台把委託單送到模擬帳戶。你要確認委託單送達、成交,且顯示的部位與回測會持有的相同。
  4. 用一口實單開始。最小的部位,時間要長到足以把實單成交與模擬成交比較。
依序的四個步驟:寫規則、含成本回測、在模擬帳戶模擬,然後交易一口實單;回測未通過就回頭重寫規則 先測試再接券商 四個步驟,依此順序 1 2 3 4 寫規則 含成本回測 模擬交易 一口實單 未通過? 重寫 測試先於任何委託單。 所以:測試失敗就換規則。
從書面規則到實單自動委託的四個步驟。測試排在任何券商委託之前,測試未通過就回頭修改規則。

如果你從沒寫過規則,第一支程式交易策略的 30 天新手路線會以新手的步調帶你走過步驟 1 與步驟 2。本文其餘部分說明四個步驟各自需要什麼,以及各自通常在哪裡出問題。

自動交易在實務上是什麼意思?

實務上,平台每根 K 棒檢查一次規則,條件成立就送出委託單,因此你的工作從點擊買賣,轉為撰寫、測試與監督規則。K 棒是一段價格資料的區塊:一天、一小時、一分鐘,或任何固定長度。散戶自動化的規則,多數在每根 K 棒收盤時執行。

每根 K 棒收盤時的迴圈如下。K 棒收盤。平台計算規則用到的指標。空手時檢查進場條件,持有部位時檢查出場條件。條件成立,就向券商送出委託單。券商在下一個可成交的價格成交;K 棒收盤的規則,成交價會落在下一根 K 棒之內。部位與帳戶權益隨之更新。平台等待下一根 K 棒,再從頭開始。

每根 K 棒的迴圈:K 棒收盤,平台檢查規則並送出委託單,成交落在下一根 K 棒;然後迴圈重複 成交落在下一根 K 棒 平台每根 K 棒做什麼 收盤 檢查 委託 成交 本棒 下一棒 每根 K 棒重複 收盤價知道得太晚,來不及買。 所以:回測用下一根成交。
平台在每根 K 棒收盤時做的事。自動交易就是這個迴圈不斷重複,不是單一動作,成交一律落在決定之後的那根 K 棒。

「下一根 K 棒成交」這一步是測試的關鍵。在某根 K 棒收盤時做出決定的規則,無法用同一個收盤價買進,因為收盤價要等 K 棒結束才知道。回測若以決定那根 K 棒的收盤價成交,用的是實際迴圈永遠看不到的價格。下一根 K 棒執行這項設定,讓回測的成交位置與實際迴圈相同。規則導向交易的整體概念、成本,以及許多規則為何扣除成本後虧損,詳見程式交易的定義與成本。

假設性範例

指數期貨上的某個日線規則寫道:當天收盤高於 20 日均價時,在下一個開盤買進。星期一收盤符合條件。平台在收盤後送出市價單,於星期二開盤成交,比公布的開盤價差一個跳動點,因為委託單要排隊。若出場後來取得 10 點的行情,每點 $20,毛損益為 $200。扣除 $4 的一買一賣(來回)手續費,以及每邊 $5 的滑價,淨損益為 $186。這裡的每個數字都是為了示範計算而虛構的。

監督是留意三件事:平台停止收到資料、平台與券商對部位的認知不一致,或實單成交持續比回測假設的更差。這三件都不是規則的問題,卻都會讓自動策略無法做出回測所做的事。

規則、平台與券商:各自負責什麼?

三個部分各有一項工作與一種典型失敗:規則不清楚,在不同平台會得出不同訊號;平台沒有連上券商,只會顯示訊號;券商沒有支援的平台或 API,就無法接收委託單。API(應用程式介面)是一個程式向另一個程式傳送指令的文件化方式,這裡指平台把委託單送給券商。

規則平台券商
工作決定何時進場、出場與下多少監看價格、計算規則、送出委託單執行委託單並保管帳戶
你要提供的書面的精確條件與大小策略原始碼與資料源帳戶,以及 API 或支援的平台連線
典型失敗兩個平台依同一份文字得出不同訊號訊號顯示在圖表上,卻沒有送出委託單委託單遭拒,或因部位大小錯誤而遭追繳保證金
實單前檢查兩個平台在相同 K 棒上得出相同訊號模擬委託單送達模擬帳戶一口實單成交,且部位相符
自動交易的三個部分:規則決定交易,文字含糊就會失敗;平台送出委託單,沒送出就會失敗;券商成交委託單,委託單遭拒就會失敗 各部分只有一項工作 也各有一種典型失敗 規則 平台 券商 決定交易 送出委託 成交委託 文字含糊 沒送出委託 委託遭拒
自動交易的三個部分並列:各自做什麼、你必須提供什麼,以及典型失敗的樣子。

規則的失敗,是交易人最低估的一種。「RSI 超賣就買進」不是規則。「當 14 根 K 棒的 RSI 收盤低於 30,且前一根 K 棒的 RSI 在 30 或以上時,在下一個開盤買進」才是規則,因為兩個不同的程式在相同的 K 棒上,會算出相同的訊號。寫到這個詳細程度相當繁瑣,卻是回測與實際平台能夠一致的唯一辦法。當策略以平台可執行的原始碼從研究中產出時,這一步已經完成;AlphaPrime(Valynox)把找到的規則寫成六個平台的策略程式碼,列在平台匯出頁,因此相同的條件會以平台可編譯的文字,而不是需要再打一次的描述,送到 MultiCharts、TradingView、TradeStation、NinjaTrader、MetaTrader 4 或 MetaTrader 5。

平台的失敗一眼就能看出來:圖表上畫了箭頭,券商那邊卻什麼也沒發生。解法是刻意送出一筆模擬委託單,並追蹤到模擬帳戶。券商的失敗通常表現為委託單遭拒。常見原因有三:帳戶撐不起的部位大小、券商對該商品不接受的委託單類型,或在券商不允許的時段交易。一口實單的一筆委託,就能在策略出問題之前把這三項都暴露出來。

TradingView 可以自動交易嗎?

TradingView 在圖表上執行 Pine Script 策略,規則觸發時可以送出警示;委託單要抵達券商,只能透過支援的券商整合,或由第三方服務轉送的警示 webhook,因此策略邏輯與委託路徑要分別檢查。Pine Script 是 TradingView 自己用來寫指標與策略的語言。webhook 是事件發生時會收到訊息的網址;TradingView 可以把警示文字傳送到這樣的網址。

Pine Script 策略有兩條委託路徑:

  1. 路徑 A,券商整合。TradingView 在交易面板內連接一份券商名單。你的券商在名單上時,策略委託單可以在 TradingView 內直接送到帳戶。支援哪些券商,要到 TradingView 針對你所在地區的頁面確認。
  2. 路徑 B,警示 webhook。策略建立警示。每則警示把訊息送到轉送服務。轉送服務把訊息轉成券商 API 上的委託單。這時有三個獨立的部分必須同時運作:警示、轉送與 API 連線。
Pine Script 策略要抵達券商,若不是經過內建的券商連結,就是經過警示與 webhook 轉送;轉送路徑多出兩個部分,各自都需要檢查 各條委託路徑都要檢查 來自 TradingView 策略 Pine 內建連結 多 2 個部分 警示 轉送 券商 箭頭正確,委託仍可能漏掉。 所以:規則與路徑分開測。
TradingView 策略的兩條委託路徑,以及各自需要檢查的地方:警示在哪裡執行、轉送花多久、實單成交是否與回測成交相符。

兩條路徑有一項共同的檢查:成交價。TradingView 的策略測試器依自己的 K 棒模型回報成交,而實單是在訊息抵達時,以市場當下提供的價格成交。在流動性好的期貨上,差距常常是一兩個跳動點;經過有延遲的轉送,差距可能更大。可以在模擬中量測這個差距:記錄幾十筆委託的策略訊號價與模擬成交價,再把平均值放進之後每次回測的滑價設定。

為研究而寫的策略,可以輸出成 Pine Script v6 供 TradingView 使用,其他平台則用各自的語言。輸出原始碼而不是訊號的重點,是回測中觸發的條件,就是圖表編譯的條件;所以路徑 A 或路徑 B 失敗時,你知道問題出在委託路徑,而不是規則。

自動買賣股票和期貨不一樣嗎?

股票與期貨的三個部分相同,但交易時段、放空、交易單位與每筆成本不同,這會改變規則與回測的設定方式。第二節的迴圈運作方式相同,周邊的設定則不同。

設定美股NQ 這類指數期貨
交易時段一般現貨交易時段,美東時間上午 9:30 至下午 4:00;盤前與盤後交易較清淡接近 24 小時的交易時段,週日晚間至週五下午,每日休息一小時(中部時間下午 5:00 至下午 4:00,休息時間為下午 4:00 至 5:00)
放空券商必須在賣出前先找到可借的股票賣出合約與買進合約的運作方式相同
交易單位股票;一股 $200 的股票,價格每動 $1,損益就動 $1一口合約,每點價值固定;NQ 每個指數點 $20
每一買一賣(來回)成本手續費加買賣價差手續費加交易所與結算費用,再加滑價
隔夜持有你擁有股票;若有借入,需負擔保證金利息保證金存入,損益每日結算
回測資料經股票分割調整的股價由近月合約接成、含轉倉調整的連續月
美股與 NQ 期貨比較:6.5 小時的現貨交易時段,相對於每天約 23 小時;放空要先借股票,相對於賣出就像買進;股票是股,期貨是整口合約 規則相同,設定不同 美股對照 NQ 期貨 美股 NQ 期貨 交易時段 6.5 小時 23 小時 放空 先借股票 如同買進 單位 股 合約 時段與單位會改變規則。 所以:回測前先設定。
自動策略與回測的設定,在美股與指數期貨之間有何不同。規則可以相同;交易時段、單位與成本不會相同。

這幾列中有兩列會改變規則本身。交易時段那一列,決定規則何時可以交易:在下午 4:00 觸發的股票規則,要到隔天早上才有現貨市場;同一時間的 NQ 規則,市場在大半個夜晚都開著。連續月是把先後接續的期貨合約接成一條序列,讓回測能跨越多年;沒有轉倉調整,每次轉倉的價格跳動,看起來會像從未存在過的交易損益。免費的期貨現在有開盤嗎?工具,可用你自己的時區顯示各交易所的交易時段,這是規則中要先設定的第一件事。交易所會不時變更合約時間與每跳動點價值,請以交易所合約頁面的現行數值為準。

單位那一列會改變部位大小規則。股票策略以股計算,幾乎可以調成任何美元金額。期貨策略以整口合約計算,一口 NQ 的單位偏大:每點 $20,50 點的行情就是一千美元(CME Group 合約規格)。微型合約正是為此而存在。如果你想自動化的規則是日內股票規則,美股當沖:先測試日內想法說明了該情況下的現貨交易時段設定與成本。

第一筆實單前,如何測試規則?

在過去的 K 棒上含手續費與滑價執行規則,用規則未曾調整過的資料評斷,再在模擬帳戶中跑幾週,然後才交易一口。順序重要,因為每個階段抓出的失敗不同。回測抓出扣除成本後沒有優勢的規則。樣本外檢查抓出對調整參數用的 K 棒過度最佳化的規則。模擬抓出委託路徑的失敗。一口實單的階段抓出成交的差異。

  1. 第一次回測就含成本。設定每邊手續費,以及流動性好的期貨每邊至少一個跳動點的滑價。用下一根 K 棒執行。看扣除成本後的平均每筆損益,不要看毛利。
  2. 用沒碰過的 K 棒評斷。依日期切分歷史,用較早的部分調整,再把結果原封不動放到較晚的部分來看。怎麼切分、需要多少筆交易,見樣本內 vs 樣本外:怎麼切分、多少才夠。
  3. 模擬四週以上。記錄每個訊號與每筆模擬成交。把平台持有的部位,和回測在相同 K 棒上會持有的部位比較。
  4. 交易一口。把實單成交與模擬成交比較。通過這一步之後,部位大小規則才適用。

以下是步驟 2 結束時,一個保留下來的候選策略的報表樣子。這次回測測試的是 NQ 日 K 棒上的 Fractal 規則,期間 2019-01-02 至 2025-06-30,多空皆做,一口,每筆交易收取 $20 手續費與 $10 滑價。Fractal 規則是用標準指標拼成的替代範例,用來呈現報表的樣子;它不是關於自動交易本身的規則。候選策略是搜尋從 1,024 個嘗試中保留下來的那一個,依報酬相對回撤選出。事後挑出保留者,會讓它看起來更好。一千次嘗試中的最佳者帶有運氣,新的期間不會重複,所以這些數字描述的是該候選策略在那些 K 棒上做了什麼,不是規則能賺多少,也不是讀者能期待什麼。Bailey、Borwein、López de Prado 與 Zhu (2014) 說明了這種挑選效應如何隨嘗試的變體數量快速增大。

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

項目結果
淨損益(已平倉交易)$119,660
最大回撤$30,220
交易筆數124
勝率58.06%
獲利因子1.722
平均每筆損益$965
持倉時間12.44%
保留下來的候選策略的權益曲線,附回撤區帶,並標出樣本外區段。請看標示區段內的斜率與回落深度,不要看整條曲線的形狀。
保留下來的候選策略的權益曲線,附回撤區帶,並標出樣本外區段。請看標示區段內的斜率與回落深度,不要看整條曲線的形狀。 NQ · 日 K · 2019-01-02 至 2025-06-30 · CPU 引擎回測

閱讀報表請照步驟 2 的要求。六年半 124 筆交易,一年約 19 筆,作為單筆數字的樣本偏小。平均每筆損益 $965(扣除 $30 成本後),相對成本偏大,這是要自動化的規則首先該具備的條件。$30,220 的回撤,是帳戶規模該對照的數字;而且因為候選策略是依回撤挑出來的,實單回撤更可能比它更深,而不是更淺。在 AlphaPrime 裡,這種樣本外判讀是策略檢驗內的檢查之一,門檻在搜尋之前就設定好,因此保留或捨棄候選策略的決定,在結果出現前就已寫下。

進入一口實單階段之前,把用演算法交易前的六項檢查拿來,與你自己策略的訊號紀錄和模擬成交並排對照。數出模擬成交比訊號價更差的委託,算出平均差距(以跳動點計),再把這個差距當作滑價設定重跑回測。如果重跑後的平均每筆損益仍是一買一賣(來回)成本的數倍,這條規則就有資格交易第一口實單。

常見問題

如何自動買賣股票?

需要與期貨相同的三個部分:書面規則、執行規則的平台,以及連上平台的券商。股票的話,把規則設定在一般現貨交易時段內交易,以股計算部位,並在回測中把買賣價差當作成本。放空要券商先找到股票,因此放空的規則必須能處理遭拒的委託單。

無需撰寫程式也能自動交易嗎?

可以,前提是策略以平台能編譯的原始碼提供。研究軟體可以把找到的規則寫成主流平台的策略程式碼,交易者再載入檔案、連上券商,並在模擬中測試。你仍然要讀懂規則,因為監督自動策略,必須知道它在每根 K 棒該做什麼。

自動交易需要電腦一直開著嗎?

只要規則可能交易,平台就必須在運行。每天只在 K 棒收盤觸發一次的日線規則,每天一小段時間就夠。接近 24 小時的期貨市場上的日內規則,交易者會讓平台跑在不關機的機器上,常見的是代管伺服器,這樣休眠的筆電就不會漏掉訊號或出場。

上實單前,策略要在模擬中跑多久?

長到足以收集幾十筆模擬委託單,並與訊號比較。日內規則常見的最短時間是四週;每月只交易兩次的日線規則需要更久。目的是量出訊號價與成交價之間的差距,並確認平台中的部位與回測會持有的部位一致。

References

  • 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.
  • CME Group. E-mini Nasdaq-100 Futures Contract Specs. https://www.cmegroup.com/markets/equities/nasdaq/e-mini-nasdaq-100.contractSpecs.html
  • U.S. Securities and Exchange Commission. Understanding Order Types (Investor Bulletin). https://www.investor.gov/introduction-investing/general-resources/news-alerts/alerts-bulletins/investor-bulletins-14