exchange.CreateConditionOrder
创建条件单。条件单是在满足指定触发条件时自动执行的订单。
exchange.CreateConditionOrder(symbol, side, amount, condition)
exchange.CreateConditionOrder(symbol, side, amount, condition, ...args)示例
-
创建止盈单(TP):价格上涨至目标价位时自动卖出。
javascriptfunction main() { // 创建止盈单:当BTC_USDT价格上涨至65000时,以65000的价格卖出0.01个BTC var condition = { ConditionType: ORDER_CONDITION_TYPE_TP, // 止盈单 TpTriggerPrice: 65000, // 触发价格 TpOrderPrice: 65000 // 委托价格;也可设为-1,表示按市价下单 } var id = exchange.CreateConditionOrder("BTC_USDT", "sell", 0.01, condition) Log("TP order Id:", id) }pythondef main(): # 创建止盈单:当BTC_USDT价格上涨至65000时,以65000的价格卖出0.01个BTC condition = { "ConditionType": ORDER_CONDITION_TYPE_TP, # 止盈单 "TpTriggerPrice": 65000, # 触发价格 "TpOrderPrice": 65000 # 委托价格;也可设为-1,表示按市价下单 } id = exchange.CreateConditionOrder("BTC_USDT", "sell", 0.01, condition) Log("TP order Id:", id)rustfn main() { // 创建止盈单:当BTC_USDT价格上涨至65000时,以65000的价格卖出0.01个BTC let condition = OrderCondition { ConditionType: ORDER_CONDITION_TYPE_TP, // 止盈单 TpTriggerPrice: 65000.0, // 触发价格 TpOrderPrice: 65000.0, // 委托价格;也可设为-1,表示按市价下单 ..Default::default() }; let id = exchange.CreateConditionOrder("BTC_USDT", "sell", 0.01, &condition); Log!("TP order Id:", id); } -
创建止损单(SL):价格下跌至止损价位时自动卖出。
javascriptfunction main() { // 创建止损单:当BTC_USDT价格下跌至58000时,以市价卖出0.01个BTC var condition = { ConditionType: ORDER_CONDITION_TYPE_SL, // 止损单 SlTriggerPrice: 58000, // 触发价格 SlOrderPrice: -1 // -1表示按市价下单 } var id = exchange.CreateConditionOrder("BTC_USDT", "sell", 0.01, condition) Log("SL order Id:", id) }pythondef main(): # 创建止损单:当BTC_USDT价格下跌至58000时,以市价卖出0.01个BTC condition = { "ConditionType": ORDER_CONDITION_TYPE_SL, # 止损单 "SlTriggerPrice": 58000, # 触发价格 "SlOrderPrice": -1 # -1表示按市价下单 } id = exchange.CreateConditionOrder("BTC_USDT", "sell", 0.01, condition) Log("SL order Id:", id)rustfn main() { // 创建止损单:当BTC_USDT价格下跌至58000时,以市价卖出0.01个BTC let condition = OrderCondition { ConditionType: ORDER_CONDITION_TYPE_SL, // 止损单 SlTriggerPrice: 58000.0, // 触发价格 SlOrderPrice: -1.0, // -1表示按市价下单 ..Default::default() }; let id = exchange.CreateConditionOrder("BTC_USDT", "sell", 0.01, &condition); Log!("SL order Id:", id); } -
创建OCO订单:同时设置止盈和止损,其中任一方向触发后,另一方向的订单将自动撤销。
javascriptfunction main() { // 创建OCO订单:止盈价65000,止损价58000 var condition = { ConditionType: ORDER_CONDITION_TYPE_OCO, // 条件类型:OCO订单 TpTriggerPrice: 65000, // 止盈触发价格 TpOrderPrice: 65000, // 止盈委托价格 SlTriggerPrice: 58000, // 止损触发价格 SlOrderPrice: 58000 // 止损委托价格 } var id = exchange.CreateConditionOrder("BTC_USDT", "sell", 0.01, condition) Log("OCO order Id:", id) }pythondef main(): # 创建OCO订单:止盈价65000,止损价58000 condition = { "ConditionType": ORDER_CONDITION_TYPE_OCO, # 条件类型:OCO订单 "TpTriggerPrice": 65000, # 止盈触发价格 "TpOrderPrice": 65000, # 止盈委托价格 "SlTriggerPrice": 58000, # 止损触发价格 "SlOrderPrice": 58000 # 止损委托价格 } id = exchange.CreateConditionOrder("BTC_USDT", "sell", 0.01, condition) Log("OCO order Id:", id)rustfn main() { // 创建OCO订单:止盈价65000,止损价58000 let condition = OrderCondition { ConditionType: ORDER_CONDITION_TYPE_OCO, // 条件类型:OCO订单 TpTriggerPrice: 65000.0, // 止盈触发价格 TpOrderPrice: 65000.0, // 止盈委托价格 SlTriggerPrice: 58000.0, // 止损触发价格 SlOrderPrice: 58000.0 // 止损委托价格 }; let id = exchange.CreateConditionOrder("BTC_USDT", "sell", 0.01, &condition); Log!("OCO order Id:", id); } -
使用附加参数(option)创建条件单,传入交易所特定参数。
javascriptfunction main() { // 交易所特定参数放在最后一个对象参数中 var option = { "type": "TRAILING_STOP_MARKET", "activatePrice": "300", "callbackRate": "0.1" } var condition = { ConditionType: ORDER_CONDITION_TYPE_TP, TpTriggerPrice: 77, TpOrderPrice: 71 } var id = exchange.CreateConditionOrder("SOL_USDT.swap", "buy", 1, condition, option) Log("Condition Order Id:", id) Sleep(2000) Log(exchange.GetConditionOrder(id)) }pythondef main(): # 交易所特定参数放在最后一个对象参数中 option = { "type": "TRAILING_STOP_MARKET", "activatePrice": "300", "callbackRate": "0.1" } condition = { "ConditionType": ORDER_CONDITION_TYPE_TP, "TpTriggerPrice": 77, "TpOrderPrice": 71 } id = exchange.CreateConditionOrder("SOL_USDT.swap", "buy", 1, condition, option) Log("Condition Order Id:", id) Sleep(2000) Log(exchange.GetConditionOrder(id))rustfn main() { // Rust 使用带 WithOptions 后缀的函数传入对象参数 let opts = JSONParse(r#"{"type": "TRAILING_STOP_MARKET", "activatePrice": "300", "callbackRate": "0.1"}"#).unwrap(); let condition = OrderCondition { ConditionType: ORDER_CONDITION_TYPE_TP, TpTriggerPrice: 77.0, TpOrderPrice: 71.0, ..Default::default() }; let id = exchange.CreateConditionOrderWithOptions("SOL_USDT.swap", "buy", 1, &condition, &opts).unwrap(); Log!("Condition Order Id:", id); Sleep(2000); Log!(exchange.GetConditionOrder(&id)); }
返回值
| 类型 | 描述 |
string / 空值 | 创建成功时返回条件单Id,失败时返回空值。条件单Id的格式与普通订单Id类似,由交易所品种代码和交易所原始条件单Id组成,以英文逗号分隔。 |
参数
| 名称 | 类型 | 必填 | 描述 |
symbol | string | 是 | 条件单的交易品种,例如现货交易所对象上的 |
side | string | 是 | 交易方向:现货为 |
amount | number | 是 | 条件单的下单量。注意:现货市价买单的下单量为买入金额;个别现货交易所的市价买单下单量为交易币数量而非金额,详见各交易所页面的注意事项。对于期货交易所对象,下单量参数 |
condition | object | 是 | 条件单的触发条件和执行价格,结构见 |
arg | string / number / bool / object / array / any | 否 | 扩展参数,可传入多个 |
参考
Condition exchange.CancelConditionOrder exchange.GetConditionOrder exchange.GetConditionOrders exchange.ModifyConditionOrder
备注
条件单的支持情况取决于具体交易所,部分交易所不支持条件单。
条件单在触发前不占用账户资金,触发后才会实际下单并占用资金。
各交易所对条件单的支持程度和具体参数可能存在差异,使用前请查阅对应交易所的API文档。
交易所特定参数(option)放在最后一个对象参数中,例如exchange.CreateConditionOrder(symbol, "buy", amount, condition, {type: "TRAILING_STOP_MARKET", activatePrice: "300"}),对象中的键会原样传递给交易所。Rust使用exchange.CreateConditionOrderWithOptions()。
不同交易所支持的option参数不同,具体以交易所API文档为准。常见参数包括:订单类型(type)、生效规则(timeInForce)、触发价格(activatePrice)、回调比率(callbackRate)等。
使用option参数时,仍需提供amount和condition参数。如果交易所API中的某些参数已通过option传递,这些基础参数可能会被option中的对应参数覆盖,具体行为取决于交易所API的实现。
也可以将参数附加在side参数之后(旧写法):写成"side;{JSON对象}"或"side;key=value&key=value",例如"buy;{\"type\":\"TRAILING_STOP_MARKET\",\"activatePrice\":\"300\"}"或"buy;type=TRAILING_STOP_MARKET&activatePrice=300"。具体支持的参数取决于交易所API。
condition的ConditionType可取ORDER_CONDITION_TYPE中的OCO、TP、SL;ORDER_CONDITION_TYPE_GENERIC仅出现在查询结果中(如追踪止损等交易所特有的条件单),创建或修改条件单时不可使用,传入会报错并返回空值。所选类型涉及的触发价格和执行价格均须传入且不能为0(OCO需要全部四项,TP需要止盈的两项,SL需要止损的两项),否则报错并返回空值;执行价格为-1表示触发后以市价单执行。
不支持的交易所:Bithumb、Bitstamp、Coinw、DigiFinex、Futures_DigiFinex、Gemini、HashKey、Korbit、LBank、MEXC、Upbit、WEEX、Zaif、Hyperliquid、Pendle、Uniswap、PancakeSwap、Aerodrome、Velodrome、KyberSwap、OneInch、Jupiter、OKX_DEX、Futures_Polymarket、Futures_Futu、Futures_IB、Exchange、Web3。调用时报错并返回空值,所有交易所的对照见能力矩阵。