我正在尝试在 okex 交易所版本 5 上使用 ccxt 创建永久限价订单。 API 已成功在现货交易所下订单(限价订单和市价订单),但在永续交易所上失败。 这就是我正在尝试的-
exchange_swap = ccxt.okex5({
'apiKey': credentials['okex']['apikey'],
'secret': credentials['okex']['secretkey'],
'password': credentials['okex']['password'],
'options': {
'defaultType': 'swap',
}
})
params = {
"test":True
}
order = exchange_swap.createLimitBuyOrder('XRP-USDT-SWAP',100,0.7)
错误信息-
ccxt.base.errors.BadRequest: okex5 {"code":"1","data":[{"clOrdId":"","ordId":"","sCode":"51000","sMsg":"Parameter posSide error ","tag":""}],"msg":""}
搜索此错误后,我在他们的文档中发现了这一点 -
Error message Http status code Error code
Parameter {0} error. 400 51000
文档链接 - Okex v5
P.S - 我可以通过 okex 上的交易仪表板放置此内容,但不能通过 API。我有足够的余额来创建此订单。
整个错误信息是这样的-
Traceback (most recent call last):
File "C:\Users\ishaa\Desktop\trading\Crypto Vibhor\Testing Files\ccxt_test.py", line 70, in
<module>
order = exchange_swap.createLimitBuyOrder('XRP-USDT-SWAP',100,0.7)
File "C:\Users\ishaa\Desktop\trading\tradingenv\lib\site-packages\ccxt\base\exchange.py", line 1983, in create_limit_buy_order
return self.create_order(symbol, 'limit', 'buy', amount, price, params)
File "C:\Users\ishaa\Desktop\trading\tradingenv\lib\site-packages\ccxt\okex5.py", line 1287, in create_order
response = self.privatePostTradeOrder(self.extend(request, params))
File "C:\Users\ishaa\Desktop\trading\tradingenv\lib\site-packages\ccxt\base\exchange.py", line 461, in inner
return entry(_self, **inner_kwargs)
File "C:\Users\ishaa\Desktop\trading\tradingenv\lib\site-packages\ccxt\base\exchange.py", line
486, in request
return self.fetch2(path, api, method, params, headers, body)
File "C:\Users\ishaa\Desktop\trading\tradingenv\lib\site-packages\ccxt\base\exchange.py", line 482, in fetch2
return self.fetch(request['url'], request['method'], request['headers'], request['body'])
File "C:\Users\ishaa\Desktop\trading\tradingenv\lib\site-packages\ccxt\base\exchange.py", line 634, in fetch
self.handle_errors(http_status_code, http_status_text, url, method, headers, http_response, json_response, request_headers, request_body)
File "C:\Users\ishaa\Desktop\trading\tradingenv\lib\site-packages\ccxt\okex5.py", line 2230, in handle_errors
self.throw_exactly_matched_exception(self.exceptions['exact'], errorCode, feedback)
File "C:\Users\ishaa\Desktop\trading\tradingenv\lib\site-packages\ccxt\base\exchange.py", line 500, in throw_exactly_matched_exception
raise exact[string](message)
ccxt.base.errors.BadRequest: okex5 {"code":"1","data":
[{"clOrdId":"","ordId":"","sCode":"51000","sMsg":"Parameter posSide error
","tag":""}],"msg":""}
如果您的 OKX 账户设置中的
Order Placement Mode
错误,则可能会发生这种情况。
进入您的 OKX 账户 > 交易 > 永续合约 > 设置 > 下单模式,将其设置为Long/Short mode
。
错误消息显示
Parameter posSide error
,这意味着您在请求中发送的 posSide
参数有错误。
据我从您的代码中看到,您只提供了股票代码、尺寸和价格,但缺少
posSide
参数。
与其他交易所相反,在Okex上您可以对
buy
和sell
产品进行long
或short
a FUTURES
或SWAP
,因此您需要添加posSide
参数。
这是违反直觉的,我也花了一些时间才弄清楚。实际上,您可以同时
buy
a long
和 buy
a short
。您可以在 Okex gui 中尝试一下,看看它到底是如何工作的。
文档告诉我们
posSide
参数是:
另一个选项是禁用
long/short
模式(默认设置)并使用 net
模式。使用 net
模式意味着您不需要将 posSide
参数添加到请求字符串中。
这里是文档的链接,解释如何设置位置模式。
这是一个工作示例,其中包括限价订单的两个必需参数,即设置
tdMode
和 posSide
:
import ccxt
exchange = ccxt.okex5({
'apiKey': '...',
'secret': '...',
'password': '...',
})
exchange.createLimitBuyOrder('XRP-USDT-SWAP', 100, 0.4,
{"tdMode": "cross", "posSide": "long"})
您可以在 ccxt 文档此处中阅读有关设置自定义订单参数的更多信息。
对于 2024 年面临类似问题的任何人,它被称为
Position Mode
,其值应该是 Perp 设置中的 One-way mode
,如 @x-6-2-5 的 答案中指出的那样。
使用 OKX Crypto 的 ATAS 平台时也会出现同样的错误。