問與答
下單¶
如何下市價單(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
** We've migrate QA site to Shioaji Forum **