Skip to main content

交易


此篇教學將示範如何進行一個完整的買賣流程

買入股票

假設今天開盤後,我們想以66.00元買進2張富邦金,我們可以這樣撰寫程式並執行:

from fubon_neo.sdk import FubonSDK, Order
from fubon_neo.constant import TimeInForce, OrderType, PriceType, MarketType, BSAction

sdk = FubonSDK()

accounts = sdk.login("您的身分證字號", "您的登入密碼", "您的憑證位置", "您的憑證密碼") #若有歸戶,則會回傳多筆帳號資訊

#建立委託單內容
order = Order(
buy_sell = BSAction.Buy,
symbol = "2881",
price = "66",
quantity = 2000,
market_type = MarketType.Common,
price_type = PriceType.Limit,
time_in_force= TimeInForce.ROD,
order_type = OrderType.Stock,
user_def = "From Python" # optional field
)


sdk.stock.place_order(accounts.data[0], order) #下單委託
info

整股與零股之委託,請參考各語言Libary Python Libary

確認委託與成交回報

若要確定該筆的狀態,可以依照下方範例查詢指定的委託單:

orderResults = sdk.stock.get_order_results(accounts.data[0])
print(orderResults)

根據回報的結果,我們可以判斷此筆委託是否成交,成交了多少數量:

Result {  
is_success: true,
message: None,
data : [
OrderResult{
...
buy_sell: Buy, #買賣別 (BSAction)
price: 66, #原始委託價格 (float)
quantity: 2000, #原始委託數量 (int)
after_price: 66, #有效委託價格 (float)
after_qty: 2000, #有效委託數量 (int)
filled_qty: 0, #已成交數量 (int)
filled_money: 0, #成交價金 (int)
symbol: "2881", #股票代號 (string)
order_no: "bA888", #委託書號 (string)
last_time: "10:10:10.123", #最後異動時間 (string)
...
}
]
}

修改委託價格

由於原先的價格一直無法成交,我們調整原先的委託價格,改用66.50元的價格買入:

orderResults = sdk.stock.get_order_results(accounts.data[0])

modified_pirce = sdk.stock.make_modify_price_obj(orderResults.data[0],"66.5")
sdk.stock.modify_price(accounts.data[0], modified_pirce)

幾分鐘後,我們再查詢一次委託狀態,發現成交了:

orderResults = sdk.stock.get_order_results(accounts.data[0])
print(orderResults.data[0])
[
{
...
buy_sell: Buy, #買賣別 (BSAction)
price: 66, #原始委託價格 (float)
quantity: 2000, #原始委託數量 (int)
after_price: 66.5, #有效委託價格 (int)
after_qty: 1000, #有效委託數量 (int)
filled_qty: 1000, #已成交數量 (int)
filled_money: 66000, #成交價金 (int)
symbol: "2881", #股票代號 (string)
order_no: "bA888", #委託書號 (string)
last_time: "10:13:12.123", #最後異動時間 (string)
...
}
]

賣出股票

最後決定在收盤前,賣出一張富邦金:

#建立委託單內容
order = Order(
buy_sell = BSAction.Sell,
symbol = "2881",
price = "67",
quamtity = 1000,
market_type = MarketType.Common,
price_type = PriceType.Limit,
time_in_force= TimeInForce.ROD,
order_type = OrderType.Stock,
user_def = "From Python" # optional field
)


sdk.stock.place_order(accounts.data[0], order) #下單委託