下单交易

创建订单

对应的请求类:TradeOrderRequest

说明

交易下单接口。关于如何选择标的、订单类型、方向数量等,请见下方说明。

请在运行程序前结合本文档的 交易订单类型 部分,检查您的账户是否支持所请求的订单,并检查交易规则是否允许在程序运行时段对特定标的下单

⚠️

NOTE

  1. 市价单(MKT)和止损单(STP)不支持盘前盘后阶段交易,在调用下单接口时,需要把 outside_rth 设置为 false
  2. 可做空标的,目前不支持锁仓,无法同时持有同一标的的多头与空头头寸
  3. 加订单的主订单类型,目前仅支持限价单
  4. 限价价格不匹配 tickSize 时,可参考合约返回 tickSizes 字段,利用 StockPriceUtils 工具类判断是否匹配,修复价格符合 tickSize 要求
  5. 市价单(MKT)和模拟账号,不支持将参数 time_in_force 设置为 GTC
  6. 模拟账号暂不支持窝轮和牛熊证的订单

订单状态说明

  1. 如何判断综合和模拟账号的部分成交状态?

    当订单状态不是 Initial 和 Filled(有可能是 PendingSubmit,Cancelled,Invalid,Inactive 其中一种)时,都有可能是部分成交的状态,可以通过订单成交数量是否大于 0 来判断。

  2. 如何判断环球账号部分成交状态?

    订单状态是 Filled,且订单成交数量大于 0。

订单状态变化流程:

其他说明

  • 美国市场部分指数期权合约(如 SPXW),以及 IWM/SPY/QQQ 等 ETF 期权,支持交易周内(周一至周五)到期的期权合约(具体可交易到期日以交易所实际挂牌为准)。
  • 禁止直接开立反向头寸。例如,当前持有 100 股多头头寸时,直接卖出 200 股(意图建立 100 股净空头)的操作将被拒绝,需要先平掉现有的 100 股多头头寸,再进行新的卖出操作。

参数

