下单交易

C++ HTTP 方法返回完整响应中 data 字段的取值。本文示例中的外层 codemessagetimestamp 以及 data 字段名本身不属于方法返回的 value

下单

value TradeClient::place_order(Order &order)

说明

交易下单接口。

place_order 调用成功后,order 对象的 id 即被填充,可用于后续的查询或撤单。此时只表示订单提交成功,不代表订单已被成功执行。订单的执行是异步的,提交订单后需使用 get_orderget_orders 方法查询对应订单的状态。

⚠️

注意

  1. 市价单(MKT)和止损单(STP)不支持盘前盘后阶段交易
  2. 可做空标的,目前不支持锁仓,无法同时持有同一标的的多头与空头头寸
  3. 禁止直接开立反向头寸

参数

Order 对象,通过 OrderUtil 工具类构建

返回

web::json::value JSON 对象,下单成功返回订单信息

请求频率

  • 基础频率:120 次/分钟(按 TigerId + 接口统计,60 秒滚动窗口)。

构建合约对象示例

#include "tigerapi/contract_util.h"

using namespace TIGER_API;

// 美股
Contract contract = ContractUtil::stock_contract(U("TIGR"), U("USD"));

// 港股
Contract contract = ContractUtil::stock_contract(U("00700"), U("HKD"));

// 期权
Contract contract = ContractUtil::option_contract(U("AAPL  240621C00190000"));
// 或
Contract contract = ContractUtil::option_contract(U("AAPL"), U("20240621"), U("190"), U("CALL"));

// 期货
Contract contract = ContractUtil::future_contract(U("CL2312"), U("USD"));

限价单 (LMT)

#include "tigerapi/trade_client.h"
#include "tigerapi/client_config.h"
#include "tigerapi/contract_util.h"
#include "tigerapi/order_util.h"

using namespace TIGER_API;

ClientConfig config(false, U("your_config_directory_path"));
TradeClient trade_client(config);

// 生成股票合约
Contract contract = ContractUtil::stock_contract(U("AAPL"), U("USD"));

// 生成限价单
Order order = OrderUtil::limit_order(
    config.account,  // 下单账户
    contract,        // 合约对象
    U("BUY"),        // 买入
    100,             // 数量
    150.0            // 限价
);

// 下单
value result = trade_client.place_order(order);
ucout << result.serialize() << std::endl;

// 获取订单ID
std::cout << "Order ID: " << order.id << std::endl;

市价单 (MKT)

#include "tigerapi/trade_client.h"
#include "tigerapi/client_config.h"
#include "tigerapi/contract_util.h"
#include "tigerapi/order_util.h"

using namespace TIGER_API;

ClientConfig config(false, U("your_config_directory_path"));
TradeClient trade_client(config);

// 生成股票合约
Contract contract = ContractUtil::stock_contract(U("AAPL"), U("USD"));

// 生成市价单
Order order = OrderUtil::market_order(
    config.account,  // 下单账户
    contract,        // 合约对象
    U("BUY"),        // 买入
    100              // 数量
);

// 下单
value result = trade_client.place_order(order);

止损单 (STP)

#include "tigerapi/trade_client.h"
#include "tigerapi/client_config.h"
#include "tigerapi/contract_util.h"
#include "tigerapi/order_util.h"

using namespace TIGER_API;

ClientConfig config(false, U("your_config_directory_path"));
TradeClient trade_client(config);

Contract contract = ContractUtil::stock_contract(U("AAPL"), U("USD"));

// 生成止损单
Order order = OrderUtil::stop_order(
    config.account,  // 下单账户
    contract,        // 合约对象
    U("SELL"),       // 卖出
    100,             // 数量
    140.0            // 止损触发价
);

value result = trade_client.place_order(order);

止损限价单 (STP_LMT)

#include "tigerapi/trade_client.h"
#include "tigerapi/client_config.h"
#include "tigerapi/contract_util.h"
#include "tigerapi/order_util.h"

using namespace TIGER_API;

ClientConfig config(false, U("your_config_directory_path"));
TradeClient trade_client(config);

Contract contract = ContractUtil::stock_contract(U("AAPL"), U("USD"));

// 生成止损限价单
Order order = OrderUtil::stop_limit_order(
    config.account,  // 下单账户
    contract,        // 合约对象
    U("SELL"),       // 卖出
    100,             // 数量
    139.0,           // 限价
    140.0            // 止损触发价
);

