中文

Place Order

Create Order

Corresponding Request Class: TradeOrderRequest

Description

Trading order placement interface. For information on how to select underlying assets, order types, direction quantities, etc., please see the explanation below.

Please check whether your account supports the requested order in conjunction with the Trading Order Types section of this document before running the program, and check whether the trading rules allow placing orders for specific underlying assets during the program runtime period.

⚠️

CAUTION

  1. Market orders (MKT) and stop orders (STP) do not support pre-market and after-hours trading. When calling the order placement interface, you need to set outside_rth to false
  2. Short-sellable assets currently do not support position hedging and cannot simultaneously hold long and short positions of the same underlying asset
  3. The main order type for additional orders currently only supports limit orders
  4. When the limit price does not match the tickSize, you can refer to the tickSizes field returned by the contract and use the StockPriceUtils utility class to determine if it matches, and fix the price to meet the tickSize requirements
  5. Market orders (MKT) and simulated accounts do not support setting the time_in_force parameter to GTC
  6. Simulated accounts do not currently support orders for warrants and callable bull/bear certificates

Order Status Description

  1. How to determine the partial fill status of comprehensive and simulated accounts?

    When the order status is not Initial and Filled (it may be PendingSubmit, Cancelled, Invalid, or Inactive), it may be in a partial fill status, which can be determined by whether the order fill quantity is greater than 0.

  2. How to determine the partial fill status of global accounts?

    The order status is Filled, and the order fill quantity is greater than 0.

Order Status Change Flow:

Other Notes

  • For index options, except IWM/SPY/QQQ, only contracts with expiration dates on Fridays are supported for trading.
  • Direct establishment of reverse positions is prohibited. For example, when currently holding 100 shares long position, directly selling 200 shares (intending to establish 100 shares net short) will be rejected. You need to first close the existing 100 shares long position, then perform the new sell operation.

Parameters

