交易
此篇教學將示範如何進行一個完整的買賣流程
買入股票
假設今天開盤後,我們想以11.50元買進2張新光金,我們可以這樣撰寫程式並執行:
- Python
- Node.js
from masterlink_sdk import MasterlinkSDK, Order, BSAction, TimeInForce, OrderType, PriceType, MarketType
sdk = MasterlinkSDK()
#若有開多帳號,則會回傳資訊
accounts = sdk.login("您的身分證字號", "您的登入密碼", "您的憑證位置") # 若是使用技術文件申請,則憑證密碼為預設
#accounts = sdk.login("您的身分證字號", "您的登入密碼", "您的憑證位置", "您的憑證密碼") # 若使用憑證 e 管家,則需輸入自設憑證密碼
#建立委託單內容
order = Order(
buy_sell = BSAction.Buy,
symbol = "2888",
price = "11.5",
quantity = 2000,
market_type = MarketType.Common,
price_type = PriceType.Limit,
time_in_force= TimeInForce.ROD,
order_type = OrderType.Stock
)
sdk.stock.place_order(accounts[0], order) #下單委託
info
整股與零股之委託,請參考各語言Libary Python Libary
const { MasterlinkSDK, BSAction, TimeInForce, OrderType, PriceType, MarketType } = require('masterlink');
const sdk = new MasterlinkSDK();
const accounts = sdk.login("您的身分證字號", "您的登入密碼", "您的憑證路徑"); //若是使用技術文件申請,則憑證密碼為預設
// const accounts = sdk.login("您的身分證字號", "您的登入密碼", "您的憑證路徑" ,"您的憑證密碼"); // 若使用憑證 e 管家,則需輸入自設憑證密碼
const order = {
buySell: BSAction.Buy,
symbol: "2888",
price: "11.5",
quantity: 2000,
marketType: MarketType.Common,
priceType: PriceType.Limit,
timeInForce: TimeInForce.ROD,
orderType: OrderType.Stock
};
sdk.stock.placeOrder(accounts[0],order);
info
整股與零股之委託,請參考各語言Libary Node.Js Libary
確認委託與成交回報
若要確定該筆的狀態,可以依照下方範例查詢指定的委託單:
- Python
- Node.js
orderResults = sdk.stock.get_order_results(accounts[0])
print(orderResults)
const orderResults = sdk.stock.getOrderResults(accounts[0])
console.log(orderResults)
根據回報的結果,我們可以判斷此筆委託是否成交,成交了多少數量:
- Python
- Node.js
OrderRecord {
...
org_qty: 2000, # 原始下單股數 (Int)
filled_qty: 0, # 已成交數量 (Int)
cel_qty: 0, # 已取消數量 (Int)
can_cancel: false, # 是否可取消 (Boolean)
err_code: "000000", # 錯誤代碼 (String)
err_msg: "", # 錯誤訊息 (String)
seq_no: "10000043", # 流水號 (String)
is_pre_order: false, # 是否預約單 (Boolean)
pre_order_no: "", # 預約單號碼 (String)
avg_price: , # 平均成交價格 (Double)
...
}
{
...
orgQty: 2000, // 原始下單股數 (Int)
filledQty: 0, // 已成交數量 (Int)
celQty: 0, // 已取消數量 (Int)
canCancel: false, // 是否可取消 (Boolean)
errCode: "000000", // 錯誤代碼 (String)
errMsg: "", // 錯誤訊息 (String)
seqNo: "10000043", // 流水號 (String)
isPreOrder: false, // 是否預約單 (Boolean)
preOrderNo: "", // 預約單號碼 (String)
avgPrice: , // 平均成交價格 (Double)
...
}
修改委託價格
由於原先的價格一直無法成交,我們調整原先的委託價格,改用12.00元的價格買入:
- Python
- Node.js
orderResults = sdk.stock.get_order_results(accounts[0])
sdk.stock.modify_price(accounts[0], orderResults[0],"12", PriceType.Limit)
orderResults = sdk.stock.getOrderResults(accounts[0])
sdk.stock.modifyPrice(accounts[0],orderResults[0],"12", PriceType.Limit)
幾分鐘後,我們再查詢一次委託狀態,發現成交了:
- Python
- Node.js
orderResults = sdk.stock.get_order_results(accounts[0])
print(orderResults[0])
[
OrderRecord {
...
org_qty: 2000, # 原始下單股數 (Int)
filled_qty: 2000, # 已成交數量 (Int)
cel_qty: 0, # 已取消數量 (Int)
can_cancel: false, # 是否可取消 (Boolean)
err_code: "000000", # 錯誤代碼 (String)
err_msg: "", # 錯誤訊息 (String)
seq_no: "10000043", # 流水號 (String)
is_pre_order: false, # 是否預約單 (Boolean)
pre_order_no: "", # 預約單號碼 (String)
avg_price: 12.00 , # 平均成交價格 (Double)
...
}
]
orderResults = sdk.stock.getOrderResults(accounts[0])
console.log(orderResults[0])
{
...
orgQty: 2000, // 原始下單股數 (Int)
filledQty: 2000, // 已成交數量 (Int)
celQty: 0, // 已取消數量 (Int)
canCancel: false, // 是否可取消 (Boolean)
errCode: "000000", // 錯誤代碼 (String)
errMsg: "", // 錯誤訊息 (String)
seqNo: "10000043", // 流水號 (String)
isPreOrder: false, // 是否預約單 (Boolean)
preOrderNo: "", // 預約單號碼 (String)
avgPrice: 12.00, // 平均成交價格 (Double)
...
}
賣出股票
info
請先確認,是否有當沖權限, 在Account
物件中當沖權限欄位可得知
最後決定在收盤前,賣出一張新光金:
- Python
- Node.js
#建立委託單內容
order = Order(
buy_sell = BSAction.Sell,
symbol = "2888",
price = "12.5",
quantity = 1000,
market_type = MarketType.Common,
price_type = PriceType.Limit,
time_in_force= TimeInForce.ROD,
order_type = OrderType.Stock
)
sdk.stock.place_order(accounts[0], order) #下單委託
order = {
buySell: BSAction.Sell,
symbol: "2888",
price: "12.5",
quantity: 1000,
marketType: MarketType.Common,
priceType: PriceType.Limit,
timeInForce: TimeInForce.ROD,
orderType: OrderType.Stock
};
sdk.stock.placeOrder(accounts[0],order)