Python使用CCXT在Phemex下保证金限价单时如何添加止盈止损
修正方案与代码实现
核心问题说明
Phemex UI中绑定在主订单上的止盈止损属于减仓型附加条件单,你原有写法存在两个核心错误:
- 交易所实例初始化拼写错误:
ccxt.phmex应为ccxt.phemex - 直接修改主订单
type为stopLimit创建的是独立条件触发单,不是绑定主订单的止盈止损,且缺少reduceOnly参数保证仅减仓,和UI操作效果不一致。
完整可运行修改代码
import ccxt # 初始化交易所实例 phemex = ccxt.phemex({ 'apiKey': '你的API Key', 'secret': '你的API Secret', 'enableRateLimit': True, # 必须开启,避免触发交易所限流规则 'options': { 'defaultType': 'margin' } }) # 加载交易对规则,避免精度错误 phemex.load_markets() # 订单基础参数配置 symbol = 'BTC/USDT' # 替换为实际交易对 entry_price = 30000 # 开仓限价单价格 amount = 0.001 # 开仓数量 side = 'buy' add_sl = True add_tp = True # 止损参数:下跌10%触发,比触发价低0.5%挂限价单保证成交 sl_trigger = entry_price * 0.9 sl_order_price = sl_trigger * 0.995 # 止盈参数:上涨10%触发,比触发价高0.5%挂限价单保证成交 tp_trigger = entry_price * 1.1 tp_order_price = tp_trigger * 1.005 # 提交主保证金限价单,同时绑定止盈止损(CCXT >= 2.4.0 版本支持该写法) params = { 'marginMode': 'cross', # 逐仓保证金改为 'isolated' } if add_sl: params['stopLoss'] = { 'triggerPrice': sl_trigger, 'price': sl_order_price # 若要市价止损,删除该行即可 } if add_tp: params['takeProfit'] = { 'triggerPrice': tp_trigger, 'price': tp_order_price # 若要市价止盈,删除该行即可 } main_order = phemex.create_order( symbol=symbol, type='limit', side=side, amount=amount, price=entry_price, params=params )
低版本CCXT兼容写法
如果你的CCXT版本不支持创建主订单时直接传止盈止损参数,可在主订单创建完成后单独提交减仓条件单,效果完全一致:
# 单独创建止损单示例 if add_sl: sl_order = phemex.create_order( symbol=symbol, type='limit', # 市价止损改为 'market' side='sell' if side == 'buy' else 'buy', # 方向与主订单相反 amount=amount, price=sl_order_price if type == 'limit' else None, params={ 'type': 'stopLimit', # 市价止损改为 'stopMarket' 'stopPrice': sl_trigger, 'marginMode': 'cross', 'reduceOnly': True, # 必须开启,保证仅减仓不会开新仓 } )
注意事项
- 所有止盈止损单必须添加
reduceOnly: True参数,和UI操作逻辑保持一致,避免行情波动时意外开新仓。 - 价格参数需要符合交易对精度要求,可使用
phemex.price_to_precision(symbol, price)自动处理精度。 - 调试时可开启
phemex.verbose = True查看具体请求和返回内容,快速定位参数错误。
内容的提问来源于stack exchange,提问作者Tristan Neate
相关产品推荐
相关产品推荐

