输入/搜索内容
内置函数
Global
Log
Market
Trade
Account
Futures
Exchange
IO
Network
Storage
Threads
TA
Talib
OS
结构体
内置变量与常量
通用约定
交易所

创建条件单。条件单是在满足指定触发条件时自动执行的订单。

exchange.CreateConditionOrder(symbol, side, amount, condition)
exchange.CreateConditionOrder(symbol, side, amount, condition, ...args)

示例

  • 创建止盈单(TP):价格上涨至目标价位时自动卖出。

    javascript
    function 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) }
    python
    def 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)
    rust
    fn 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):价格下跌至止损价位时自动卖出。

    javascript
    function 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) }
    python
    def 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)
    rust
    fn 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订单:同时设置止盈和止损,其中任一方向触发后,另一方向的订单将自动撤销。

    javascript
    function 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) }
    python
    def 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)
    rust
    fn 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)创建条件单,传入交易所特定参数。

    javascript
    function 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)) }
    python
    def 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))
    rust
    fn 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

是

条件单的交易品种,例如现货交易所对象上的BTC_USDT、期货交易所对象上的BTC_USDT.swap;品种代码的写法(含期权)见品种代码。

side

string

是

交易方向:现货为buy(买入)、sell(卖出);期货为buy(开多)、sell(开空)、closebuy(平多)、closesell(平空)。可附带交易所特定参数,见备注。

amount

number

是

条件单的下单量。注意:现货市价买单的下单量为买入金额;个别现货交易所的市价买单下单量为交易币数量而非金额,详见各交易所页面的注意事项。对于期货交易所对象,下单量参数amount均为合约张数。

condition

object

是

条件单的触发条件和执行价格,结构见Condition;各条件类型必须传入的价格见备注。

arg

string / number / bool / object / array / any

否

扩展参数,可传入多个arg参数。字符串、数字等参数会输出到该条件单的日志中(多个参数以空格连接)。对象参数不会输出到日志,而是作为交易所特定参数原样传递给交易所(extra子对象会先展开,并与side参数中的附加参数合并)。Rust使用exchange.CreateConditionOrderWithOptions()传入对象参数。

参考

备注

条件单的支持情况取决于具体交易所,部分交易所不支持条件单。

条件单在触发前不占用账户资金,触发后才会实际下单并占用资金。

各交易所对条件单的支持程度和具体参数可能存在差异,使用前请查阅对应交易所的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。调用时报错并返回空值,所有交易所的对照见能力矩阵。