Share Notes

chundev

View the Project on GitHub latteouka/share-notes

永豐 Shioaji API 程式交易申請與設定指南

日期:2026-03-16 目的:整理台灣券商 API 程式交易現況,以及永豐 Shioaji 的申請到下單完整流程


TL;DR

台灣有 4 家主要券商提供期貨 API 程式交易,永豐 Shioaji 是市佔最大(~50%)、生態最成熟的選擇。一般散戶即可申請,全程線上,無資金門檻。支援 CDF(台積電期貨)自動下單。


台灣券商 API 總覽

券商 API 名稱 語言 期貨支援 文件品質 申請方式 備註
永豐金 Shioaji Python ✅ CDF、TX 等 ⭐⭐⭐ 完整 線上 市佔 ~50%,最推薦
富邦 Fubon Neo API Python/C#/JS ⭐⭐⭐ 完整 線上 多語言,有 Discord 社群
元大 元大 API DLL 元件 ✅(需另開權限) ⭐ 基本 需臨櫃,5-10 天 不提供開發教學
元富 MasterLink API Python/C# ⭐⭐ 線上  
群益期貨 群益 API Python ⭐⭐ 線上 期貨專門
統一期貨 統一 API Python ⭐⭐ 線上  
富果(玉山) Fugle API Python/JS ❌ 不支援期貨 ⭐⭐⭐ 線上 股票為主

結論:做期貨程式交易,永豐 Shioaji 是首選。


Shioaji 申請步驟(永豐金證券)

前置條件

Step 1:申請 API Key

  1. 前往 永豐 API 管理頁面
  2. 登入永豐金證券帳號
  3. 點擊 「Add API KEY」
  4. 完成雙因素驗證(手機或 Email)
  5. 設定 API Key 參數:
    • 到期時間
    • 權限:勾選「市場/數據」、「帳戶」、「交易功能」
    • 可使用的帳戶:選擇你的期貨帳號
    • 生產環境:勾選(測試階段可先用模擬)
    • IP 白名單:建議設定(提升安全性)
  6. 取得 API KeySecret Key

⚠️ Secret Key 只會顯示一次,申請完立刻複製保存!

Step 2:下載電子憑證

  1. 在同一頁面點擊 「Download Certificate」
  2. 設定憑證密碼
  3. 下載 .pfx 憑證檔案
  4. 放到安全的本地目錄(如 ~/.shioaji/

Step 3:建立環境

# 安裝 Shioaji
pip install shioaji

# 建立 .env 檔案
cat > .env << 'EOF'
API_KEY=你的_API_Key
SECRET_KEY=你的_Secret_Key
CA_CERT_PATH=/path/to/Sinopac.pfx
CA_PASSWORD=你的憑證密碼
EOF

Step 4:登入測試

import os
from dotenv import load_dotenv
import shioaji as sj

load_dotenv()

api = sj.Shioaji(simulation=True)  # 先用模擬模式測試
api.login(
    api_key=os.environ["API_KEY"],
    secret_key=os.environ["SECRET_KEY"],
    fetch_contract=True,
    contracts_timeout=10000,
)

# 啟用電子憑證(下單必備)
api.activate_ca(
    ca_path=os.environ["CA_CERT_PATH"],
    ca_passwd=os.environ["CA_PASSWORD"],
)
print("✅ 登入成功")

CDF 台積電期貨下單

取得合約

# 查看所有 CDF 合約
print(api.Contracts.Futures.CDF)

# 取得近月合約
contract = api.Contracts.Futures.CDF.CDFR1  # R1 = 近月
print(f"合約: {contract}")

買進(做多進場)

order = api.Order(
    action=sj.constant.Action.Buy,       # 買進
    price=1950,                           # 限價
    quantity=1,                           # 1 口
    price_type=sj.constant.FuturesPriceType.LMT,  # 限價單
    order_type=sj.constant.OrderType.ROD,          # 當日有效
    octype=sj.constant.FuturesOCType.Auto,         # 自動新倉/平倉
    account=api.futopt_account,
)
trade = api.place_order(contract, order)
print(f"下單結果: {trade}")

賣出(平倉出場)

order = api.Order(
    action=sj.constant.Action.Sell,      # 賣出
    price=2000,                          # 限價
    quantity=1,                          # 1 口
    price_type=sj.constant.FuturesPriceType.LMT,
    order_type=sj.constant.OrderType.ROD,
    octype=sj.constant.FuturesOCType.Auto,
    account=api.futopt_account,
)
trade = api.place_order(contract, order)

價格類型

類型 代碼 說明
限價單 LMT 指定價格成交
市價單 MKT 以市場價格立即成交
範圍市價 MKP 市價 + 範圍限制

委託類型

類型 代碼 說明
ROD ROD 當日有效,直到收盤或成交
IOC IOC 立即成交否則取消(可部分成交)
FOK FOK 全部成交否則全部取消

API 使用限制

項目 限制
同一帳號最大連線數 5 條
每日登入上限 1,000 次
下單請求(10 秒內) 250 次
資料查詢(5 秒內) 50 次
行情訂閱數量 200 個
每日流量(交易量 0) 500 MB
每日流量(有交易) 2-10 GB

⚠️ 超過流量限制時,行情查詢會返回空值。多次超限會被暫停使用。


與 TSM 策略整合的思路

目前 TSM 策略系統在每日 15:30 日盤收盤後透過 tRPC 計算進出場訊號,並發送 Telegram 通知。未來可以整合 Shioaji 實現自動下單:

15:30 日盤收盤
    ↓
PM2 Worker 執行 update:today
    ↓
計算今日訊號(進場/出場/觀望)
    ↓
如果有訊號 → Shioaji API 下單
    ↓
同時發送 Telegram 通知

注意事項:


參考資源