value result = trade_client.place_order(order);

跟踪止损单 (TRAIL)

#include "tigerapi/trade_client.h"
#include "tigerapi/client_config.h"
#include "tigerapi/contract_util.h"
#include "tigerapi/order_util.h"

using namespace TIGER_API;

ClientConfig config(false, U("your_config_directory_path"));
TradeClient trade_client(config);

Contract contract = ContractUtil::stock_contract(U("AAPL"), U("USD"));

// 跟踪止损单 - 按跟踪金额
Order order = OrderUtil::trail_order(
    config.account,  // 下单账户
    contract,        // 合约对象
    U("SELL"),       // 卖出
    100,             // 数量
    5.0,             // 跟踪金额 (aux_price)
    0                // 跟踪百分比 (trailing_percent, 0表示不使用)
);

// 跟踪止损单 - 按百分比
Order order2 = OrderUtil::trail_order(
    config.account,
    contract,
    U("SELL"),
    100,
    0,               // aux_price, 0表示不使用
    8.0              // trailing_percent 8%
);

value result = trade_client.place_order(order);

下单港股

港股交易中,委托数量必须为该股票「每手股数」的整数倍。

ClientConfig config(false, U("your_config_directory_path"));
TradeClient trade_client(config);

Contract contract = ContractUtil::stock_contract(U("00700"), U("HKD"));

Order order = OrderUtil::limit_order(
    config.account,
    contract,
    U("BUY"),
    100,           // 腾讯每手100股
    400.0
);

value result = trade_client.place_order(order);

下单期货

ClientConfig config(false, U("your_config_directory_path"));
TradeClient trade_client(config);

Contract contract = ContractUtil::future_contract(U("CL2312"), U("USD"));

Order order = OrderUtil::limit_order(
    config.account,
    contract,
    U("BUY"),
    1,
    70.0
);

value result = trade_client.place_order(order);

下单期权

ClientConfig config(false, U("your_config_directory_path"));
TradeClient trade_client(config);

// 使用期权标识符构建合约
Contract contract = ContractUtil::option_contract(U("AAPL  240621C00190000"));

Order order = OrderUtil::limit_order(
    config.account,
    contract,
    U("BUY"),
    1,
    2.5
);

value result = trade_client.place_order(order);

校正下单价格

使用 PriceUtil 校正下单价格。合约价格处于不同档位时,会有不同的精度,当指定不合适精度的价格作为下单价格时,会返回错误。

#include "tigerapi/trade_client.h"
#include "tigerapi/client_config.h"
#include "tigerapi/contract_util.h"
#include "tigerapi/order_util.h"
#include "tigerapi/price_util.h"

using namespace TIGER_API;

ClientConfig config(false, U("your_config_directory_path"));
TradeClient trade_client(config);

// 查询合约获取 tickSizes 信息
value contract_info = trade_client.get_contract(U("AAPL"), U("STK"));
value tick_sizes = contract_info[U("tickSizes")];

double price = 150.173;

// 检查价格是否符合 tick 规格
bool is_ok = PriceUtil::match_tick_size(price, tick_sizes);

// 修正价格(默认向下调整)
double fixed_price = PriceUtil::fix_price_by_tick_size(price, tick_sizes);
// fixed_price = 150.17

// 修正价格(向上调整)
double fixed_price_up = PriceUtil::fix_price_by_tick_size(price, tick_sizes, true);
// fixed_price_up = 150.18

// 使用修正后的价格下单
Contract contract = ContractUtil::stock_contract(U("AAPL"), U("USD"));
Order order = OrderUtil::limit_order(config.account, contract, U("BUY"), 1, fixed_price);
trade_client.place_order(order);

Order 对象属性

