exchange.ModifyConditionOrder
修改现有条件单,可修改条件单的下单量、触发条件和执行价格。还可以通过附加参数修改条件单的其他属性(取决于交易所API是否支持)。
exchange.ModifyConditionOrder(orderId, side, amount, condition)
exchange.ModifyConditionOrder(orderId, side, amount, condition, options)示例
-
修改条件单的数量和触发条件。
javascriptfunction 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) }pythondef 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)rustfn 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)修改条件单的触发价格类型。
javascriptfunction 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) }pythondef 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)rustfn 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。其格式与 |
side | string | 是 | 交易方向:现货为 |
amount | number | 是 | 条件单的新下单量,必须大于0。传入-1等无效值时会报错并返回空值。对于期货交易所对象,下单量参数 |
condition | object | 是 | 条件单新的触发条件和执行价格,结构详见 |
options | object | 否 | 交易所特定参数,对象中的键值会原样传递给交易所,例如 |
参考
Condition exchange.CreateConditionOrder exchange.CancelConditionOrder exchange.GetConditionOrder exchange.GetConditionOrders
备注
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。其余交易所调用时报错并返回空值,所有交易所的对照见能力矩阵。