Skip to main content

Modify Order Quantity

ModifyQuantity

First use MakeModifyQuantityObj to create a ModifyQuantityObj object

ParameterTypeDescription
orderResultOrderResultThe order to be modified
quantityint64The modified quantity (Quantity after modification includes the filled part of this order)

Pass the returned object into the ModifyQuantity method.

Input Parameters

ParameterTypeDescription
accountAccountAccount
modifyQuantityObjModifyQuantityObjOrder to modify
unblock*bool (optional) (default = false)Whether to use non-blocking

Result Return

ParameterTypeDescription
IsSuccessboolWhether successful
Data*OrderResultReturns order information
Message*stringReturns error message when IsSuccess = false

Modification Information OrderResult Fields

Return type : Object

ParameterTypeDescription
FunctionType*int64Function Type: 0 New Order, 10 Execute New Order, 15 Change Price, 20 Change Qty, 30 Cancel Order, 90 Fail
Date*stringTransaction Date
SeqNo*stringOrder Sequence Number
BranchNo*stringBranch Code
Account*stringAccount
OrderNo*stringOrder Number
AssetType*int64Asset Type: 0 Securities
Market*stringMarket: TAIEX Listed Stocks, TAISDAQ OTC Stocks, TAIEMG Emerging Stocks
MarketTypeMarketTypeMarket Type Category: MarketTypeCommon Regular Stock, MarketTypeFixing Fixing, MarketTypeIntradayOdd Intraday Odd Lot, MarketTypeOdd Post-market Odd Lot, MarketTypeEmg Emerging, MarketTypeEmgOdd Emerging Odd Lot
StockNo*stringStock Symbol
BuySell*BsActionBuy/Sell Action: BsActionBuy Buy, BsActionSell Sell
PriceType*PriceTypeEffective Price Type: PriceTypeLimit Limit, PriceTypeLimitUp Limit Up, PriceTypeLimitDown Limit Down, PriceTypeMarket Market, PriceTypeReference Reference
Price*stringPrice
Quantity*int64Original Order Quantity
TimeInForce*TimeInForceOrder Condition: TimeInForceRod ROD, TimeInForceFok FOK, TimeInForceIoc IOC
OrderType*OrderTypeOrder Type: OrderTypeStock Common, OrderTypeMargin Margin, OrderTypeShort Short Sell, OrderTypeDayTrade Day Trade, OrderTypeSbl SBL
IsPreOrder*boolIs Pre-order
Status*int64Order Status: 0 Pre-order, 4 Sending to Backend, 9 Connection Timeout, 10 Order Success, 30 Cancelled Unfilled, 40 Partial Fill/Rest Cancelled, 50 Fully Filled, 90 Fail
AfterPriceType*PriceTypeEffective Price Type: PriceTypeLimit Limit, PriceTypeLimitUp Limit Up, PriceTypeLimitDown Limit Down, PriceTypeMarket Market, PriceTypeReference Reference
AfterPrice*stringEffective Order Price
Unit*int64Unit
AfterQty*int64Effective Order Quantity (including filled part)
FilledQty*int64Filled Quantity
FilledMoney*int64Filled Amount
BeforeQty*int64Effective Qty Before Change
BeforePrice*stringEffective Price Before Change
UserDef*stringUser Defined Field
LastTime*stringLast Modified Time
Details*stringOrder History (Value exists only when querying OrderResultDetail or OrderHistory)
ErrorMessage*stringError Message

Request Example

package main

import (
"fmt"
"fubon"
)

func main() {
// Initialize SDK and login
sdk := fubon.NewSDK()

// ... Login, connection, and other initialization steps ...

// Get the order to modify first
ordResult, err := sdk.Stock.OrderResults(account)
if err != nil {
fmt.Printf("❌ Get Order Results Format/Parse Error: %v\n", err)
return
}

var modifyOrder fubon.OrderResult
if ordResult.Data != nil && len(*ordResult.Data) > 0 {
modifyOrder = (*ordResult.Data)[0]
fmt.Println("Selected order for quantity modification")
fmt.Printf("OrderNo: %s, Current Quantity: %d\n",
*modifyOrder.OrderNo, *modifyOrder.AfterQty)

// Create Modify Quantity Object (Can only reduce quantity)
newQuantity := int64(1000)
modifyQtyObj, err := sdk.Stock.MakeModifyQuantityObj(modifyOrder, newQuantity)
if err != nil {
fmt.Printf("❌ Make Modify Quantity Format/Parse Error: %v (Type: %T)\n", err, err)
return
}

// Execute Modify Quantity
unblock := false
modifyQtyRes, err := sdk.Stock.ModifyQuantity(account, modifyQtyObj, &unblock)
if err != nil {
fmt.Printf("❌ Modify Quantity Format/Parse Error: %v (Type: %T)\n", err, err)
return
}

// Check Success
if !modifyQtyRes.IsSuccess {
message := "No message"
if modifyQtyRes.Message != nil {
message = *modifyQtyRes.Message
}
fmt.Printf("Modify Quantity failed. Message: %s\n", message)
return
}

// Output Modification Result
if modifyQtyRes.Data != nil {
fmt.Println("✅ Quantity modified successfully!")
fmt.Printf("FunctionType: %d (20=Change Qty)\n", *modifyQtyRes.Data.FunctionType)
fmt.Printf("BeforeQty: %d -> AfterQty: %d\n",
*modifyQtyRes.Data.BeforeQty, *modifyQtyRes.Data.AfterQty)
} else {
fmt.Println("Modify Quantity succeeded but no data returned.")
}
} else {
fmt.Println("⚠️ No orders found for quantity modification")
}
}

Response Example

// ModifyQuantity Return Structure
Result{
IsSuccess: true,
Message: nil,
Data: &OrderResult{
FunctionType: 20, // Function Type (20=Change Qty)
Date: "2024/03/08", // Transaction Date
SeqNo: "00000308866", // Order Sequence Number
BranchNo: "6460", // Branch Code
Account: "26", // Account
OrderNo: "x0011", // Order Number
AssetType: 0, // Asset Type
Market: "TAIEX", // Market Type
MarketType: Common, // Market Type Category
StockNo: "1101", // Stock Symbol
BuySell: Sell, // Buy/Sell Action
PriceType: Limit, // Original Price Type
Price: "41.2", // Price
Quantity: 5000, // Original Order Quantity
TimeInForce: Rod, // Order Condition
OrderType: Stock, // Order Type
IsPreOrder: false, // Is Pre-order
Status: 10, // Order Status
AfterPriceType: Limit, // Effective Price Type
AfterPrice: "41.3", // Effective Order Price
Unit: 1000, // Unit
AfterQty: 1000, // Effective Order Quantity (After modification)
FilledQty: 0, // Filled Quantity
FilledMoney: 0, // Filled Amount
BeforeQty: 3000, // Effective Qty Before Change
BeforePrice: "41.2", // Effective Price Before Change
UserDef: "12345678", // User Defined Field
LastTime: "12:56:28.966", // Last Modified Time
Details: nil, // Order History
ErrorMessage: "", // Error Message
},
}