属性名类型描述
idunsigned long long订单 ID
order_idlong外部订单 ID
accountutility::string_t资金账号
contractContract合约对象(包含 symbol, sec_type, market, currency)
actionutility::string_t交易方向 BUY/SELL
order_typeutility::string_t订单类型 MKT/LMT/STP/STP_LMT/TRAIL
total_quantitylong long订单总数量
total_quantity_scalelong数量小数位;实际数量为 total_quantity * 10^-total_quantity_scale
limit_pricedouble限价
s_limit_priceutility::string_t字符串限价;非空时优先作为 limit_price 发送
aux_pricedouble止损触发价
trail_stop_pricedouble跟踪止损价
trailing_percentdouble跟踪止损百分比
percent_offsetdouble百分比偏移
time_in_forceutility::string_t订单有效期 DAY/GTC/GTD
outside_rthbool是否允许美股盘前盘后交易;默认构造函数不初始化该字段,构造订单后应显式设置
adjust_limitdouble价格调整范围
user_markutility::string_t备注信息
expire_timetime_tGTD 订单过期时间,13 位时间戳(毫秒),time_in_force 为 GTD 时必填
statusutility::string_t订单状态
parent_idunsigned long long父订单 ID
filled_quantitylong long已成交数量
filled_quantity_scalelong已成交数量小数位
avg_fill_pricedouble按成交价格加权计算的平均成交价,不含佣金和其他费用
realized_pnldouble已实现盈亏;佣金和 GST 通过独立字段返回。准确的计算口径和币种请以账户结单为准
commissiondouble佣金;模型无法区分字段缺失和明确返回的 0
gstdouble商品及服务税;模型无法区分字段缺失和明确返回的 0
open_timetime_t下单时间
latest_timetime_t最近成交时间
update_timetime_t订单更新时间
reasonutility::string_t订单失败原因
sub_idsweb::json::value子订单 ID 列表
algo_strategyutility::string_t算法策略,如 TWAPVWAP
algo_paramsvector<AlgoParam>算法参数;每项包含字符串 tagvalue
display_sizelong long冰山单展示数量;0 表示省略
min_display_sizelong long冰山单最小展示数量;0 表示省略
check_intervalslong long冰山单检查间隔;0 表示省略
price_typeutility::string_t冰山单价格类型
start_timelong long冰山单开始时间(Unix 毫秒);0 表示省略
end_timelong long冰山单结束时间(Unix 毫秒);0 表示省略
cash_amountdouble按金额下单的现金金额;0 表示省略
combo_typeutility::string_t组合单策略类型
contract_legsvector<ContractLeg>组合单腿;每腿包含 symbolsec_typeexpirystrikerightactionratio
oca_ordersvector<Order>OCA 子订单列表
attach_typeutility::string_t附加单类型:PROFITLOSSBRACKETS
profit_taker_order_idint64_t止盈子订单 ID;0 表示省略
profit_taker_pricedouble止盈价格;0 表示省略
profit_taker_tifutility::string_t止盈单有效期
profit_taker_rthbool止盈单是否允许盘前盘后;false 时省略
stop_loss_order_typeutility::string_t止损单类型,如 STPSTP_LMTTRAIL
stop_loss_order_idint64_t止损子订单 ID;0 表示省略
stop_loss_pricedouble止损触发价;0 表示省略
stop_loss_limit_pricedouble止损限价;0 表示省略
stop_loss_tifutility::string_t止损单有效期
stop_loss_trailing_percentdouble跟踪止损百分比;0 表示省略
stop_loss_trailing_amountdouble跟踪止损金额;0 表示省略

返回示例

{
  "code": 0,
  "message": "success",
  "timestamp": 1785528000000,
  "data": {
    "id": 123458,
    "orderId": 789014,
    "subIds": []
  }
}

冰山单 (ICEBERG)

冰山单仅支持美股股票标的,只能在盘中下单,不支持预挂单。

#include "tigerapi/trade_client.h"
#include "tigerapi/order_util.h"

ClientConfig config(false, U("your_config_directory_path"));
TradeClient trade_client(config);

Contract contract = ContractUtil::stock_contract(U("AAPL"), U("USD"));

// 冰山单(基本参数)
Order order = OrderUtil::iceberg_order(
    config.account, contract, U("BUY"), 1000, 180.0, 100);

value result = trade_client.place_order(order);

// 冰山单(完整参数)
Order full_order = OrderUtil::iceberg_order(
    config.account, contract, U("BUY"), 1000, 180.0,
    100,    // display_size
    50,     // min_display_size
    30,     // check_intervals(秒)
    U("LIMIT_PRICE"),  // price_type: LIMIT_PRICE/ASK_PRICE/BID_PRICE/LATEST_PRICE
    start_time,  // 生效开始时间(epoch ms)
    end_time     // 生效结束时间(epoch ms)
);

value full_result = trade_client.place_order(full_order);

Did this page help you?