shioaji

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Shioaji Trading API

Shioaji Trading API

Shioaji is SinoPac's Python API for trading Taiwan financial markets (stocks, futures, options). Shioaji 是永豐金證券提供的 Python 交易 API,支援台灣股票、期貨、選擇權市場。

Shioaji是永丰金证券提供的Python交易API,支持台湾股票、期货、期权市场。

Navigation 功能導覽

Navigation 功能导航

Topic 主題File 檔案Description 說明
Preparation 準備PREPARE.mdAccount setup, API keys, testing 開戶/金鑰申請/測試
Contracts 合約CONTRACTS.mdStocks, Futures, Options contracts 股票/期貨/選擇權合約
Orders 下單ORDERS.mdPlace, modify, cancel, combo orders 下單/改單/刪單/組合單
Reserve 預收RESERVE.mdReserve orders for disposition stocks 處置股預收券款
Streaming 行情STREAMING.mdReal-time tick & bidask data 即時 Tick/BidAsk 資料
Market Data 市場資料MARKET_DATA.mdHistorical, snapshot, credit, scanners 歷史資料/快照/資券/掃描器
Accounting 帳務ACCOUNTING.mdBalance, margin, P&L, trading limits 餘額/保證金/損益/額度
Advanced 進階ADVANCED.mdQuote binding, non-blocking, stop orders 報價綁定/非阻塞/觸價
Troubleshooting 問題排解TROUBLESHOOTING.mdCommon issues and solutions 常見問題與解決

Topic 主题File 文件Description 说明
Preparation 准备PREPARE.mdAccount setup, API keys, testing 开户/密钥申请/测试
Contracts 合约CONTRACTS.mdStocks, Futures, Options contracts 股票/期货/期权合约
Orders 下单ORDERS.mdPlace, modify, cancel, combo orders 下单/改单/删单/组合单
Reserve 预收RESERVE.mdReserve orders for disposition stocks 处置股预收券款
Streaming 行情STREAMING.mdReal-time tick & bidask data 实时Tick/BidAsk数据
Market Data 市场资料MARKET_DATA.mdHistorical, snapshot, credit, scanners 历史数据/快照/资券/扫描器
Accounting 账务ACCOUNTING.mdBalance, margin, P&L, trading limits 余额/保证金/损益/额度
Advanced 进阶ADVANCED.mdQuote binding, non-blocking, stop orders 报价绑定/非阻塞/触价
Troubleshooting 问题排解TROUBLESHOOTING.mdCommon issues and solutions 常见问题与解决

Quick Start 快速入門

Quick Start 快速入门

Installation 安裝

Installation 安装

bash
undefined
bash
undefined

pip

pip

pip install shioaji
pip install shioaji

uv (recommended 推薦)

uv (recommended 推荐)

uv add shioaji
uv add shioaji

with speed optimization 速度優化版

with speed optimization 速度优化版

uv add shioaji --extra speed
uv add shioaji --extra speed

Docker

Docker

docker run -it sinotrade/shioaji:latest
undefined
docker run -it sinotrade/shioaji:latest
undefined

Login & Activate CA 登入與憑證啟用

Login & Activate CA 登录与凭证启用

python
import shioaji as sj

api = sj.Shioaji()
python
import shioaji as sj

api = sj.Shioaji()

Login with API Key 使用 API Key 登入

Login with API Key 使用API Key登录

accounts = api.login( api_key="YOUR_API_KEY", secret_key="YOUR_SECRET_KEY" )
accounts = api.login( api_key="YOUR_API_KEY", secret_key="YOUR_SECRET_KEY" )

Activate CA certificate 啟用憑證 (required for placing orders 下單必須)

Activate CA certificate 启用凭证 (required for placing orders 下单必须)

api.activate_ca( ca_path="/path/to/Sinopac.pfx", ca_passwd="YOUR_CA_PASSWORD", )
undefined
api.activate_ca( ca_path="/path/to/Sinopac.pfx", ca_passwd="YOUR_CA_PASSWORD", )
undefined

