跳转至

問與答

下單

如何下市價單(MKT)、範圍市價單(MKP)

order = api.Order(
    action=sj.constant.Action.Buy,
    price=0, # MKT, MKP will not use price parameter
    quantity=1,
    price_type='MKP', # change to MKT or MKP
    order_type='IOC', # MKT, MKP only accecpt IOC order
    octype=sj.constant.FuturesOCType.Auto,
    account=api.futopt_account
)

如何掛漲(跌)停限價ROD單

First, we need to know the limit up(limit down) price of the security. Just query the contract info with api.contracts.info(), you will find the information you want.

In

contract = api.contracts.get("2330")
api.contracts.info(contract)

Out

StockInfo(
    Contract(security_type='STK', region='TW', exchange='TSE', code='2330'),
    code='2330',
    name='台積電',
    category='24',
    currency=<Currency.TWD: 'TWD'>,
    unit=1000.0,
    day_trade=<DayTrade.Yes: 'Yes'>,
    reference=2440.0,
    limit_up=2680.0,
    limit_down=2200.0,
    margin_trading_balance=0,
    short_selling_balance=99,
    trading_suspended=False,
    margin_loan_ratio=0.6,
    margin_quota_lots=0,
    short_margin_ratio=0.9,
    short_quota_lots=99,
    short_selling_suspended=False,
    disposition_level=0,
    attention_flag=False,
    short_below_par_eligible=True,
    slb_below_par_eligible=True,
    etf_constituent=True,
    settlement_type='0',
    update_date=datetime.date(2026, 7, 16),
)

Example place LMT and ROD order at limit up price.

In

contract = api.contracts.get("2330")
price = api.contracts.info(contract).limit_up
order = api.Order(
    action=sj.constant.Action.Buy,
    price=price,
    quantity=1,
    price_type='LMT',
    order_type='ROD', 
    order_lot=sj.constant.StockOrderLot.Common,
    account=api.stock_account
)

行情

為什麼行情只能收幾行就斷掉了

If your code something like this, and possibly run code on cmd/terminal with python stream.py. Then you definitely won't get any additional ticks, since the python program has already terminated.

import shioaji as sj

api = sj.Shioaji(simulation=True)
api.login('YOUR_API_KEY', 'YOUR_SECRET_KEY')
contract = api.contracts.get("2330")
api.quote.subscribe(
    contract, 
    quote_type = sj.constant.QuoteType.Tick
)
# stream.py
import shioaji as sj

api = sj.Shioaji(simulation=True)
api.login('YOUR_PERSON_ID', '2222')
api.quote.subscribe(
    api.Contracts.Stocks["2330"], 
    quote_type = sj.constant.QuoteType.Tick
)

If you wish your python program to survive, please modify you python script as below.

# stream.py
import shioaji as sj
from threading import Event

api = sj.Shioaji(simulation=True)
api.login('YOUR_API_KEY', 'YOUR_SECRET_KEY')
contract = api.contracts.get("2330")
api.quote.subscribe(
    contract, 
    quote_type = sj.constant.QuoteType.Tick
)

Event().wait()
# stream.py
import shioaji as sj
from threading import Event

api = sj.Shioaji(simulation=True)
api.login('YOUR_PERSON_ID', '2222')
api.quote.subscribe(
    api.Contracts.Stocks["2330"], 
    quote_type = sj.constant.QuoteType.Tick
)

Event().wait()

其他

出現 Account not acceptable,可能原因如下

- 未完成[簽署](https://sinotrade.github.io/zh_TW/tutor/prepare/terms/#_1)及[API測試](https://sinotrade.github.io/zh_TW/tutor/prepare/terms/#api)。
- [`update_status`](../tutor/order/UpdateStatus)預設查詢為名下所有帳號,若想使用預設查詢方式,請確認所有帳號皆有完成簽署及測試。

如何更改shioaji.log

Please add environment variable before import shioaji. (version >= 0.3.3.dev0)

linux or Mac OS:

export SJ_LOG_PATH=/path/to/shioaji.log

windows:

set SJ_LOG_PATH=C:\path\to\shioaji.log

如何更改contracts下載路徑

Please add environment variable before import shioaji. (version >= 0.3.4.dev2)

linux or Mac OS:

export SJ_CONTRACTS_PATH=MY_PATH

windows:

set SJ_CONTRACTS_PATH=MY_PATH

python:

os.environ["SJ_CONTRACTS_PATH"]=MY_PATH

輸入密碼錯誤3次怎麼辦

線上解鎖

** Note that you only have 2 chances to unlock your account online in a day. **

** We've migrate QA site to Shioaji Forum **