Кратко — Bybit не даёт «встроенного» одного специального механизма “несколько тейков в одной позиции”. Обычно на практике делают так: делят объём позиции на несколько частей и ставят несколько reduce‑only ордеров (limit или условных limit — conditional orders) на закрытие части позиции по разным ценам. Важно правильно выставить флаги reduce_only / close_on_trigger, side/position_idx (в hedge‑режиме) и trigger_by (LastPrice/MarkPrice). Ниже — пошагово и с примерами.
Что нужно сделать (алгоритм)
1. Узнать точный размер открытой позиции (кол‑во контрактов/лотов).
2. Решить, на сколько частей делите позицию (например 30% / 30% / 40%).
3. Для каждой части создать ордер на закрытие:
- тип: limit (если хотите точно по цене) или conditional (если хотите триггер + лимит).
- флаг reduce_only = true (чтобы ордера только уменьшали позицию, а не открывали противоположную).
- если используете hedge mode — указать correct position_idx (0/1) или side, как требует API.
- trigger_by: LastPrice / MarkPrice в зависимости от того, по чему хотите триггер.
4. Отслеживать исполнение через WebSocket / REST (order fills). При полном закрытии позиции — отменять оставшиеся ордера, если нужно.
5. Для стопа обычно делаете один conditional stop (market/limit) с reduce_only = true.
Важные нюансы
- reduce_only обязателен, иначе лимит‑ордера могут открыть противоположную позицию.
- В hedge mode каждый ордер должен иметь позиционный индекс/правильную сторону — иначе ордера пойдут в «другую» сторону.
- Сумма qty всех TP ордеров должна равняться (или быть меньше/равной) объёму позиции.
- Если используете conditional orders (триггер), укажите trigger_price и order_price отдельно.
- В Bybit есть ограничения по кол‑ву активных ордеров — проверьте лимиты.
- Следите за частичными исполнениями: если TP1 частично исполнился, остальная часть позиции всё ещё «закрывается» следующими ордерами.
Пример (Python + ccxt) — концепт
(этот код иллюстративный; нужно подставить ключи, symbol, расчёт qty и настроить params для вашей биржи)
import ccxt
exchange = ccxt.bybit({
'apiKey': 'KEY',
'secret': 'SECRET',
})
symbol = 'BTC/USDT'
position_qty = 1.0 # пример: 1 контракт/лот — получите реальный через позицию
parts = [0.3, 0.3, 0.4] # доли позиции для 3 тейков
tp_prices = [50000, 51000, 52000]
for part, price in zip(parts, tp_prices):
qty = position_qty * part
params = {
'reduce_only': True,
# возможно потребуется: 'close_on_trigger': True,
# 'position_idx': 0, # если используете hedge mode
# 'trigger_by': 'LastPrice' # для conditional orders
}
# создаём limit ордер reduce-only
order = exchange.create_order(symbol, 'limit', 'sell', qty, price, params)
print('TP order created', order)
Если нужны conditional (trigger) ордера, у ccxt/Bybit обычно нужно передать triggerPrice + orderPrice (или соответствующие параметры), например params = {'triggerPrice': 49950, 'orderPrice': 50000, 'reduce_only': True} — сверяйтесь с вашей версией ccxt/документацией Bybit.
Пример на уровне REST (псевдопараметры)
POST /private/linear/order/create
{
"symbol": "BTCUSDT",
"side": "Sell",
"order_type": "Limit",
"qty": 0.3,
"price": 50000,
"time_in_force": "PostOnly",
"reduce_only": true,
"close_on_trigger": true,
"position_idx": 0 // при hedge
}
Отслеживание и отмена
- Подпишитесь на WebSocket trade/order updates, чтобы знать, когда ордер исполнился.
- Если позиция полностью закрыта — отправьте запрос на Cancel для оставшихся TP ордеров (иначе они могут открыть новую позицию).
- Обрабатывайте частичные исполнения: корректируйте qty оставшихся ордеров при необходимости.
Если у вас не получается — вероятные причины
- Не выставлен reduce_only (ордера увеличивают позицию).
- Неправильный side / position_idx (в hedge режиме).
- Сумма TP ордеров > позиции.
- Неправильный trigger_by — вы используете mark price, а смотрите last price.
- Ошибка в формировании запросов к API (параметры отличаются в разных версиях Bybit API).
Могу помочь более конкретно
Если хотите — пришлите:
- фрагмент кода, где вы создаёте TP‑ордера,
- режим (USDT perpetual / inverse / USDC; hedge или one‑way),
- используемую библиотеку (ccxt, bybit‑py, raw REST) и версию API,
и я подскажу точные параметры и поправки.