取消或修改订单
大约 3 分钟
cancel_order 取消订单
value cancel_order(long id);
说明
撤销已下的订单。撤单同下单类似,为异步执行,调用本命令后表示撤单请求发送成功,撤单的执行会异步处理 使用 TradeClient.place_order
提交订单后,被提交的订单会根据不同情况进入多种状态。已成交或被系统拒绝的订单无法被撤销,只有订单处于已提交或部分成交的状态,才可被撤销。请参考 TradeClient.get_order 方法的说明来了解可能出现的订单状态。
对于批量下出的订单,可用 TradeClient.get_active_orders
取得待成交的订单列表,依次撤单。对于已经请求过撤单的订单,不要重复请求,可在撤单命令执行会,等待一段时间再次检查待成交的订单。
参数
参数名 | 类型 | 是否必填 | 描述 |
---|---|---|---|
account | str | No | 账户id,若不填则使用 client_config 中的默认 account |
id | int | Yes | 全局订单id,取消订单操作建议使用id字段,在 place_order 之后,可以通过 Order.id 获取 |
order_id | int | No | 本地订单order_id, 可以通过 Order.order_id 获取 |
secret_key | str | No | 机构交易员密钥,机构用户专有,机构用户必填,需要在client_config中配置 |
示例
modify_order 修改订单
value modify_order(Order &order, double limit_price=0, long total_quantity=0, double aux_price=0,
double trail_stop_price=0, double trailing_percent=0, double percent_offset=0,
string time_in_force="", bool outside_rth=false, long expire_time=0)
说明
修改已下订单,具体可修改的字段见下表
参数
参数名 | 类型 | 是否必填 | 描述 |
---|---|---|---|
order | Order | Yes | 要修改的 Order 对象(tigeropen.trade.domain.order.Order) |
quantity | int | No | 修改后的下单股数 |
limit_price | float | No | 修改后的限价,当 order_type 为LMT,STP,STP_LMT时该参数必需 |
aux_price | float | No | 对于限价止损单,表示触发价, 对于移动止损单,表示价差。当 order_type 为STP,STP_LMT时该参数必需 |
trail_stop_price | float | No | 当 order_type 为 TRAIL 时必须,为触发止损单的价格 |
trailing_percent | float | No | 跟踪止损单-百分比 ,当 order_type 为 TRAIL时,aux_price和trailing_percent两者互斥 |
time_in_force | str | No | 订单有效期,只能是 'DAY'(当日有效)和'GTC'(取消前有效),默认为'DAY' |
outside_rth | bool | No | 是否允许盘前盘后交易(美股专属) |
secret_key | str | No | 机构交易员密钥,机构用户专有,机构用户必填,需要在client_config中配置 |
示例
#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_modify_order(const std::shared_ptr<TradeClient>& trade_client) {
Contract contract = stock_contract("AAPL", "USD");
Order order = limit_order(contract, "BUY", 1, 100.0);
long id = (long) trade_client->place_order(order)["id"].as_number().to_uint64();
value res = trade_client->modify_order(order, 105);
cout << "modify order res: " << res << endl;
Order mod_order = trade_client->get_order(id);
cout << "modified order: " << mod_order.to_string() << endl;
}
static void test_trade(const std::shared_ptr<TradeClient>& trade_client) {
TestTradeClient::test_modify_order(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;
}