mcpField
S
shioaji

shioaji

github.com/nicepkg其他28874 次安装40 周前更新
代码仓库

关于 shioaji

Shioaji 是永豐金證券提供的 Python 交易 API,面向台灣股票、期貨與選擇權市場。它涵蓋帳戶操作、訂單管理及行情資料,並提供模擬模式供測試。

主要功能

  1. 01交易台灣股票、期貨與選擇權
  2. 02下單、改單與取消訂單
  3. 03訂閱即時 Tick 與 BidAsk 行情
  4. 04查詢歷史資料、快照與持倉
  5. 05在模擬模式測試 API 操作

适用场景

  1. 01自動執行下單與訂單更新
  2. 02監看台灣市場即時行情
  3. 03檢視持倉與損益

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/nicepkg/ai-workflow --skill shioaji

安装后在 Claude Code 中输入/shioaji确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

ACCOUNTING.md
ADVANCED.md
CONTRACTS.md
MARKET_DATA.md
ORDERS.md
PREPARE.md
RESERVE.md
STREAMING.md
TROUBLESHOOTING.md

详细介绍

Shioaji 交易 API

Shioaji 是永豐金證券提供的 Python 交易 API,支援台灣股票、期貨、選擇權市場。 Shioaji 是永豐金證券提供的 Python 交易 API,支援台灣股票、期貨、選擇權市場。

官方文檔: https://sinotrade.github.io/ 大模型参考: https://sinotrade.github.io/llms-full.txt


功能導覽

主題檔案說明
準備PREPARE.md開戶/金鑰申請/測試
合約CONTRACTS.md股票/期貨/選擇權合約
下單ORDERS.md下單/改單/刪單/組合單
預收RESERVE.md處置股預收券款
行情STREAMING.md即時 Tick/BidAsk 資料
市場資料MARKET_DATA.md歷史資料/快照/資券/掃描器
帳務ACCOUNTING.md餘額/保證金/損益/額度
進階ADVANCED.md報價綁定/非阻塞/觸價
問題排解TROUBLESHOOTING.md常見問題與解決方案

快速入門

安裝
# pip
pip install shioaji

# uv (recommended 推薦)
uv add shioaji

# with speed optimization 速度優化版
uv add shioaji --extra speed

# Docker
docker run -it sinotrade/shioaji:latest
登入與憑證啟用
import shioaji as sj

api = sj.Shioaji()

# Login with API Key 使用 API Key 登入
accounts = api.login(
    api_key="YOUR_API_KEY",
    secret_key="YOUR_SECRET_KEY"
)

# Activate CA certificate 啟用憑證 (required for placing orders 下單必須)
api.activate_ca(
    ca_path="/path/to/Sinopac.pfx",
    ca_passwd="YOUR_CA_PASSWORD",
)
模擬模式

使用模擬環境測試 API,不涉及真實資金。

import shioaji as sj

api = sj.Shioaji(simulation=True)
api.login(api_key="YOUR_KEY", secret_key="YOUR_SECRET")

模擬模式可用功能:

  • 行情:訂閱、取消訂閱、ticks、kbars、快照
  • 訂單:place_order、update_order、cancel_order、update_status、list_trades
  • 帳戶:list_positions、list_profit_loss
  • 資料:short_stock_sources、credit_enquires、scanners
簡單下單範例
# Get contract 取得合約
contract = api.Contracts.Stocks["2330"]  # TSMC 台積電

# Create order 建立訂單
order = api.Order(
    price=580,
    quantity=1,
    action=sj.constant.Action.Buy,
    price_type=sj.constant.StockPriceType.LMT,
    order_type=sj.constant.OrderType.ROD,
    account=api.stock_account,
)

# Place order 下單
trade = api.place_order(contract, order)

常用常數

買賣方向
sj.constant.Action.Buy   # 買進
sj.constant.Action.Sell  # 賣出
股票價格類型
sj.constant.StockPriceType.LMT  # Limit 限價
sj.constant.StockPriceType.MKT  # Market 市價
sj.constant.StockPriceType.MKP  # Range Market 範圍市價
期貨價格類型
sj.constant.FuturesPriceType.LMT  # Limit 限價
sj.constant.FuturesPriceType.MKT  # Market 市價
sj.constant.FuturesPriceType.MKP  # Range Market 範圍市價
委託條件
sj.constant.OrderType.ROD  # Rest of Day 當日有效
sj.constant.OrderType.IOC  # Immediate or Cancel 立即成交否則取消
sj.constant.OrderType.FOK  # Fill or Kill 全部成交否則取消
股票交易單位
sj.constant.StockOrderLot.Common      # Regular 整股 (1000 shares)
sj.constant.StockOrderLot.Odd         # After-hours odd lot 盤後零股
sj.constant.StockOrderLot.IntradayOdd # Intraday odd lot 盤中零股
sj.constant.StockOrderLot.Fixing      # Fixing 定盤
信用交易條件
sj.constant.StockOrderCond.Cash          # Cash 現股
sj.constant.StockOrderCond.MarginTrading # Margin 融資
sj.constant.StockOrderCond.ShortSelling  # Short 融券
報價類型
sj.constant.QuoteType.Tick    # Tick data 逐筆成交
sj.constant.QuoteType.BidAsk  # Bid/Ask data 五檔報價

帳戶物件

# Stock account 股票帳戶
api.stock_account

# Futures account 期貨帳戶
api.futopt_account

# List all accounts 列出所有帳戶
api.list_accounts()

流量限制

類別限制
每日流量500MB - 10GB(依交易量而定)
行情查詢每 5 秒 50 次請求
帳務查詢每 5 秒 25 次請求
連線數每個身分證號 5 個
每日登入1000 次

常用模式

訂閱行情
# Subscribe tick data 訂閱逐筆成交
api.quote.subscribe(
    api.Contracts.Stocks["2330"],
    quote_type=sj.constant.QuoteType.Tick
)

# Subscribe bidask 訂閱五檔
api.quote.subscribe(
    api.Contracts.Stocks["2330"],
    quote_type=sj.constant.QuoteType.BidAsk
)

# Set callback 設定回調
@api.quote.on_quote
def quote_callback(topic, quote):
    print(f"Topic: {topic}, Quote: {quote}")
查詢持倉
# Stock positions 股票持倉
positions = api.list_positions(api.stock_account)

# Futures positions 期貨持倉
positions = api.list_positions(api.futopt_account)
刪單
api.cancel_order(trade)
改單
# Change price 改價
api.update_order(trade=trade, price=590)

# Reduce quantity 減量 (can only reduce 只能減少)
api.update_order(trade=trade, qty=1)

錯誤處理

try:
    trade = api.place_order(contract, order)
except Exception as e:
    print(f"Order failed: {e}")

# Check order status 檢查訂單狀態
api.update_status(api.stock_account)
for trade in api.list_trades():
    print(trade.status)

登出

api.logout()

评论

支持 Markdown