如何向币安发送 OCO 订单

Posted

技术标签:

【中文标题】如何向币安发送 OCO 订单【英文标题】:How to send OCO order to binance 【发布时间】:2021-04-09 13:26:49 【问题描述】:

我想请你帮忙。我正在尝试将 python 代码从通过 api 发送限价/市价单到 OCO 订单更改为 binance。我可以做限价单、市价单、止损限价单。我不知道如何下 OCO 订单...

当我使用限价单时,我发送 order_type=ORDER_TYPE_LIMIT 然后我使用 order = client.create_order() 并且它正在工作。当我想发送市价单时,我使用了 order_type=ORDER_TYPE_MARKET 但是当我想发出 OCO 订单时,我发现唯一可行的选项是: order = client.create_oco_order() 没有 order_type 但在这里我收到错误 1013 此交易品种不支持止损...

我检查了https://api.binance.com/api/v1/exchangeInfo

还有这个 "orderTypes":["LIMIT","LIMIT_MAKER","MARKET","STOP_LOSS_LIMIT","TAKE_PROFIT_LIMIT"],"icebergAllowed":true,"ocoAllowed":true,

所以我不能使用 order_type。没有 ORDER_TYPE_OCO 并且 ocoAllowed 是真的,所以我应该能够发送 oco 订单。但我收到“错误 1013:此交易品种不支持止损订单。订单失败”。

我想要的是将“价格”设置为限价卖单,以便在价格到达那里时获利更高,并在价格下跌时将止损“stopPrice”设置得更低……立即。这就是 OCO 的工作方式。

有人可以给我一个建议吗?我不是 python 大师我只是更改我发现的一个代码,我的理解是如果允许 oco 也应该允许止损。谢谢

【问题讨论】:

我终于在github上找到了答案。要下 oco 订单,还需要其他参数。要创建 OCO 订单,需要以下参数: 交易品种数量侧价格 stopPrice stopLimitPrice stopLimitTimeInForce。我添加了 stopLimitPrice 和 stopLimitTimeInForce,它现在正在工作。 OCO 订单需要 3 个不同的价格,我只有 2 个。github.com/ccxt/ccxt/issues/5966 【参考方案1】:

为了让所有有兴趣的人都能对这个问题的解决方案有一个准确的答案,我将代码包含在 cmets 中。

我将在 BTCUSDT 中以 OCO 卖单为例。

假设我有 1 个比特币。当前价格是 30157.85,我想在 32000.07 卖出 1 BTC 高得多

但是价格没有上涨并开始下跌,所以我将 stopPrice 设置在 29283.03,限价卖单将以 29000.00 的价格开仓

这意味着我将以 32000.07 或 29000.00 USDT 的价格卖出。顺序写如下:

order= client.order_oco_sell(
    symbol= 'BTCUSDT',                                            
    quantity= 1.00000,                                            
    price= '32000.07',                                            
    stopPrice= '29283.03',                                            
    stopLimitPrice= '29000.00',                                            
    stopLimitTimeInForce= 'FOK')

请注意,OCO 订单需要 stopLimitTimeInForce 参数。我使用了值“FOK”,但我在这里留下了您可以使用的不同值的描述:https://help.bybit.com/hc/en-us/articles/360039749233-What-are-time-in-force-TIF-GTC-IOC-FOK-

请注意 price、stopPrice、stopLimitPrice 和 stopLimitTimeInForce 参数是字符串,而不是浮点数或小数。

【讨论】:

问题是针对币安的,但是这个答案引用了 ByBit 文档,它是否也适用于币安? 是的@Jason。这是我自己用于 Binance 的程序。我不在Bybit交易。 stopLimitTimeInForce 值指的是在任何平台上都有效的概念。 OCO订单的问题是有限价单而不是市价单,我停止使用它,因为它只是跳过了我的限价单并且价格下跌了......不保证限价单将被填充,因此在没有市场卖单的情况下对我很有用,如果价格下跌,机器人总是会跳过您的限价卖单...... @Garik,Binance 似乎刚刚更新了他们关于 OCO 的文档:academy.binance.com/en/articles/what-is-an-oco-order 参考“注意OCO订单需要stopLimitTimeInForce参数”。这是因为包装器的文档说:“stopLimitPrice (str) – 如果提供,则需要 stopLimitTimeInForce。”我更希望 Binance 允许跳过这个 stopLimitPrice,并且只有卖出限价,但由于某些原因,OCO 不能在没有止损限制的情况下工作。来源:python-binance.readthedocs.io/en/latest/…

以上是关于如何向币安发送 OCO 订单的主要内容,如果未能解决你的问题,请参考以下文章

如何验证对 Binance API 的 cURL 请求?

如何使用杠杆下达和关闭币安期货订单

BSC/币安链批量转账,批量发送,币安链增加地址合约代码

如何使用 Python 与币安智能链合约进行交互

网站支付标准:如何连接发送的订单和接收订单的 IPN?

如何选择在发送的订单中两个用户之间发送的所有邮件?