Simulation Mode 模擬模式

Simulation Mode 模拟模式

Test API without real money. 使用模擬環境測試 API。
python
import shioaji as sj

api = sj.Shioaji(simulation=True)
api.login(api_key="YOUR_KEY", secret_key="YOUR_SECRET")
Available in simulation 模擬模式可用功能:
  • Quote: subscribe, unsubscribe, ticks, kbars, snapshots
  • Order: place_order, update_order, cancel_order, update_status, list_trades
  • Account: list_positions, list_profit_loss
  • Data: short_stock_sources, credit_enquires, scanners
Test API without real money. 使用模拟环境测试API。
python
import shioaji as sj

api = sj.Shioaji(simulation=True)
api.login(api_key="YOUR_KEY", secret_key="YOUR_SECRET")
Available in simulation 模拟模式可用功能:
  • Quote: subscribe, unsubscribe, ticks, kbars, snapshots
  • Order: place_order, update_order, cancel_order, update_status, list_trades
  • Account: list_positions, list_profit_loss
  • Data: short_stock_sources, credit_enquires, scanners

Simple Order Example 簡單下單範例

Simple Order Example 简单下单示例

python
undefined
python
undefined

Get contract 取得合約

Get contract 获取合约

contract = api.Contracts.Stocks["2330"] # TSMC 台積電
contract = api.Contracts.Stocks["2330"] # TSMC 台积电

Create order 建立訂單

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, )
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 下單

Place order 下单

trade = api.place_order(contract, order)

---
trade = api.place_order(contract, order)

---

Common Constants 常用常數

Common Constants 常用常数

Action 買賣方向

Action 买卖方向

python
sj.constant.Action.Buy   # 買進
sj.constant.Action.Sell  # 賣出
python
sj.constant.Action.Buy   # 买进
sj.constant.Action.Sell  # 卖出

Stock Price Type 股票價格類型

Stock Price Type 股票价格类型

python
sj.constant.StockPriceType.LMT  # Limit 限價
sj.constant.StockPriceType.MKT  # Market 市價
sj.constant.StockPriceType.MKP  # Range Market 範圍市價
python
sj.constant.StockPriceType.LMT  # Limit 限价
sj.constant.StockPriceType.MKT  # Market 市价
sj.constant.StockPriceType.MKP  # Range Market 范围市价

Futures Price Type 期貨價格類型

Futures Price Type 期货价格类型

python
sj.constant.FuturesPriceType.LMT  # Limit 限價
sj.constant.FuturesPriceType.MKT  # Market 市價
sj.constant.FuturesPriceType.MKP  # Range Market 範圍市價
python
sj.constant.FuturesPriceType.LMT  # Limit 限价
sj.constant.FuturesPriceType.MKT  # Market 市价
sj.constant.FuturesPriceType.MKP  # Range Market 范围市价

Order Type 委託條件

Order Type 委托条件

python
sj.constant.OrderType.ROD  # Rest of Day 當日有效
sj.constant.OrderType.IOC  # Immediate or Cancel 立即成交否則取消
sj.constant.OrderType.FOK  # Fill or Kill 全部成交否則取消
python
sj.constant.OrderType.ROD  # Rest of Day 当日有效
sj.constant.OrderType.IOC  # Immediate or Cancel 立即成交否则取消
sj.constant.OrderType.FOK  # Fill or Kill 全部成交否则取消

Stock Order Lot 股票交易單位

Stock Order Lot 股票交易单位

python
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 定盤
python
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 定盘

Order Condition 信用交易條件

Order Condition 信用交易条件

python
sj.constant.StockOrderCond.Cash          # Cash 現股
sj.constant.StockOrderCond.MarginTrading # Margin 融資
sj.constant.StockOrderCond.ShortSelling  # Short 融券
python
sj.constant.StockOrderCond.Cash          # Cash 现股
sj.constant.StockOrderCond.MarginTrading # Margin 融资
sj.constant.StockOrderCond.ShortSelling  # Short 融券

