SuperAPI AI Directory

shioaji

Coding & development

View repository

Updated 10-16 01:37

About this skill

Shioaji Trading API

Shioaji is SinoPac's Python API for trading Taiwan financial markets (stocks, futures, options). Shioaji is a Python trading API provided by SinoPac Securities, supporting Taiwan's stock, futures, and options markets.

Official Docs Official Documentation: https://sinotrade.github.io/ LLM Reference: https://sinotrade.github.io/llms-full.txt


Navigation Feature Guide

Topic Topic File File Description Description
Preparation Preparation PREPARE.md Account setup, API keys, testing Account opening/API key application/testing
Contracts Contracts CONTRACTS.md Stocks, Futures, Options contracts Stock/Futures/Options contracts
Orders Order Placement ORDERS.md Place, modify, cancel, combo orders Place order/modify order/cancel order/combo order
Reserve Reserve RESERVE.md Reserve orders for disposition stocks Reserve securities and funds for disposition stocks
Streaming Market Data STREAMING.md Real-time tick & bidask data Real-time Tick/BidAsk data
Market Data Market Data MARKET_DATA.md Historical, snapshot, credit, scanners Historical data/snapshot/margin and securities/scanners
Accounting Accounting ACCOUNTING.md Balance, margin, P&L, trading limits Balance/margin/profit and loss/quota
Advanced Advanced ADVANCED.md Quote binding, non-blocking, stop orders Quote binding/non-blocking/stop trigger
Troubleshooting Troubleshooting TROUBLESHOOTING.md Common issues and solutions Common issues and solutions

Quick Start Quick Start

Installation Installation

# pip
pip install shioaji

# uv (recommended 推薦)
uv add shioaji

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

# Docker
docker run -it sinotrade/shioaji:latest

Login & Activate CA Login and Certificate Activation

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",
)

Simulation Mode Simulation Mode

Test API without real money. Test the API using the simulation environment.

import shioaji as sj

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

Available in simulation Features available in simulation mode:

  • 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

# 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)

Common Constants Common Constants

Action Buy/Sell Direction

sj.constant.Action.Buy   # 買進
sj.constant.Action.Sell  # 賣出

Stock Price Type Stock Price Type

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

Futures Price Type Futures Price Type

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

Order Type Order Condition

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 Trading Unit

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 Margin Trading Condition

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

Quote Type Quote Type

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

Account Objects Account Objects

# Stock account 股票帳戶
api.stock_account

# Futures account 期貨帳戶
api.futopt_account

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

Rate Limits Rate Limits

Category Category Limit Limit
Daily Traffic Daily Traffic 500MB - 10GB (based on trading volume based on trading volume)
Quote Query Market Data Query 50 requests / 5 sec
Accounting Query Accounting Query 25 requests / 5 sec
Connections Number of Connections 5 per person ID
Daily Logins Daily Logins 1000 times

Common Patterns Common Patterns

Subscribe Market Data Subscribe to Market Data

# 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}")

Query Positions Query Positions

# Stock positions 股票持倉
positions = api.list_positions(api.stock_account)

# Futures positions 期貨持倉
positions = api.list_positions(api.futopt_account)

Cancel Order Cancel Order

api.cancel_order(trade)

Update Order Modify Order

# Change price 改價
api.update_order(trade=trade, price=590)

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

Error Handling Error Handling

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)

Logout Logout

api.logout()