参数类型描述市价单限价单止损单止损限价单跟踪止损单
accountstring用户授权账户: 402901必填必填必填必填必填
order_idint订单编号,作用是防止重复下单。可以通过订单号接口获取。如果传 0,则服务器端会自动生成订单编号,传 0 时无法防止重复下单,请谨慎选择选填选填选填选填选填
symbolstring股票代码,如:AAPL;(sec_typ 为窝轮牛熊证时,在轮/牛熊证列表中名称下面的 5 位数字)必填必填必填必填必填
sec_typestring合约类型 (STK 股票;OPT 美股期权; WAR 港股窝轮; IOPT 港股牛熊证; FUT 期货; FUND 基金;CC 数字货币)必填必填必填必填必填
actionstring交易方向 BUY/SELL必填必填必填必填必填
order_typestring订单类型 MKT (市价单), LMT (限价单), STP(止损单), STP_LMT (止损限价单), TRAIL (跟踪止损单)MKTLMTSTPSTP_LMTTRAIL
total_quantitylong下单数量,必须大于 0(港股、沪港通、窝轮、牛熊证有最小数量限制)。除基金外均必填;基金买入使用 cash_amount必填必填必填必填必填
total_quantity_scaleint下单数量的偏移量,默认为 0。碎股单的 total_quantity 和 total_quantity_scale 结合起来代表真实下单数量,如 total_quantity=111 total_quantity_scale=2,那么真实 quantity=111*10^(-2)=1.11选填选填选填选填选填
cash_amountDouble按金额下单金额。基金买入时必填且必须大于 0;基金卖出不支持。虽然提供 buildAmountOrder,当前请求校验仍要求非基金订单传 total_quantity,因此暂不支持股票金额单选填不填不填不填不填
limit_pricedouble限价,当 order_type 为 LMT,STP_LMT 时该参数必需不填必填不填必填不填
aux_pricedouble当 order_type 为 STP、STP_LMT 时是止损触发价且必填;当 order_type 为 TRAIL 时是跟踪差额。TRAIL 必须在 aux_price 和 trailing_percent 中至少提供一项;两者都有效时使用 trailing_percent不填不填必填必填二选一
trailing_percentdouble跟踪止损百分比,使用时必须大于 0 且小于 100。TRAIL 必须在 aux_pricetrailing_percent 中至少提供一项;两者都有效时优先使用 trailing_percent不填不填不填不填二选一
outside_rthbooleantrue: 允许盘前盘后交易(美股专属),false: 不允许,默认为允许。(市价单、止损单、跟踪止损单只在盘中有效,将忽略 outside_rth 参数)不填选填选填不填选填
trading_session_typeTradingSessionType交易时段枚举。可用值及支持情况取决于账户、市场、标的和订单类型;枚举含义见下方说明不填选填不填选填不填
adjust_limitdouble价格微调幅度(默认为 0 表示不调整,正数为向上调整,负数向下调整),对传入价格自动调整到合法价位上。例如:0.001 代表向上调整且幅度不超过 0.1%;-0.001 代表向下调整且幅度不超过 0.1%。默认 0 表示不调整不填选填选填选填选填
marketstring市场(美股 US 港股 HK 沪港通 CN)选填选填选填选填选填
currencystring货币(美股 USD 港股 HKD 沪港通 CNH)选填选填选填选填选填
time_in_forcestringJava 枚举包含 DAY(当日有效)、GTC(取消前有效)、GTD(指定时间前有效)和 OPG(开盘有效)。省略时普通订单默认为 DAY,CC 数字货币订单默认为 GTC;综合账户普通下单支持 DAY/GTC/GTD,OPG 主要用于支持该值的竞价等订单流程。实际支持取决于账户、市场、标的和订单类型选填选填选填选填选填
expire_timelong订单有效的截止时间,13 位的时间戳,精确到毫秒(time_in_force 为 GTD 时为必填,其他类型时无效)不填选填选填不填选填
exchangestring交易所(美股 SMART 港股 SEHK 沪港通 SEHKNTL 深港通 SEHKSZSE)否选填选填选填选填选填
expirystring过期日(期权、窝轮、牛熊证专属)选填选填选填选填选填
strikestring行权价(期权、窝轮、牛熊证专属)选填选填选填选填选填
rightstring期权方向 PUT/CALL (期权、窝轮、牛熊证专属)选填选填选填选填选填
multiplierfloat乘数,每手对应的数量(期权、窝轮、牛熊证专属)选填选填选填选填选填
local_symbolstring窝轮、牛熊证该字段必填,在 APP 中窝轮/牛熊证列表中名称下面的 5 位数字选填选填选填选填选填
secret_keystring交易员密钥,机构用户专用选填选填选填选填选填
user_markstring下单备注信息,下单后不能修改,查询订单时可返回 userMark。是否去除首尾空白、截断长度及返回方式取决于账户类型;综合账户会去除首尾空白并最多保留前 200 个字符选填选填选填选填选填
alloc_accountsList<String>仅支持环球账户 分配订单的子账户列表。元素不能为空,并且必须与 alloc_shares 按下标一一对应选填选填选填选填选填
alloc_sharesList<Double>仅支持环球账户 分配到对应子账户的数量。每项必须大于 0,列表长度必须与 alloc_accounts 相同选填选填选填选填选填
algo_strategystring算法策略,仅用于支持的算法订单选填选填选填选填选填
algo_paramsList<TagValue>算法参数列表,仅用于支持的算法订单选填选填选填选填选填
sourcestring订单来源标识。可通过 TradeParamBuilder.source(...) 设置;TradeOrderRequest 不提供对应 setter选填选填选填选填选填
stop_loss_order_typestring附加止损订单类型:STP、STP_LMT 或 TRAIL选填选填选填选填选填
combo_typestring多腿组合类型,通常用于期权多腿订单,但不限定只能用于期权选填选填选填选填选填
contract_legsList<ContractLeg>多腿合约列表,通常用于期权多腿订单,但不限定只能包含期权选填选填选填选填选填
oca_ordersList<TradeOrderModel>OCA 订单列表选填选填选填选填选填

上述场景字段不是普通单的通用参数;请使用下方对应构建方法,避免混用。

trading_session_type 枚举包含:PRE_RTH_POST(盘前、盘中和盘后)、RTH(常规交易时段)、OVERNIGHT(夜盘)、FULL(全时段)、HK_AUC(港股竞价时段)、HK_CTS(港股持续交易时段)和 HK_AUC_CTS(港股竞价和持续交易时段)。该字段仅表示 SDK 可传值,不代表所有账户或订单均支持这些时段。

