iT邦幫忙

2021 iThome 鐵人賽

DAY 16
0
永豐金融APIs

深入解析 Shioaji API系列 第 16

Day 16 - 取得帳務相關資訊 (上)

本篇重點

  • api.list_positions
  • api.list_profit_loss
  • api.list_profit_loss_detail
  • api.list_settlements
  • api.account_balance

api.list_positions

api.list_positions,用來查看即時庫存,參數說明如下:

api.list_positions(
    account: shioaji.account.Account = None, #交易帳戶,預設為None
    unit: shioaji.constant.Unit = <Unit.Common: 'Common'>, #單位,預設為整股
    timeout: int = 5000 #timeout預設為5000ms,即延遲時間?
)

雖然account參數沒有預設值,但其實在程式中有做判斷,若沒有傳入account參數,則預設是帶入api.stock_account。
https://ithelp.ithome.com.tw/upload/images/20211001/20140827HP4P0kVtBn.png
回傳的資料,會是shioaji.position.Position的list,資料內容說明如下

[Position(
code='2890', #金融商品代碼
direction=<Action.Buy: 'Buy'>, #持有部位的方式
quantity=10, #即時庫存
price=10.1, #成本均價
pnl=1234.0, #損益試貞
yd_quantity=10, #昨日餘額
cond=<StockOrderCond.Cash: 'Cash'> #交易別StockOrderCond)]

api.list_profit_loss

api.list_profit_loss查詢已實現損益,參數說明如下:

api.list_profit_loss(
        account: shioaji.account.Account = None, #交易帳戶
        begin_date: str = '', #開始日期
        end_date: str = '', #結束日期
        timeout: int = 5000 #timeout預設為5000ms,即延遲時間?
        )

跟api.list_positions一樣,如果沒有指定所要查詢的account,預設會回傳stock_account的資料。而回傳的資料是shioaji.position.ProfitLoss的List,說明如下:

[ProfitLoss(id=0, #序號
code='2890', #金融商品代碼
seqno='14816', #序號
dseq='ID111', #委託單號
quantity=1, #數量
price=10.1, #成交價格
pnl=1234.0, #損益
pr_ratio=0.1237, #報酬率
cond='Cash', #交易別
date='2020-05-22' #成交日期
)]

api.list_profit_loss_detail

api.list_profit_loss_detail,查詢已實現損益的詳細內容。在執行前,要先執行list_profit_loss取得已實現損並資料,再執行list_profit_loss_detail並傳入剛才回傳資料中的id,才可取得詳細內容
參數說明如下:

 api.list_profit_loss_detail(
        account: shioaji.account.Account = None,
        detail_id: int = 0, #即api.list_profit_loss,回傳資料中的id序號
        timeout: int = 5000
    )

請注意,在執行list_profit_loss_detail前,要先執行api.list_profit_loss?

[ProfitLossDetail(date='2020-05-22', #成交日
cond='Cash', #交易別
code='2890', #股票代號
quantity=1, #數量(張)
price=10.1, #單價
cost=9100, #價金(持有成本)
dseq='ID111', #委託單號
rep_margintrading_amt=0, #融資金額
rep_collateral=0, #擔保品
rep_margin=0, #保證金
fee=20, #手續費
interest=0, #利息
tax=0, #交易稅
shortselling_fee=0, #借券費
currency='NTD' #幣別
)]

api.list_settlements

api.list_settlements交割款項。因為只有股票交易才會有交割,因此account只能是stock_account,當然,也可以不給account參數,會自動帶stock_account。
參數說明如下:

api.list_settlements(
    account: shioaji.account.Account = None, #交易帳戶,可不必傳入
    timeout: int = 5000
    )

回傳資料為shioaji.position.Settlement的List

[Settlement(
t_money=0.0,  #T+0 交割金額
t1_money=0.0, #T+1 交割金額
t2_money=0.0, #T+2 交割金額
t_day='2021-10-01', #T+0 交割日期
t1_day='2021-10-04', #T+1 交割日期
t2_day='2021-10-05' #T+2 交割日期
)]

api.account_balance

api.account_balance,用來取得銀行帳戶(交割戶)餘額,這個function可以直接呼叫,不用給任何參數,而回傳的資料如下:

[AccountBalance(acc_balance=123456.0, #帳戶餘額
date='2020-07-16 09:29:13', #查詢時間
errmsg='' #錯誤訊息
)]

上一篇
Day 15 - Order & Deal Event
下一篇
Day 17 - 取得帳務相關資訊 (下)
系列文
深入解析 Shioaji API30

尚未有邦友留言

立即登入留言