Stock
Place Order¶
Stock place order jupyter link
First, you need login.¶
Get Contract Object.¶
In
contract = api.Contracts.Stocks.TSE.TSE2890
Making Order Object.¶
Buy¶
In
order = api.Order(
price=12,
quantity=1,
action=sj.constant.Action.Buy,
price_type=sj.constant.StockPriceType.LMT,
order_type=sj.constant.TFTOrderType.ROD,
order_lot=sj.constant.TFTStockOrderLot.Common,
account=api.stock_account
)
Sell¶
In
order = api.Order(
price=12,
quantity=1,
action=sj.constant.Action.Sell,
price_type=sj.constant.StockPriceType.LMT,
order_type=sj.constant.TFTOrderType.ROD,
order_lot=sj.constant.TFTStockOrderLot.Common,
account=api.stock_account
)
First Sell¶
In
order = api.Order(
price=12,
quantity=1,
action=sj.constant.Action.Sell,
price_type=sj.constant.StockPriceType.LMT,
order_type=sj.constant.TFTOrderType.ROD,
order_lot=sj.constant.TFTStockOrderLot.Common,
first_sell=sj.constant.StockFirstSell.Yes,
account=api.stock_account
)
Order Object¶
Attributes
price (float or int): the price of order
quantity (int): the quantity of order
action (str): order action to buy or sell
{Buy, Sell}
price_type (str): pricing type of order
{LMT, MKT, MKP}
order_type (str): the type of order
{ROD, IOC, FOK}
order_cond (str): order condition stock only
{Cash, Netting, MarginTrading, ShortSelling} (現股、餘額交割(用於興櫃買賣)、融資、融券)
order_lot (str): the type of order
{Common, Fixing, Odd, IntradayOdd} (整股、定盤、盤後零股、盤中零股)
first_sell {str}: the type of first sell
{true, false}
account (:obj:Account): which account to place this order
ca (binary): the ca of this order
Place Order¶
In
trade = api.place_order(contract, order)
For Example¶
Place Order ROD LMT¶
In
import shioaji as sj
api = sj.Shioaji()
accounts = api.login("YOUR_PERSON_ID", "YOUR_PASSWORD", contracts_timeout=10000)
api.activate_ca(
ca_path="/c/your/ca/path/Sinopac.pfx",
ca_passwd="YOUR_CA_PASSWORD",
person_id="Person of this Ca",
)
contract = api.Contracts.Stocks.TSE.TSE2890
order = api.Order(
price=12,
quantity=10,
action=sj.constant.Action.Buy,
price_type=sj.constant.StockPriceType.LMT,
order_type=sj.constant.TFTOrderType.ROD,
account=api.stock_account
)
trade = api.place_order(contract, order)
trade
import shioaji as sj
api = sj.Shioaji(simulation=True)
accounts = api.login("PAPIUSER01", "2222", contracts_timeout=10000)
contract = api.Contracts.Stocks.TSE.TSE2890
order = api.Order(
price=12,
quantity=10,
action=sj.constant.Action.Buy,
price_type=sj.constant.StockPriceType.LMT,
order_type=sj.constant.TFTOrderType.ROD,
account=api.stock_account
)
trade = api.place_order(contract, order)
trade
Out
Trade(
contract=Stock(
exchange=<Exchange.TSE: 'TSE'>,
code='2890',
symbol='TSE2890',
name='永豐金',
category='17'
),
order=Order(
action=<Action.Buy: 'Buy'>,
price=12.0,
quantity=10,
id='004d9bed',
seqno='427793',
ordno='WA345',
account=Account(
account_type=<AccountType.Stock: 'S'>,
person_id='RBCCJCBIGB',
broker_id='9A95',
account_id='9809975',
signed=True
),
price_type=<StockPriceType.LMT: 'LMT'>,
order_type=<FuturesOrderType.ROD: 'ROD'>
),
status=OrderStatus(
id='004d9bed',
status=<Status.PendingSubmit: 'PendingSubmit'>,
status_code='0',
order_datetime=datetime.datetime(2020, 3, 3, 15, 16, 40),
deals=[]
)
)
Place Order about First Sell¶
In
import shioaji as sj
api = sj.Shioaji()
accounts = api.login("YOUR_PERSON_ID", "YOUR_PASSWORD", contracts_timeout=10000)
api.activate_ca(
ca_path="/c/your/ca/path/Sinopac.pfx",
ca_passwd="YOUR_CA_PASSWORD",
person_id="Person of this Ca",
)
contract = api.Contracts.Stocks.TSE.TSE2890
order = api.Order(
price=14,
quantity=1,
action=sj.constant.Action.Sell,
price_type=sj.constant.StockPriceType.LMT,
order_type=sj.constant.TFTOrderType.ROD,
first_sell=sj.constant.StockFirstSell.Yes,
account=api.stock_account
)
trade = api.place_order(contract, order)
trade
import shioaji as sj
api = sj.Shioaji(simulation=True)
accounts = api.login("PAPIUSER01", "2222", contracts_timeout=10000)
contract = api.Contracts.Stocks.TSE.TSE2890
order = api.Order(
price=14,
quantity=1,
action=sj.constant.Action.Sell,
price_type=sj.constant.StockPriceType.LMT,
order_type=sj.constant.TFTOrderType.ROD,
first_sell=sj.constant.StockFirstSell.Yes,
account=api.stock_account
)
trade = api.place_order(contract, order)
trade
Out
Trade(
contract=Stock(
exchange=<Exchange.TSE: 'TSE'>,
code='2890',
symbol='TSE2890',
name='永豐金',
category='17',
day_trade='Yes'
),
order=Order(
action=<Action.Sell: 'Sell'>,
price=14,
quantity=1,
id='2bc5ae85',
seqno='620137',
ordno='00000',
account=Account(
account_type=<AccountType.Stock: 'S'>,
person_id='RBCCJCBIGB',
broker_id='9A95',
account_id='9809975',
signed=True
),
price_type=<StockPriceType.LMT: 'LMT'>,
order_type=<FuturesOrderType.ROD: 'ROD'>,
first_sell=<StockFirstSell.Yes: 'true'>
),
status=OrderStatus(
id='2bc5ae85',
status=<Status.PendingSubmit: 'PendingSubmit'>,
status_code='0',
order_datetime=datetime.datetime(2020, 3, 9, 8, 59, 42),
deals=[]
)
)
Place Order Emerging (興櫃下單)¶
In
import shioaji as sj
api = sj.Shioaji()
accounts = api.login("YOUR_PERSON_ID", "YOUR_PASSWORD", contracts_timeout=10000)
api.activate_ca(
ca_path="/c/your/ca/path/Sinopac.pfx",
ca_passwd="YOUR_CA_PASSWORD",
person_id="Person of this Ca",
)
contract = api.Contracts.Stocks.TSE.TSE6770
order = api.Order(
price=65,
quantity=1,
action=sj.constant.Action.Buy,
price_type=sj.constant.StockPriceType.LMT,
order_type=sj.constant.TFTOrderType.ROD,
order_cond=sj.constant.StockOrderCond.Netting,
account=api.stock_account
)
trade = api.place_order(contract, order)
trade
Out
Trade(
contract=Stock(
exchange=<Exchange.OES: 'OES'>,
code='6770',
symbol='OES6770',
name='力積電',
category='24',
unit=1000,
limit_up=89.53,
limit_down=59.68,
reference=74.61,
update_date='2021/04/09'
),
order=Order(
action=<Action.Buy: 'Buy'>,
price=65,
quantity=1,
id='adf4b181',
seqno='172928',
ordno='00000',
account=Account(
account_type=<AccountType.Stock: 'S'>,
person_id='RBCCJCBIGB',
broker_id='9A95',
account_id='9809975',
signed=True
),
price_type=<StockPriceType.LMT: 'LMT'>,
order_type=<FuturesOrderType.ROD: 'ROD'>,
order_cond=<StockOrderCond.Netting: 'Netting'>
),
status=OrderStatus(
id='adf4b181',
status=<Status.PendingSubmit: 'PendingSubmit'>,
status_code='0',
order_datetime=datetime.datetime(2021, 4, 9, 15, 11, 12),
deals=[]
)
)
Status of Trade
PendingSubmit
: 傳送中PreSubmitted
: 預約單Submitted
: 傳送成功Failed
: 失敗Cancelled
: 已刪除Filled
: 完全成交Filling
: 部分成交
Cancel Order¶
In
api.update_status(api.stock_account)
api.cancel_order(trade)
api.update_status(api.stock_account)
trade
Out
Trade(
contract=Stock(
exchange=<Exchange.TSE: 'TSE'>,
code='2890',
symbol='TSE2890',
name='永豐金',
category='17'
),
order=Order(
action=<Action.Buy: 'Buy'>,
price=12.0,
quantity=10,
id='f3d8afdb',
seqno='427797',
ordno='WA347',
account=Account(
account_type=<AccountType.Stock: 'S'>, person_id='RBCCJCBIGB',
broker_id='9A95',
account_id='9809975',
signed=True
),
price_type=<StockPriceType.LMT: 'LMT'>,
order_type=<FuturesOrderType.ROD: 'ROD'>
),
status=OrderStatus(
id='f3d8afdb',
status=<Status.Cancelled: 'Cancelled'>,
status_code='00',
order_datetime=datetime.datetime(2020, 3, 3, 15, 17, 49),
cancel_quantity=10,
deals=[]
)
)
Update Order¶
In
api.update_status(api.stock_account)
api.update_order(trade=trade, price=12, qty=2)
api.update_status(api.stock_account)
trade
Out
Trade(
contract=Stock(
exchange=<Exchange.TSE: 'TSE'>,
code='2890',
symbol='TSE2890',
name='永豐金',
category='17'
),
order=Order(
action=<Action.Buy: 'Buy'>,
price=12.0,
quantity=10,
id='d5bfb75c',
seqno='427795',
ordno='WA346',
account=Account(
account_type=<AccountType.Stock: 'S'>, person_id='RBCCJCBIGB',
broker_id='9A95',
account_id='9809975',
signed=True
),
price_type=<StockPriceType.LMT: 'LMT'>,
order_type=<FuturesOrderType.ROD: 'ROD'>
),
status=OrderStatus(
id='d5bfb75c',
status=<Status.Submitted: 'Submitted'>,
status_code='00',
order_datetime=datetime.datetime(2020, 3, 3, 15, 17, 17),
cancel_quantity=2,
deals=[]
)
)