普通订单省略 time_in_force 时使用 DAY,但 CC 数字货币订单使用 GTC;基金订单也使用 GTC


  • 附加订单参数

    附加订单(Attached Order )是指能通过附加的子订单对主订单起到止盈或止损效果的订单,可以附加的子订单类型有限价单(可用于止盈)、止损限价单/止损单(可用于止损)。通过增加以下参数可以实现附加订单

    参数类型描述附加止损附加止盈附加跟踪止损附加括号
    attach_typestring附加订单类型,下附加订单时必填。(order_type应为LMT): PROFIT-止盈单,LOSS-止损单,BRACKETS-括号订单(包含附加止盈单和附加止损单)必填必填必填必填
    profit_taker_orderIdint止盈单编号,可以通过订单号接口获取。如果传 0,则服务器端会自动生成止盈单编号不填选填选填选填
    profit_taker_pricedouble止盈单价格,下止盈单时必填不填必填不填必填
    profit_taker_tifstring同 time_in_force 字段,订单有效期,只能是 DAY(当日有效)和 GTC(取消前有效),下止盈单时必填不填必填不填必填
    profit_taker_rthboolean同 outside_rth 字段不填必填不填必填
    stop_loss_orderIdint止损单编号,可以通过订单号接口获取。如果传 0,则服务器端会自动生成止损单编号必填不填不填必填
    stop_loss_pricedouble止损单价格(止损单的触发价),下止损单时必填必填不填不填必填
    stop_loss_limit_pricedouble止损单的执行限价(暂只对综合账号有效)。止损单的限价没有填写时,为附加止损市价单选填不填不填选填
    stop_loss_tifstring同 time_in_force 字段,订单有效期,只能是 DAY(当日有效)和 GTC(取消前有效),下止损单时必填必填不填必填必填
    stop_loss_trailing_percentdouble跟踪止损百分比,使用时必须大于 0 且小于 100。附加跟踪止损单须在该字段和 stop_loss_trailing_amount 中选择一项;两项均有效时使用百分比选填不填二选一选填
    stop_loss_trailing_amountdouble跟踪止损单-止损额,当下跟踪止损单时,止损百分比(stopLossTrailingPercent)和止损额(stopLossTrailingAmount)其中一项必填,如果都填时,会使用止损百分比作为参数。选填不填二选一选填- -
  • TWAP/VWAP 订单参数

    TWAP/VWAP 订单仅支持股票,outside_rth 固定为 falsetime_in_force 固定为 DAY。这两种订单类型仅在盘中交易时段有效,不支持预挂单。

    参数类型算法参数描述TWAPVWAP
    order_typestring订单类型,TWAP/VWAP必填必填
    accountstring资金账号必填必填
    symbolstring股票代码 如:AAPL必填必填
    sec_typestring只支持 STK必填必填
    total_quantitylong订单数量必填必填
    algo_paramsList<TagValue>算法参数选填选填
    -longstart_time策略开始时间(13 位毫秒时间戳)选填选填
    -longend_time策略结束时间(13 位毫秒时间戳)选填选填
    -Doubleparticipation_rate最大参与率(成交量为日均成交量的最大比例),有效范围 0.01-0.5不填选填
  • 冰山单(Iceberg)参数

    冰山单仅支持美股股票标的(sec_type=STK),只能在盘中下单,不支持预挂单。冰山单将大额委托拆分为小批量逐步执行,每次仅向市场暴露 display_size 数量的委托,有效降低市场冲击。

    参数类型描述是否必填
    order_typestring订单类型,固定为 ICEBERG必填
    accountstring资金账号必填
    symbolstring股票代码,如 AAPL必填
    sec_typestring合约类型,仅支持 STK必填
    actionstring交易方向 BUY/SELL必填
    total_quantityint订单总数量必填
    limit_pricedouble委托限价,price_type 为 LIMIT_PRICE 时必填条件必填
    display_sizeint每次展示数量(市场可见挂单量),传入时必须大于 0选填
    min_display_sizeint最小展示数量;设置该字段时必须同时设置 display_size,且须 ≤ display_size,默认为 display_size选填
    check_intervalsint价格检查间隔(秒),传入时必须大于 0选填
    price_typestring价格类型:LIMIT_PRICE(限价)/ ASK_PRICE(卖一价)/ BID_PRICE(买一价)/ LATEST_PRICE(最新价),默认 LIMIT_PRICE选填
    start_timelong策略生效开始时间(13 位毫秒时间戳)选填
    end_timelong策略生效结束时间(13 位毫秒时间戳)选填

    Java 冰山单构建方法将 time_in_force 设置为 DAY。简化构建方法默认 min_display_size=display_sizecheck_intervals=nullprice_type=LIMIT_PRICE,并且不设置 start_timeend_time;完整构建方法传入 nullmin_display_sizeprice_type 时也分别使用 display_sizeLIMIT_PRICE。构建方法不校验直接传入的 start_timeend_time 的先后顺序。

  • 返回

    账户路径返回字段
    Globalid、已废弃的 orderId;附加订单场景还返回 subIds
    Prime/Paperid、已废弃的 orderIdsubIdsorderssubIds 为子订单 ID 列表,orders 为返回订单详情

    接口成功表示下单请求已被接受,不表示订单最终成交;应继续查询返回订单或通过订单查询接口确认最终结果。

请求频率

基础限流为 120 次/分钟


构建合约对象

// 美股股票合约
ContractItem contract = ContractItem.buildStockContract("SPY", "USD");

// 港股股票合约
ContractItem contract = ContractItem.buildStockContract("00700", "HKD");

// 港股窝轮合约(需要注意同一个symbol,环球账号和综合账号的expiry可能不同)
ContractItem contract = ContractItem.buildWarrantContract("13745", "20211217", 719.38D, Right.CALL.name());
// 港股牛熊证合约
ContractItem contract = ContractItem.buildCbbcContract("50296", "20220331", 457D, Right.CALL.name());

