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

程式交易語言怎麼選?五種平台語言與 Python 一次比較

程式交易語言不是自由挑的,而是你的商品、券商與下單平台一路推導下來的結果:國內期貨商提供的下單平台多半用 PowerLanguage,看圖與測試用 TradingView 的 Pine Script,外匯與 CFD 帳戶用 MT4/MT5 的 MQL。不會寫程式的人可以先用策略生成工具產出程式碼,再學著讀懂它。

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

目錄
  1. 程式交易要學哪種語言?先看你用哪個平台
  2. 五種平台語言差在哪裡?
  3. Python 適合做程式交易嗎?
  4. 不會寫程式可以做程式交易嗎?什麼時候用生成工具取代寫程式
  5. 策略可以換平台嗎?搬移時會變什麼
  6. 怎麼依商品與券商決定語言?六個步驟
  7. 常見問答
  8. 參考文獻

程式交易要學哪種語言?先看你用哪個平台

程式交易語言不是自由挑選的,而是你的下單平台決定的結果:國內期貨商提供的下單平台多半寫 PowerLanguage,看圖與測試用 TradingView 就寫 Pine Script,外匯與 CFD 帳戶用 MT4/MT5 就寫 MQL。不會寫程式的人,可以先用策略生成工具產出程式碼,再學著讀懂它。

程式交易語言是你把進出場規則寫給平台看、讓平台替你回測與下單的那種程式語言。它像出國要帶哪種插頭:決定插頭形狀的是當地的插座,不是你喜歡哪一種。平台就是插座,語言只是配合它的插頭。所以在問「程式交易要學哪種語言」之前,先問「我的帳戶能接哪個平台」。台灣讀者最常見的三種情境如下。

你的情境平台語言
在國內期貨商開戶,交易台指期或海外期貨期貨商提供的程式交易平台(依券商而定)PowerLanguage
先看圖、先測試,下單方式之後再說TradingViewPine Script
外匯或 CFD 帳戶MT4 或 MT5MQL4 或 MQL5
決策鏈只有一個方向:券商決定平台,平台決定語言;先選語言再找券商,等於倒果為因 平台決定語言 決策鏈只有一個方向 券商 平台 語言 倒果為因 語言是最後一環。 所以:先問券商。
券商與商品決定平台,平台決定語言。這條鏈只往一個方向走,先挑語言再找券商是倒著走。

如果你連平台都還沒決定,就從商品與券商開始推,完整的推導順序放在第六段。不會寫程式、想先走一遍完整流程的人,可以先讀台指期程式交易從零開始到第一套策略,再回來看語言的比較。

五種平台語言差在哪裡?

五種平台語言的差異主要在所屬平台、能不能連到台灣期貨商、以及程式碼的結構,而不在策略能表達什麼:一條均線交叉加一個停損,五種語言都寫得出來。下表列出可以直接查證的差異。

語言所屬平台連到台灣期貨商內建回測需宣告變數執行模型
EasyLanguageTradeStation需向券商確認有要逐根 K 棒
PowerLanguageMultiCharts常見,依券商有要逐根 K 棒
Pine ScriptTradingView需向券商確認有不用逐根 K 棒
NinjaScriptNinjaTrader需向券商確認有要事件函式(OnBarUpdate)
MQL4/MQL5MT4/MT5需向券商確認有要事件函式(OnTick)
五種平台語言在平台、券商連線與程式結構上各不相同,但五者能表達的策略規則完全相同 五種語言,同一套策略 三項不同,一項相同 平台 各有各的 券商連線 請洽券商 程式結構 K 棒或事件 策略規則 五者皆相同
五種語言的差異在平台、券商連線與程式結構,不在策略能寫什麼。EasyLanguage 與 PowerLanguage 的語法最接近。

表格裡兩個欄位需要解釋。「宣告變數」是在使用一個數值之前,先告訴程式它叫什麼名字、是什麼型態;EasyLanguage、PowerLanguage、NinjaScript 與 MQL 都要先宣告,Pine Script 用等號指定值就算宣告,少一個步驟。「執行模型」是平台呼叫你程式碼的方式:「逐根 K 棒」是程式從歷史資料的第一根算到最後一根,每根跑一次你的規則;「事件函式」是平台在某件事發生時(一根 K 棒完成、一筆新報價到達)才呼叫你寫好的那段函式。兩種模型都能寫出同一套規則,差別在你讀程式碼時要從哪裡開始看。

「連到台灣期貨商」這一欄最影響你的選擇。PowerLanguage 所屬的平台由國內多家期貨商提供給客戶,所以 PowerLanguage 是台灣程式交易最常見的語言;表中其他平台能不能下單到你的帳戶,取決於券商支援,請在開戶前直接向券商確認平台清單,不要用別人的經驗推測。

