Skip to main content

刪除批次委託單

BatchCancelOrder

輸入參數

參數類別說明
accountAccount帳號
orderResults[]OrderResult批次取消委託單列表

Result 回傳

參數類別說明
IsSuccessbool是否成功
Data*[]OrderResult回傳刪除結果列表
Message*string當 IsSuccess = false 回傳錯誤訊息

請求範例

package main

import (
"fmt"
"fubon"
)

func main() {
sdk := fubon.NewSDK()
// ... 登入、連線等初始化步驟 ...

// 方法 1: 批次刪單(利用 batch detail 回傳的內容刪單)
batchList, _ := sdk.Stock.BatchOrderLists(account)
if batchList.Data != nil && len(*batchList.Data) > 0 {
batchRes := (*batchList.Data)[0]
batchDetail, _ := sdk.Stock.BatchOrderDetail(account, batchRes)

if batchDetail.Data != nil && len(*batchDetail.Data) >= 2 {
cancelOrders := []fubon.OrderResult{
(*batchDetail.Data)[0],
(*batchDetail.Data)[1],
}

batchCancel, err := sdk.Stock.BatchCancelOrder(account, cancelOrders)
if err != nil {
fmt.Printf("❌ Batch Cancel Order Format/Parse Error: %v\n", err)
return
}

if batchCancel.IsSuccess && batchCancel.Data != nil {
fmt.Printf("✅ Cancelled %d orders\n", len(*batchCancel.Data))
for i, result := range *batchCancel.Data {
fmt.Printf("Order %d: OrderNo=%s, Status=%d (30=已刪單)\n",
i+1, *result.OrderNo, *result.Status)
}
}
}
}

// 方法 2: 批次刪單(利用不同的單筆委託)
ordResult, _ := sdk.Stock.OrderResults(account)
if ordResult.Data != nil && len(*ordResult.Data) >= 2 {
cancelOrders := []fubon.OrderResult{
(*ordResult.Data)[0],
(*ordResult.Data)[1],
}

batchCancel, err := sdk.Stock.BatchCancelOrder(account, cancelOrders)
if err != nil {
fmt.Printf("❌ Batch Cancel Order Format/Parse Error: %v\n", err)
return
}

if !batchCancel.IsSuccess {
message := "No message"
if batchCancel.Message != nil {
message = *batchCancel.Message
}
fmt.Printf("Batch cancel failed. Message: %s\n", message)
return
}

if batchCancel.Data != nil {
fmt.Println("✅ Batch cancel succeeded!")
for i, result := range *batchCancel.Data {
fmt.Printf("\n--- Cancelled Order %d ---\n", i+1)
fmt.Printf("FunctionType: %d (30=刪單)\n", *result.FunctionType)
fmt.Printf("OrderNo: %s\n", *result.OrderNo)
fmt.Printf("StockNo: %s\n", *result.StockNo)
fmt.Printf("Status: %d\n", *result.Status)
fmt.Printf("AfterQty: %d (刪單後為0)\n", *result.AfterQty)
fmt.Printf("BeforeQty: %d\n", *result.BeforeQty)
}
}
} else {
fmt.Println("⚠️ No orders found for batch cancellation")
}
}

回傳範例

Result{
IsSuccess: true,
Message: nil,
Data: &[]OrderResult{
{
FunctionType: 30, // 功能別 (30=刪單)
Date: "2024/03/08", // 交易日期
SeqNo: "00000308998", // 委託單流水序號
BranchNo: "6460", // 分公司代號
Account: "26", // 帳號
OrderNo: "x0028", // 委託書號
AssetType: 0, // 資產類別
Market: "TAIEX", // 市場類型
MarketType: Common, // 盤別種類
StockNo: "1101", // 股票代號
BuySell: Sell, // 買賣別
PriceType: Limit, // 原始委託價格別
Price: "41.2", // 價格
Quantity: 5000, // 原始委託股數
TimeInForce: Rod, // 委託條件別
OrderType: Stock, // 委託單類型
IsPreOrder: false, // 是否為預約單
Status: 30, // 委託單狀態 (30=未成交刪單成功)
AfterPrice: "41.2", // 有效委託價格
AfterQty: 0, // 有效委託股數 (刪單後為0)
BeforeQty: 5000, // 改單前有效量
BeforePrice: "41.2", // 改單前有效價
UserDef: "12345678", // 自訂欄位
LastTime: "12:53:57.536", // 最後異動時間
// ... 其他欄位
},
{
FunctionType: 30, // 功能別 (30=刪單)
Date: "2024/03/08", // 交易日期
SeqNo: "0000030899", // 委託單流水序號
OrderNo: "x0029", // 委託書號
StockNo: "1101", // 股票代號
Status: 30, // 委託單狀態
// ... 其他欄位
},
},
}