// 美股期权合约
ContractItem contract = ContractItem.buildOptionContract("AAPL  190118P00160000");
ContractItem contract = ContractItem.buildOptionContract("AAPL", "20211119", 150.0D, "CALL");

// 期货合约
// 环球账户
ContractItem contract = ContractItem.buildFutureContract("CL", "USD", "SGX", "20190328", 1.0D);
// 综合账户
ContractItem contract = ContractItem.buildFutureContract("CL2112", "USD");

构建订单

市价单(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));

限价单(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)

仅支持美股

// 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));

竞价单(AM/AL)

// auction order in hk market
TradeOrderRequest request = TradeOrderRequest.buildLimitOrder("402901", contract, ActionType.BUY, 100, 100.0d);
// 盘前竞价: AM or AL + OPG, 如果未成交参与盘中交易; 盘后竞价: 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.DAY);
response = client.execute(request);
System.out.println(JSONObject.toJSONString(response));

止损单(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));

止损限价单(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));

跟踪止损单(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));

主订单+附加止盈单

// 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));

主订单+附加止损单

// 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);
// 添加附加止损市价单,附加止损价格是触发价(不支持期权标的)
TradeOrderRequest.addStopLossOrder(request, 100D, TimeInForce.DAY);
response = client.execute(request);
System.out.println(JSONObject.toJSONString(response));

// 期权可以使用附加止损限价单
ContractItem optionContract = ContractItem.buildOptionContract("AAPL", "20211231", 175.0D, "CALL");
request = TradeOrderRequest.buildLimitOrder("402901", optionContract, ActionType.BUY, 1, 2.0d);
// 添加附加止损限价单,其中第一个价格1.7是触发价,第二个价格1.69是附加止损单的挂单限价(暂只支持综合账号)
TradeOrderRequest.addStopLossLimitOrder(request, 1.7D, 1.69D, TimeInForce.DAY);
response = client.execute(request);
System.out.println(JSONObject.toJSONString(response));

主订单+附加跟踪止损单

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));

主订单+附加括号订单

// 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));

换汇单

换汇订单模型使用 source_currencysource_amounttarget_currency;请传入有效的源币种、源金额和目标币种。构建方法本身不校验统一的正数金额范围。模型还提供 seg_typeexternal_idtime_in_force

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());
}

基金金额单

    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 订单

只支持美股股票,只支持盘中下单。不能改单,可以撤单

import com.tigerbrokers.stock.openapi.client.util.DateUtils;
import com.tigerbrokers.stock.openapi.client.struct.enums.TimeZoneId;

// 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());
}

冰山单(Iceberg)

只支持美股股票,只支持盘中下单。不支持预挂单,可以改单和撤单。

import com.tigerbrokers.stock.openapi.client.struct.enums.PriceType;
import com.tigerbrokers.stock.openapi.client.util.DateUtils;
import com.tigerbrokers.stock.openapi.client.struct.enums.TimeZoneId;

// 冰山单(基本参数,使用限价模式)
ContractItem contract = ContractItem.buildStockContract("AAPL", "USD");
TradeOrderRequest request = TradeOrderRequest.buildIcebergOrder(
    "402901", contract, ActionType.BUY, 1000, 180.0, 100);
TradeOrderResponse response = client.execute(request);
System.out.println(JSONObject.toJSONString(response));

// 冰山单(完整参数)
TradeOrderRequest fullRequest = TradeOrderRequest.buildIcebergOrder(
    "402901", contract, ActionType.BUY, 1000, 180.0,
    100,    // displaySize: 每次展示100股
    50,     // minDisplaySize: 最小展示50股(实际展示在50~100间随机)
    30,     // checkIntervals: 每30秒检查一次
    PriceType.LIMIT_PRICE,  // priceType: 限价模式
    DateUtils.getTimestamp("2025-06-20 09:30:00", TimeZoneId.NewYork),  // startTime
    DateUtils.getTimestamp("2025-06-20 16:00:00", TimeZoneId.NewYork)   // endTime
);
TradeOrderResponse fullResponse = client.execute(fullRequest);
System.out.println(JSONObject.toJSONString(fullResponse));

期权多腿订单


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 括号单

模拟盘不支持

OCA 括号订单内的两个订单标的相同,一个止盈限价单,另一个为止损单或者止损限价单。其中一个成交时,自动取消另一个订单。下单后返回两个 order 对象,订单中的ocaGroupId相同的为一个组合。

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());
}

返回示例

附加括号单

{
    "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":"腾讯控股",
            "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":"腾讯控股",
            "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":"腾讯控股",
            "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"
        }
    ]
}




Did this page help you?