想让 Freqtrade 机器人在 OKX 期货 正常跑步,却卡在「无法设置杠杆」的报错上?本指南将以 Raspberry Pi + Freqtrade 的真实案例手把手拆解原因、给出代码级修复方案,并教你避免未来的同类坑。
一、问题现象:日志中的四个关键提示
当你运行 freqtrade trade --strategy YourStrategy -v
时,日志反复出现如下提示:
Could not set leverage due to BadRequest. Message: okx setLeverage() requires the posSide argument to be either "long" or "short"
随后机器人直接放弃建仓,导致 OKX API 没有接收到任何委托指令。该错误与实例 CCXT、OKX exchange API、以及 Freqtrade 配置 三方缺一不可。
📋 你可能同时看到的症状
- 保证金模式已选 isolated margin
- trading\_mode 已设为 futures
- 账户资金充足,但策略迟迟不成交
- 每次重启交易仍会重试 5 次后失败
二、根本原因:OKX 必需却缺失的 posSide 字段
OKX API v5 在调用 POST /api/v5/account/set-leverage
时必须携带 posSide=long|short
参数,否则直接返回 400 BadRequest。
Freqtrade 2.7.45 默认没有自带该字段的传递逻辑,于是 CCXT 自动拦截并抛出异常。
三、动手解决:四步搞定 OKX 杠杆同步
1. 升级 CCXT & Freqtrade
- 确保使用 CCXT ≥ 3.0.92,该版本开始为 OKX 自动补传
posSide
- Freqtrade 主分支已合并补丁,可在 release 2023.3.dev-bf30ef6 后获取
# 树莓派直接 pip 升级
pip install -U ccxt>=3.0.92
git fetch origin
git checkout develop
pip install -e .
升级后无需任何配置即可让 posSide
自动跟随多头/空头方向。
👉 不想改代码?教你怎么一键修复全部报错
2. 配置文件快捷修复(原生用户)
如坚持使用 CCXT 2.x 或无法升级,则在 exchange
区块加入 ccxt_config
:
{
"exchange": {
"name": "okx",
"ccxt_config": {
"options": {
"defaultType": "swap",
"posSide": "long"
}
}
}
}
defaultType
确保进入永续合约posSide
临时写死为long
,策略脚本能动态覆盖
3. 修改策略体(临时兜底)
在自定义策略内,预先通过交易所对象设置杠杆,可以绕过 Freqtrade 的默认封装:
# inside your strategy's populate_entry_trend() or bot_start
exchange = self.dp.exchange._api
symbol = pair.replace('/', '') + '-SWAP'
exchange.set_leverage(leverage=3, symbol=symbol, params={'posSide': 'long'})
注意:此办法会与 Freqtrade 自身的杠杆逻辑发生冲突,仅推荐高阶玩家。
4. 验证:如何在 2 分钟内确认修复
- 重新启动交易:
freqtrade trade --strategy YourStrategy --logfile log.txt
- 实时追踪日志:
tail -f log.txt | grep -i leverage
- 不出现 BadRequest 即成功
- 登录 OKX 确认「仓位」列表已自动建立多头合约
四、常见坑点与大文件链接备忘
坑点 | 解决 |
---|---|
OKX 新旧合约符号差异 | 必须用 -SWAP 或 :USDT 后缀 |
子账户未开期货权限 | 在 OKX 主页「账户 > 交易权限」中开启 |
API Key 仅有读取 | 需要「交易」与「持仓」权限 |
风控导致杠杆超限 | 检查资金大额单最大倍数限制 |
FAQ:高频疑问一次说清
Q1 报错说“symbol not supported”怎么办?
A:检查 pair_whitelist
里是否写成旧格式 ETH/USD:USD
,改为 ETH/USDT:USDT
即可。
Q2 升级后仍报 BadRequest?
A:首先确认 OKX 账户确实为 USDT 本位永续合约,若为「币本位反向合约」则应把 defaultType
改为 future
并同步调整 posSide
。
Q3 想测不同杠杆怎么办?
A:利用策略里 leverage.value
动态传入,而非硬编码 3 倍。只要机器人检测到 leverage
变更,会在下单前自动重设。
Q4 如何在 FreqtradeUI 里查看杠杆?
A:打开「档案 > 交易列表」,每一单右侧字段 Leverage
即为实时倍数;若显示 —
就意味未成功设置。
Q5 OKX 仓位模式切换为双向持仓?
A:登录网页端「设置 > 仓位模式」,务必选择「单向持仓」,否则 API 会出现 posSide=net 不支持的报错。
五、进阶:让机器人更安全跑 OKX 杠杆
- 风险策略:使用
@informative
装饰器读取 Funding Rate,动态降低高费率外晚度合约杠杆。 - 订单保护:设置
stop_loss_price=0.98*current_price
,防止极端行情爆仓。 - 缓存机制:为 HTTP 403 频率限制创建指数退避重试,避免 OKX 暴力限速。
如想一步到位收集所有调试脚本与常见模板,立即查看👉 OKX 官方 API 调试实验室 快速复刻本文案例。
结语
只要正确携带 posSide 字段,OKX 机器人将不再停跑。升级 CCXT & Freqtrade,或手动加入 ccxt\_config,均可 100% 解决「无法创建交易」的烦恼。祝你的策略稳坐收益!