如果你已經會其中一種,學第二種的成本不一樣。PowerLanguage 設計時刻意相容 EasyLanguage,兩者的關鍵字、函式名稱與逐根執行的寫法大部分相同,一套策略在兩者之間搬動的改寫量最小;EasyLanguage 與 PowerLanguage 搬移策略時會改變什麼把需要注意的差異列成清單。NinjaScript 建立在 C# 之上,MQL 的寫法接近 C,兩者對沒學過一般程式語言的人門檻較高。

Python 適合做程式交易嗎?

Python 適合做平台做不到的自訂研究,代價是整個交易系統的每一層都要自己寫、自己維護,一個人同時扮演研究員與工程師。平台語言像租一間裝潢好的店面,你只負責擺商品;Python 像買地自建,自由,但水電、消防、招牌全是你的事。

交易系統六層中,平台語言只需你撰寫一層,即策略邏輯;使用 Python 則六層全部由你自行建置與維護 Python:每一層都要自己建 交易系統六層 平台 1 / 6 Python 6 / 6 需自行建置 平台內建 平台替你處理五層。 所以:只有真正需要時才用 Python。
用平台語言,六層裡你只寫策略邏輯一層;用 Python,六層全部自己蓋、自己修。

用平台語言時,下面六層裡只有第一層是你的工作。用 Python 時,六層全部是你的工作,而且不是寫一次就結束:

  1. 策略邏輯。兩邊都要寫,這是唯一相同的部分。
  2. 資料取得與清理。歷史 K 棒從哪裡來、缺漏與錯誤報價怎麼補、時區怎麼對齊、連續月合約怎麼接。用平台語言時這一層由平台替你處理,Python 要你自己處理每一個商品。
  3. 回測引擎。一根一根重播價格、記錄部位與權益。開源套件可以用,但每一個套件的成交假設都不一樣,你要先讀懂它再信它。
  4. 撮合與成本模型。停損單什麼時候算成交、同一根 K 棒同時碰到停損與停利怎麼算、手續費與滑價怎麼扣。這一層寫錯,回測數字會好看得不合理。
  5. 券商連線下單。每家券商的 API 格式不同,斷線重連、委託回報、部位對帳都要自己寫。
  6. 監控與重啟。程式半夜當掉誰知道?平台有現成的警示與自動重啟,Python 要你自己架。

所以「程式交易 Python」這個問題,真正要先回答的是:你要的是研究自由,還是一套可以快點上線的策略?如果你的想法用內建指標與條件就表達得完,平台語言可以讓你在幾週內走到模擬下單;如果你的想法需要平台沒有的資料或計算(例如跨商品的統計關係、自訂的機器學習特徵),Python 是唯一的路,但要把前面五層的維護時間算進成本。很多人兩者都用:Python 做研究,平台語言做執行,兩邊的規則與成本設定要刻意保持一致。

不會寫程式可以做程式交易嗎?什麼時候用生成工具取代寫程式

當你的目標是「有一套能測、能匯出、能照規則驗證的策略」,而不是「學會一門語言」時,策略生成加回測可以取代手寫程式碼。策略生成是由程式依你設定的指標、參數範圍與進出場條件,自動組合出大量候選策略並逐一回測的方法;你不寫語法,而是設定搜尋範圍,再讀結果。

你的目標適合的做法原因
想親手實作一個已經想清楚的規則學平台語言,手寫規則只有一個,寫一次就好,學語言的時間用得上
想從很多規則組合裡找出通過驗證的策略生成,再讀程式碼手寫一萬個變體不可行,生成工具負責組合與回測
規則需要平台沒有的資料或計算Python 自建平台語言與生成工具都表達不了

用生成工具的人最後還是會讀程式碼,只是順序反過來:先有一套通過回測的策略,再打開它的原始碼,對照自己設定的條件,一行一行看懂。這比從語法書第一章學起快,因為你讀的每一行都對應一個你自己設定過的條件。下面是用 AlphaPrime(Valynox)跑出的一個實際生成結果。這是用 Aroon 替代規則(不是本文主題本身)、ES 日線、2019-01-02 至 2025-06-30、多空各 1 口跑的一次搜尋,留下的是 1,024 個候選中依報酬對回撤事後挑出的一個,事後挑選會高估它。

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

