Как торговать деривативами с помощью Jupyter Notebook

Опубликовано 28 сент. 2023 г.Обновлено 22 дек. 2025 г.4 мин на чтение178

Узнайте, как с помощью одних и тех же инструментов можно упростить торговлю деривативами. Используйте универсальные функции python-okx на более высоком уровне!

Типы деривативов

На OKX можно торговать тремя типами деривативов:

  • Срочный фьючерс

  • Бессрочный

  • Опционы

Ознакомьтесь с руководством по Bitcoin-деривативам — срочным, бессрочным контрактам и опционам, — чтобы узнать о различных типах деривативов на OKX. В этом руководстве в качестве примера мы использовали бессрочные контракты.

Часто задаваемые вопросы

1. Как получить рыночные данные для торговли деривативами с помощью Jupyter Notebook и функции Get market data?

Чтобы получить данные, можно заменить InstType на EXPIRY или OPTION.

Python
     import okx.MarketData as MarketData

   flag = "1"  # live trading: 0, demo trading: 1

   marketDataAPI = MarketData.MarketAPI(flag = flag)

   result = marketDataAPI.get_tickers(instType = "SWAP")
   print(result)

2. Как получить доступные торговые пары для торговли деривативами с помощью Jupyter Notebook и функции Get instruments?

Аналогичным образом выберите соответствующий instType.

Python
import okx.PublicData as PublicData

if __name__ == '__main__':

    flag = "1"  # live trading: 0, demo trading: 1

    publicDataAPI = PublicData.PublicAPI(flag = flag)

    result = publicDataAPI.get_instruments(instType = "SWAP")
    print(result)

2.1 Рассчитайте условную стоимость деривативного контракта с помощью параметров инструмента ctVal и ctMult

Чтобы рассчитать условную стоимость деривативного контракта (то есть фьючерсов, бессрочных свопов и опционов), выберите ctVal (стоимость контракта) и ctMult (множитель контракта) для параметров соответствующего инструмента.

Условная стоимость деривативного контракта рассчитывается следующим образом: ctVal * ctMult (unit: ctValCcy);

Например, на основе параметров инструментов ниже можно рассчитать условную стоимость бессрочного контракта LTC-USD: ctVal * ctMult (unit:ctValccy) = 10 * 1 USD = 10 USD.

JSON
        "instType":"SWAP",
        "instId":"LTC-USD-SWAP",
        "instFamily":"LTC-USD",
        "uly":"LTC-USD",
        "settleCcy":"LTC",
        "ctVal":"10",
        "ctMult":"1",
        "ctValCcy":"USD"

3. Как проверить баланс при торговле деривативами с помощью Jupyter Notebook и функции Get balance?

Python
import okx.Account as Account
flag = "1"  # live trading:0, demo trading: 1

accountAPI = Account.AccountAPI(api_key, secret_key, passphrase, False, flag)

result = accountAPI.get_account_balance()
print(result)

4. Какие режимы аккаунта и маржи/сделки подходят для торговли деривативами с помощью Jupyter Notebook?

В едином аккаунте есть четыре режима, о которых мы рассказывали в предыдущем руководстве:

  • спотовый режим;

  • режим спота и фьючерсов;

  • режим мультивалютной маржи;

  • режим маржи портфеля.

Обратите внимание, что торговля деривативами возможна только в следующих режимах: в режиме спота и фьючерсов, в режиме мультивалютной маржи и в режиме маржи портфеля. Ознакомьтесь с руководством о том, как установить режим аккаунта, чтобы узнать об этих режимах и способах переключения между ними на нашем сайте.

4.1 Получить данные о текущей конфигурации аккаунта из параметра AcctLv можно с помощью функции Get account configuration

Убедитесь, что выбранный режим аккаунта подходит для торговли деривативами.

Python
import okx.Account as Account

flag = "1"  # live trading: 0, demo trading: 1

accountAPI = Account.AccountAPI(api_key, secret_key, passphrase, False, flag)
result = accountAPI.get_account_config()
print(result)

if result['code'] == "0":
    acctLv = result["data"][0]["acctLv"]
    if acctLv == "1":
        print("Simple mode")
    elif acctLv == "2":
        print("Single-currency margin mode")
    elif acctLv == "3":
        print("Multi-currency margin mode")
    elif acctLv == "4":
        print("Portfolio margin mode")

