# OKX 条件单API详解 ## Trigger订单(做T用) ### 基本用法 ```python okx_post('/api/v5/trade/order-algo', { "instId": "ETH-USDT-SWAP", "tdMode": "cross", "side": "buy", # buy=买入, sell=卖出 "ordType": "trigger", # 用trigger不是conditional "sz": "4", # 数量 "triggerPx": "1770", # 触发价 "triggerPxType": "last", # last=最新价, index=指数, mark=标记 "orderPx": "-1" # -1=市价单, 或指定限价 }) ``` ### 关键Pitfalls 1. **参数名是`orderPx`不是`ordPx`** - ❌ `"ordPx": "-1"` → 报错`50014: Parameter orderPx can not be empty` - ✅ `"orderPx": "-1"` 2. **`reduceOnly`不支持trigger订单** - ❌ 加`"reduceOnly": "true"` → 报错`51205: Reduce Only is not available` - ✅ 不传reduceOnly,直接sell即可 3. **`conditional`订单的限制** - `conditional`的SL触发价不能低于当前价(用于止损) - `conditional`的TP触发价不能高于当前价(用于止盈) - 做T低吸(价格下跌触发买入)必须用`trigger`类型 4. **Trigger vs Conditional vs OCO** | 类型 | 用途 | 触发方向 | |------|------|----------| | trigger | 价格到任意方向触发 | 任意 | | conditional | 止损/止盈 | SL不能低于现价, TP不能高于现价 | | oco | 同时设TP+SL | 双腿 | 5. **触发后自动市价成交** - 不是纯提醒,会自动下单 - 如果只想提醒不想下单,需要自己写监控脚本 ### 查询pending条件单 ```python # 查trigger类型的pending订单 resp = okx_get('/api/v5/trade/orders-algo-pending', 'ordType=trigger') for order in resp.get('data', []): print(f"algoId={order['algoId']} triggerPx={order['triggerPx']} side={order['side']} sz={order['sz']}") ``` ### 取消条件单 ```python okx_post('/api/v5/trade/cancel-algos', [{ "algoId": "3718137391157260288", "instId": "ETH-USDT-SWAP" }]) ``` ## 实战案例 ### ETH做T条件单设置 ```python # 低吸1: 价格跌到$1770时买入4张 okx_post('/api/v5/trade/order-algo', { "instId": "ETH-USDT-SWAP", "tdMode": "cross", "side": "buy", "ordType": "trigger", "sz": "4", "triggerPx": "1770", "triggerPxType": "last", "orderPx": "-1" }) # 返回: {"code":"0","data":[{"algoId":"3718137391157260288"}]} # 低吸2: 价格跌到$1764时买入4张 okx_post('/api/v5/trade/order-algo', { "instId": "ETH-USDT-SWAP", "tdMode": "cross", "side": "buy", "ordType": "trigger", "sz": "4", "triggerPx": "1764", "triggerPxType": "last", "orderPx": "-1" }) # 返回: {"code":"0","data":[{"algoId":"3718137438267682816"}]} # 高抛: 价格涨到$1787时卖出4张 okx_post('/api/v5/trade/order-algo', { "instId": "ETH-USDT-SWAP", "tdMode": "cross", "side": "sell", "ordType": "trigger", "sz": "4", "triggerPx": "1787", "triggerPxType": "last", "orderPx": "-1" }) # 返回: {"code":"0","data":[{"algoId":"3718137842229489664"}]} ``` ### 错误排查 | 错误码 | 含义 | 解决 | |--------|------|------| | 50014 | orderPx为空 | 用`orderPx`不是`ordPx` | | 51205 | reduceOnly不支持 | 去掉reduceOnly参数 | | 51278 | SL触发价低于现价 | 用trigger类型代替conditional | | 51280 | SL触发价必须低于现价 | 用trigger类型代替conditional |