iT邦幫忙

2021 iThome 鐵人賽

DAY 29
0
永豐金融APIs

永豐證API X Python系列 第 29

【D29】食材、廚具準備好了,準備上桌

前言

我們已經熟悉了廚房環境(開發環境)、各式各樣的廚具(API),以及可以料理的食譜(商品與策略),現在就要把我們的菜餚上桌(下單)囉~在這之前,先看看上菜的路徑。

參考網站:Future and Option

本日程式碼使用:d29_order.py


如何下單?

需要兩個物件,一個是必要的商品檔,也就是要購買的商品標的,另一個是要購買的資訊。前者的話,就以期貨來說,就是api.Contracts.Futures.TXF.TXF202110這樣,也就是我們在訂閱或是看snapshot的contract。而購買資訊則是新的東西,他會長成這樣:

order = t.api.Order(
    action=sj.constant.Action.Buy,
    price=15000,
    quantity=2,
    price_type=sj.constant.StockPriceType.LMT,
    order_type=sj.constant.FuturesOrderType.ROD,
    octype=sj.constant.FuturesOCType.Auto,
    account=t.api.futopt_account,
)

一般來說,參數都不需要動,我們只要修改價格(price)與數量(quantity),而其他欄位的意義為:

  • action (str): 這筆單的買賣別為何,資料會是BuySell
  • price_type (str): 價格的類型,資料會是LMT(限價)、MKT(市價)、MKP(範圍市價)
  • order_type (str): 單的有效期。資料會是RODIOCFOK
  • octype (str): 這筆單是屬於哪種類別,資料會是Auto(自動)、NewPosition(新倉)、Cover(平倉)、 DayTrade(當沖)
  • account (:obj:Account): 哪個帳號執行的

接著是下單的功能:api.place_order(contract, order),裡面的參數為商品檔,以及訂單價格數量與其他內容。執行後會顯示這樣:

Trade(contract=Future(code='TXFJ1', symbol='TXF202110', name='臺股期貨10', category='TXF', delivery_month='202110', underlying_kind='I', unit=1, limit_up=18060.0, limit_down=14778.0, reference=16419.0, update_date='2021/10/13'), order=Order(action=<Action.Buy: 'Buy'>, price=10, quantity=2, id='203635d6', seqno='980239', ordno='kY00t', account=Account(account_type=<AccountType.Future: 'F'>, person_id='PAPIUSER07', broker_id='F002000', account_id='1107458', signed=True), price_type=<StockPriceType.LMT: 'LMT'>, order_type=<FuturesOrderType.ROD: 'ROD'>), status=OrderStatus(id='203635d6', status=<Status.PendingSubmit: 'PendingSubmit'>, status_code='    ', order_datetime=datetime.datetime(2021, 10, 13, 23, 6, 38), deals=[]))

說明這個商品的資訊,已就下單的內容,其中status是結果,我們的結果是status=<Status.PendingSubmit: 'PendingSubmit'>,還在PendingSubmit: 傳送中

各種狀態為:

  • PendingSubmit: 傳送中
  • PreSubmitted: 預約單
  • Submitted: 傳送成功
  • Failed: 失敗
  • Cancelled: 已刪除
  • Filled: 完全成交
  • Filling: 部分成交

這樣就下單出去囉~

選擇權下單

繼續延用之前的trader class,這邊直接呼叫.api來執行下單作業。

t = trader()
t.login()

# 選擇權下單
contract = t.api.Contracts.Options.TXO.TXO202110016300C
order = t.api.Order(
    action=sj.constant.Action.Buy,
    price=10,
    quantity=2,
    price_type=sj.constant.StockPriceType.LMT,
    order_type=sj.constant.FuturesOrderType.ROD,
    octype=sj.constant.FuturesOCType.Auto,
    account=t.api.futopt_account,
)

trade = t.api.place_order(contract, order)
trade

其中的order物件不需要調整,直接沿用期貨的部分,只是pricequantity可以做調整,如果要當賣方action也要變動。最後直接呼叫place_order()

就可以看到選擇權的call下單內容:

OrderState.FOrder {'operation': {'op_type': 'New', 'op_code': '00', 'op_msg': ''}, 'order': {'id': 'f9ebac69', 'seqno': '980238', 'ordno': 'kY00s', 'account': {'account_type': 'F', 'person_id': '', 'broker_id': 'F002000', 'account_id': '1107458', 'signed': True}, 'action': 'Buy', 'price': 10.0, 'quantity': 2, 'order_type': 'ROD', 'market_type': 'Night', 'oc_type': 'New', 'subaccount': ''}, 'status': {'id': 'f9ebac69', 'exchange_ts': 1634137593, 'modified_price': 0.0, 'cancel_quantity': 0, 'order_quantity': 2}, 'contract': {'security_type': 'OPT', 'code': 'TXO', 'exchange': 'TIM', 'delivery_month': '202110', 'delivery_date': '', 'strike_price': 16300.0, 'option_right': 'OptionCall'}}

好玩的是,萬一價格下錯,超出規則,他會這樣顯示:

OrderState.FOrder {'operation': {'op_type': 'New', 'op_code': '9921', 'op_msg': '超過該商品漲跌停價'}...(以下省略)

後記

下單其實有點複雜,不過簡單的話只需要動三個參數,也就是買賣別、數量、價格,再加上商品就可以下單。我們之前已經取得商品的價格,也說明組合單的買賣別,接著就直接輕鬆地帶入價格和買賣方向進去,這樣就可以下單囉~~是不是還滿簡單的呢!

另外,測試環境居然Mac也能下單,還滿方便的,不過正式區應該就需要docker了...


上一篇
【D28】熟練一下廚具-bid and ask #3:製作臺指選擇權價差單
下一篇
【D30】結尾:佳餚上桌
系列文
永豐證API X Python30

1 則留言

0
juck30808
iT邦新手 3 級 ‧ 2021-10-14 12:06:25

恭喜即將邁入完賽啦~

謝謝拉~~

我要留言

立即登入留言