下单交易

大约 7 分钟

place_oder 下单

TradeClient.place_order():

说明

交易下单接口。关于如何选择标的、订单类型、方向数量等,请见下方说明。请在运行程序前结合本文档的概述部分及FAQ-交易-支持的订单列表部分,检查您的账户是否支持所请求的订单,并检查交易规则是否允许在程序运行时段对特定标的下单。若下单失败,可首先阅读文档FAQ-交易部分排查

place_order 调用成功后,返回对象里包含订单id, 可用于后续的查询或撤单,此时只表示订单提交成功,不代表订单已被成功执行,订单的执行是异步的,提交订单后,订单会根据情况进入下一步状态,比如成交、被拒绝等。因此,建议在对订单进行下一步操作之前,使用get_orderget_orders方法查询对应订单的状态,

CAUTION

1、市价单(MKT)和止损单(STP)不支持盘前盘后阶段交易,在调用下单接口时,需要把 outside_rth 设置为 false
2、对于可做空标的,暂不支持锁仓功能,因此无法同时持有相同标的多头和空头持仓
3、附加订单的主订单类型暂时仅支持限价单
4、市价单(MKT)和模拟账号,对'time_in_force'参数都不支持GTC
5、模拟账号暂不支持窝轮和牛熊证的订单

订单状态说明

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

当订单状态不是FILLED(有可能是NEW,CANCELLED,EXPIRED,REJECTED其中一种)时,都有可能是部分成交的状态,可以通过订单成交数量是否大于0来判断

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

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

订单状态变化流程订单状态流程图

参数

Order对象 (tigeropen.trade.domain.order.Order)

可用 tigeropen.common.util.order_utils 下的工具函数,如 limit_order(), market_order(), 根据您需要的具体订单类型和参数,在本地生成订单对象。创建方法详见Order对象-构建方法部分 或者用 TradeClient.create_order() 向服务端请求订单号,然后生成订单对象(不推荐)

订单常用属性:

参数名类型是否必填描述
actionstrYes买卖方向,'BUY'表示买入,'SELL'表示卖出
order_typestrYes订单类型,'MKT' 市价单 / 'LMT' 限价单 / 'STP' 止损单 / 'STP_LMT' 止损限价单 / 'TRAIL' 跟踪止损单
time_in_forcestrNo订单有效期,'DAY'当日有效,'GTC'取消前有效, 'GTD' 日期前有效(GTD订单必须额外指定expire_time)
limit_pricefloatNo限价的价格,当订单类型为 LMT 或 STP_LMT 时必填
total_quantityintYes下单数量,必须为大于0的整数。如果不是美股,quantity需要为股票每手股数的整数倍,可以用 TradeClient.get_trade_metas 查询每手股数
total_quantity_scaleintNo下单数量的偏移量,默认为0。碎股单的total_quantity 和 total_quantity_scale 结合起来代表真实下单数量,如 total_quantity=111 total_quantity_scale=2,那么真实 quantity=111*10^(-2)=1.11

返回

如果下单成功则返回订单id,失败抛出异常。

限价单

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

using namespace std;
using namespace web;
using namespace web::json;
using namespace TIGER_API;

/**
 * 调用交易接口
 */
class TestTradeClient {
public:
    static void test_place_order(const std::shared_ptr<TradeClient>& trade_client) {
        // 股票合约
        Contract contract = stock_contract("AAPL", "USD");
        // 期权合约
        // Contract contract = option_contract(U("AAPL"), U("20230630"), U("187.5"), U("CALL"));
        // 或 Contract contract = option_contract(U("AAPL  230630C00187500");
        // 期货合约
        // Contract contract = future_contract(U("CL2312"), U("USD"));
        
        Order order = limit_order(contract, "BUY", 1, 105.0);
        value res = trade_client->place_order(order);
        long id = res["id"].as_integer();
        cout << "order id: " << id << endl;
        cout << "place order result: " << res << endl;
    }

    static void test_trade(const std::shared_ptr<TradeClient>& trade_client) {
        TestTradeClient::test_get_orders(trade_client);
    }
};

int main(int argc, char *args[]) {
    cout << "Tiger Api main" << endl;
    /************************** set config **********************/
    ClientConfig config = ClientConfig();

    config.private_key = "xxxxxx your private key string xxxxxxxx";
    config.tiger_id = "your tiger id";
    config.account = "your account";



    /**
     * 使用封装后的交易接口 TradeClient
     */
    std::shared_ptr<TradeClient> trade_client = std::make_shared<TradeClient>(config);
    TestTradeClient::test_trade(trade_client);


    return 0;
}