5. Как установить торговое плечо для торговли деривативами с помощью Jupyter Notebook и функции Set account leverage?

Кредитное плечо — важный параметр при торговле деривативами.

Оно позволяет трейдерам открыть позицию, заплатив только часть ее стоимости. При этом потенциальные прибыль и убытки значительно возрастают.

При торговле деривативами на OKX трейдеры могут использовать кредитное плечо до 125х. Ознакомьтесь с руководством о том, как установить кредитное плечо для различных уровней позиций.

Вот что означают термины выше:

  • Макс. кредитное плечо — максимальный множитель заемного капитала для увеличения потенциальной доходности инвестиций.

  • Коэффициент начальной маржи (IMR) — маржа, необходимая для удержания текущих позиций.

  • Коэффициент минимальной маржи (MMR) — минимальная маржа, необходимая для сохранения текущих позиций. Если капитал аккаунта упадет ниже минимальной маржи, начнется ликвидация.

Например, при торговле бессрочными контрактами ETHUSDT объемом 3000, можно использовать кредитное плечо до х75. Коэффициент начальной маржи будет равен 1 / 75 = 1,3%. Чтобы избежать ликвидации, коэффициент минимальной маржи должен оставаться на уровне 0,8% или выше.

Есть 9 разных вариантов настройки кредитного плеча через открытые API OKX. Ознакомьтесь с руководством по настройке сценариев кредитного плеча для различных позиций.

Для бессрочных фьючерсов можно использовать три сценария настройки кредитного плеча:

  • Установка кредитного плеча для инструментов SWAP в режиме кросс-маржинальной торговли на уровне контракта.

  • Установка кредитного плеча для инструментов SWAP в режиме изолированной маржи и в режиме позиции buy/sell на уровне контракта.

  • Установка кредитного плеча для инструментов SWAP в режиме изолированной маржи и в режиме позиции long/short на уровне контракта и направления позиции.

В следующем примере показано, как установить кредитное плечо только для отдельного контракта SWAP и направления позиции, а не для всех контрактов с определенным базовым активом.

Bash
# Set leverage to be 5x for all cross-margin BTC-USDT SWAP positions,
# by providing the SWAP instId
result = accountAPI.set_leverage(
    instId = "BTC-USDT-SWAP",
    lever = "5",
    mgnMode = "cross"
)
print(result)

# In buy/sell position mode, set leverage to be 5x 
# for all isolated-margin BTC-USDT SWAP positions
# by providing the SWAP instId
result = accountAPI.set_leverage(
    instId = "BTC-USDT-SWAP",
    lever = "5",
    mgnMode = "isolated"
)
print(result)

# In long/short position mode, set leverage to be 5x
# for an isolated-margin BTC-USDT-SWAP long position;
# This does NOT affect the leverage of the BTC-USDT-SWAP
# short positions
result = accountAPI.set_leverage(
    instId = "BTC-USDT-SWAP",
    lever = "5",
    posSide = "long",
    mgnMode = "isolated"
)
print(result)

Обратите внимание, что параметр запроса posSide требуется, только если маржинальный режим изолирован в режиме позиции long/short (размещение ордеров) для инструментов EXPIRY/PERPETARIL (читайте сценарии 6 и 9 в руководстве по настройке сценариев кредитного плеча).

6. Как размещать ордера на торговлю деривативами с помощью Jupyter Notebook в разных режимах позиции (размещение ордеров): long/short и buy/sell?

При торговле с инструментами EXPIRY и PERPETUAL есть два режима позиций: long/short и buy/sell (чистый режим).

Вы можете изменять режим позиции (размещения ордеров): long/short или buy/sell (чистый режим) через API с помощью функции Set position mode:

SQL
result = accountAPI.set_position_mode(
    posMode = "long_short_mode"
)
print(result)

Вы также можете сделать это в разделе Настройки на сайте:

В режиме buy/sell (чистый режим) позиция определенного контракта — это чистое количество ваших сделок по покупке и продаже. При размещении ордеров с помощью функции Place order параметр запроса posSide необязателен. В этом случае единственным действительным значением будет net.