項目結果
淨利(已平倉)$142,107.5
最大回撤$58,717.5
交易筆數34
勝率64.71%
獲利因子2.987
平均每筆$4,179.63
在場時間91.22%
先看三個地方:上方的權益曲線、下方的回撤帶、以及標出的樣本外區段。這是 1,024 個候選中事後留下的一個,它的曲線會比這條規則本身好看。
先看三個地方:上方的權益曲線、下方的回撤帶、以及標出的樣本外區段。這是 1,024 個候選中事後留下的一個,它的曲線會比這條規則本身好看。 ES・日線・2019-01-02 至 2025-06-30・CPU 引擎回測

這張報表要怎麼讀?34 筆交易很少,平均每筆的數字一換掉兩三筆大賺的交易就會大幅移動;持倉時間 91.22% 表示它幾乎一直在場內,報酬裡有很大一部分來自這段期間的大趨勢,而不是進出場的時機。更重要的是,這是從 1,024 個候選裡挑最好的一個,Bailey 等人(2014)說明了為什麼這樣挑出來的回測結果幾乎一定被高估:候選愈多,最好的那一個靠運氣勝出的成分愈大。所以這個數字只說明「生成工具會給你什麼樣的起點」,不說明 Aroon 規則賺了這些錢,更不說明你可以期待這個結果。

生成出來的策略接下來要做的事,和手寫的策略一模一樣:切出樣本外、做走動式分析、加倍滑價再跑一次、看鄰近參數是不是也站得住;以日內策略為例,當沖策略怎麼建立與測試把這些步驟按順序排好。在 AlphaPrime 的策略生成裡,你設定的是可用的指標與規則、參數區間、進出場條件與搜尋限制,不是一行一行的語法,產出的候選帶著手續費、滑價與下一根成交的設定進入回測與驗證。

策略可以換平台嗎?搬移時會變什麼

同一套規則可以搬到另一個平台,但有五項設定會改變回測數字,所以搬移是一份對照清單,不是複製貼上。規則本身(什麼時候進、什麼時候出)在五種語言裡都寫得出來;會變的是規則周圍的執行假設。

設定為什麼會改變數字搬移後要對照什麼
撮合時點在訊號那根 K 棒的收盤成交,還是下一根的開盤成交,每筆的進場價都不同兩邊都設成同一種;下一根開盤較接近實際
交易時段與時區日盤還是全時段、每日 K 棒幾點切,會改變 K 棒數與訊號數兩邊的 K 棒總數要一樣
跳動點與點值一跳多少錢算錯,整份損益等比例錯核對商品規格;交易所會調整,以交易所合約規格頁為準
手續費與滑價一邊有扣、一邊沒扣,淨損益差一截每筆來回的金額設成相同
連續月合約換倉換月日期與價差調整方式不同,K 棒本身就不同兩邊用同一個換月規則與同一份資料
移動策略後,先比較交易筆數,再比較淨損益:交易筆數不同,代表交易時段與資料有問題;損益不同,則看成交時點、跳動點價值與成本。兩者都相符或已能解釋差異,才進入實單交易。 比較交易筆數,再比損益 移動後,依此順序 交易筆數 損益 實單上線 相同 相同 不同 不同 檢查資料 檢查成本 每個差異都要有原因。 因此:一次只改一個設定。
搬移一套策略是一條檢查流程:五項設定逐一對齊,再比對成交筆數與淨損益,差異說得出原因才上線。

對照的順序是先比成交筆數,再比淨損益。筆數不同,表示訊號本身不同,問題在時段、時區或換倉資料;筆數相同但損益不同,問題在撮合時點、點值或成本。一次只改一項設定,改完重跑,直到差異能說出原因。

假設範例

同一套規則在來源平台跑出 120 筆交易、淨損益 $18,000;搬到目標平台後也是 120 筆,但淨損益 $21,000。筆數相同,所以先查成本:來源平台每邊設了 1 跳滑價、每跳 $12.5,目標平台滑價是 0。120 筆、每筆來回 2 跳、每跳 $12.5,差額剛好 $3,000。把目標平台的滑價補上,兩邊對齊,這筆差異就可以解釋。如果補上後還差,再查撮合時點。

跳動點與點值是最容易算錯的一項,尤其同時跑兩個不同幣別的商品時;換平台前用期貨合約計算器核對每個商品的一跳多少錢與一點多少錢。AlphaPrime 可以把策略原始碼匯出到本文比較的五種語言所屬的平台(MT4 與 MT5 各算一個,共六個),完整清單在支援匯出的交易平台;匯出後的對照步驟與上面這張表相同,匯出只省下改寫語法的時間,不省下對照五項設定的時間。

怎麼依商品與券商決定語言?六個步驟

