Не все упомянутые продукты доступны во всех юрисдикциях.

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

Опубликовано 28 сент. 2023 г.Обновлено 11 сент. 2024 г.4 мин на чтение68

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

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

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

  • срочными контрактами;

  • бессрочными контрактами;

  • опционами.

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

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

1. Как получить рыночные данные с помощью <a href="/docs-v5/en/?python#order-book-trading-market-data-get-tickers" title="">Get market data?

Чтобы получить данные, вы также можете заменить InstType на FUTURES или 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. Как получить доступные торговые пары с помощью <a href="/docs-v5/en/?python#public-data-rest-api-get-instruments" title="">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. Как проверить баланс с помощью <a href="/docs-v5/en/?python#trading-account-rest-api-get-balance" title="">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. Какие режимы аккаунта и маржи/торговли подходят для торговли деривативами?

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

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

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

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

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

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

4.1 Получить текущую конфигурацию аккаунта из параметра acctLv в <a href="/docs-v5/en/?python#trading-account-rest-api-get-account-configuration" title="">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. Как установить кредитное плечо с помощью <a href="/docs-v5/en/?python#trading-account-rest-api-set-leverage" title="">Set account leverage?

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

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

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

CT-web-spottrading-howtoapi-6

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

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

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

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

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

Есть 9 разных вариантов настройки кредитного плеча через открытые API OKX. Посмотреть их можно в разделе <a href="/docs-v5/en/?python#trading-account-rest-api-set-leverage" title="">Set leverage scenarios.

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

  • Установка кредитного плеча для инструментов 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 в разделе <a href="/docs-v5/en/?python#trading-account-rest-api-set-leverage" title="">Set leverage scenarios).

6. Как размещать ордера в разных режимах позиции: long/short и buy/sell?

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

Вы можете изменять режим позиции (размещения ордеров): long/short или buy/sell (чистый режим) через API с помощью функции API <a href="/docs-v5/en/?python#trading-account-rest-api-set-position-mode" title="">Set position mode:

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

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

CT-web-derivativestrading-howtoapi-9

В режиме buy/sell (чистый режим) позиция определенного контракта — это чистое количество ваших сделок по покупке и продаже. При размещении ордеров с помощью <a href="/docs-v5/en/?python#order-book-trading-trade-post-place-order" title="">Place order, параметр запроса posSide не является обязательным. В этом случае единственным действительным значением будет net.

Если используется режим long/short, то позиции контракта (как лонг, так и шорт) действуют независимо друг от друга и должны закрываться отдельно. При размещении ордеров с помощью <a href="/docs-v5/en/?python#order-book-trading-trade-post-place-order" title="">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. Размещение лимитного ордера с помощью <a href="/docs-v5/en/?python#order-book-trading-trade-post-place-order" title="">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. Размещение рыночного ордера с помощью <a href="/docs-v5/en/?python#order-book-trading-trade-post-place-order" title="">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. Как узнать подробности/статус конкретного ордера (см. <a href="/docs-v5/en/?python#order-book-trading-trade-get-order-list" title="">Get order details)?

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

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

8. Как отменить ордер с помощью <a href="/docs-v5/en/?python#order-book-trading-trade-post-cancel-order" title="">Cancel order?

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

9. Как изменить ордер с помощью <a href="/docs-v5/en/?python#order-book-trading-trade-post-amend-order" title="">Amend order?

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

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

10. Как получить список открытых ордеров с помощью <a href="/docs-v5/en/?python#order-book-trading-trade-get-order-list" title="">Get order List?

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

11. Как получить историю ордеров с помощью <a href="/docs-v5/en/?python#order-book-trading-trade-get-order-history-last-7-days" title="">Get order history (last 7 days) и <a href="/docs-v5/en/?python#order-book-trading-trade-get-order-history-last-3-months" title="">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. Как получить сведения о транзакции с помощью <a href="/docs-v5/en/?python#order-book-trading-trade-get-transaction-details-last-3-days" title="">Get transaction details (last 3 days) и <a href="/docs-v5/en/?python#order-book-trading-trade-get-transaction-details-last-3-months" title="">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. Как получить информацию о позициях с помощью <a href="/docs-v5/en/?python#trading-account-rest-api-get-positions" title="">Get positions?

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

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

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

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

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

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