You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用CCXT在OKX模拟交易模式下创建带止盈止损的SWAP订单时遭遇账户模式不支持错误的解决方案及示例请求

解决OKX模拟交易下创建带止损止盈永续合约订单的账户模式错误

首先,这个报错的核心原因是你的OKX模拟账户当前使用的是「经典账户模式」,而带止损止盈的组合永续合约下单接口仅支持「统一账户模式」。OKX的经典账户模式和统一账户模式对API接口的支持范围不同,同时挂止损止盈的组合订单属于统一账户模式专属功能。

步骤1:切换OKX模拟账户到统一账户模式

你需要先手动登录OKX模拟交易平台,完成以下操作:

  • 进入「账户中心」→「账户设置」
  • 找到「账户模式」选项,切换为「统一账户模式」
  • 注意:切换前请确保模拟账户内没有未平仓的持仓或挂单(模拟账户可以直接平掉所有持仓,避免切换失败)

步骤2:修正CCXT下单代码参数

除了账户模式,你的代码还有几个需要调整的细节,下面是修正后的完整可运行示例:

import ccxt

# 初始化OKX交易所(启用模拟交易)
exchange = ccxt.okx({
    'apiKey': 'YOUR_API_KEY',
    'secret': 'YOUR_SECRET',
    'password': 'YOUR_PASSPHRASE',
    'enableRateLimit': True,
    'options': {
        'defaultType': 'swap',  # 默认交易类型设为永续合约
        'x-simulated-trading': '1'  # 直接在这里开启模拟交易,无需单独加headers
    }
})

# 订单核心参数
symbol = 'XRP/USDT:USDT'
order_type = 'market'
side = 'buy'
amount = 10  # 要购买的XRP数量
take_profit_trigger = 0.6  # 止盈触发价
stop_loss_trigger = 0.5  # 止损触发价

# 附加参数(止损止盈配置)
params = {
    'tdMode': 'isolated',  # 统一账户下支持逐仓/全仓,这里选逐仓
    'tpTriggerPx': take_profit_trigger,
    'slTriggerPx': stop_loss_trigger,
    'tpOrdPx': '-1',  # 止盈触发后执行市价单,填具体价格则为限价止盈
    'slOrdPx': '-1',  # 止损触发后执行市价单,填具体价格则为限价止损
}

# 创建订单并捕获异常
try:
    # 市价单不需要指定price,传None即可
    order = exchange.create_order(symbol, order_type, side, amount, None, params=params)
    print("订单创建成功:", order)
except Exception as e:
    print("订单创建失败:", str(e))

关键参数说明

  • options['defaultType'] = 'swap':告诉CCXT默认操作永续合约,避免每次都手动指定合约后缀
  • x-simulated-trading': '1':在初始化时直接启用模拟交易,比在params里单独加headers更符合CCXT的规范
  • tpOrdPx/slOrdPx设为'-1':触发止损/止盈后以市价成交;如果想做限价止盈止损,直接填入目标价格即可
  • tdMode:统一账户模式下支持isolated(逐仓)和cross(全仓)两种保证金模式,按需选择

额外注意事项

  • 确保你的API密钥已经开启了「永续合约交易」权限(在OKX的API设置页面勾选对应权限)
  • 模拟交易的API密钥和实盘是完全独立的,不要混用
  • 如果切换账户模式后仍报错,可以先调用exchange.fetch_balance()确认账户模式是否切换成功,或者检查API权限配置

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

火山引擎 最新活动