Quote Type 報價類型

Quote Type 报价类型

python
sj.constant.QuoteType.Tick    # Tick data 逐筆成交
sj.constant.QuoteType.BidAsk  # Bid/Ask data 五檔報價

python
sj.constant.QuoteType.Tick    # Tick data 逐笔成交
sj.constant.QuoteType.BidAsk  # Bid/Ask data 五档报价

Account Objects 帳戶物件

Account Objects 账户对象

python
undefined
python
undefined

Stock account 股票帳戶

Stock account 股票账户

api.stock_account
api.stock_account

Futures account 期貨帳戶

Futures account 期货账户

api.futopt_account
api.futopt_account

List all accounts 列出所有帳戶

List all accounts 列出所有账户

api.list_accounts()

---
api.list_accounts()

---

Rate Limits 流量限制

Rate Limits 流量限制

Category 類別Limit 限制
Daily Traffic 每日流量500MB - 10GB (based on trading volume 依交易量)
Quote Query 行情查詢50 requests / 5 sec
Accounting Query 帳務查詢25 requests / 5 sec
Connections 連線數5 per person ID
Daily Logins 每日登入1000 times

Category 类别Limit 限制
Daily Traffic 每日流量500MB - 10GB (based on trading volume 依交易量)
Quote Query 行情查询50 requests / 5 sec
Accounting Query 账务查询25 requests / 5 sec
Connections 连接数5 per person ID
Daily Logins 每日登录1000 times

Common Patterns 常用模式

Common Patterns 常用模式

Subscribe Market Data 訂閱行情

Subscribe Market Data 订阅行情

python
undefined
python
undefined

Subscribe tick data 訂閱逐筆成交

Subscribe tick data 订阅逐笔成交

api.quote.subscribe( api.Contracts.Stocks["2330"], quote_type=sj.constant.QuoteType.Tick )
api.quote.subscribe( api.Contracts.Stocks["2330"], quote_type=sj.constant.QuoteType.Tick )

Subscribe bidask 訂閱五檔

Subscribe bidask 订阅五档

api.quote.subscribe( api.Contracts.Stocks["2330"], quote_type=sj.constant.QuoteType.BidAsk )
api.quote.subscribe( api.Contracts.Stocks["2330"], quote_type=sj.constant.QuoteType.BidAsk )

Set callback 設定回調

Set callback 设置回调

@api.quote.on_quote def quote_callback(topic, quote): print(f"Topic: {topic}, Quote: {quote}")
undefined
@api.quote.on_quote def quote_callback(topic, quote): print(f"Topic: {topic}, Quote: {quote}")
undefined

Query Positions 查詢持倉

Query Positions 查询持仓

python
undefined
python
undefined

Stock positions 股票持倉

Stock positions 股票持仓

positions = api.list_positions(api.stock_account)
positions = api.list_positions(api.stock_account)

Futures positions 期貨持倉

Futures positions 期货持仓

positions = api.list_positions(api.futopt_account)
undefined
positions = api.list_positions(api.futopt_account)
undefined

Cancel Order 刪單

Cancel Order 删单

python
api.cancel_order(trade)
python
api.cancel_order(trade)

Update Order 改單

Update Order 改单

python
undefined
python
undefined

Change price 改價

Change price 改价

api.update_order(trade=trade, price=590)
api.update_order(trade=trade, price=590)

Reduce quantity 減量 (can only reduce 只能減少)

Reduce quantity 减量 (can only reduce 仅可减少)

api.update_order(trade=trade, qty=1)

---
api.update_order(trade=trade, qty=1)

---

Error Handling 錯誤處理

Error Handling 错误处理

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

Check order status 檢查訂單狀態

Check order status 检查订单状态

api.update_status(api.stock_account) for trade in api.list_trades(): print(trade.status)

---
api.update_status(api.stock_account) for trade in api.list_trades(): print(trade.status)

---

Logout 登出

Logout 登出

python
api.logout()
python
api.logout()