市价单

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

using namespace std;
using namespace web;
using namespace web::json;
using namespace TIGER_API;

/**
 * 调用交易接口
 */
class TestTradeClient {
public:
    static void test_place_order(const std::shared_ptr<TradeClient>& trade_client) {
        Contract contract = stock_contract("AAPL", "USD");
        Order order = market_order(contract, "BUY", 1);
        value res = trade_client->place_order(order);
        long id = res["id"].as_integer();
        cout << "order id: " << id << endl;
        cout << "place order result: " << res << endl;
    }

    static void test_trade(const std::shared_ptr<TradeClient>& trade_client) {
        TestTradeClient::test_get_orders(trade_client);
    }
};

int main(int argc, char *args[]) {
    cout << "Tiger Api main" << endl;
    /************************** set config **********************/
    ClientConfig config = ClientConfig();

    config.private_key = "xxxxxx your private key string xxxxxxxx";
    config.tiger_id = "your tiger id";
    config.account = "your account";



    /**
     * 使用封装后的交易接口 TradeClient
     */
    std::shared_ptr<TradeClient> trade_client = std::make_shared<TradeClient>(config);
    TestTradeClient::test_trade(trade_client);


    return 0;
}

create_order 请求创建订单

TradeClient.create_order():

说明

请求订单号,创建订单对象。不推荐使用,建议使用 tigeropen.common.util.order_utils 下的工具函数本地创建订单,如 limit_order, market_order.

参数

参数名类型描述市价单限价单止损单止损限价单跟踪止损单
accountstr账户id,不传则返回所有关联的 account选填选填选填选填选填
contractContract合约对象
actionstr买卖方向, 'BUY':买入, 'SELL':卖出
order_typestr订单类型, 'MKT' 市价单 / 'LMT' 限价单 / 'STP' 止损单 / 'STP_LMT' 止损限价单 / 'TRAIL' 跟踪止损单MKTLMTSTPSTP_LMTTRAIL
quantityint下单数量, 为大于0的整数
limit_pricefloat限价单价格,当订单类型为LMT或STP_LMT时必填
aux_pricefloat在止损单表示止损价格; 在跟踪止损单表示价差
trail_stop_pricefloat跟踪止损单--触发止损单的价格
trailing_percentfloat跟踪止损单--百分比
adjust_limitfloat价格微调幅度(默认为0表示不调整,正数为向上调整,负数向下调整),对传入价格自动调整到合法价位上。例如:0.001 代表向上调整且幅度不超过 0.1%;-0.001 代表向下调整且幅度不超过 0.1%。默认 0 表示不调整选填选填选填选填
time_in_forcestr订单有效期,只能是 DAY(当日有效)和GTC(取消前有效),默认为DAY选填选填选填选填选填
outside_rthboolTrue: 允许盘前盘后交易(美股专属), False: 不允许, 默认为True。(市价单只在盘中有效,将忽略outside_rth参数)选填选填选填
order_legsobject附加订单列表,参数上面示例选填选填选填选填选填
algo_paramsobject算法订单参数,参考上面示例选填选填选填选填选填
secret_keystr机构用户专用,交易员密钥选填选填选填选填选填
user_markstr下单备注信息,下单后不能修改,查询订单时返回userMark信息(需要配置开发者个人信息)选填选填选填选填选填

place_forex_order 换汇下单

说明

换汇订单

示例


    static void test_place_forex_order(const std::shared_ptr<TradeClient>& trade_client) {
        value res = trade_client->place_forex_order(U("SEC"), U("USD"), U("HKD"), 1.0);
        ucout << U("place forex order: ") << res << endl;
    }
    

返回示例

{"account":"111","action":"SELL","algoStrategy":"LMT","attrDesc":"","avgFillPrice":0,"canCancel":true,"canModify":true,"commission":0,"currency":"HKD","discount":0,"externalId":"1504","filledQuantity":0,"id":31570073629229056,"identifier":"USD.HKD","isOpen":false,"latestPrice":7.8062500000000004,"latestTime":1689759747000,"limitPrice":7.7962499999999997,"liquidation":false,"market":"US","name":"USD.HKD","openTime":1689759747000,"orderId":1504,"orderType":"LMT","outsideRth":false,"realizedPnl":0,"remark":"","secType":"FOREX","source":"OpenApi","status":"Initial","symbol":"USD.HKD","timeInForce":"DAY","totalQuantity":1,"updateTime":1689759747000,"userMark":""}

上次编辑于: