You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CCXT修改限价挂单止盈止损时出现float对象无upper属性错误

问题分析与解决

错误原因

你调用exchange.edit_order时参数顺序完全错误,导致函数把浮点数类型的amount当成了订单类型参数传入。ccxt的edit_order方法内部会对订单类型字符串调用.upper()方法,但你传入的是浮点数,自然触发AttributeError: 'float' 对象没有属性 'upper'。

修正步骤

1. 明确ccxt edit_order的正确参数顺序

ccxt标准的edit_order参数顺序为:

exchange.edit_order(
    order_id,    # 订单ID
    symbol,      # 交易对
    type,        # 订单类型(如'limit')
    side,        # 买卖方向(如'sell')
    amount,      # 订单数量
    price,       # 订单价格
    params={}    # 额外参数(如止盈止损)
)

你之前把amount放在了type的位置,完全打乱了参数顺序。

2. 修正代码(含订单信息获取的优化)

原代码中获取订单ID和数量的循环会覆盖变量,最后只保留最后一个订单的信息,这里优化为取第一个挂单(多订单场景需额外判断),同时修正edit_order的参数顺序:

#-----------------------Get Target Order Info-------------------------
orders = exchange.fetchOpenOrders('LINKUSDT')
# 取第一个挂单,若有多个订单需添加筛选逻辑
if orders:
    target_order = orders[0]
    orderId = target_order['id']
    qty = float(target_order['amount'])
    print(f"待修改订单ID: {orderId}, 数量: {qty}")
else:
    print("未找到任何挂单")
    exit()
#------------------------------------------------------------
symbol = 'LINKUSDT'
order_type = 'limit'
side = 'sell'
amount = qty
price = 15.000  # 注意:部分交易所要求修改订单时价格需与原订单一致,需参考交易所规则
stop_loss = 15.100
take_profit = 14.920

# 按正确参数顺序调用edit_order
exchange.edit_order(
    orderId,
    symbol,
    order_type,
    side,
    amount,
    price,
    {'stopLossPrice': stop_loss, 'takeProfitPrice': take_profit}
)

3. 额外注意事项

  • 部分交易所不支持通过edit_order修改止盈止损,如果修正后仍报错,需确认对应交易所API是否支持该操作,或改用单独的止盈止损订单创建接口。
  • 修改订单时,价格price的规则因交易所而异,部分平台要求必须与原订单价格一致,需提前查阅交易所文档。

内容的提问来源于stack exchange,提问作者Altn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 09:23:10