ParameterTypeDescriptionMarket OrderLimit OrderStop OrderStop Limit OrderTrailing Stop Order
accountstringUser authorized account: 402901RequiredRequiredRequiredRequiredRequired
order_idintOrder ID, used to prevent duplicate orders. Can be obtained through the order ID interface. If 0 is passed, the server will automatically generate an order ID. Passing 0 cannot prevent duplicate orders, please choose carefullyOptionalOptionalOptionalOptionalOptional
symbolstringStock code, e.g.: AAPL; (When sec_typ is warrant/CBBC, it's the 5-digit number below the name in the warrant/CBBC list)RequiredRequiredRequiredRequiredRequired
sec_typestringContract type (STK stock; OPT US stock option; WAR HK warrant; IOPT HK CBBC; FUT futures; FUND fund)RequiredRequiredRequiredRequiredRequired
actionstringTrading direction BUY/SELLRequiredRequiredRequiredRequiredRequired
order_typestringOrder type MKT (market order), LMT (limit order), STP(stop order), STP_LMT (stop limit order), TRAIL (trailing stop order)MKTLMTSTPSTP_LMTTRAIL
total_quantitylongOrder quantity (HK stocks, Shanghai-HK Stock Connect, warrants, CBBCs have minimum quantity restrictions)RequiredRequiredRequiredRequiredRequired
total_quantity_scaleintOrder quantity offset, default is 0. For fractional shares, total_quantity and total_quantity_scale combine to represent the real order quantity, e.g., total_quantity=111 total_quantity_scale=2, then real quantity=111*10^(-2)=1.11OptionalOptionalOptionalOptionalOptional
cash_amountDoubleOrder amount (for funds and other amount-based orders)OptionalNot RequiredNot RequiredNot RequiredNot Required
limit_pricedoubleLimit price, required when order_type is LMT, STP_LMTNot RequiredRequiredNot RequiredRequiredNot Required
aux_pricedoubleStock order stop trigger price. Meaning is price difference, overridden by trailing_percent when both exist. Required when order_type is STP, STP_LMT, when order_type is TRAIL, it's the trailing amountNot RequiredNot RequiredRequiredRequiredOptional
trailing_percentdoubleTrailing stop order - stop percentage. When order_type is TRAIL, aux_price and trailing_percent are mutually exclusive, trailing_percent takes priorityNot RequiredNot RequiredNot RequiredNot RequiredOptional
outside_rthbooleantrue: Allow pre-market and after-hours trading (US stocks only), false: Not allowed, default is allowed. (Market orders, stop orders, trailing stop orders are only valid during market hours, will ignore outside_rth parameter)Not RequiredOptionalOptionalNot RequiredOptional
trading_session_typeTradingSessionTypeUS stock order session (limit orders only). Enum values see:Not RequiredOptionalNot RequiredOptionalNot Required
adjust_limitdoublePrice adjustment range (default 0 means no adjustment, positive numbers adjust upward, negative numbers adjust downward), automatically adjusts the input price to a legal price level. For example: 0.001 means adjust upward with a range not exceeding 0.1%; -0.001 means adjust downward with a range not exceeding 0.1%. Default 0 means no adjustmentNot RequiredOptionalOptionalOptionalOptional
marketstringMarket (US stocks US, HK stocks HK, Shanghai-HK Stock Connect CN)OptionalOptionalOptionalOptionalOptional
currencystringCurrency (US stocks USD, HK stocks HKD, Shanghai-HK Stock Connect CNH)OptionalOptionalOptionalOptionalOptional
time_in_forcestringOrder validity period, can only be DAY (valid for the day), GTC (valid until cancelled), GTD (valid until specified time), default is DAYOptionalOptionalOptionalOptionalOptional
expire_timelongOrder validity deadline, 13-digit timestamp accurate to seconds (required when time_in_force is GTC, invalid for other types)Not RequiredOptionalOptionalNot RequiredOptional
exchangestringExchange (US stocks SMART, HK stocks SEHK, Shanghai-HK Stock Connect SEHKNTL, Shenzhen-HK Stock Connect SEHKSZSE)OptionalOptionalOptionalOptionalOptional
expirystringExpiry date (options, warrants, CBBCs only)OptionalOptionalOptionalOptionalOptional
strikestringStrike price (options, warrants, CBBCs only)OptionalOptionalOptionalOptionalOptional
rightstringOption direction PUT/CALL (options, warrants, CBBCs only)OptionalOptionalOptionalOptionalOptional
multiplierfloatMultiplier, quantity per lot (options, warrants, CBBCs only)OptionalOptionalOptionalOptionalOptional
local_symbolstringThis field is required for warrants and CBBCs, the 5-digit number below the name in the warrant/CBBC list in the APPOptionalOptionalOptionalOptionalOptional
secret_keystringTrader key, for institutional users onlyOptionalOptionalOptionalOptionalOptional
user_markstringOrder comment information, cannot be modified after ordering, returns userMark information when querying ordersOptionalOptionalOptionalOptionalOptional

  • Attached Order Parameters

    Attached Orders are orders that can achieve profit-taking or stop-loss effects on the main order through attached sub-orders. The types of sub-orders that can be attached include limit orders (can be used for profit-taking) and stop limit orders/stop orders (can be used for stop-loss). Attached orders can be implemented by adding the following parameters

    ParameterTypeDescriptionAttached Stop LossAttached Profit TakingAttached Trailing StopAttached Bracket
    attach_typestringAttached order type, required when placing attached orders. (order_type should be LMT): PROFIT-profit taking order, LOSS-stop loss order, BRACKETS-bracket order (includes attached profit taking and stop loss orders)RequiredRequiredRequiredRequired
    profit_taker_orderIdintProfit taking order ID, can be obtained through the order ID interface. If 0 is passed, the server will automatically generate a profit taking order IDNot RequiredOptionalOptionalOptional
    profit_taker_pricedoubleProfit taking order price, required when placing profit taking ordersNot RequiredRequiredNot RequiredRequired
    profit_taker_tifstringSame as time_in_force field, order validity period, can only be DAY (valid for the day) and GTC (valid until cancelled), required when placing profit taking ordersNot RequiredRequiredNot RequiredRequired
    profit_taker_rthbooleanSame as outside_rth fieldNot RequiredRequiredNot RequiredRequired
    stop_loss_orderIdintStop loss order ID, can be obtained through the order ID interface. If 0 is passed, the server will automatically generate a stop loss order IDRequiredNot RequiredNot RequiredRequired
    stop_loss_pricedoubleStop loss order price (stop loss order trigger price), required when placing stop loss ordersRequiredNot RequiredNot RequiredRequired
    stop_loss_limit_pricedoubleStop loss order execution limit price (currently only valid for comprehensive accounts). When the stop loss order limit price is not filled, it's an attached stop loss market orderOptionalNot RequiredNot RequiredOptional
    stop_loss_tifstringSame as time_in_force field, order validity period, can only be DAY (valid for the day) and GTC (valid until cancelled), required when placing stop loss ordersRequiredNot RequiredRequiredRequired
    stop_loss_trailing_percentdoubleTrailing stop order - stop percentage. When placing trailing stop orders, one of stop percentage (stopLossTrailingPercent) and stop amount (stopLossTrailingAmount) must be filled. If both are filled, the stop percentage will be used as the parameter.OptionalNot RequiredChoose OneOptional
    stop_loss_trailing_amountdoubleTrailing stop order - stop amount. When placing trailing stop orders, one of stop percentage (stopLossTrailingPercent) and stop amount (stopLossTrailingAmount) must be filled. If both are filled, the stop percentage will be used as the parameter.OptionalNot RequiredChoose OneOptional

  • TWAP/VWAP Order Parameters

    TWAP/VWAP orders only support US stock underlying assets, can only be placed during market hours, do not support pre-market orders

    ParameterTypeAlgorithm ParameterDescriptionTWAPVWAP
    order_typestringOrder type, TWAP/VWAPRequiredRequired
    accountstringCapital accountRequiredRequired
    symbolstringStock code e.g.: AAPLRequiredRequired
    sec_typestringOnly supports STKRequiredRequired
    total_quantitybooleanOrder quantityRequiredRequired
    algo_paramsList<TagValue>Algorithm parametersOptionalOptional
    -longstart_timeStrategy start time (timestamp)OptionalOptional
    -longend_timeStrategy end time (timestamp)OptionalOptional
    -stringparticipation_rateMaximum participation rate (volume as maximum proportion of daily average volume, 0.01-0.5)Not RequiredOptional

  • Return

    NameTypeDescription
    idlongUnique order ID, can be used to query/modify/cancel orders
    subIdsList<Long>When attached orders, returns list of sub-order IDs
    ordersList<TradeOrder>Returns detailed order information

Build Contract Object

// US stock contract
ContractItem contract = ContractItem.buildStockContract("SPY", "USD");

// HK stock contract
ContractItem contract = ContractItem.buildStockContract("00700", "HKD");

// HK warrant contract (note that for the same symbol, the expiry may be different for global and comprehensive accounts)
ContractItem contract = ContractItem.buildWarrantContract("13745", "20211217", 719.38D, Right.CALL.name());
// HK CBBC contract
ContractItem contract = ContractItem.buildCbbcContract("50296", "20220331", 457D, Right.CALL.name());

// US stock option contract
ContractItem contract = ContractItem.buildOptionContract("AAPL  190118P00160000");
ContractItem contract = ContractItem.buildOptionContract("AAPL", "20211119", 150.0D, "CALL");

// Futures contract
// Global account
ContractItem contract = ContractItem.buildFutureContract("CL", "USD", "SGX", "20190328", 1.0D);
// Comprehensive account
ContractItem contract = ContractItem.buildFutureContract("CL2112", "USD");

Build Orders

Market Order (MKT)

// get contract(use default account)
ContractRequest contractRequest = ContractRequest.newRequest(new ContractModel("AAPL"));
ContractResponse contractResponse = client.execute(contractRequest);
ContractItem contract = contractResponse.getItem();
// market order(use default account)
TradeOrderRequest request = TradeOrderRequest.buildMarketOrder(contract, ActionType.BUY, 10);
TradeOrderResponse response = client.execute(request);
System.out.println(JSONObject.toJSONString(response));

// get contract(use account parameter)
ContractRequest contractRequest = ContractRequest.newRequest(new ContractModel("AAPL"), "402901");
ContractResponse contractResponse = client.execute(contractRequest);
ContractItem contract = contractResponse.getItem();
// market order(use account parameter)
request = TradeOrderRequest.buildMarketOrder("402901", contract, ActionType.BUY, 10);
response = client.execute(request);
System.out.println(JSONObject.toJSONString(response));

Limit Order (LMT)

// use default account
TradeOrderRequest request = TradeOrderRequest.buildLimitOrder(contract, ActionType.BUY, 1, 100.0d);
TradeOrderResponse response = client.execute(request);
System.out.println(JSONObject.toJSONString(response));

// use account parameter
request = TradeOrderRequest.buildLimitOrder("402901", contract, ActionType.BUY, 1, 100.0d);
// set user_mark
request.setUserMark("test001");
// set GTD order's expire_time
request.setTimeInForce(TimeInForce.GTD);
request.setExpireTime(1669363583804L);
response = client.execute(request);
System.out.println(JSONObject.toJSONString(response));

Overnight/Full-time Orders

US stocks only

// place overnight order in the US market
TradeOrderRequest request = TradeOrderRequest.buildLimitOrder("402901", contract, ActionType.BUY, 1, 200.0d);
request.setTradingSessionType(TradingSessionType.OVERNIGHT);
TradeOrderResponse response = client.execute(request);
System.out.println(JSONObject.toJSONString(response));

// place full-time order in the US market
request = TradeOrderRequest.buildLimitOrder("402901", contract, ActionType.BUY, 1, 200.0d);
request.setTradingSessionType(TradingSessionType.FULL);
response = client.execute(request);
System.out.println(JSONObject.toJSONString(response));

Auction Orders (AM/AL)

// auction order in hk market
TradeOrderRequest request = TradeOrderRequest.buildLimitOrder("402901", contract, ActionType.BUY, 100, 100.0d);
// Pre-market auction: AM or AL + OPG, if not filled participate in regular trading; Post-market auction: AM or AL + DAY
// participate in the pre-market auction, set auction limit order
request.setAuctionOrder(OrderType.AL, TimeInForce.OPG);
response = client.execute(request);
System.out.println(JSONObject.toJSONString(response));

request = TradeOrderRequest.buildMarketOrder("402901", contract, ActionType.BUY, 100);
// Participate in the after-hours auction, set auction market order
request.setAuctionOrder(OrderType.AM, TimeInForce.OPG);
response = client.execute(request);
System.out.println(JSONObject.toJSONString(response));

Stop Order (STP)

// use default account
TradeOrderRequest request = TradeOrderRequest.buildStopOrder(contract, ActionType.BUY, 1, 120.0d);
TradeOrderResponse response = client.execute(request);
System.out.println(JSONObject.toJSONString(response));

// use account parameter
request = TradeOrderRequest.buildStopOrder("402901", contract, ActionType.BUY, 1, 120.0d);
response = client.execute(request);
System.out.println(JSONObject.toJSONString(response));

Stop Limit Order (STP_LMT)

// use default account
TradeOrderRequest request = TradeOrderRequest.buildStopLimitOrder(contract, ActionType.BUY, 1,150d,130.0d);
TradeOrderResponse response = client.execute(request);
System.out.println(JSONObject.toJSONString(response));

// use account parameter
request = TradeOrderRequest.buildStopLimitOrder("402901", contract, ActionType.BUY, 1,150d,130.0d);
response = client.execute(request);
System.out.println(JSONObject.toJSONString(response));

Trailing Stop Order (TRAIL)

// use default account
TradeOrderRequest request = TradeOrderRequest.buildTrailOrder(contract, ActionType.BUY, 1,10d,130.0d);
TradeOrderResponse response = client.execute(request);
System.out.println(JSONObject.toJSONString(response));

// use account parameter. standard account currently not supported
request = TradeOrderRequest.buildTrailOrder("402901", contract, ActionType.BUY, 1, 10d, 130.0d);
response = client.execute(request);
System.out.println(JSONObject.toJSONString(response));

Main Order + Attached Profit Taking Order

// use default account
TradeOrderRequest request = TradeOrderRequest.buildLimitOrder(contract, ActionType.BUY, 1, 199d);
TradeOrderRequest.addProfitTakerOrder(request, 250D, TimeInForce.DAY, Boolean.FALSE);
TradeOrderResponse response = client.execute(request);
System.out.println(JSONObject.toJSONString(response));

// use account parameter
request = TradeOrderRequest.buildLimitOrder("402901", contract, ActionType.BUY, 1, 199d);
TradeOrderRequest.addProfitTakerOrder(request, 250D, TimeInForce.DAY, Boolean.FALSE);
response = client.execute(request);
System.out.println(JSONObject.toJSONString(response));

Main Order + Additional Stop Loss Order

// use default account
TradeOrderRequest request = TradeOrderRequest.buildLimitOrder(contract, ActionType.BUY, 1, 129d);
TradeOrderRequest.addStopLossOrder(request, 100D, TimeInForce.DAY);
TradeOrderResponse response = client.execute(request);
System.out.println(JSONObject.toJSONString(response));

// use account parameter
request = TradeOrderRequest.buildLimitOrder("402901", contract, ActionType.BUY, 1, 129d);
// Add additional stop loss market order, the stop loss price is the trigger price (options are not supported)
TradeOrderRequest.addStopLossOrder(request, 100D, TimeInForce.DAY);
response = client.execute(request);
System.out.println(JSONObject.toJSONString(response));

// Options can use additional stop loss limit orders
ContractItem optionContract = ContractItem.buildOptionContract("AAPL", "20211231", 175.0D, "CALL");
request = TradeOrderRequest.buildLimitOrder("402901", optionContract, ActionType.BUY, 1, 2.0d);
// Add additional stop loss limit order, where the first price 1.7 is the trigger price, and the second price 1.69 is the limit price for the additional stop loss order (currently only supports comprehensive accounts)
TradeOrderRequest.addStopLossLimitOrder(request, 1.7D, 1.69D, TimeInForce.DAY);
response = client.execute(request);
System.out.println(JSONObject.toJSONString(response));

Main Order + Additional Trailing Stop Loss Order

ContractItem contract = ContractItem.buildStockContract("AAPL", "USD");
// use default account
TradeOrderRequest request = TradeOrderRequest.buildLimitOrder(contract, ActionType.BUY, 1, 165D);
TradeOrderRequest.addStopLossTrailOrder(request, 10.0D, null, TimeInForce.DAY);
TradeOrderResponse response = client.execute(request);
System.out.println(JSONObject.toJSONString(response));

// use account parameter
request = TradeOrderRequest.buildLimitOrder("402901", contract, ActionType.BUY, 1, 165D);
TradeOrderRequest.addStopLossTrailOrder(request, 10.0D, null, TimeInForce.DAY);
response = client.execute(request);
System.out.println(JSONObject.toJSONString(response));

Main Order + Additional Bracket Order

// use default account
TradeOrderRequest request = TradeOrderRequest.buildLimitOrder(contract, ActionType.BUY, 1, 199d);
TradeOrderRequest.addBracketsOrder(request, 250D, TimeInForce.DAY, Boolean.FALSE, 180D, TimeInForce.GTC);
TradeOrderResponse response = client.execute(request);
System.out.println(JSONObject.toJSONString(response));

// use account parameter
request = TradeOrderRequest.buildLimitOrder("13810712", contract, ActionType.BUY, 1, 199d);
TradeOrderRequest.addBracketsOrder(request, 250D, TimeInForce.DAY, Boolean.FALSE, 180D, TimeInForce.GTC);
response = client.execute(request);
System.out.println(JSONObject.toJSONString(response));

Currency Exchange Order

ForexTradeOrderRequest request = ForexTradeOrderRequest.buildRequest("402901", 
    SegmentType.SEC, Currency.HKD, 1000D, Currency.USD);

ForexTradeOrderResponse response = client.execute(request);
if (response.isSuccess()) {
  System.out.println(JSONObject.toJSONString(response));
} else {
  System.out.println(response.getMessage());
}

Fund Amount Order

    ContractItem contract = ContractItem.buildFundContract("IE00B464Q616.USD", "USD");
    TradeOrderRequest request = TradeOrderRequest.buildAmountOrder(
        "13810712", contract, ActionType.BUY, 100.0D);
    request.setUserMark("test-amount-order");
    TradeOrderResponse response = client.execute(request);
    if (response.isSuccess()) {
      System.out.println(JSONObject.toJSONString(response));
    } else {
      System.out.println(response.getMessage());
    }

TWAP/VWAP Orders

Only supports US stocks, only supports intraday orders. Cannot be modified, but can be cancelled.

// TWAP order
TradeOrderRequest twapRequest = TradeOrderRequest.buildTWAPOrder(
    "572386", "DM", ActionType.BUY, 500,
    DateUtils.getTimestamp("2023-06-20 09:30:00", TimeZoneId.NewYork),
    DateUtils.getTimestamp("2023-06-20 11:00:00", TimeZoneId.NewYork),
     1.5D)
  .setUserMark("testTWAP001")
  .setLang(Language.en_US);

TradeOrderResponse twapResponse = client.execute(twapRequest);
if (twapResponse.isSuccess()) {
  System.out.println(JSONObject.toJSONString(twapResponse));
} else {
  System.out.println(twapResponse.getMessage());
}

// VWAP order
TradeOrderRequest vwapRequest = TradeOrderRequest.buildVWAPOrder(
    "572386", "DM", ActionType.BUY, 500,
    DateUtils.getTimestamp("2023-06-20 09:30:00", TimeZoneId.NewYork),
    DateUtils.getTimestamp("2023-06-20 11:00:00", TimeZoneId.NewYork),
    0.5D, 1.5D)
  .setUserMark("testVWAP001")
  .setLang(Language.en_US);

TradeOrderResponse vwapResponse = client.execute(vwapRequest);
if (vwapResponse.isSuccess()) {
  System.out.println(JSONObject.toJSONString(vwapResponse));
} else {
  System.out.println(vwapResponse.getMessage());
}

Options Multi-Leg Orders

List<ContractLeg> contractLegs = new ArrayList<>();
ContractLeg leg1 = new ContractLeg(SecType.OPT, "AAPL",
    "170.0", "20231013", Right.CALL,
    ActionType.BUY, 1);
contractLegs.add(leg1);
ContractLeg leg2 = new ContractLeg(SecType.OPT, "AAPL",
    "170.0", "20231013", Right.PUT,
    ActionType.BUY, 1);
contractLegs.add(leg2);

TradeOrderRequest request = TradeOrderRequest.buildMultiLegOrder(
    "572386", contractLegs, ComboType.CUSTOM,
        ActionType.BUY, 3,
        OrderType.LMT, 2.01d, null, null)
    .setLang(Language.en_US)
    .setUserMark("test_multi_leg");
TradeOrderResponse response = client.execute(request);
if (response.isSuccess()) {
  System.out.println(JSONObject.toJSONString(response));
} else {
  System.out.println(response.getMessage());
}

OCA Bracket Orders

Not supported in simulation accounts.

OCA bracket orders contain two orders with the same underlying asset: one take-profit limit order and another stop-loss order or stop-loss limit order. When one order is executed, the other order is automatically cancelled. After placing the order, two order objects are returned, and orders with the same ocaGroupId belong to the same group.

ContractItem contract = ContractItem.buildStockContract("BILI", "USD");
TradeOrderRequest request = TradeOrderRequest.buildOCABracketsOrder(
        "13810712", contract, ActionType.SELL, 1,
        17.0D, TimeInForce.DAY, Boolean.TRUE,
        12.0D, null, TimeInForce.DAY, Boolean.FALSE);
request.setLang(Language.en_US).setUserMark("test-oca");

TradeOrderResponse response = client.execute(request);
if (response.isSuccess()) {
  System.out.println(JSONObject.toJSONString(response));
  // get oca order info
  List<TradeOrder> ocaOrders = response.getItem().getOrders();
} else {
  System.out.println(response.getMessage());
}

Return Example

Additional Bracket Order

{
    "id":30325712346546176,
    "orderId":0,
    "subIds":[
        30325712346546177,
        30325712346677250
    ],
    "orders":[
        {
            "account":"13810712",
            "action":"BUY",
            "algoStrategy":"LMT",
            "attrDesc":"",
            "avgFillPrice":0,
            "canCancel":true,
            "canModify":true,
            "commission":0,
            "currency":"HKD",
            "discount":0,
            "filledQuantity":0,
            "id":30325712346546176,
            "identifier":"00700",
            "latestPrice":385.8,
            "latestTime":1680266023000,
            "limitPrice":295,
            "liquidation":false,
            "market":"HK",
            "name":"Tencent Holdings",
            "openTime":1680266023000,
            "orderId":91,
            "orderType":"LMT",
            "outsideRth":true,
            "realizedPnl":0,
            "remark":"",
            "secType":"STK",
            "source":"OpenApi",
            "status":"Initial",
            "symbol":"00700",
            "timeInForce":"DAY",
            "totalQuantity":100,
            "updateTime":1680266023000,
            "userMark":"test_bracket"
        },
        {
            "account":"13810712",
            "action":"SELL",
            "algoStrategy":"LMT",
            "attrDesc":"",
            "avgFillPrice":0,
            "canCancel":true,
            "canModify":true,
            "commission":0,
            "currency":"HKD",
            "discount":0,
            "filledQuantity":0,
            "id":30325712346546177,
            "identifier":"00700",
            "latestPrice":385.8,
            "latestTime":1680266023000,
            "limitPrice":320,
            "liquidation":false,
            "market":"HK",
            "name":"Tencent Holdings",
            "ocaGroupId":87055,
            "openTime":1680266023000,
            "orderId":92,
            "orderType":"LMT",
            "outsideRth":true,
            "parentId":30325712346546176,
            "realizedPnl":0,
            "remark":"",
            "secType":"STK",
            "source":"OpenApi",
            "status":"Initial",
            "symbol":"00700",
            "timeInForce":"DAY",
            "totalQuantity":100,
            "updateTime":1680266023000,
            "userMark":"test_bracket"
        },
        {
            "account":"13810712",
            "action":"SELL",
            "algoStrategy":"STP_LMT",
            "attrDesc":"",
            "auxPrice":280,
            "avgFillPrice":0,
            "canCancel":true,
            "canModify":true,
            "commission":0,
            "currency":"HKD",
            "discount":0,
            "filledQuantity":0,
            "id":30325712346677248,
            "identifier":"00700",
            "latestPrice":385.8,
            "latestTime":1680266023000,
            "limitPrice":278,
            "liquidation":false,
            "market":"HK",
            "name":"Tencent Holdings",
            "ocaGroupId":87055,
            "openTime":1680266023000,
            "orderId":93,
            "orderType":"STP_LMT",
            "outsideRth":true,
            "parentId":30325712346546176,
            "realizedPnl":0,
            "remark":"",
            "secType":"STK",
            "source":"OpenApi",
            "status":"Initial",
            "symbol":"00700",
            "timeInForce":"DAY",
            "totalQuantity":100,
            "updateTime":1680266023000,
            "userMark":"test_bracket"
        }
    ]
}