官方說明文件:
https://sinotrade.github.io/tutor/order/CA/
在下單之前,需要先下載永豐證券帳戶的下單電子憑證,下載方式請參考官方說明
https://www.sinotrade.com.tw/CSCenter/CSCenter_13_1?tab=2
下載完成後,可以透過api.activate_ca來啟用下單電子憑證,範例如下:
from dotenv import load_dotenv
import os
import shioaji as sj
load_dotenv('D:\\python\\shioaji\\.env') #讀取.env中的環境變數
api = sj.Shioaji()
api.login(
person_id=os.getenv('YOUR_PERSON_ID'),
passwd=os.getenv('YOUR_PASSWORD')
)
result = api.activate_ca(
ca_path=os.getenv('YOUR_CA_PATH'), # 下單電子憑證路徑及檔案名稱
ca_passwd=os.getenv('YOUR_CA_PASS'), # 下單電子憑證密碼
person_id=os.getenv('YOUR_PERSON_ID'), # 身份證字號
)
print(result)
api.logout()
啟用下單電子憑證前要先執行api.login進行登入。在這裡一樣把電子憑證相關資訊先儲存在env檔案中,再透過os.getenv()取得資訊並傳入activate_ca中,若電子憑證啟用成功,則回傳的result就會是True。
若你要用虛擬帳戶登入並練習或測試下單功能,不必啟動電子憑證,可跳過這個步驟。
官方說明文件:https://sinotrade.github.io/tutor/order/Stock/#making-order-object
在發送委託單前,要先產生一個Order物件。
Order物件建立的參數說明如下:
參數 | 參數說明 | 參數範例 |
---|---|---|
price | 委託價格 | 18.5 |
quantity | 委託數量 | 1 |
action | 委託單動作 | {Buy, Sell} |
price_type | 價格類型 | {LMT, MKT, MKP} (限價、市價、範圍市價) |
order_type | 委託單類型 | {ROD, IOC, FOK} (當日有效、立即成交否則取消、全部成交否則取消) |
order_cond | 委託單種類 | {Cash, MarginTrading, ShortSelling} (現股、融資、融券) |
order_lot | 委託單交易單位 | {Common, Fixing, Odd, IntradayOdd} (整股、盤後定價、盤後零股、盤中零股) |
first_sell | 是否為現沖先賣 | {true, false} |
octype | 倉別 | {Auto, NewPosition, Cover, DayTrade} (自動、新倉、平倉、當沖) |
OptionRight | 選擇權類別 | {Call, Put} |
account | 交易帳戶 | 可由API取得account物件 |
order_cond、order_lot及first_sell,為股票Order物件特有屬性
octype,為期貨或選擇權Order物件特有屬性
OptionRight為選擇權Order物件特有屬性
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
)
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
)
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, #現沖先賣,設定為StockFirstSell.Yes or True
account=api.stock_account
)
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.IntradayOdd, #指定盤中零股
account=api.stock_account
)
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.IntradayOdd, #指定盤中零股
account=api.stock_account
)
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.Fixing, #指定盤後定價
account=api.stock_account
)
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.Odd, #指定盤後零股
account=api.stock_account
)
以上為現股Order的建立及下單相關操作,若是要使用融資或融券,只要在建立Order時指定order_cond為StockOrderCond.MarginTrading(融資)或是StockOrderCond.ShortSelling(融券)即可;若在建立Order時沒有指定order_cond,預設都是以StockOrderCond.Cash建立。
請教一下"現沖先賣",若我要平倉是否要下一個"買單"??
是,要沖銷的話,就是用「現股買進」,成交後系統就會自動沖銷