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

修改现有条件单,可修改条件单的下单量、触发条件和执行价格。还可以通过附加参数修改条件单的其他属性(取决于交易所API是否支持)。

exchange.ModifyConditionOrder(orderId, side, amount, condition)
exchange.ModifyConditionOrder(orderId, side, amount, condition, options)

示例

  • 修改条件单的数量和触发条件。

    javascript
    function main() { // 创建止盈条件单 var condition = { ConditionType: ORDER_CONDITION_TYPE_TP, TpTriggerPrice: 77, TpOrderPrice: 76 } var id = exchange.CreateConditionOrder("SOL_USDT.swap", "buy", 1, condition) Log("Original Condition Order ID:", id) Sleep(2000) // 查询原条件单信息 var order = exchange.GetConditionOrder(id) Log("Original Condition Order Info:", order) Sleep(1000) // 修改条件单的数量和触发条件 var newCondition = { ConditionType: ORDER_CONDITION_TYPE_TP, TpTriggerPrice: 75, TpOrderPrice: 71 } var newId = exchange.ModifyConditionOrder(id, "buy", 2, newCondition) Log("Modified Condition Order ID:", newId) Sleep(2000) // 查询修改后的条件单信息 var newOrder = exchange.GetConditionOrder(newId) Log("Modified Condition Order Info:", newOrder) // 撤销条件单 exchange.CancelConditionOrder(newId) }
    python
    def main(): # 创建止盈条件单 condition = { "ConditionType": ORDER_CONDITION_TYPE_TP, "TpTriggerPrice": 77, "TpOrderPrice": 76 } id = exchange.CreateConditionOrder("SOL_USDT.swap", "buy", 1, condition) Log("Original Condition Order ID:", id) Sleep(2000) # 查询原条件单信息 order = exchange.GetConditionOrder(id) Log("Original Condition Order Info:", order) Sleep(1000) # 修改条件单的数量和触发条件 newCondition = { "ConditionType": ORDER_CONDITION_TYPE_TP, "TpTriggerPrice": 75, "TpOrderPrice": 71 } newId = exchange.ModifyConditionOrder(id, "buy", 2, newCondition) Log("Modified Condition Order ID:", newId) Sleep(2000) # 查询修改后的条件单信息 newOrder = exchange.GetConditionOrder(newId) Log("Modified Condition Order Info:", newOrder) # 撤销条件单 exchange.CancelConditionOrder(newId)
    rust
    fn main() { // 创建止盈条件单 let condition = OrderCondition { ConditionType: ORDER_CONDITION_TYPE_TP, TpTriggerPrice: 77.0, TpOrderPrice: 76.0, ..Default::default() }; let id = exchange.CreateConditionOrder("SOL_USDT.swap", "buy", 1, &condition).unwrap(); Log!("Original Condition Order ID:", id); Sleep(2000); // 查询原条件单信息 let order = exchange.GetConditionOrder(&id); Log!("Original Condition Order Info:", order); Sleep(1000); // 修改条件单的数量和触发条件 let newCondition = OrderCondition { ConditionType: ORDER_CONDITION_TYPE_TP, TpTriggerPrice: 75.0, TpOrderPrice: 71.0, ..Default::default() }; let newId = exchange.ModifyConditionOrder(&id, "buy", 2, &newCondition).unwrap(); Log!("Modified Condition Order ID:", newId); Sleep(2000); // 查询修改后的条件单信息 let newOrder = exchange.GetConditionOrder(&newId); Log!("Modified Condition Order Info:", newOrder); // 撤销条件单 let _ = exchange.CancelConditionOrder(&newId); }
  • 通过附加参数(option)修改条件单的触发价格类型。

    javascript
    function main() { // 创建止盈条件单 var condition = { ConditionType: ORDER_CONDITION_TYPE_TP, TpTriggerPrice: 77, TpOrderPrice: 76 } var id = exchange.CreateConditionOrder("SOL_USDT.swap", "buy", 1, condition) Log("Original Condition Order ID:", id) Sleep(2000) // 修改条件单,并将触发价格类型设为指数价格(index):交易所特有参数通过最后一个对象参数传入 var newCondition = { ConditionType: ORDER_CONDITION_TYPE_TP, TpTriggerPrice: 75, TpOrderPrice: 71 } var newId = exchange.ModifyConditionOrder(id, "buy", 2, newCondition, {newTpTriggerPxType: "index"}) Log("Modified Condition Order ID:", newId) Sleep(2000) // 查询修改后的条件单信息 var newOrder = exchange.GetConditionOrder(newId) Log("Modified Condition Order Info:", newOrder) // 撤销条件单 exchange.CancelConditionOrder(newId) }
    python
    def main(): # 创建止盈条件单 condition = { "ConditionType": ORDER_CONDITION_TYPE_TP, "TpTriggerPrice": 77, "TpOrderPrice": 76 } id = exchange.CreateConditionOrder("SOL_USDT.swap", "buy", 1, condition) Log("Original Condition Order ID:", id) Sleep(2000) # 修改条件单,并将触发价格类型设为指数价格(index):交易所特有参数通过最后一个对象参数传入 newCondition = { "ConditionType": ORDER_CONDITION_TYPE_TP, "TpTriggerPrice": 75, "TpOrderPrice": 71 } newId = exchange.ModifyConditionOrder(id, "buy", 2, newCondition, {"newTpTriggerPxType": "index"}) Log("Modified Condition Order ID:", newId) Sleep(2000) # 查询修改后的条件单信息 newOrder = exchange.GetConditionOrder(newId) Log("Modified Condition Order Info:", newOrder) # 撤销条件单 exchange.CancelConditionOrder(newId)
    rust
    fn main() { // 创建止盈条件单 let condition = OrderCondition { ConditionType: ORDER_CONDITION_TYPE_TP, TpTriggerPrice: 77.0, TpOrderPrice: 76.0, ..Default::default() }; let id = exchange.CreateConditionOrder("SOL_USDT.swap", "buy", 1, &condition).unwrap(); Log!("Original Condition Order ID:", id); Sleep(2000); // 修改条件单,并将触发价格类型设为指数价格(index):Rust 需使用带 WithOptions 后缀的函数传入对象参数 let opts = JSONParse(r#"{"newTpTriggerPxType": "index"}"#).unwrap(); let newCondition = OrderCondition { ConditionType: ORDER_CONDITION_TYPE_TP, TpTriggerPrice: 75.0, TpOrderPrice: 71.0, ..Default::default() }; let newId = exchange.ModifyConditionOrderWithOptions(&id, "buy", 2, &newCondition, &opts).unwrap(); Log!("Modified Condition Order ID:", newId); Sleep(2000); // 查询修改后的条件单信息 let newOrder = exchange.GetConditionOrder(&newId); Log!("Modified Condition Order Info:", newOrder); // 撤销条件单 let _ = exchange.CancelConditionOrder(&newId); }

返回值

类型描述

string / 空值

修改成功时返回条件单Id,修改失败时返回空值。返回的条件单ID可能与原条件单ID相同,也可能不同,具体取决于交易所API的实现方式:部分交易所修改条件单后会返回新的条件单ID,另一些交易所则保持条件单ID不变。

参数

名称类型必填描述

orderId

string

是

待修改的原条件单ID。其格式与exchange.CreateConditionOrder函数返回的条件单ID相同,由交易所品种代码和交易所原始条件单Id组成,二者以英文逗号分隔。例如:"SOL-USDT-SWAP,3196255845130256384"。

side

string

是

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

amount

number

是

条件单的新下单量,必须大于0。传入-1等无效值时会报错并返回空值。对于期货交易所对象,下单量参数amount的单位均为合约张数。

condition

object

是

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

options

object

否

交易所特定参数,对象中的键值会原样传递给交易所,例如{"newTpTriggerPxType":"index"};其中的extra子对象会先被展开。Rust语言需使用exchange.ModifyConditionOrderWithOptions()传入。

参考

备注

exchange.ModifyConditionOrder()函数返回的条件单ID可能因各交易所API的实现不同而有所差异:部分交易所API会返回更新后的条件单ID,部分则保持不变。建议使用返回的新条件单ID进行后续操作。

exchange.ModifyConditionOrder()函数会先校验参数:数量必须大于0,所选条件类型所需的触发价格和执行价格不能为0。校验不通过时会报错并返回空值,不会提交到交易所。

交易所特定参数(option)通过最后一个对象参数传入,用于修改条件单的其他属性,例如修改触发价格类型:exchange.ModifyConditionOrder(id, "buy", 2, condition, {newTpTriggerPxType: "index"})。Rust使用exchange.ModifyConditionOrderWithOptions()。

condition参数中的TpOrderPrice或SlOrderPrice设为-1表示触发后以市价执行。能否通过修改在限价与市价之间切换取决于交易所:部分交易所(例如Lighter)不允许更改限价/市价类型,对限价条件单传入-1或对市价条件单传入正数执行价格都会报错,此时需要撤销后重新创建,详见各交易所页面。

修改条件单时,条件单的其他属性(如条件类型、持仓模式、账户模式、杠杆等)通常沿用原条件单的设置。如需修改这些属性,可通过附加参数(option)传入,前提是交易所API支持。

可以通过附加参数修改触发价格类型,例如将触发价格类型从最新价(last)改为指数价格(index)或标记价格(mark)。具体参数名称及支持情况以交易所API文档为准。

并非所有交易所都支持修改条件单:在不支持的交易所上调用会报错并返回空值,需先撤销原条件单再重新创建;支持修改的交易所也可能仅支持修改部分参数(例如仅支持某类合约或某种账户模式)。不支持的交易所见本页的「不支持的交易所」名单,各交易所的支持情况对照见能力矩阵,具体限制见各交易所页面。

也可以将参数附加在side参数之后(旧写法):写作"side;{JSON对象}"或"side;key=value&key=value",例如"buy;{\"newTpTriggerPxType\":\"index\"}"或"buy;newTpTriggerPxType=index"。具体支持的参数取决于交易所API。

condition的ConditionType可取ORDER_CONDITION_TYPE中的OCO、TP、SL;ORDER_CONDITION_TYPE_GENERIC仅出现在查询结果中(如追踪止损等交易所特有的条件单),创建或修改条件单时不可使用,传入会报错并返回空值。所选类型所需的触发价格和执行价格都必须传入且不能为0(OCO需要全部四项,TP需要止盈的两项,SL需要止损的两项),否则会报错并返回空值;执行价格为-1表示触发后以市价单执行。

仅以下交易所支持:Binance、Bitfinex、Futures_Bitfinex、Bitget、Futures_Bitget、Bybit、Futures_Bybit、Crypto、Futures_Crypto、DeepCoin、Futures_DeepCoin、Futures_Deribit、Futures_GateIO、HitBTC、Kraken、Futures_Kraken、OKEX、Futures_OKCoin、Futures_WEEX、WOO、Futures_WOO、Futures_Hyperliquid、Futures_Lighter、Futures_Aevo、Futures_WOOFi。其余交易所调用时报错并返回空值,所有交易所的对照见能力矩阵。