本文目錄
想踏入期貨程式交易入門,卻卡在「不知道從哪開始」嗎?很多人以為要寫出神級策略才能上線,其實真正該先搞定的是資料、回測與下單這三段流程。這篇文章會用 Python 帶你走完一遍:從抓歷史資料、寫第一支策略、跑回測,到串接期貨自動下單 API,全部用可執行的程式碼說明。讀完你會有一套能自己修改的骨架,而不是只抄一份看不懂的範例。
為什麼期貨適合用程式交易?先搞懂它的三個特性
期貨跟股票最大的差別,在於它天生就適合自動化。原因有三個:
第一,合約規格標準化。 台指期(TX)每一點價值新台幣 200 元,小台(MTX)每點 50 元,這些規格固定不變,程式很好計算損益。股票要處理零股、不同股價單位的問題,期貨相對單純。
第二,有夜盤、有槓桿。 台灣期交所的台指期有日盤(08:45–13:45)與夜盤(15:00–次日 05:00),人工盯盤幾乎不可能全時段覆蓋。程式可以幫你在夜盤掛單、觸價出場,這是自動化最實際的價值。
第三,交易成本結構清楚。 期貨手續費依券商而定,期交稅則是「契約金額 × 稅率」,台股期貨稅率為百萬分之二十(0.002%),選擇權為千分之一。成本可預測,回測時比較好建模。
但要提醒:槓桿是雙面刃。台指期一口保證金約十幾萬元就能操作價值數百萬的合約,方向做錯會被追繳甚至斷頭。程式交易不會讓你避開槓桿風險,只會讓紀律執行得更徹底。
期貨程式交易 Python 教學:環境與資料來源怎麼選
進入實作前,先把工具鏈決定好。以下是我建議的組合:
| 用途 | 推薦工具 | 說明 |
|---|---|---|
| 資料分析 | pandas、numpy | 處理時間序列的標準配備 |
| 技術指標 | pandas-ta 或自寫 | 避免依賴已停止維護的套件 |
| 回測框架 | backtrader / vectorbt | backtrader 事件驅動、貼近實盤 |
| 下單 API | 券商官方 Python SDK | 如群益、元大、永豐等 |
| 看盤與圖表 | TradingView | 手動驗證策略邏輯很方便 |
資料來源方面,常見做法有兩種:
1. 券商 API 提供的歷史 Tick / 分K:最貼近實際下單環境,但通常要開戶才能取得。
2. 公開資料源:例如期交所每日行情下載(免費),適合先做日線級策略的驗證。
下面是一段把期交所抓下來的日線資料整理成 DataFrame 的範例(假設你已下載 CSV):
import pandas as pd
期交所每日行情 CSV,欄位名稱依實際檔案調整
df = pd.read_csv("TX_daily.csv")
df.columns = ["date", "volume", "open", "high", "low", "close", "settle"]
df["date"] = pd.to_datetime(df["date"], format="%Y%m%d")
df = df.sort_values("date").reset_index(drop=True)
計算 20 日與 60 日均線
df["ma20"] = df["close"].rolling(20).mean()
df["ma60"] = df["close"].rolling(60).mean()
print(df.tail())
這段程式的重點不是均線本身,而是建立可重複使用的資料清理流程。你會發現真實資料常有缺漏、欄位順序不一,先把它整理乾淨,後面回測才不會出錯。
期貨策略回測框架:寫出你的第一支均線策略
有了資料,接著寫策略。以下用 backtrader 做一個「雙均線交叉」的範例,邏輯是:MA20 向上穿越 MA60 做多、向下穿越平倉。這只是教學骨架,不是獲利保證。
import backtrader as bt
class DualMA(bt.Strategy):
params = (("fast", 20), ("slow", 60),)
def __init__(self):
self.ma_fast = bt.indicators.SMA(
self.data.close, period=self.p.fast)
self.ma_slow = bt.indicators.SMA(
self.data.close, period=self.p.slow)
self.crossover = bt.indicators.CrossOver(
self.ma_fast, self.ma_slow)
def next(self):
if not self.position:
if self.crossover > 0:
self.buy()
elif self.crossover < 0:
self.close()
if __name__ == "__main__":
cerebro = bt.Cerebro()
data = bt.feeds.PandasData(dataname=df.set_index("date"))
cerebro.adddata(data)
cerebro.addstrategy(DualMA)
cerebro.broker.setcash(500000)
# 台指期每點 200 元
cerebro.broker.setcommission(commission=0, mult=200)
cerebro.run()
print("期末權益:", cerebro.broker.getvalue())
幾個關鍵設定要解釋:
mult=200:台指期每點價值,這決定損益計算是否正確。setcash(500000):假設本金 50 萬,這只是假設範例,不是實測績效。setcommission:這裡設 0 是為了先看策略邏輯,實務上一定要把券商手續費與期交稅加回去。
回測跑完,先別急著看報酬率。你更該檢查的是:交易筆數合不合理?最大回撤發生在什麼時期?訊號是否有延遲?這些比單一數字重要得多。
期貨自動下單 API 串接:從回測到實盤的最後一哩路
回測漂亮不等於實盤可行,中間隔著「下單 API」這一關。台灣多數券商提供 Python SDK,流程大致是:登入 → 訂閱行情 → 送出委託 → 接收回報。
以下用通用虛擬碼說明結構(各家 API 名稱不同,請以官方文件為準):
以下為結構示意,非特定券商 API
def on_tick(self, tick):
price = tick["price"]
signal = self.strategy.check(price)
if signal == "buy" and not self.has_position:
self.api.place_order(
symbol="TX", side="buy",
price=price, qty=1, order_type="limit")
elif signal == "exit" and self.has_position:
self.api.place_order(
symbol="TX", side="sell",
price=price, qty=1, order_type="market")
def on_order_report(self, report):
# 記錄成交回報,更新持倉狀態
self.log(report)
實務上要注意三件事:
1. 連線穩定性:網路斷線時,你的部位還在市場上。務必設計「斷線重連」與「部位查詢」機制。
2. 重複下單防護:程式若重啟,可能誤判沒有持倉而重複進場。用本地檔案或券商查詢確認實際部位。
3. 測試環境:多數券商有模擬帳號,先在模擬環境跑至少數週再考慮實盤,這是最基本的紀律。
若你想用手動圖表輔助確認策略訊號,TradingView 的即時圖表與 Pine Script 可以幫你快速驗證邏輯,跟 Python 回測互相對照。
期貨程式交易常見錯誤與避雷指南
這一段是整篇最重要的部分。以下三個地雷,是新手最常踩、也最容易讓回測數字「看起來很美」的原因。
地雷一:未來函數(Look-ahead Bias)
成因:策略在計算訊號時,不小心用到「當根 K 棒收盤後才知道」的資訊。例如用 close 當下單價,但訊號其實是收盤才成立。這會讓回測績效虛高。
防範:下單價一律用「下一根開盤價」或明確的滑價假設。backtrader 預設就是下一根成交,若你手動改成就地成交,要非常小心。
地雷二:忽略交易成本與滑價
成因:期貨雖然成本低,但當沖、高頻進出時,手續費與期交稅會快速累積。假設一口小台來回成本抓 100 元、一年交易 200 次,就是 2 萬元,對小資金帳戶影響很大。
防範:回測時把 commission 設成真實值,並額外加入「滑價點數」(例如每口 1~2 點)。寧可回測保守、實盤才有空間。
地雷三:過度最佳化(Overfitting)
成因:把參數調到在歷史資料上完美,例如把均線改成 19 和 61 剛好避開某段虧損。這種曲線擬合在未來資料上通常立刻失效。
防範:用「樣本內 / 樣本外」切分驗證,或做簡單的參數穩健性測試——好的策略在參數小幅變動下,績效不該劇烈崩壞。
地雷四:忽略保證金與斷頭風險
成因:回測只算損益,沒算保證金水位。台指期一口保證金約十幾萬,若你本金只放剛好一口,一次大跳空就可能被追繳。
防範:帳戶資金至少保留 2~3 倍保證金,並在程式中加入最大虧損停止交易的機制。
FAQ 常見問題
Q1:完全不會 Python,能學期貨程式交易嗎?
可以,但建議先花 2~4 週打好 Python 基礎(變數、迴圈、函式、pandas),再進入回測。直接抄範例卻看不懂,遇到錯誤會卡死。先從日線級策略練起,比一開始就做 Tick 高頻容易得多。
Q2:回測賺錢就代表實盤會賺嗎?
不代表。回測與實盤的差距來自滑價、延遲、流動性與心理因素。務必先用模擬帳號驗證,並把交易成本設得比實際更保守。任何回測數字都只是「在特定假設下的結果」,不是未來保證。
Q3:期貨程式交易需要多少本金?
這取決於你交易哪種合約。小台(MTX)保證金門檻較低,適合入門練習;大台(TX)保證金較高。原則是帳戶資金至少保留 2~3 倍保證金,避免一次逆勢就被追繳。實際金額請以期交所與券商公告為準。
Q4:台指期有夜盤,程式要 24 小時開著嗎?
不一定。你可以只交易日盤時段,降低系統負擔與風險。若要涵蓋夜盤,建議用雲端主機(VPS)並設計斷線重連,且避開流動性差的時段。
結論:先求跑得動,再求跑得好
期貨程式交易入門最怕的不是策略不夠強,而是流程沒打通。這篇文章帶你走過資料清理、策略撰寫、回測框架、自動下單 API 串接四個階段,也點出四個最常見的地雷。建議你的第一步不是找「最強策略」,而是把一套簡單的雙均線策略,在模擬環境完整跑過一遍,親手感受每個環節。
想邊寫程式邊用圖表驗證訊號,可以參考 TradingView 的付費方案,即時圖表與回放功能對策略除錯很有幫助。準備好了嗎?打開你的編輯器,把上面的範例改成自己的版本,今天就開始動工吧。
本文僅供程式教學與研究,不構成任何投資建議。期貨交易具槓桿風險,可能損失全部本金,請審慎評估。