Day6 - 下单函数使用,限价、市价、删单、改单怎麽写

今天中秋节,月亮嘛...每个月都会圆一次。美股这麽活跳,别烤肉了,认真准备明天开盘才是股海好青年,放下奈个酒杯,打开电脑吧。

今天聊聊关於下单order的相关参数。开始前,请先确认您已经备妥凭证(CA),放置在正确位置。不知道、不明了但很想要弄好我的CA,请参考这里

把凭证CA档案存好之後,按照下列指令,确认CA设定正确:

result = api.activate_ca(
    ca_path="/c/your/ca/path/Sinopac.pfx",  #这一段改成自己的路径,最简单可以放在目前python专案的同一个资料夹,只要输入档名即可
    ca_passwd="YOUR_CA_PASSWORD",           #输入密码
    person_id="Person of this Ca",          #一样,输入身分证ID
)

print(result)

如果执行後看到回应True,就代表CA搞定罗!

首先是设定一个买入的order范例,这一步只是把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,       #ROD/FOK/IOC设定
    order_lot=sj.constant.TFTStockOrderLot.Common, #设定整股
    account=api.stock_account                      #预设下单帐号
)

卖出的order范例

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每一项参数的简述

项目(小括号是参数允许的资料形态) 说明 (大括号是该项参数能选择的不同设定)
price (float or int) 设定价格
quantity (int) 数量
action (str) {Buy, Sell} 可选"买、卖"
price_type (str) {LMT, MKT, MKP} 可选"限价、市价、范围市价"
order_type (str) {ROD, IOC, FOK} 下单的挂单类别,不了解这三个是啥请看这里
order_cond (str) {Cash, MarginTrading, ShortSelling} 可选"现股、融资、融券"
order_lot (str) {Common, Fixing, Odd, IntradayOdd} 可选"整股、定盘、盘後零股、盘中零股"
first_sell {str} {true, false} 如果要先卖後买(例如券空)就选True,要留意不是所有股票都能执行,并且融资券下单前要确认自己的帐户有申请信用交易
account (:obj:Account) 帐户设定,只能传回Account的格式,不清楚请参考第4天的文章,很简单的。
ca (binary) 如本篇第一段

最後,来一个先卖後买的完整下单范例:

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内容与相关参数
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()
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.TSE0050
order = api.Order(
    price=90,
    quantity=10,
    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,
)

trade = api.place_order(contract, order)
trade

接着是删单指令

api.update_status(api.stock_account)    
api.cancel_order(trade)
api.update_status(api.stock_account)
trade

以下是改单的指令,要注意,这个范例是盘中零股,因此不能改价,只能改量。如果不了解盘中零股规则,详情请洽你的营业员。

api.update_status(api.stock_account)
api.update_order(trade=trade, qty=2)
api.update_status(api.stock_account)
trade

以上就是今天的分享,谢谢观看。
好了,好青年们,准备洗洗睡吧! 记得先入金,咱们明早08:45台股战场见。


<<:  从零开始学3D游戏开发:零件介面 Part.1 开始

>>:  [day6]API串接-Message内文加密

【1】做不做迁移式学习(Transfer Learning)的差异

关於: 本系列文将借用 Google 提供的 Colab 平台,在上面执行 30 个影像分类训练任务...

【Side Project】 (老板)订单清单UX功能实作

我们接续上一篇完成一些未完成的功能。 完成按钮 & 返回按钮 这两个按钮在整个篇章中,属於比...

Day32 ( 游戏设计 ) 太空狗闪躲陨石

太空狗闪躲陨石 教学原文参考:太空狗闪躲陨石 这篇文章会介绍,如何在 Scratch 3 里使用键盘...

申请 WhatsApp Business API的详细教学

使用WhatsApp Business API ,不但可以让企业能够以简单且安全可靠的方式,透过 ...

我想用 AJAX,但是...

现在使用者对网页应用程序的要求越来越高,又要好看又要反应快。常见的做法是使用 AJAX 提升页面反应...