iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 19
0
AI & Data

量化交易30天系列 第 19

量化交易30天 Day19 - 串接券商API做交易(六) 讀懂委託及成交回報訊息

  • 分享至 

  • xImage
  •  

量化交易30天
本系列文章是紀錄一位量化交易新手的學習過程,除了基礎的Python語法不說明,其他金融相關的東西都會一步步地說明,希望讓更多想學習量化交易但是沒有學過相關金融知識的朋友們,透過這系列的文章,能夠對量化交易略知一二,也歡迎量化交易的高手們多多交流。

之前在shioaji下單的部份,關於委託單送出之後server回傳的訊息,似乎沒有很清楚地去了解到底回傳了什麼內容,這邊就要來看懂下單訊息、取消委託單訊息、更新委託單訊息,反正只要委託單內容有改變,server就會回傳一個OrderState,告訴我們這張單發生什麼事。

下單訊息

這邊就來讀下單後server回傳的訊息,這邊要先記住這張單我把它命名叫做trade,等一下要取消或是改價量的時候會需要。

In

contract = api.Contracts.Stocks.TSE.TSE2330
order = api.Order(price=400,
                  quantity=1,
                  action="Buy",
                  price_type="LMT",
                  order_type="ROD",
                  account=api.stock_account
                  )
trade = api.place_order(contract, order)

Out

OrderState.TFTOrder {
   "operation":{
      "op_type":"New", # 表示這張單是新建立的
      "op_code":"00",
      "op_msg":""
   },
   "order":{ # 委託單資訊
      "id":"d6caaa23",
      "seqno":"628330",
      "ordno":"IK148", # 委託書號
      "action":"Buy", # 買賣方向
      "price":400.0, # 價位
      "quantity":1, # 數量
      "order_cond":"Cash", # 交易型態
      "order_type":"ROD", # 下單類型;ROD代表當日有效單
      "price_type":"LMT" # 限價單
   },
   "status":{ # 委託單狀態
      "id":"d6caaa23",
      "exchange_ts":1600924398,
      "modified_price":0,
      "cancel_quantity":0
   },
   "contract":{ # 商品規格
      "security_type":"STK", # 商品種類;STK表示個股
      "exchange":"TSE", # 交易所
      "code":"2330", # 商品代號
      "symbol":"",
      "name":"",
      "currency":"TWD"
   }
}

取消委託訊息

上面那張單的物件叫做trade,所以要取消這張單的話,可以這樣寫:

In

api.cancel_order(trade)

Out

OrderState.TFTOrder {
   "operation":{
      "op_type":"Cancel", # 表示要取消這張單
      "op_code":"00",
      "op_msg":""
   },
   "order":{ # 委託單資訊
      "id":"d6caaa23",
      "seqno":"628330",
      "ordno":"IK148",
      "action":"Buy",
      "price":400.0,
      "quantity":1,
      "order_cond":"Cash",
      "order_type":"ROD",
      "price_type":"LMT"
   },
   "status":{ # 委託單狀態
      "id":"d6caaa23",
      "exchange_ts":1600924411,
      "modified_price":0,
      "cancel_quantity":1 # 已取消數量,因為這張單只委託一張,所以會是1
   },
   "contract":{ # 商品規格
      "security_type":"STK",
      "exchange":"TSE",
      "code":"2330",
      "symbol":"",
      "name":"",
      "currency":"TWD"
   }
}

修改價格

有時候將委託單送出之後,會需要修改價格,這時候就可以使用update功能

In

api.update_order(trade=trade, price=410)

Out

OrderState.TFTOrder {
   "operation":{
      "op_type":"UpdatePrice", # 更新價格
      "op_code":"00",
      "op_msg":""
   },
   "order":{
      "id":"b2476784",
      "seqno":"628536",
      "ordno":"IK168",
      "action":"Buy",
      "price":410.0, # 已經改價了
      "quantity":3,
      "order_cond":"Cash",
      "order_type":"ROD",
      "price_type":"LMT"
   },
   "status":{
      "id":"b2476784",
      "exchange_ts":1600924520,
      "modified_price":0,
      "cancel_quantity":0
   },
   "contract":{
      "security_type":"STK",
      "exchange":"TSE",
      "code":"2330",
      "symbol":"",
      "name":"",
      "currency":"TWD"
   }
}

修改數量

原本上面這張單的quantity是3,如果想要減少1張,可以這樣寫
In

# qty是指要減少的數量
api.update_order(trade=trade, qty=1)

Out

OrderState.TFTOrder {
   "operation":{
      "op_type":"UpdateQty", # 更新數量
      "op_code":"00",
      "op_msg":""
   },
   "order":{
      "id":"b2476784",
      "seqno":"628536",
      "ordno":"IK168",
      "action":"Buy",
      "price":400.0,
      "quantity":3,
      "order_cond":"Cash",
      "order_type":"ROD",
      "price_type":"LMT"
   },
   "status":{
      "id":"b2476784",
      "exchange_ts":1600924636,
      "modified_price":0,
      "cancel_quantity":1 # 取消的數量
   },
   "contract":{
      "security_type":"STK",
      "exchange":"TSE",
      "code":"2330",
      "symbol":"",
      "name":"",
      "currency":"TWD"
   }
}

本篇總結
Shioaji的功能到這篇其實大概就講完了,真的是蠻多功能的,接下來幾篇就要來把這些功能串接起來啦,從接收報價,資料導入策略,一直到下單,會使用一個範例策略實做,請繼續收看囉。

P.S.
如果大家對於量化交易有興趣的話,我自己有上過以下這門課,課程內容從串接股市資料API、儲存至資料庫、將自己的策略轉化成程式碼、自動下單,並且可以把整個流程自動化,每天早上執行一次,一整天就不用看盤了,覺得是蠻實戰的,可以參考看看。

筆者 Sean
奈米戶投資人 / Python愛用者
喜歡用Python玩轉金融數據,從個股基本面、技術面、籌碼面相關資料,一直到總體經濟數據,都是平常接觸到的素材;對於投資,除了研究歷史數據,也喜歡瞭解市場上大家在玩些什麼。


上一篇
量化交易30天 Day18 - 串接券商API做交易(五) 使用API查帳戶概況
下一篇
量化交易30天 Day20 - 串接券商API做交易(七) 接收即時報價到觸發策略訊號
系列文
量化交易30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言