照下面六步走,每一步只做一個決定,語言會在第四步自己出現;大多數讀者卡住的不是語言,而是最後兩個分岔。

  1. 決定商品。台指期、富台指、小道瓊夜盤還是 ES?商品決定你能在哪種帳戶交易,也決定資料的時段與換月方式。富台指在新加坡交易所掛牌、以台股指數為標的,和台指期的規格與時段不同,富台指是什麼、和台指期差在哪有逐項比較;交易美股指數的人先讀小道瓊夜盤時間與回測設定,把台灣時間的時段弄清楚。
  2. 決定券商。台指期只能透過國內期貨商;ES 與小道瓊可以透過國內期貨商的海外期貨帳戶,也可以直接在海外券商開戶。兩條路能接的平台不同,這一步要打電話或查官網確認。
  3. 決定平台。券商給你什麼平台,你就用什麼平台。國內期貨商提供的程式交易平台大多相同,就是第二段表格裡 PowerLanguage 所屬的那一個;海外券商依家而定,可能是 TradeStation、NinjaTrader 或 MT5。只想先看圖與測試的人可以從 TradingView 開始,下單能不能接到你的帳戶則依券商支援。
  4. 語言跟著平台出現。對照第二段的表格:每個平台只對應一種語言,例如 TradingView 就是 Pine Script,MT5 就是 MQL5。到這一步沒有選擇,只有結果。
  5. 自己寫,還是生成後讀懂?規則已經想清楚、只有一個,就學語言手寫。想從很多組合裡找、或還不會寫,就用生成工具產出程式碼,匯出到你的平台,再對照自己設定的條件把它讀懂。兩條路最後都要你看得懂自己跑的程式。
  6. 要不要同時跑第二個平台?例如在 TradingView 看圖、在券商提供的平台下單。要的話,第五段的五項對照清單是必做的工作;不要的話,只對照一個平台,省下一半的核對時間。
從商品到執行策略共六步:第一至第四步(從商品到語言)沒有選擇餘地,真正的決定在第五和第六步(撰寫或生成,以及加入第二個平台) 語言是第四步 六個步驟,從商品開始 商品 語言 1 2 3 4 5 6 無選擇 由你決定 真正花時間的是第 5 和第 6 步。 所以:今天就打電話給你的券商。
從商品出發,四步之內語言就定了;真正要花時間決定的是最後兩個分岔:自己寫還是生成,以及要不要同時跑第二個平台。

這六步的順序不能倒過來。先學 Python 再找券商的人,常常在第二步發現帳戶接不上自己寫的系統;先學 Pine Script 再開國內期貨帳戶的人,常常在第三步發現券商給的是另一個平台。語言學了不會白費,但會多花幾個月。

今天可以做的事:在紙上寫下你要交易的第一個商品,然後向你打算開戶的券商問一句「你們提供哪些程式交易平台、能接哪些商品」。拿到答案,第三步與第四步就完成了;接著只剩下決定要自己寫還是生成後讀懂。

常見問答

EasyLanguage 和 PowerLanguage 一樣嗎?

不完全一樣,但是五種平台語言裡最接近的一對。EasyLanguage 屬於 TradeStation,PowerLanguage 設計時刻意相容 EasyLanguage,所以關鍵字、函式名稱與逐根 K 棒的執行方式大部分相同。一套策略在兩者之間搬動,改寫量最小,但撮合時點、時段與成本設定仍然要逐項對照。

Pine Script 寫的策略可以直接下單台指期嗎?

要看你的券商有沒有支援 TradingView 的下單連線,這一點只能向開戶券商確認。TradingView 的回測與圖表不需要券商就能用,所以很多人用它測試想法,再把規則搬到券商提供的平台下單。搬移時要對照撮合時點、交易時段、點值、成本與換倉這五項設定。

學程式交易要先學 Python 嗎?

不一定。Python 適合平台做不到的自訂研究,但資料、回測引擎、成本模型、券商連線與監控都要自己寫並長期維護。如果你的規則用平台內建的指標與條件就表達得完,直接學券商平台對應的語言,上線更快。先決定商品與券商,再決定要不要學 Python。

策略換平台後回測結果會一樣嗎?

通常不會完全一樣,因為兩個平台的撮合時點、時段切法、點值、成本與連續月合約資料可能不同。正確的做法是把五項設定逐一對齊,先比成交筆數,再比淨損益,每一筆差異都要能說出原因。能解釋的差異可以接受,解釋不了的差異表示還有一項設定沒對齊。

參考文獻

  • 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.
  • Pardo, R. (2008). The Evaluation and Optimization of Trading Strategies (2nd ed.). John Wiley & Sons.