Если используется режим long/short, то позиции контракта (как лонг, так и шорт) действуют независимо друг от друга и должны закрываться отдельно. При размещении ордеров с помощью функции Place order параметр запроса posSide является обязательным. Действительными значениями являются long или short. Ниже показано, как установить параметры side (направление сделки) и posSide (направление позиции) при размещении ордера для различных сценариев:

  • Разместить ордер на покупку и открыть/увеличить лонг-позицию: side = buy, posSide = long

  • Разместить ордер на продажу и открыть/увеличить шорт-позицию: side = sell, posSide = short

  • Разместить ордер на продажу и закрыть/уменьшить лонг-позицию: side = sell, posSide = long

  • Разместить ордер на покупку и закрыть/уменьшить шорт-позицию: side = buy, posSide = short Все готово! Можно размещать ордера на деривативы.

6.1 Размещение лимитного ордера с помощью функции Place order

Покупка своп-контракта на 100 BTC-USDT по цене 19 000 USDT.

SQL
# limit order
result = tradeAPI.place_order(
    instId = "BTC-USDT-SWAP",
    tdMode = "isolated",
    side = "buy",
    posSide = "net",
    ordType = "limit",
    px = "19000",
    sz = "100"
)
print(result)

if result["code"] == "0":
    print("Successful order request,order_id = ",result["data"][0]["ordId"])
else:
    print("Unsuccessful order request,error_code = ",result["data"][0]["sCode"], ", Error_message = ", result["data"][0]["sMsg"])

6.2 Размещение рыночного ордера с помощью функции Place order

Покупка своп-контракта на 100 BTC-USDT по рыночной цене.

SQL
# market order
result = tradeAPI.place_order(
    instId = "BTC-USDT-SWAP",
    tdMode = "isolated",
    side = "buy",
    posSide = "net",
    ordType = "market",
    sz = "100"
)
print(result)

if result["code"] == "0":
    print("Successful order request,order_id = ",result["data"][0]["ordId"])
else:
    print("Unsuccessful order request,error_code = ",result["data"][0]["sCode"], ", Error_message = ", result["data"][0]["sMsg"])

7. Как получить сведения или ордер на торговлю деривативами с помощью Jupyter Notebook и функции Get order details?

Вместо ordId для получения информации об ордере можно также использовать clOrdId.

SQL
result = tradeAPI.get_order(instId="BTC-USDT-SWAP", ordId="505073046126960640")
print(result)

8. Как отменить ордер на торговлю деривативами с помощью Jupyter Notebook и функции Cancel order?

Perl
You also use __clOrdId__ in place of __ordId__
result = tradeAPI.cancel_order(instId="BTC-USDT-SWAP", ordId="505073046126960640")
print(result)

9. Как изменить ордер на торговлю деривативами с помощью Jupyter Notebook и функции Amend order?

Можно использовать clOrdId вместо ordId. В этом примере показано изменение размера.

SQL
result = tradeAPI.amend_order(
    instId = "BTC-USDT-SWAP", 
    ordId = "505073046126960640",
    newSz = "80"
)
print(result)

10. Как получить список открытых ордеров на торговлю деривативами с помощью Jupyter Notebook и функции Get order List?

SQL
result = tradeAPI.get_order_list()
print(result)

11. Как получить историю ордеров на торговлю деривативами с помощью Jupyter Notebook и функций Get order history (last 7 days) и Get order history (last 3 months)?

SQL
# Get order history (last 7 days)
result = tradeAPI.get_orders_history(
    instType = "SWAP"
)
print(result)

# Get order history (last 3 months)
result = tradeAPI.get_orders_history_archive(
    instType = "SWAP"
)
print(result)

12. Как получить сведения о транзакциях торговли деривативами с помощью Jupyter Notebook и функций Get transaction details (last 3 days) и Get transaction details (last 3 months)?

SQL
# Get transaction details (last 3 days)
result = tradeAPI.get_fills()
print(result)

# Get transaction details (last 3 months)
result = tradeAPI.get_fills_history(
    instType = "SWAP"
)
print(result)

13. Как проверить позиции торговли деривативами с помощью Jupyter Notebook и функции Get positions?

Если аккаунт находится в режиме net, отобразятся чистые позиции по каждому контракту. Если аккаунт находится в режиме long/short, отобразятся лонг- или шорт-позиции по каждому контракту.

SQL
result = accountAPI.get_positions()
print(result)

Например, вы можете отслеживать нереализованную прибыль и убытки с помощью параметра ответа upl.

Больше примеров

Чтобы найти больше примеров, скачайте полную версию Jupyter Notebook по ссылке.

Если у вас есть вопросы об API, присоединяйтесь к сообществу и задайте их там.