永豐 Shioaji API 開通傻瓜教學(共三篇)

  1. 第 1 篇:簽署 API 條款
  2. 第 2 篇:申請 API Key、下載憑證
  3. 第 3 篇:安裝 Python、模擬測試、正式開通(您正在看這篇)

這篇是最後一關:在電腦裝好 Python,跑一次模擬測試(不會真的下單、不會扣錢),系統審核通過後 API 就正式開通了。

測試時間有限制

週一~週五 08:00~20:00 才能測試(18:00 以後只接受台灣 IP)。假日跑不會成功,請挑平日。

Part A:安裝 Python(只要裝一次)

步驟 1

下載 Python 3.12

打開 Python 官網 Windows 下載頁,找 Python 3.12 開頭的版本,點「Windows installer (64-bit)」下載。

步驟 2

安裝時,最下面的框框一定要打勾!

打開安裝檔,先勾最下面的「Add python.exe to PATH」,再按「Install Now」。

⚠️ 這個框沒勾,後面的指令都會失敗。如果忘了勾,重新執行安裝檔就可以補勾。

步驟 3

打開「命令提示字元」,安裝 shioaji

按鍵盤左下角的 Windows 鍵,輸入 cmd,按 Enter,會跳出一個黑色視窗。在黑色視窗裡貼上這行,按 Enter:

pip install shioaji

跑一陣子,最後看到 Successfully installed ... shioaji-... 就是裝好了。

Part B:建立測試檔

步驟 4

用記事本建立 test_api.py

打開「記事本」,把下面整段程式全部複製貼上,然後只改最上面那兩行:把第 2 篇抄下來的 API Key、Secret Key 貼進引號裡面。

import time
import shioaji as sj

# ====== 只要改這兩行:貼上第 2 篇抄下來的金鑰(保留前後的引號)======
API_KEY = "貼上你的API_Key"
SECRET_KEY = "貼上你的Secret_Key"
# ====================================================================

api = sj.Shioaji(simulation=True)   # 模擬環境:不會真的下單、不會扣錢
accounts = api.login(api_key=API_KEY, secret_key=SECRET_KEY)
print("登入成功,您的帳戶:", accounts)

# ---- 股票下單測試(有證券戶才會跑)----
if api.stock_account:
    contract = api.contracts.get("2890")
    order = sj.StockOrder(
        action=sj.Action.Buy,
        price=contract.limit_down,
        quantity=1,
        price_type=sj.StockPriceType.LMT,
        order_type=sj.OrderType.ROD,
        order_lot=sj.StockOrderLot.Common,
        order_cond=sj.StockOrderCond.Cash,
        account=api.stock_account,
    )
    trade = api.place_order(contract, order)
    print("股票測試結果:", trade.status.status)

time.sleep(3)   # 股票、期貨測試要間隔 1 秒以上

# ---- 期貨下單測試(有期貨戶才會跑)----
if api.futopt_account:
    contract = api.contracts.get("TXFR1")
    order = sj.FuturesOrder(
        action=sj.Action.Buy,
        price=contract.limit_down,
        quantity=1,
        price_type=sj.FuturesPriceType.LMT,
        order_type=sj.OrderType.ROD,
        octype=sj.FuturesOCType.Auto,
        account=api.futopt_account,
    )
    trade = api.place_order(contract, order)
    print("期貨測試結果:", trade.status.status)

api.logout()
input("測試完成!按 Enter 關閉視窗")

存檔:按「檔案」→「另存新檔」→ 存到 C:\shioaji 資料夾,存檔類型選「所有檔案」,檔名打 test_api.py。

💡 檔名後面不能變成 test_api.py.txt,所以存檔類型一定要選「所有檔案」。

Part C:跑測試

步驟 5

在黑色視窗執行測試

回到命令提示字元(黑色視窗),一行一行輸入,每行按 Enter:

cd C:\shioaji
python test_api.py

⚠️ 不要直接雙擊 test_api.py,視窗會一閃就關掉,看不到結果。

步驟 6

看結果

畫面顯示意思接下來
PendingSubmit 或 Submitted✅ 測試成功等審核(下一步)
Failed❌ 委託失敗確認是平日 08:00~20:00、第 2 篇有勾「交易」權限,再跑一次
一大段紅字錯誤❌ 通常是金鑰貼錯重新複製金鑰,引號裡前後不要有空白

有證券戶會看到「股票測試結果」,有期貨戶會看到「期貨測試結果」,兩個都要成功(只有其中一種帳戶的人看一個就好)。

Part D:確認正式開通

步驟 7

等大約 5 分鐘,確認審核通過

測試成功後,系統大約 5 分鐘審核(偶爾會久一點)。用下面任一種方法確認:

方法 1(最簡單):回到 證券 API 簽署中心、期貨 API 簽署中心,看測試狀態是否已通過。

方法 2:同樣用記事本建一個 check.py(一樣改金鑰兩行),在黑色視窗輸入 python check.py:

import shioaji as sj

API_KEY = "貼上你的API_Key"
SECRET_KEY = "貼上你的Secret_Key"

api = sj.Shioaji()   # 這次是正式環境(只登入查詢,不下單)
accounts = api.login(api_key=API_KEY, secret_key=SECRET_KEY)
for acc in accounts:
    print(acc.account_type, acc.account_id, "已開通" if acc.signed else "尚未開通")

api.logout()
input("按 Enter 關閉視窗")

每個帳戶都顯示「已開通」(也就是 signed=True)就大功告成 🎉

卡關了?常見問題對照表

狀況原因解法
「'python' 不是內部或外部命令」安裝時沒勾 Add python.exe to PATH重新執行 Python 安裝檔補勾,再重開黑色視窗
「'pip' 不是內部或外部命令」同上同上,或改用 python -m pip install shioaji
測試成功,但一直顯示尚未開通審核還沒好,或簽署晚於測試先等 30~60 分鐘;仍未開通就確認第 1 篇已簽署,再跑一次 test_api.py
正式下單出現 406 Account Not Acceptable該帳戶 API 測試還沒通過(股票、期貨分開算)對那個帳戶重跑模擬測試
只跑出股票、沒有期貨結果沒有期貨戶,或 API Key 沒勾期貨帳戶確認有期貨戶,第 2 篇的帳戶有勾期貨
雙擊檔案,視窗一閃就關執行方式不對照步驟 5 從黑色視窗輸入指令執行

開通之後

正式下單時程式要改成正式環境(sj.Shioaji()),並用 api.activate_ca() 載入第 2 篇下載的憑證。範例可參考〈Python 程式交易(Shioaji API)環境建置〉這篇,以及 Shioaji 官方文件。

程式交易合規與風險聲明

1. 本系列僅介紹永豐金證券官方提供之 Shioaji API 開通與環境建置步驟,畫面與流程以永豐金證券官方最新公告及 Shioaji 官方文件為準。本人不提供、媒介或推介任何非屬本公司之第三方證券交易分析、買賣建議或全權委託軟體。

2. 所有交易策略之演算法、參數設定及程式邏輯均由交易人自行編寫、回測與決定,本公司及業務人員不對任何程式策略之獲利能力作任何保證。

3. 程式交易可能因網路中斷、硬體異常、交易所線路延遲或設定錯誤產生交易風險,交易人應備妥電話人工委託等替代管道並做好風險控管。

開通過程卡關?歡迎加 LINE(autotrade-wu)傳截圖給我,一起幫您排除。